Commit 0f45635072fa0c87d46d593f8ad965d73a1e34f4

Authored by Jojo-1000
Committed by Moritz Wirger
1 parent 749fa821

Rename directory structure (not building).

Showing 59 changed files with 2580 additions and 2582 deletions
CMakeLists.txt
1   -cmake_minimum_required(VERSION 2.8.3)
2   -project(hueplusplus)
  1 +cmake_minimum_required(VERSION 3.2)
  2 +
  3 +if(${CMAKE_VERSION} VERSION_LESS 3.11)
  4 + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
  5 +else()
  6 + cmake_policy(VERSION 3.11)
  7 +endif()
  8 +
  9 +# Add cmake dir to module path, so Find*.cmake can be found
  10 +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
  11 +
  12 +project(hueplusplus LANGUAGES CXX)
3 13  
4 14 # options to set
5 15 option(hueplusplus_TESTS "Build tests" OFF)
... ...
cmake_uninstall.cmake.in renamed to cmake/cmake_uninstall.cmake.in 100755 → 100644
hueplusplus/hueplusplus-config.cmake.in renamed to cmake/hueplusplus-config.cmake.in 100755 → 100644
extern 0 → 100644
hueplusplus/include/BaseHttpHandler.h renamed to include/hueplusplus/BaseHttpHandler.h
1   -/**
2   - \file BaseHttpHandler.h
3   - Copyright Notice\n
4   - Copyright (C) 2020 Jan Rogall - developer\n
5   - Copyright (C) 2020 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#ifndef _BASE_HTTPHANDLER_H
24   -#define _BASE_HTTPHANDLER_H
25   -
26   -#include <iostream>
27   -#include <memory>
28   -#include <string>
29   -#include <vector>
30   -
31   -#include "IHttpHandler.h"
32   -
33   -#include "json/json.hpp"
34   -
35   -//! Base class for classes that handle http requests and multicast requests
36   -class BaseHttpHandler : public IHttpHandler
37   -{
38   -public:
39   - //! \brief Virtual dtor
40   - virtual ~BaseHttpHandler() = default;
41   -
42   - //! \brief Send a message to a specified host and return the body of the response.
43   - //!
44   - //! \param msg The message that should sent to the specified address
45   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
46   - //! \param port Optional port the request is sent to, default is 80
47   - //! \return The body of the response of the host as a string
48   - //! \throws std::system_error when system or socket operations fail
49   - //! \throws HueException when response contained no body
50   - std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const override;
51   -
52   - //! \brief Send a HTTP request with the given method to the specified host and return the body of the response.
53   - //!
54   - //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ...
55   - //! \param uri Uniform Resource Identifier in the request
56   - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
57   - //! \param body Request body, may be empty
58   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
59   - //! \param port Optional port the request is sent to, default is 80
60   - //! \return Body of the response of the host
61   - //! \throws std::system_error when system or socket operations fail
62   - //! \throws HueException when response contained no body
63   - std::string sendHTTPRequest(const std::string& method, const std::string& uri, const std::string& contentType,
64   - const std::string& body, const std::string& adr, int port = 80) const override;
65   -
66   - //! \brief Send a HTTP GET request to the specified host and return the body of the response.
67   - //!
68   - //! \param uri Uniform Resource Identifier in the request
69   - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
70   - //! \param body Request body, may be empty
71   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
72   - //! \param port Optional port the request is sent to, default is 80
73   - //! that specifies the port to which the request is sent to. Default is 80
74   - //! \return Body of the response of the host
75   - //! \throws std::system_error when system or socket operations fail
76   - //! \throws HueException when response contained no body
77   - std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body,
78   - const std::string& adr, int port = 80) const override;
79   -
80   - //! \brief Send a HTTP POST request to the specified host and return the body of the response.
81   - //!
82   - //! \param uri Uniform Resource Identifier in the request
83   - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
84   - //! \param body Request body, may be empty
85   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
86   - //! \param port Optional port the request is sent to, default is 80
87   - //! that specifies the port to which the request is sent to. Default is 80
88   - //! \return Body of the response of the host
89   - //! \throws std::system_error when system or socket operations fail
90   - //! \throws HueException when response contained no body
91   - std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body,
92   - const std::string& adr, int port = 80) const override;
93   -
94   - //! \brief Send a HTTP PUT request to the specified host and return the body of the response.
95   - //!
96   - //! \param uri Uniform Resource Identifier in the request
97   - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
98   - //! \param body Request body, may be empty
99   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
100   - //! \param port Optional port the request is sent to, default is 80
101   - //! that specifies the port to which the request is sent to. Default is 80
102   - //! \return Body of the response of the host
103   - //! \throws std::system_error when system or socket operations fail
104   - //! \throws HueException when response contained no body
105   - std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body,
106   - const std::string& adr, int port = 80) const override;
107   -
108   - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response.
109   - //!
110   - //! \param uri Uniform Resource Identifier in the request
111   - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
112   - //! \param body Request body, may be empty
113   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
114   - //! \param port Optional port the request is sent to, default is 80
115   - //! that specifies the port to which the request is sent to. Default is 80
116   - //! \return Body of the response of the host
117   - //! \throws std::system_error when system or socket operations fail
118   - //! \throws HueException when response contained no body
119   - std::string DELETEString(const std::string& uri, const std::string& contentType, const std::string& body,
120   - const std::string& adr, int port = 80) const override;
121   -
122   - //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON.
123   - //!
124   - //! \param uri Uniform Resource Identifier in the request
125   - //! \param body Request body, may be empty
126   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
127   - //! \param port Optional port the request is sent to, default is 80
128   - //! \return Parsed body of the response of the host
129   - //! \throws std::system_error when system or socket operations fail
130   - //! \throws HueException when response contained no body
131   - //! \throws nlohmann::json::parse_error when the body could not be parsed
132   - nlohmann::json GETJson(
133   - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
134   -
135   - //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON.
136   - //!
137   - //! \param uri Uniform Resource Identifier in the request
138   - //! \param body Request body, may be empty
139   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
140   - //! \param port Optional port the request is sent to, default is 80
141   - //! \return Parsed body of the response of the host
142   - //! \throws std::system_error when system or socket operations fail
143   - //! \throws HueException when response contained no body
144   - //! \throws nlohmann::json::parse_error when the body could not be parsed
145   - nlohmann::json POSTJson(
146   - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
147   -
148   - //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON.
149   - //!
150   - //! \param uri Uniform Resource Identifier in the request
151   - //! \param body Request body, may be empty
152   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
153   - //! \param port Optional port the request is sent to, default is 80
154   - //! \return Parsed body of the response of the host
155   - //! \throws std::system_error when system or socket operations fail
156   - //! \throws HueException when response contained no body
157   - //! \throws nlohmann::json::parse_error when the body could not be parsed
158   - nlohmann::json PUTJson(
159   - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
160   -
161   - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON.
162   - //!
163   - //! \param uri Uniform Resource Identifier in the request
164   - //! \param body Request body, may be empty
165   - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
166   - //! \param port Optional port the request is sent to, default is 80
167   - //! \return Parsed body of the response of the host
168   - //! \throws std::system_error when system or socket operations fail
169   - //! \throws HueException when response contained no body
170   - //! \throws nlohmann::json::parse_error when the body could not be parsed
171   - nlohmann::json DELETEJson(
172   - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
173   -};
174   -
175   -#endif
  1 +/**
  2 + \file BaseHttpHandler.h
  3 + Copyright Notice\n
  4 + Copyright (C) 2020 Jan Rogall - developer\n
  5 + Copyright (C) 2020 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#ifndef _BASE_HTTPHANDLER_H
  24 +#define _BASE_HTTPHANDLER_H
  25 +
  26 +#include <iostream>
  27 +#include <memory>
  28 +#include <string>
  29 +#include <vector>
  30 +
  31 +#include "IHttpHandler.h"
  32 +
  33 +#include "json/json.hpp"
  34 +
  35 +//! Base class for classes that handle http requests and multicast requests
  36 +class BaseHttpHandler : public IHttpHandler
  37 +{
  38 +public:
  39 + //! \brief Virtual dtor
  40 + virtual ~BaseHttpHandler() = default;
  41 +
  42 + //! \brief Send a message to a specified host and return the body of the response.
  43 + //!
  44 + //! \param msg The message that should sent to the specified address
  45 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  46 + //! \param port Optional port the request is sent to, default is 80
  47 + //! \return The body of the response of the host as a string
  48 + //! \throws std::system_error when system or socket operations fail
  49 + //! \throws HueException when response contained no body
  50 + std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const override;
  51 +
  52 + //! \brief Send a HTTP request with the given method to the specified host and return the body of the response.
  53 + //!
  54 + //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ...
  55 + //! \param uri Uniform Resource Identifier in the request
  56 + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
  57 + //! \param body Request body, may be empty
  58 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  59 + //! \param port Optional port the request is sent to, default is 80
  60 + //! \return Body of the response of the host
  61 + //! \throws std::system_error when system or socket operations fail
  62 + //! \throws HueException when response contained no body
  63 + std::string sendHTTPRequest(const std::string& method, const std::string& uri, const std::string& contentType,
  64 + const std::string& body, const std::string& adr, int port = 80) const override;
  65 +
  66 + //! \brief Send a HTTP GET request to the specified host and return the body of the response.
  67 + //!
  68 + //! \param uri Uniform Resource Identifier in the request
  69 + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
  70 + //! \param body Request body, may be empty
  71 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  72 + //! \param port Optional port the request is sent to, default is 80
  73 + //! that specifies the port to which the request is sent to. Default is 80
  74 + //! \return Body of the response of the host
  75 + //! \throws std::system_error when system or socket operations fail
  76 + //! \throws HueException when response contained no body
  77 + std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body,
  78 + const std::string& adr, int port = 80) const override;
  79 +
  80 + //! \brief Send a HTTP POST request to the specified host and return the body of the response.
  81 + //!
  82 + //! \param uri Uniform Resource Identifier in the request
  83 + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
  84 + //! \param body Request body, may be empty
  85 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  86 + //! \param port Optional port the request is sent to, default is 80
  87 + //! that specifies the port to which the request is sent to. Default is 80
  88 + //! \return Body of the response of the host
  89 + //! \throws std::system_error when system or socket operations fail
  90 + //! \throws HueException when response contained no body
  91 + std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body,
  92 + const std::string& adr, int port = 80) const override;
  93 +
  94 + //! \brief Send a HTTP PUT request to the specified host and return the body of the response.
  95 + //!
  96 + //! \param uri Uniform Resource Identifier in the request
  97 + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
  98 + //! \param body Request body, may be empty
  99 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  100 + //! \param port Optional port the request is sent to, default is 80
  101 + //! that specifies the port to which the request is sent to. Default is 80
  102 + //! \return Body of the response of the host
  103 + //! \throws std::system_error when system or socket operations fail
  104 + //! \throws HueException when response contained no body
  105 + std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body,
  106 + const std::string& adr, int port = 80) const override;
  107 +
  108 + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response.
  109 + //!
  110 + //! \param uri Uniform Resource Identifier in the request
  111 + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ...
  112 + //! \param body Request body, may be empty
  113 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  114 + //! \param port Optional port the request is sent to, default is 80
  115 + //! that specifies the port to which the request is sent to. Default is 80
  116 + //! \return Body of the response of the host
  117 + //! \throws std::system_error when system or socket operations fail
  118 + //! \throws HueException when response contained no body
  119 + std::string DELETEString(const std::string& uri, const std::string& contentType, const std::string& body,
  120 + const std::string& adr, int port = 80) const override;
  121 +
  122 + //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON.
  123 + //!
  124 + //! \param uri Uniform Resource Identifier in the request
  125 + //! \param body Request body, may be empty
  126 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  127 + //! \param port Optional port the request is sent to, default is 80
  128 + //! \return Parsed body of the response of the host
  129 + //! \throws std::system_error when system or socket operations fail
  130 + //! \throws HueException when response contained no body
  131 + //! \throws nlohmann::json::parse_error when the body could not be parsed
  132 + nlohmann::json GETJson(
  133 + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
  134 +
  135 + //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON.
  136 + //!
  137 + //! \param uri Uniform Resource Identifier in the request
  138 + //! \param body Request body, may be empty
  139 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  140 + //! \param port Optional port the request is sent to, default is 80
  141 + //! \return Parsed body of the response of the host
  142 + //! \throws std::system_error when system or socket operations fail
  143 + //! \throws HueException when response contained no body
  144 + //! \throws nlohmann::json::parse_error when the body could not be parsed
  145 + nlohmann::json POSTJson(
  146 + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
  147 +
  148 + //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON.
  149 + //!
  150 + //! \param uri Uniform Resource Identifier in the request
  151 + //! \param body Request body, may be empty
  152 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  153 + //! \param port Optional port the request is sent to, default is 80
  154 + //! \return Parsed body of the response of the host
  155 + //! \throws std::system_error when system or socket operations fail
  156 + //! \throws HueException when response contained no body
  157 + //! \throws nlohmann::json::parse_error when the body could not be parsed
  158 + nlohmann::json PUTJson(
  159 + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
  160 +
  161 + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON.
  162 + //!
  163 + //! \param uri Uniform Resource Identifier in the request
  164 + //! \param body Request body, may be empty
  165 + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1"
  166 + //! \param port Optional port the request is sent to, default is 80
  167 + //! \return Parsed body of the response of the host
  168 + //! \throws std::system_error when system or socket operations fail
  169 + //! \throws HueException when response contained no body
  170 + //! \throws nlohmann::json::parse_error when the body could not be parsed
  171 + nlohmann::json DELETEJson(
  172 + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override;
  173 +};
  174 +
  175 +#endif
... ...
hueplusplus/include/BrightnessStrategy.h renamed to include/hueplusplus/BrightnessStrategy.h 100755 → 100644
hueplusplus/include/ColorHueStrategy.h renamed to include/hueplusplus/ColorHueStrategy.h 100755 → 100644
hueplusplus/include/ColorTemperatureStrategy.h renamed to include/hueplusplus/ColorTemperatureStrategy.h 100755 → 100644
hueplusplus/include/ExtendedColorHueStrategy.h renamed to include/hueplusplus/ExtendedColorHueStrategy.h 100755 → 100644
hueplusplus/include/ExtendedColorTemperatureStrategy.h renamed to include/hueplusplus/ExtendedColorTemperatureStrategy.h 100755 → 100644
hueplusplus/include/Hue.h renamed to include/hueplusplus/Hue.h
hueplusplus/include/HueCommandAPI.h renamed to include/hueplusplus/HueCommandAPI.h
hueplusplus/include/HueConfig.h renamed to include/hueplusplus/HueConfig.h 100755 → 100644
hueplusplus/include/HueException.h renamed to include/hueplusplus/HueException.h
hueplusplus/include/HueExceptionMacro.h renamed to include/hueplusplus/HueExceptionMacro.h
hueplusplus/include/HueLight.h renamed to include/hueplusplus/HueLight.h
hueplusplus/include/IHttpHandler.h renamed to include/hueplusplus/IHttpHandler.h 100755 → 100644
hueplusplus/include/LinHttpHandler.h renamed to include/hueplusplus/LinHttpHandler.h 100755 → 100644
hueplusplus/include/SimpleBrightnessStrategy.h renamed to include/hueplusplus/SimpleBrightnessStrategy.h 100755 → 100644
hueplusplus/include/SimpleColorHueStrategy.h renamed to include/hueplusplus/SimpleColorHueStrategy.h 100755 → 100644
hueplusplus/include/SimpleColorTemperatureStrategy.h renamed to include/hueplusplus/SimpleColorTemperatureStrategy.h 100755 → 100644
hueplusplus/include/UPnP.h renamed to include/hueplusplus/UPnP.h 100755 → 100644
hueplusplus/include/Units.h renamed to include/hueplusplus/Units.h
hueplusplus/include/Utils.h renamed to include/hueplusplus/Utils.h
hueplusplus/include/WinHttpHandler.h renamed to include/hueplusplus/WinHttpHandler.h
hueplusplus/include/json/json.hpp renamed to include/json/json.hpp
hueplusplus/BaseHttpHandler.cpp renamed to src/BaseHttpHandler.cpp
hueplusplus/CMakeLists.txt renamed to src/CMakeLists.txt 100755 → 100644
... ... @@ -36,21 +36,11 @@ if(ESP_PLATFORM)
36 36 )
37 37 endif()
38 38  
39   -
40   -# Set global includes BEFORE adding any targets for legacy CMake versions
41   -if(CMAKE_VERSION VERSION_LESS 2.8.12)
42   - include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
43   - include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/json")
44   -endif()
45   -
46   -
47 39 # hueplusplus shared library
48 40 add_library(hueplusplusshared SHARED ${hueplusplus_SOURCES})
49 41 set_property(TARGET hueplusplusshared PROPERTY CXX_STANDARD 14)
50 42 set_property(TARGET hueplusplusshared PROPERTY CXX_EXTENSIONS OFF)
51   -if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
52   - target_include_directories(hueplusplusshared PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
53   -endif()
  43 +target_include_directories(hueplusplusshared PUBLIC $<BUILD_INTERFACE:"${CMAKE_CURRENT_SOURCE_DIR}/include"> $<INSTALL_INTERFACE:include/hueplusplus>)
54 44 install(TARGETS hueplusplusshared DESTINATION lib)
55 45  
56 46 # hueplusplus static library
... ... @@ -58,9 +48,7 @@ add_library(hueplusplusstatic STATIC ${hueplusplus_SOURCES})
58 48 set_property(TARGET hueplusplusstatic PROPERTY CXX_STANDARD 14)
59 49 set_property(TARGET hueplusplusstatic PROPERTY CXX_EXTENSIONS OFF)
60 50 install(TARGETS hueplusplusstatic DESTINATION lib)
61   -if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
62   - target_include_directories(hueplusplusstatic PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
63   -endif()
  51 +target_include_directories(hueplusplusstatic PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
64 52 install(FILES ${hueplusplus_HEADERS} DESTINATION include/hueplusplus)
65 53  
66 54 # Export the package for use from the build-tree
... ...
hueplusplus/ExtendedColorHueStrategy.cpp renamed to src/ExtendedColorHueStrategy.cpp 100755 → 100644
hueplusplus/ExtendedColorTemperatureStrategy.cpp renamed to src/ExtendedColorTemperatureStrategy.cpp
hueplusplus/Hue.cpp renamed to src/Hue.cpp
hueplusplus/HueCommandAPI.cpp renamed to src/HueCommandAPI.cpp
hueplusplus/HueException.cpp renamed to src/HueException.cpp
hueplusplus/HueLight.cpp renamed to src/HueLight.cpp
hueplusplus/LinHttpHandler.cpp renamed to src/LinHttpHandler.cpp 100755 → 100644
hueplusplus/SimpleBrightnessStrategy.cpp renamed to src/SimpleBrightnessStrategy.cpp
hueplusplus/SimpleColorHueStrategy.cpp renamed to src/SimpleColorHueStrategy.cpp
hueplusplus/SimpleColorTemperatureStrategy.cpp renamed to src/SimpleColorTemperatureStrategy.cpp
hueplusplus/UPnP.cpp renamed to src/UPnP.cpp 100755 → 100644
hueplusplus/Utils.cpp renamed to src/Utils.cpp
hueplusplus/WinHttpHandler.cpp renamed to src/WinHttpHandler.cpp 100755 → 100644
hueplusplus/test/CMakeLists.txt renamed to src/test/CMakeLists.txt 100755 → 100644
1   -# Set cmake cxx standard to 14
2   -set(CMAKE_CXX_STANDARD 14)
3   -
4   -# Download and unpack googletest at configure time
5   -configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
6   -execute_process(COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} .
7   - RESULT_VARIABLE result
8   - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/hueplusplus/test/googletest-download"
9   -)
10   -if(result)
11   - message(FATAL_ERROR "CMake step for googletest failed: ${result}")
12   -endif()
13   -execute_process(COMMAND "${CMAKE_COMMAND}" --build .
14   - RESULT_VARIABLE result
15   - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/hueplusplus/test/googletest-download"
16   -)
17   -if(result)
18   - message(FATAL_ERROR "Build step for googletest failed: ${result}")
19   -endif()
20   -
21   -# Prevent overriding the parent project's compiler/linker
22   -# settings on Windows
23   -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
24   -
25   -# Add googletest directly to our build. This defines
26   -# the gtest and gtest_main targets.
27   -add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src EXCLUDE_FROM_ALL
28   - ${CMAKE_BINARY_DIR}/googletest-build EXCLUDE_FROM_ALL
29   -)
30   -
31   -# The gtest/gtest_main targets carry header search path
32   -# dependencies automatically when using CMake 2.8.11 or
33   -# later. Otherwise we have to add them here ourselves.
34   -if (CMAKE_VERSION VERSION_LESS 2.8.11)
35   - include_directories("${gtest_SOURCE_DIR}/include" EXCLUDE_FROM_ALL)
36   -endif()
37   -
38   -# define all test sources
39   -set(TEST_SOURCES
40   - ${CMAKE_CURRENT_SOURCE_DIR}/test_BaseHttpHandler.cpp
41   - ${CMAKE_CURRENT_SOURCE_DIR}/test_ExtendedColorHueStrategy.cpp
42   - ${CMAKE_CURRENT_SOURCE_DIR}/test_ExtendedColorTemperatureStrategy.cpp
43   - ${CMAKE_CURRENT_SOURCE_DIR}/test_Hue.cpp
44   - ${CMAKE_CURRENT_SOURCE_DIR}/test_HueLight.cpp
45   - ${CMAKE_CURRENT_SOURCE_DIR}/test_HueCommandAPI.cpp
46   - ${CMAKE_CURRENT_SOURCE_DIR}/test_Main.cpp
47   - ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleBrightnessStrategy.cpp
48   - ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleColorHueStrategy.cpp
49   - ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleColorTemperatureStrategy.cpp
50   - ${CMAKE_CURRENT_SOURCE_DIR}/test_UPnP.cpp
51   -)
52   -
53   -# test executable
54   -add_executable(test_HuePlusPlus ${TEST_SOURCES} ${hueplusplus_SOURCES})
55   -target_link_libraries(test_HuePlusPlus gtest gmock)
56   -target_include_directories(test_HuePlusPlus PUBLIC ${GTest_INCLUDE_DIRS})
57   -target_include_directories(test_HuePlusPlus PUBLIC ${HuePlusPlus_INCLUDE_DIR})
58   -set_property(TARGET test_HuePlusPlus PROPERTY CXX_STANDARD 14)
59   -set_property(TARGET test_HuePlusPlus PROPERTY CXX_EXTENSIONS OFF)
60   -set_property(TARGET gmock PROPERTY CXX_STANDARD 14)
61   -set_property(TARGET gtest PROPERTY CXX_STANDARD 14)
62   -# add custom target to make it simple to run the tests
63   -add_custom_target("unittest"
64   - # Run the executable
65   - COMMAND test_HuePlusPlus
66   - # Depends on test_HuePlusPlus
67   - DEPENDS test_HuePlusPlus
68   -)
69   -
70   -# Check for coverage test prerequisites
71   -find_program( GCOV_PATH gcov )
72   -find_program( LCOV_PATH lcov )
73   -
74   -if(LCOV_PATH AND GCOV_PATH)
75   - # GCov
76   - include(CodeCoverage.cmake)
77   - add_executable(testcov_HuePlusPlus ${TEST_SOURCES} ${hueplusplus_SOURCES})
78   - target_link_libraries(testcov_HuePlusPlus gtest gmock)
79   - # prevent Main.cpp from defining main()
80   - target_compile_definitions(testcov_HuePlusPlus PUBLIC MAIN_CPP_NO_MAIN_FUNCTION)
81   - target_include_directories(testcov_HuePlusPlus PUBLIC ${GTest_INCLUDE_DIRS})
82   - target_include_directories(testcov_HuePlusPlus PUBLIC ${HuePlusPlus_INCLUDE_DIR})
83   - set_property(TARGET testcov_HuePlusPlus PROPERTY CXX_STANDARD 14)
84   - set_property(TARGET testcov_HuePlusPlus PROPERTY CXX_EXTENSIONS OFF)
85   - # this will be already done by APPEND_COVERAGE_COMPILER_FLAGS()
86   - #set_target_properties(
87   - # testcov_HuePlusPlus PROPERTIES
88   - # COMPILE_FLAGS "-O0 -g -fprofile-arcs -ftest-coverage"
89   - #)
90   - # Normally this would be -lgcov, but on mac only -Lgcov works
91   - #set_target_properties(
92   - # testcov_HuePlusPlus PROPERTIES
93   - # LINK_FLAGS "-O0 -g -Lgcov -fprofile-arcs -ftest-coverage"
94   - #)
95   - # exclude some special files we do not want to profile
96   - set(COVERAGE_EXCLUDES
97   - '/usr/*' # unix
98   - '*/hueplusplus/build/*'
99   - '*/json*'
100   - '*/test/*'
101   - '*/v1/*' # iOS
102   - )
103   - APPEND_COVERAGE_COMPILER_FLAGS()
104   - SETUP_TARGET_FOR_COVERAGE(
105   - NAME "coveragetest"
106   - EXECUTABLE testcov_HuePlusPlus
107   - DEPENDENCIES testcov_HuePlusPlus
108   - )
109   -endif()
  1 +# Set cmake cxx standard to 14
  2 +set(CMAKE_CXX_STANDARD 14)
  3 +
  4 +# Download and unpack googletest at configure time
  5 +configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
  6 +execute_process(COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} .
  7 + RESULT_VARIABLE result
  8 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/hueplusplus/test/googletest-download"
  9 +)
  10 +if(result)
  11 + message(FATAL_ERROR "CMake step for googletest failed: ${result}")
  12 +endif()
  13 +execute_process(COMMAND "${CMAKE_COMMAND}" --build .
  14 + RESULT_VARIABLE result
  15 + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/hueplusplus/test/googletest-download"
  16 +)
  17 +if(result)
  18 + message(FATAL_ERROR "Build step for googletest failed: ${result}")
  19 +endif()
  20 +
  21 +# Prevent overriding the parent project's compiler/linker
  22 +# settings on Windows
  23 +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
  24 +
  25 +# Add googletest directly to our build. This defines
  26 +# the gtest and gtest_main targets.
  27 +add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src EXCLUDE_FROM_ALL
  28 + ${CMAKE_BINARY_DIR}/googletest-build EXCLUDE_FROM_ALL
  29 +)
  30 +
  31 +# The gtest/gtest_main targets carry header search path
  32 +# dependencies automatically when using CMake 2.8.11 or
  33 +# later. Otherwise we have to add them here ourselves.
  34 +if (CMAKE_VERSION VERSION_LESS 2.8.11)
  35 + include_directories("${gtest_SOURCE_DIR}/include" EXCLUDE_FROM_ALL)
  36 +endif()
  37 +
  38 +# define all test sources
  39 +set(TEST_SOURCES
  40 + ${CMAKE_CURRENT_SOURCE_DIR}/test_BaseHttpHandler.cpp
  41 + ${CMAKE_CURRENT_SOURCE_DIR}/test_ExtendedColorHueStrategy.cpp
  42 + ${CMAKE_CURRENT_SOURCE_DIR}/test_ExtendedColorTemperatureStrategy.cpp
  43 + ${CMAKE_CURRENT_SOURCE_DIR}/test_Hue.cpp
  44 + ${CMAKE_CURRENT_SOURCE_DIR}/test_HueLight.cpp
  45 + ${CMAKE_CURRENT_SOURCE_DIR}/test_HueCommandAPI.cpp
  46 + ${CMAKE_CURRENT_SOURCE_DIR}/test_Main.cpp
  47 + ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleBrightnessStrategy.cpp
  48 + ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleColorHueStrategy.cpp
  49 + ${CMAKE_CURRENT_SOURCE_DIR}/test_SimpleColorTemperatureStrategy.cpp
  50 + ${CMAKE_CURRENT_SOURCE_DIR}/test_UPnP.cpp
  51 +)
  52 +
  53 +# test executable
  54 +add_executable(test_HuePlusPlus ${TEST_SOURCES} ${hueplusplus_SOURCES})
  55 +target_link_libraries(test_HuePlusPlus gtest gmock)
  56 +target_include_directories(test_HuePlusPlus PUBLIC ${GTest_INCLUDE_DIRS})
  57 +target_include_directories(test_HuePlusPlus PUBLIC ${HuePlusPlus_INCLUDE_DIR})
  58 +set_property(TARGET test_HuePlusPlus PROPERTY CXX_STANDARD 14)
  59 +set_property(TARGET test_HuePlusPlus PROPERTY CXX_EXTENSIONS OFF)
  60 +set_property(TARGET gmock PROPERTY CXX_STANDARD 14)
  61 +set_property(TARGET gtest PROPERTY CXX_STANDARD 14)
  62 +# add custom target to make it simple to run the tests
  63 +add_custom_target("unittest"
  64 + # Run the executable
  65 + COMMAND test_HuePlusPlus
  66 + # Depends on test_HuePlusPlus
  67 + DEPENDS test_HuePlusPlus
  68 +)
  69 +
  70 +# Check for coverage test prerequisites
  71 +find_program( GCOV_PATH gcov )
  72 +find_program( LCOV_PATH lcov )
  73 +
  74 +if(LCOV_PATH AND GCOV_PATH)
  75 + # GCov
  76 + include(CodeCoverage.cmake)
  77 + add_executable(testcov_HuePlusPlus ${TEST_SOURCES} ${hueplusplus_SOURCES})
  78 + target_link_libraries(testcov_HuePlusPlus gtest gmock)
  79 + # prevent Main.cpp from defining main()
  80 + target_compile_definitions(testcov_HuePlusPlus PUBLIC MAIN_CPP_NO_MAIN_FUNCTION)
  81 + target_include_directories(testcov_HuePlusPlus PUBLIC ${GTest_INCLUDE_DIRS})
  82 + target_include_directories(testcov_HuePlusPlus PUBLIC ${HuePlusPlus_INCLUDE_DIR})
  83 + set_property(TARGET testcov_HuePlusPlus PROPERTY CXX_STANDARD 14)
  84 + set_property(TARGET testcov_HuePlusPlus PROPERTY CXX_EXTENSIONS OFF)
  85 + # this will be already done by APPEND_COVERAGE_COMPILER_FLAGS()
  86 + #set_target_properties(
  87 + # testcov_HuePlusPlus PROPERTIES
  88 + # COMPILE_FLAGS "-O0 -g -fprofile-arcs -ftest-coverage"
  89 + #)
  90 + # Normally this would be -lgcov, but on mac only -Lgcov works
  91 + #set_target_properties(
  92 + # testcov_HuePlusPlus PROPERTIES
  93 + # LINK_FLAGS "-O0 -g -Lgcov -fprofile-arcs -ftest-coverage"
  94 + #)
  95 + # exclude some special files we do not want to profile
  96 + set(COVERAGE_EXCLUDES
  97 + '/usr/*' # unix
  98 + '*/hueplusplus/build/*'
  99 + '*/json*'
  100 + '*/test/*'
  101 + '*/v1/*' # iOS
  102 + )
  103 + APPEND_COVERAGE_COMPILER_FLAGS()
  104 + SETUP_TARGET_FOR_COVERAGE(
  105 + NAME "coveragetest"
  106 + EXECUTABLE testcov_HuePlusPlus
  107 + DEPENDENCIES testcov_HuePlusPlus
  108 + )
  109 +endif()
... ...
hueplusplus/test/CMakeLists.txt.in renamed to src/test/CMakeLists.txt.in 100755 → 100644
1   -cmake_minimum_required(VERSION 2.8.2)
2   -
3   -project(googletest-download NONE)
4   -
5   -include(ExternalProject)
6   -ExternalProject_Add(googletest
7   - GIT_REPOSITORY https://github.com/google/googletest.git
8   - GIT_TAG master
9   - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
10   - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
11   - CONFIGURE_COMMAND ""
12   - BUILD_COMMAND ""
13   - INSTALL_COMMAND ""
14   - TEST_COMMAND ""
15   -)
  1 +cmake_minimum_required(VERSION 2.8.2)
  2 +
  3 +project(googletest-download NONE)
  4 +
  5 +include(ExternalProject)
  6 +ExternalProject_Add(googletest
  7 + GIT_REPOSITORY https://github.com/google/googletest.git
  8 + GIT_TAG master
  9 + SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
  10 + BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
  11 + CONFIGURE_COMMAND ""
  12 + BUILD_COMMAND ""
  13 + INSTALL_COMMAND ""
  14 + TEST_COMMAND ""
  15 +)
... ...
hueplusplus/test/CodeCoverage.cmake renamed to src/test/CodeCoverage.cmake 100755 → 100644
1   -# Copyright (c) 2012 - 2017, Lars Bilke
2   -# All rights reserved.
3   -#
4   -# Redistribution and use in source and binary forms, with or without modification,
5   -# are permitted provided that the following conditions are met:
6   -#
7   -# 1. Redistributions of source code must retain the above copyright notice, this
8   -# list of conditions and the following disclaimer.
9   -#
10   -# 2. Redistributions in binary form must reproduce the above copyright notice,
11   -# this list of conditions and the following disclaimer in the documentation
12   -# and/or other materials provided with the distribution.
13   -#
14   -# 3. Neither the name of the copyright holder nor the names of its contributors
15   -# may be used to endorse or promote products derived from this software without
16   -# specific prior written permission.
17   -#
18   -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19   -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20   -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21   -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22   -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24   -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25   -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26   -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27   -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28   -#
29   -# CHANGES:
30   -#
31   -# 2012-01-31, Lars Bilke
32   -# - Enable Code Coverage
33   -#
34   -# 2013-09-17, Joakim Söderberg
35   -# - Added support for Clang.
36   -# - Some additional usage instructions.
37   -#
38   -# 2016-02-03, Lars Bilke
39   -# - Refactored functions to use named parameters
40   -#
41   -# 2017-06-02, Lars Bilke
42   -# - Merged with modified version from github.com/ufz/ogs
43   -#
44   -#
45   -# USAGE:
46   -#
47   -# 1. Copy this file into your cmake modules path.
48   -#
49   -# 2. Add the following line to your CMakeLists.txt:
50   -# include(CodeCoverage)
51   -#
52   -# 3. Append necessary compiler flags:
53   -# APPEND_COVERAGE_COMPILER_FLAGS()
54   -#
55   -# 4. If you need to exclude additional directories from the report, specify them
56   -# using the COVERAGE_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE.
57   -# Example:
58   -# set(COVERAGE_EXCLUDES 'dir1/*' 'dir2/*')
59   -#
60   -# 5. Use the functions described below to create a custom make target which
61   -# runs your test executable and produces a code coverage report.
62   -#
63   -# 6. Build a Debug build:
64   -# cmake -DCMAKE_BUILD_TYPE=Debug ..
65   -# make
66   -# make my_coverage_target
67   -#
68   -
69   -include(CMakeParseArguments)
70   -
71   -# Check prereqs
72   -find_program( GCOV_PATH gcov )
73   -find_program( LCOV_PATH lcov )
74   -find_program( GENHTML_PATH genhtml )
75   -find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
76   -find_program( SIMPLE_PYTHON_EXECUTABLE python )
77   -
78   -if(NOT GCOV_PATH)
79   - message(FATAL_ERROR "gcov not found! Aborting...")
80   -endif() # NOT GCOV_PATH
81   -
82   -if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
83   - if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
84   - message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
85   - endif()
86   -elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
87   - message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
88   -endif()
89   -
90   -set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
91   - CACHE INTERNAL "")
92   -
93   -set(CMAKE_CXX_FLAGS_COVERAGE
94   - ${COVERAGE_COMPILER_FLAGS}
95   - CACHE STRING "Flags used by the C++ compiler during coverage builds."
96   - FORCE )
97   -set(CMAKE_C_FLAGS_COVERAGE
98   - ${COVERAGE_COMPILER_FLAGS}
99   - CACHE STRING "Flags used by the C compiler during coverage builds."
100   - FORCE )
101   -set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
102   - ""
103   - CACHE STRING "Flags used for linking binaries during coverage builds."
104   - FORCE )
105   -set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
106   - ""
107   - CACHE STRING "Flags used by the shared libraries linker during coverage builds."
108   - FORCE )
109   -mark_as_advanced(
110   - CMAKE_CXX_FLAGS_COVERAGE
111   - CMAKE_C_FLAGS_COVERAGE
112   - CMAKE_EXE_LINKER_FLAGS_COVERAGE
113   - CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
114   -
115   -if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
116   - message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
117   -endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
118   -
119   -if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
120   - link_libraries(gcov)
121   -else()
122   - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
123   -endif()
124   -
125   -# Defines a target for running and collection code coverage information
126   -# Builds dependencies, runs the given executable and outputs reports.
127   -# NOTE! The executable should always have a ZERO as exit code otherwise
128   -# the coverage generation will not complete.
129   -#
130   -# SETUP_TARGET_FOR_COVERAGE(
131   -# NAME testrunner_coverage # New target name
132   -# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
133   -# DEPENDENCIES testrunner # Dependencies to build first
134   -# )
135   -function(SETUP_TARGET_FOR_COVERAGE)
136   -
137   - set(options NONE)
138   - set(oneValueArgs NAME)
139   - set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
140   - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
141   -
142   - if(NOT LCOV_PATH)
143   - message(FATAL_ERROR "lcov not found! Aborting...")
144   - endif() # NOT LCOV_PATH
145   -
146   - if(NOT GENHTML_PATH)
147   - message(FATAL_ERROR "genhtml not found! Aborting...")
148   - endif() # NOT GENHTML_PATH
149   -
150   - # Setup target
151   - add_custom_target(${Coverage_NAME}
152   -
153   - # Cleanup lcov
154   - COMMAND ${LCOV_PATH} --directory . --zerocounters
155   -
156   - # Run tests
157   - COMMAND ${Coverage_EXECUTABLE}
158   -
159   - # Capturing lcov counters and generating report
160   - COMMAND ${LCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info
161   - COMMAND ${LCOV_PATH} --remove ${Coverage_NAME}.info ${COVERAGE_EXCLUDES} --output-file ${Coverage_NAME}.info.cleaned
162   - COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${Coverage_NAME}.info.cleaned
163   - COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.info ${Coverage_NAME}.info.cleaned
164   -
165   - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
166   - DEPENDS ${Coverage_DEPENDENCIES}
167   - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
168   - )
169   -
170   - # Show info where to find the report
171   - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
172   - COMMAND ;
173   - COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
174   - )
175   -
176   -endfunction() # SETUP_TARGET_FOR_COVERAGE
177   -
178   -# Defines a target for running and collection code coverage information
179   -# Builds dependencies, runs the given executable and outputs reports.
180   -# NOTE! The executable should always have a ZERO as exit code otherwise
181   -# the coverage generation will not complete.
182   -#
183   -# SETUP_TARGET_FOR_COVERAGE_COBERTURA(
184   -# NAME ctest_coverage # New target name
185   -# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
186   -# DEPENDENCIES executable_target # Dependencies to build first
187   -# )
188   -function(SETUP_TARGET_FOR_COVERAGE_COBERTURA)
189   -
190   - set(options NONE)
191   - set(oneValueArgs NAME)
192   - set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
193   - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
194   -
195   - if(NOT SIMPLE_PYTHON_EXECUTABLE)
196   - message(FATAL_ERROR "python not found! Aborting...")
197   - endif() # NOT SIMPLE_PYTHON_EXECUTABLE
198   -
199   - if(NOT GCOVR_PATH)
200   - message(FATAL_ERROR "gcovr not found! Aborting...")
201   - endif() # NOT GCOVR_PATH
202   -
203   - # Combine excludes to several -e arguments
204   - set(COBERTURA_EXCLUDES "")
205   - foreach(EXCLUDE ${COVERAGE_EXCLUDES})
206   - set(COBERTURA_EXCLUDES "-e ${EXCLUDE} ${COBERTURA_EXCLUDES}")
207   - endforeach()
208   -
209   - add_custom_target(${Coverage_NAME}
210   -
211   - # Run tests
212   - ${Coverage_EXECUTABLE}
213   -
214   - # Running gcovr
215   - COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} ${COBERTURA_EXCLUDES}
216   - -o ${Coverage_NAME}.xml
217   - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
218   - DEPENDS ${Coverage_DEPENDENCIES}
219   - COMMENT "Running gcovr to produce Cobertura code coverage report."
220   - )
221   -
222   - # Show info where to find the report
223   - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
224   - COMMAND ;
225   - COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml."
226   - )
227   -
228   -endfunction() # SETUP_TARGET_FOR_COVERAGE_COBERTURA
229   -
230   -function(APPEND_COVERAGE_COMPILER_FLAGS)
231   - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
232   - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
233   - message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
234   -endfunction() # APPEND_COVERAGE_COMPILER_FLAGS
  1 +# Copyright (c) 2012 - 2017, Lars Bilke
  2 +# All rights reserved.
  3 +#
  4 +# Redistribution and use in source and binary forms, with or without modification,
  5 +# are permitted provided that the following conditions are met:
  6 +#
  7 +# 1. Redistributions of source code must retain the above copyright notice, this
  8 +# list of conditions and the following disclaimer.
  9 +#
  10 +# 2. Redistributions in binary form must reproduce the above copyright notice,
  11 +# this list of conditions and the following disclaimer in the documentation
  12 +# and/or other materials provided with the distribution.
  13 +#
  14 +# 3. Neither the name of the copyright holder nor the names of its contributors
  15 +# may be used to endorse or promote products derived from this software without
  16 +# specific prior written permission.
  17 +#
  18 +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  19 +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  20 +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  21 +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
  22 +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  23 +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  24 +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  25 +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  26 +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  27 +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28 +#
  29 +# CHANGES:
  30 +#
  31 +# 2012-01-31, Lars Bilke
  32 +# - Enable Code Coverage
  33 +#
  34 +# 2013-09-17, Joakim Söderberg
  35 +# - Added support for Clang.
  36 +# - Some additional usage instructions.
  37 +#
  38 +# 2016-02-03, Lars Bilke
  39 +# - Refactored functions to use named parameters
  40 +#
  41 +# 2017-06-02, Lars Bilke
  42 +# - Merged with modified version from github.com/ufz/ogs
  43 +#
  44 +#
  45 +# USAGE:
  46 +#
  47 +# 1. Copy this file into your cmake modules path.
  48 +#
  49 +# 2. Add the following line to your CMakeLists.txt:
  50 +# include(CodeCoverage)
  51 +#
  52 +# 3. Append necessary compiler flags:
  53 +# APPEND_COVERAGE_COMPILER_FLAGS()
  54 +#
  55 +# 4. If you need to exclude additional directories from the report, specify them
  56 +# using the COVERAGE_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE.
  57 +# Example:
  58 +# set(COVERAGE_EXCLUDES 'dir1/*' 'dir2/*')
  59 +#
  60 +# 5. Use the functions described below to create a custom make target which
  61 +# runs your test executable and produces a code coverage report.
  62 +#
  63 +# 6. Build a Debug build:
  64 +# cmake -DCMAKE_BUILD_TYPE=Debug ..
  65 +# make
  66 +# make my_coverage_target
  67 +#
  68 +
  69 +include(CMakeParseArguments)
  70 +
  71 +# Check prereqs
  72 +find_program( GCOV_PATH gcov )
  73 +find_program( LCOV_PATH lcov )
  74 +find_program( GENHTML_PATH genhtml )
  75 +find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
  76 +find_program( SIMPLE_PYTHON_EXECUTABLE python )
  77 +
  78 +if(NOT GCOV_PATH)
  79 + message(FATAL_ERROR "gcov not found! Aborting...")
  80 +endif() # NOT GCOV_PATH
  81 +
  82 +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
  83 + if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
  84 + message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
  85 + endif()
  86 +elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
  87 + message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
  88 +endif()
  89 +
  90 +set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
  91 + CACHE INTERNAL "")
  92 +
  93 +set(CMAKE_CXX_FLAGS_COVERAGE
  94 + ${COVERAGE_COMPILER_FLAGS}
  95 + CACHE STRING "Flags used by the C++ compiler during coverage builds."
  96 + FORCE )
  97 +set(CMAKE_C_FLAGS_COVERAGE
  98 + ${COVERAGE_COMPILER_FLAGS}
  99 + CACHE STRING "Flags used by the C compiler during coverage builds."
  100 + FORCE )
  101 +set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
  102 + ""
  103 + CACHE STRING "Flags used for linking binaries during coverage builds."
  104 + FORCE )
  105 +set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
  106 + ""
  107 + CACHE STRING "Flags used by the shared libraries linker during coverage builds."
  108 + FORCE )
  109 +mark_as_advanced(
  110 + CMAKE_CXX_FLAGS_COVERAGE
  111 + CMAKE_C_FLAGS_COVERAGE
  112 + CMAKE_EXE_LINKER_FLAGS_COVERAGE
  113 + CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
  114 +
  115 +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
  116 + message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
  117 +endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
  118 +
  119 +if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  120 + link_libraries(gcov)
  121 +else()
  122 + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
  123 +endif()
  124 +
  125 +# Defines a target for running and collection code coverage information
  126 +# Builds dependencies, runs the given executable and outputs reports.
  127 +# NOTE! The executable should always have a ZERO as exit code otherwise
  128 +# the coverage generation will not complete.
  129 +#
  130 +# SETUP_TARGET_FOR_COVERAGE(
  131 +# NAME testrunner_coverage # New target name
  132 +# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
  133 +# DEPENDENCIES testrunner # Dependencies to build first
  134 +# )
  135 +function(SETUP_TARGET_FOR_COVERAGE)
  136 +
  137 + set(options NONE)
  138 + set(oneValueArgs NAME)
  139 + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
  140 + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  141 +
  142 + if(NOT LCOV_PATH)
  143 + message(FATAL_ERROR "lcov not found! Aborting...")
  144 + endif() # NOT LCOV_PATH
  145 +
  146 + if(NOT GENHTML_PATH)
  147 + message(FATAL_ERROR "genhtml not found! Aborting...")
  148 + endif() # NOT GENHTML_PATH
  149 +
  150 + # Setup target
  151 + add_custom_target(${Coverage_NAME}
  152 +
  153 + # Cleanup lcov
  154 + COMMAND ${LCOV_PATH} --directory . --zerocounters
  155 +
  156 + # Run tests
  157 + COMMAND ${Coverage_EXECUTABLE}
  158 +
  159 + # Capturing lcov counters and generating report
  160 + COMMAND ${LCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info
  161 + COMMAND ${LCOV_PATH} --remove ${Coverage_NAME}.info ${COVERAGE_EXCLUDES} --output-file ${Coverage_NAME}.info.cleaned
  162 + COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${Coverage_NAME}.info.cleaned
  163 + COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.info ${Coverage_NAME}.info.cleaned
  164 +
  165 + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
  166 + DEPENDS ${Coverage_DEPENDENCIES}
  167 + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
  168 + )
  169 +
  170 + # Show info where to find the report
  171 + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
  172 + COMMAND ;
  173 + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
  174 + )
  175 +
  176 +endfunction() # SETUP_TARGET_FOR_COVERAGE
  177 +
  178 +# Defines a target for running and collection code coverage information
  179 +# Builds dependencies, runs the given executable and outputs reports.
  180 +# NOTE! The executable should always have a ZERO as exit code otherwise
  181 +# the coverage generation will not complete.
  182 +#
  183 +# SETUP_TARGET_FOR_COVERAGE_COBERTURA(
  184 +# NAME ctest_coverage # New target name
  185 +# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
  186 +# DEPENDENCIES executable_target # Dependencies to build first
  187 +# )
  188 +function(SETUP_TARGET_FOR_COVERAGE_COBERTURA)
  189 +
  190 + set(options NONE)
  191 + set(oneValueArgs NAME)
  192 + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
  193 + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  194 +
  195 + if(NOT SIMPLE_PYTHON_EXECUTABLE)
  196 + message(FATAL_ERROR "python not found! Aborting...")
  197 + endif() # NOT SIMPLE_PYTHON_EXECUTABLE
  198 +
  199 + if(NOT GCOVR_PATH)
  200 + message(FATAL_ERROR "gcovr not found! Aborting...")
  201 + endif() # NOT GCOVR_PATH
  202 +
  203 + # Combine excludes to several -e arguments
  204 + set(COBERTURA_EXCLUDES "")
  205 + foreach(EXCLUDE ${COVERAGE_EXCLUDES})
  206 + set(COBERTURA_EXCLUDES "-e ${EXCLUDE} ${COBERTURA_EXCLUDES}")
  207 + endforeach()
  208 +
  209 + add_custom_target(${Coverage_NAME}
  210 +
  211 + # Run tests
  212 + ${Coverage_EXECUTABLE}
  213 +
  214 + # Running gcovr
  215 + COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} ${COBERTURA_EXCLUDES}
  216 + -o ${Coverage_NAME}.xml
  217 + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
  218 + DEPENDS ${Coverage_DEPENDENCIES}
  219 + COMMENT "Running gcovr to produce Cobertura code coverage report."
  220 + )
  221 +
  222 + # Show info where to find the report
  223 + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
  224 + COMMAND ;
  225 + COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml."
  226 + )
  227 +
  228 +endfunction() # SETUP_TARGET_FOR_COVERAGE_COBERTURA
  229 +
  230 +function(APPEND_COVERAGE_COMPILER_FLAGS)
  231 + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
  232 + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
  233 + message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
  234 +endfunction() # APPEND_COVERAGE_COMPILER_FLAGS
... ...
hueplusplus/test/mocks/mock_BaseHttpHandler.h renamed to src/test/mocks/mock_BaseHttpHandler.h 100755 → 100644
hueplusplus/test/mocks/mock_HttpHandler.h renamed to src/test/mocks/mock_HttpHandler.h 100755 → 100644
1   -/**
2   - \file mock_HttpHandler.h
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#ifndef _MOCK_HTTPHANDLER_H
24   -#define _MOCK_HTTPHANDLER_H
25   -
26   -#include <string>
27   -#include <vector>
28   -
29   -#include <gmock/gmock.h>
30   -
31   -#include "../hueplusplus/include/IHttpHandler.h"
32   -#include "../hueplusplus/include/json/json.hpp"
33   -
34   -//! Mock Class
35   -class MockHttpHandler : public IHttpHandler
36   -{
37   -public:
38   - MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port));
39   -
40   - MOCK_CONST_METHOD3(sendGetHTTPBody, std::string(const std::string& msg, const std::string& adr, int port));
41   -
42   - MOCK_CONST_METHOD4(
43   - sendMulticast, std::vector<std::string>(const std::string& msg, const std::string& adr, int port, int timeout));
44   -
45   - MOCK_CONST_METHOD6(sendHTTPRequest,
46   - std::string(const std::string& method, const std::string& uri, const std::string& content_type,
47   - const std::string& body, const std::string& adr, int port));
48   -
49   - MOCK_CONST_METHOD5(GETString,
50   - std::string(const std::string& uri, const std::string& content_type, const std::string& body,
51   - const std::string& adr, int port));
52   -
53   - MOCK_CONST_METHOD5(POSTString,
54   - std::string(const std::string& uri, const std::string& content_type, const std::string& body,
55   - const std::string& adr, int port));
56   -
57   - MOCK_CONST_METHOD5(PUTString,
58   - std::string(const std::string& uri, const std::string& content_type, const std::string& body,
59   - const std::string& adr, int port));
60   -
61   - MOCK_CONST_METHOD5(DELETEString,
62   - std::string(const std::string& uri, const std::string& content_type, const std::string& body,
63   - const std::string& adr, int port));
64   -
65   - MOCK_CONST_METHOD4(
66   - GETJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
67   -
68   - MOCK_CONST_METHOD4(
69   - POSTJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
70   -
71   - MOCK_CONST_METHOD4(
72   - PUTJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
73   -
74   - MOCK_CONST_METHOD4(DELETEJson,
75   - nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
76   -};
77   -
78   -#endif
  1 +/**
  2 + \file mock_HttpHandler.h
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#ifndef _MOCK_HTTPHANDLER_H
  24 +#define _MOCK_HTTPHANDLER_H
  25 +
  26 +#include <string>
  27 +#include <vector>
  28 +
  29 +#include <gmock/gmock.h>
  30 +
  31 +#include "../hueplusplus/include/IHttpHandler.h"
  32 +#include "../hueplusplus/include/json/json.hpp"
  33 +
  34 +//! Mock Class
  35 +class MockHttpHandler : public IHttpHandler
  36 +{
  37 +public:
  38 + MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port));
  39 +
  40 + MOCK_CONST_METHOD3(sendGetHTTPBody, std::string(const std::string& msg, const std::string& adr, int port));
  41 +
  42 + MOCK_CONST_METHOD4(
  43 + sendMulticast, std::vector<std::string>(const std::string& msg, const std::string& adr, int port, int timeout));
  44 +
  45 + MOCK_CONST_METHOD6(sendHTTPRequest,
  46 + std::string(const std::string& method, const std::string& uri, const std::string& content_type,
  47 + const std::string& body, const std::string& adr, int port));
  48 +
  49 + MOCK_CONST_METHOD5(GETString,
  50 + std::string(const std::string& uri, const std::string& content_type, const std::string& body,
  51 + const std::string& adr, int port));
  52 +
  53 + MOCK_CONST_METHOD5(POSTString,
  54 + std::string(const std::string& uri, const std::string& content_type, const std::string& body,
  55 + const std::string& adr, int port));
  56 +
  57 + MOCK_CONST_METHOD5(PUTString,
  58 + std::string(const std::string& uri, const std::string& content_type, const std::string& body,
  59 + const std::string& adr, int port));
  60 +
  61 + MOCK_CONST_METHOD5(DELETEString,
  62 + std::string(const std::string& uri, const std::string& content_type, const std::string& body,
  63 + const std::string& adr, int port));
  64 +
  65 + MOCK_CONST_METHOD4(
  66 + GETJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
  67 +
  68 + MOCK_CONST_METHOD4(
  69 + POSTJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
  70 +
  71 + MOCK_CONST_METHOD4(
  72 + PUTJson, nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
  73 +
  74 + MOCK_CONST_METHOD4(DELETEJson,
  75 + nlohmann::json(const std::string& uri, const nlohmann::json& body, const std::string& adr, int port));
  76 +};
  77 +
  78 +#endif
... ...
hueplusplus/test/mocks/mock_HueLight.h renamed to src/test/mocks/mock_HueLight.h
1   -/**
2   - \file mock_HueLight.h
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#ifndef _MOCK_HUE_LIGHT_H
24   -#define _MOCK_HUE_LIGHT_H
25   -
26   -#include <string>
27   -#include <vector>
28   -
29   -#include <gmock/gmock.h>
30   -
31   -#include "../hueplusplus/include/HueLight.h"
32   -#include "../hueplusplus/include/json/json.hpp"
33   -#include "../testhelper.h"
34   -
35   -//! Mock Class
36   -class MockHueLight : public HueLight
37   -{
38   -public:
39   - MockHueLight(std::shared_ptr<const IHttpHandler> handler)
40   - : HueLight(1, HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)) {};
41   -
42   - nlohmann::json& getState() { return state; };
43   -
44   - MOCK_METHOD1(On, bool(uint8_t transition));
45   -
46   - MOCK_METHOD1(Off, bool(uint8_t transition));
47   -
48   - MOCK_METHOD0(isOn, bool());
49   -
50   - MOCK_CONST_METHOD0(isOn, bool());
51   -
52   - MOCK_CONST_METHOD0(getId, int());
53   -
54   - MOCK_CONST_METHOD0(getType, std::string());
55   -
56   - MOCK_METHOD0(getName, std::string());
57   -
58   - MOCK_CONST_METHOD0(getName, std::string());
59   -
60   - MOCK_CONST_METHOD0(getModelId, std::string());
61   -
62   - MOCK_CONST_METHOD0(getUId, std::string());
63   -
64   - MOCK_CONST_METHOD0(getManufacturername, std::string());
65   -
66   - MOCK_CONST_METHOD0(getLuminaireUId, std::string());
67   -
68   - MOCK_METHOD0(getSwVersion, std::string());
69   -
70   - MOCK_CONST_METHOD0(getSwVersion, std::string());
71   -
72   - MOCK_METHOD1(setName, bool(std::string& name));
73   -
74   - MOCK_CONST_METHOD0(getColorType, ColorType());
75   -
76   - MOCK_CONST_METHOD0(hasBrightnessControl, bool());
77   -
78   - MOCK_CONST_METHOD0(hasTemperatureControl, bool());
79   -
80   - MOCK_CONST_METHOD0(hasColorControl, bool());
81   -
82   - MOCK_METHOD2(setBrightness, bool(unsigned int bri, uint8_t transition));
83   -
84   - MOCK_CONST_METHOD0(getBrightness, unsigned int());
85   -
86   - MOCK_METHOD0(getBrightness, unsigned int());
87   -
88   - MOCK_METHOD2(setColorTemperature, bool(unsigned int mired, uint8_t transition));
89   -
90   - MOCK_CONST_METHOD0(getColorTemperature, unsigned int());
91   -
92   - MOCK_METHOD0(getColorTemperature, unsigned int());
93   -
94   - MOCK_METHOD2(setColorHue, bool(uint16_t hue, uint8_t transition));
95   -
96   - MOCK_METHOD2(setColorSaturation, bool(uint8_t sat, uint8_t transition));
97   -
98   - MOCK_METHOD3(setColorHueSaturation, bool(uint16_t hue, uint8_t sat, uint8_t transition));
99   -
100   - MOCK_CONST_METHOD0(getColorHueSaturation, std::pair<uint16_t, uint8_t>());
101   -
102   - MOCK_METHOD0(getColorHueSaturation, std::pair<uint16_t, uint8_t>());
103   -
104   - MOCK_METHOD3(setColorXY, bool(float x, float y, uint8_t transition));
105   -
106   - MOCK_CONST_METHOD0(getColorXY, std::pair<float, float>());
107   -
108   - MOCK_METHOD0(getColorXY, std::pair<float, float>());
109   -
110   - MOCK_METHOD4(setColorRGB, bool(uint8_t r, uint8_t g, uint8_t b, uint8_t transition));
111   -
112   - MOCK_METHOD0(alert, bool());
113   -
114   - MOCK_METHOD1(alertTemperature, bool(unsigned int mired));
115   -
116   - MOCK_METHOD2(alertHueSaturation, bool(uint16_t hue, uint8_t sat));
117   -
118   - MOCK_METHOD2(alertXY, bool(float x, float y));
119   -
120   - MOCK_METHOD3(alertRGB, bool(uint8_t r, uint8_t g, uint8_t b));
121   -
122   - MOCK_METHOD1(setColorLoop, bool(bool on));
123   -
124   - MOCK_METHOD1(OnNoRefresh, bool(uint8_t transition));
125   -
126   - MOCK_METHOD1(OffNoRefresh, bool(uint8_t transition));
127   -
128   - MOCK_METHOD3(
129   - SendPutRequest, nlohmann::json(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo));
130   -
131   - MOCK_METHOD0(refreshState, void());
132   -};
133   -
134   -#endif
  1 +/**
  2 + \file mock_HueLight.h
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#ifndef _MOCK_HUE_LIGHT_H
  24 +#define _MOCK_HUE_LIGHT_H
  25 +
  26 +#include <string>
  27 +#include <vector>
  28 +
  29 +#include <gmock/gmock.h>
  30 +
  31 +#include "../hueplusplus/include/HueLight.h"
  32 +#include "../hueplusplus/include/json/json.hpp"
  33 +#include "../testhelper.h"
  34 +
  35 +//! Mock Class
  36 +class MockHueLight : public HueLight
  37 +{
  38 +public:
  39 + MockHueLight(std::shared_ptr<const IHttpHandler> handler)
  40 + : HueLight(1, HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)) {};
  41 +
  42 + nlohmann::json& getState() { return state; };
  43 +
  44 + MOCK_METHOD1(On, bool(uint8_t transition));
  45 +
  46 + MOCK_METHOD1(Off, bool(uint8_t transition));
  47 +
  48 + MOCK_METHOD0(isOn, bool());
  49 +
  50 + MOCK_CONST_METHOD0(isOn, bool());
  51 +
  52 + MOCK_CONST_METHOD0(getId, int());
  53 +
  54 + MOCK_CONST_METHOD0(getType, std::string());
  55 +
  56 + MOCK_METHOD0(getName, std::string());
  57 +
  58 + MOCK_CONST_METHOD0(getName, std::string());
  59 +
  60 + MOCK_CONST_METHOD0(getModelId, std::string());
  61 +
  62 + MOCK_CONST_METHOD0(getUId, std::string());
  63 +
  64 + MOCK_CONST_METHOD0(getManufacturername, std::string());
  65 +
  66 + MOCK_CONST_METHOD0(getLuminaireUId, std::string());
  67 +
  68 + MOCK_METHOD0(getSwVersion, std::string());
  69 +
  70 + MOCK_CONST_METHOD0(getSwVersion, std::string());
  71 +
  72 + MOCK_METHOD1(setName, bool(std::string& name));
  73 +
  74 + MOCK_CONST_METHOD0(getColorType, ColorType());
  75 +
  76 + MOCK_CONST_METHOD0(hasBrightnessControl, bool());
  77 +
  78 + MOCK_CONST_METHOD0(hasTemperatureControl, bool());
  79 +
  80 + MOCK_CONST_METHOD0(hasColorControl, bool());
  81 +
  82 + MOCK_METHOD2(setBrightness, bool(unsigned int bri, uint8_t transition));
  83 +
  84 + MOCK_CONST_METHOD0(getBrightness, unsigned int());
  85 +
  86 + MOCK_METHOD0(getBrightness, unsigned int());
  87 +
  88 + MOCK_METHOD2(setColorTemperature, bool(unsigned int mired, uint8_t transition));
  89 +
  90 + MOCK_CONST_METHOD0(getColorTemperature, unsigned int());
  91 +
  92 + MOCK_METHOD0(getColorTemperature, unsigned int());
  93 +
  94 + MOCK_METHOD2(setColorHue, bool(uint16_t hue, uint8_t transition));
  95 +
  96 + MOCK_METHOD2(setColorSaturation, bool(uint8_t sat, uint8_t transition));
  97 +
  98 + MOCK_METHOD3(setColorHueSaturation, bool(uint16_t hue, uint8_t sat, uint8_t transition));
  99 +
  100 + MOCK_CONST_METHOD0(getColorHueSaturation, std::pair<uint16_t, uint8_t>());
  101 +
  102 + MOCK_METHOD0(getColorHueSaturation, std::pair<uint16_t, uint8_t>());
  103 +
  104 + MOCK_METHOD3(setColorXY, bool(float x, float y, uint8_t transition));
  105 +
  106 + MOCK_CONST_METHOD0(getColorXY, std::pair<float, float>());
  107 +
  108 + MOCK_METHOD0(getColorXY, std::pair<float, float>());
  109 +
  110 + MOCK_METHOD4(setColorRGB, bool(uint8_t r, uint8_t g, uint8_t b, uint8_t transition));
  111 +
  112 + MOCK_METHOD0(alert, bool());
  113 +
  114 + MOCK_METHOD1(alertTemperature, bool(unsigned int mired));
  115 +
  116 + MOCK_METHOD2(alertHueSaturation, bool(uint16_t hue, uint8_t sat));
  117 +
  118 + MOCK_METHOD2(alertXY, bool(float x, float y));
  119 +
  120 + MOCK_METHOD3(alertRGB, bool(uint8_t r, uint8_t g, uint8_t b));
  121 +
  122 + MOCK_METHOD1(setColorLoop, bool(bool on));
  123 +
  124 + MOCK_METHOD1(OnNoRefresh, bool(uint8_t transition));
  125 +
  126 + MOCK_METHOD1(OffNoRefresh, bool(uint8_t transition));
  127 +
  128 + MOCK_METHOD3(
  129 + SendPutRequest, nlohmann::json(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo));
  130 +
  131 + MOCK_METHOD0(refreshState, void());
  132 +};
  133 +
  134 +#endif
... ...
hueplusplus/test/test_BaseHttpHandler.cpp renamed to src/test/test_BaseHttpHandler.cpp 100755 → 100644
1   -/**
2   - \file test_BaseHttpHandler.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <memory>
24   -#include <string>
25   -
26   -#include <gmock/gmock.h>
27   -#include <gtest/gtest.h>
28   -
29   -#include "testhelper.h"
30   -
31   -#include "../include/json/json.hpp"
32   -#include "mocks/mock_BaseHttpHandler.h"
33   -#include "../include/HueException.h"
34   -
35   -TEST(BaseHttpHandler, sendGetHTTPBody)
36   -{
37   - using namespace ::testing;
38   - MockBaseHttpHandler handler;
39   -
40   - EXPECT_CALL(handler, send("testmsg", "192.168.2.1", 90))
41   - .Times(AtLeast(2))
42   - .WillOnce(Return(""))
43   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
44   -
45   - EXPECT_THROW(handler.sendGetHTTPBody("testmsg", "192.168.2.1", 90), HueException);
46   - EXPECT_EQ("testreply", handler.sendGetHTTPBody("testmsg", "192.168.2.1", 90));
47   -}
48   -
49   -TEST(BaseHttpHandler, sendHTTPRequest)
50   -{
51   - using namespace ::testing;
52   - MockBaseHttpHandler handler;
53   -
54   - EXPECT_CALL(handler,
55   - send("GET UrI HTTP/1.0\r\nContent-Type: "
56   - "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
57   - "192.168.2.1", 90))
58   - .Times(AtLeast(2))
59   - .WillOnce(Return(""))
60   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
61   -
62   - EXPECT_THROW(handler.sendHTTPRequest("GET", "UrI", "text/html", "body", "192.168.2.1", 90), HueException);
63   - EXPECT_EQ("testreply", handler.sendHTTPRequest("GET", "UrI", "text/html", "body", "192.168.2.1", 90));
64   -}
65   -
66   -TEST(BaseHttpHandler, GETString)
67   -{
68   - using namespace ::testing;
69   - MockBaseHttpHandler handler;
70   -
71   - EXPECT_CALL(handler,
72   - send("GET UrI HTTP/1.0\r\nContent-Type: "
73   - "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
74   - "192.168.2.1", 90))
75   - .Times(AtLeast(2))
76   - .WillOnce(Return(""))
77   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
78   -
79   - EXPECT_THROW(handler.GETString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
80   - EXPECT_EQ("testreply", handler.GETString("UrI", "text/html", "body", "192.168.2.1", 90));
81   -}
82   -
83   -TEST(BaseHttpHandler, POSTString)
84   -{
85   - using namespace ::testing;
86   - MockBaseHttpHandler handler;
87   -
88   - EXPECT_CALL(handler,
89   - send("POST UrI HTTP/1.0\r\nContent-Type: "
90   - "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
91   - "192.168.2.1", 90))
92   - .Times(AtLeast(2))
93   - .WillOnce(Return(""))
94   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
95   -
96   - EXPECT_THROW(handler.POSTString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
97   - EXPECT_EQ("testreply", handler.POSTString("UrI", "text/html", "body", "192.168.2.1", 90));
98   -}
99   -
100   -TEST(BaseHttpHandler, PUTString)
101   -{
102   - using namespace ::testing;
103   - MockBaseHttpHandler handler;
104   -
105   - EXPECT_CALL(handler,
106   - send("PUT UrI HTTP/1.0\r\nContent-Type: "
107   - "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
108   - "192.168.2.1", 90))
109   - .Times(AtLeast(2))
110   - .WillOnce(Return(""))
111   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
112   -
113   - EXPECT_THROW(handler.PUTString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
114   - EXPECT_EQ("testreply", handler.PUTString("UrI", "text/html", "body", "192.168.2.1", 90));
115   -}
116   -
117   -TEST(BaseHttpHandler, DELETEString)
118   -{
119   - using namespace ::testing;
120   - MockBaseHttpHandler handler;
121   -
122   - EXPECT_CALL(handler,
123   - send("DELETE UrI HTTP/1.0\r\nContent-Type: "
124   - "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
125   - "192.168.2.1", 90))
126   - .Times(AtLeast(2))
127   - .WillOnce(Return(""))
128   - .WillRepeatedly(Return("\r\n\r\ntestreply"));
129   -
130   - EXPECT_THROW(handler.DELETEString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
131   - EXPECT_EQ("testreply", handler.DELETEString("UrI", "text/html", "body", "192.168.2.1", 90));
132   -}
133   -
134   -TEST(BaseHttpHandler, GETJson)
135   -{
136   - using namespace ::testing;
137   - MockBaseHttpHandler handler;
138   -
139   - nlohmann::json testval;
140   - testval["test"] = 100;
141   - std::string expected_call = "GET UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
142   - expected_call.append(std::to_string(testval.dump().size()));
143   - expected_call.append("\r\n\r\n");
144   - expected_call.append(testval.dump());
145   - expected_call.append("\r\n\r\n");
146   -
147   - EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
148   - .Times(AtLeast(2))
149   - .WillOnce(Return(""))
150   - .WillOnce(Return("\r\n\r\n"))
151   - .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
152   - nlohmann::json expected;
153   - expected["test"] = "whatever";
154   -
155   - EXPECT_THROW(handler.GETJson("UrI", testval, "192.168.2.1", 90), HueException);
156   - EXPECT_THROW(handler.GETJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
157   - EXPECT_EQ(expected, handler.GETJson("UrI", testval, "192.168.2.1", 90));
158   -}
159   -
160   -TEST(BaseHttpHandler, POSTJson)
161   -{
162   - using namespace ::testing;
163   - MockBaseHttpHandler handler;
164   -
165   - nlohmann::json testval;
166   - testval["test"] = 100;
167   - std::string expected_call = "POST UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
168   - expected_call.append(std::to_string(testval.dump().size()));
169   - expected_call.append("\r\n\r\n");
170   - expected_call.append(testval.dump());
171   - expected_call.append("\r\n\r\n");
172   -
173   - EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
174   - .Times(AtLeast(2))
175   - .WillOnce(Return(""))
176   - .WillOnce(Return("\r\n\r\n"))
177   - .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
178   - nlohmann::json expected;
179   - expected["test"] = "whatever";
180   -
181   - EXPECT_THROW(handler.POSTJson("UrI", testval, "192.168.2.1", 90), HueException);
182   - EXPECT_THROW(handler.POSTJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
183   - EXPECT_EQ(expected, handler.POSTJson("UrI", testval, "192.168.2.1", 90));
184   -}
185   -
186   -TEST(BaseHttpHandler, PUTJson)
187   -{
188   - using namespace ::testing;
189   - MockBaseHttpHandler handler;
190   -
191   - nlohmann::json testval;
192   - testval["test"] = 100;
193   - std::string expected_call = "PUT UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
194   - expected_call.append(std::to_string(testval.dump().size()));
195   - expected_call.append("\r\n\r\n");
196   - expected_call.append(testval.dump());
197   - expected_call.append("\r\n\r\n");
198   -
199   - EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
200   - .Times(AtLeast(2))
201   - .WillOnce(Return(""))
202   - .WillOnce(Return("\r\n\r\n"))
203   - .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
204   - nlohmann::json expected;
205   - expected["test"] = "whatever";
206   -
207   - EXPECT_THROW(handler.PUTJson("UrI", testval, "192.168.2.1", 90), HueException);
208   - EXPECT_THROW(handler.PUTJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
209   - EXPECT_EQ(expected, handler.PUTJson("UrI", testval, "192.168.2.1", 90));
210   -}
211   -
212   -TEST(BaseHttpHandler, DELETEJson)
213   -{
214   - using namespace ::testing;
215   - MockBaseHttpHandler handler;
216   -
217   - nlohmann::json testval;
218   - testval["test"] = 100;
219   - std::string expected_call = "DELETE UrI HTTP/1.0\r\nContent-Type: "
220   - "application/json\r\nContent-Length: ";
221   - expected_call.append(std::to_string(testval.dump().size()));
222   - expected_call.append("\r\n\r\n");
223   - expected_call.append(testval.dump());
224   - expected_call.append("\r\n\r\n");
225   -
226   - EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
227   - .Times(AtLeast(2))
228   - .WillOnce(Return(""))
229   - .WillOnce(Return("\r\n\r\n"))
230   - .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
231   - nlohmann::json expected;
232   - expected["test"] = "whatever";
233   -
234   - EXPECT_THROW(handler.DELETEJson("UrI", testval, "192.168.2.1", 90), HueException);
235   - EXPECT_THROW(handler.DELETEJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
236   - EXPECT_EQ(expected, handler.DELETEJson("UrI", testval, "192.168.2.1", 90));
237   -}
  1 +/**
  2 + \file test_BaseHttpHandler.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <memory>
  24 +#include <string>
  25 +
  26 +#include <gmock/gmock.h>
  27 +#include <gtest/gtest.h>
  28 +
  29 +#include "testhelper.h"
  30 +
  31 +#include "../include/json/json.hpp"
  32 +#include "mocks/mock_BaseHttpHandler.h"
  33 +#include "../include/HueException.h"
  34 +
  35 +TEST(BaseHttpHandler, sendGetHTTPBody)
  36 +{
  37 + using namespace ::testing;
  38 + MockBaseHttpHandler handler;
  39 +
  40 + EXPECT_CALL(handler, send("testmsg", "192.168.2.1", 90))
  41 + .Times(AtLeast(2))
  42 + .WillOnce(Return(""))
  43 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  44 +
  45 + EXPECT_THROW(handler.sendGetHTTPBody("testmsg", "192.168.2.1", 90), HueException);
  46 + EXPECT_EQ("testreply", handler.sendGetHTTPBody("testmsg", "192.168.2.1", 90));
  47 +}
  48 +
  49 +TEST(BaseHttpHandler, sendHTTPRequest)
  50 +{
  51 + using namespace ::testing;
  52 + MockBaseHttpHandler handler;
  53 +
  54 + EXPECT_CALL(handler,
  55 + send("GET UrI HTTP/1.0\r\nContent-Type: "
  56 + "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
  57 + "192.168.2.1", 90))
  58 + .Times(AtLeast(2))
  59 + .WillOnce(Return(""))
  60 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  61 +
  62 + EXPECT_THROW(handler.sendHTTPRequest("GET", "UrI", "text/html", "body", "192.168.2.1", 90), HueException);
  63 + EXPECT_EQ("testreply", handler.sendHTTPRequest("GET", "UrI", "text/html", "body", "192.168.2.1", 90));
  64 +}
  65 +
  66 +TEST(BaseHttpHandler, GETString)
  67 +{
  68 + using namespace ::testing;
  69 + MockBaseHttpHandler handler;
  70 +
  71 + EXPECT_CALL(handler,
  72 + send("GET UrI HTTP/1.0\r\nContent-Type: "
  73 + "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
  74 + "192.168.2.1", 90))
  75 + .Times(AtLeast(2))
  76 + .WillOnce(Return(""))
  77 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  78 +
  79 + EXPECT_THROW(handler.GETString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
  80 + EXPECT_EQ("testreply", handler.GETString("UrI", "text/html", "body", "192.168.2.1", 90));
  81 +}
  82 +
  83 +TEST(BaseHttpHandler, POSTString)
  84 +{
  85 + using namespace ::testing;
  86 + MockBaseHttpHandler handler;
  87 +
  88 + EXPECT_CALL(handler,
  89 + send("POST UrI HTTP/1.0\r\nContent-Type: "
  90 + "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
  91 + "192.168.2.1", 90))
  92 + .Times(AtLeast(2))
  93 + .WillOnce(Return(""))
  94 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  95 +
  96 + EXPECT_THROW(handler.POSTString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
  97 + EXPECT_EQ("testreply", handler.POSTString("UrI", "text/html", "body", "192.168.2.1", 90));
  98 +}
  99 +
  100 +TEST(BaseHttpHandler, PUTString)
  101 +{
  102 + using namespace ::testing;
  103 + MockBaseHttpHandler handler;
  104 +
  105 + EXPECT_CALL(handler,
  106 + send("PUT UrI HTTP/1.0\r\nContent-Type: "
  107 + "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
  108 + "192.168.2.1", 90))
  109 + .Times(AtLeast(2))
  110 + .WillOnce(Return(""))
  111 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  112 +
  113 + EXPECT_THROW(handler.PUTString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
  114 + EXPECT_EQ("testreply", handler.PUTString("UrI", "text/html", "body", "192.168.2.1", 90));
  115 +}
  116 +
  117 +TEST(BaseHttpHandler, DELETEString)
  118 +{
  119 + using namespace ::testing;
  120 + MockBaseHttpHandler handler;
  121 +
  122 + EXPECT_CALL(handler,
  123 + send("DELETE UrI HTTP/1.0\r\nContent-Type: "
  124 + "text/html\r\nContent-Length: 4\r\n\r\nbody\r\n\r\n",
  125 + "192.168.2.1", 90))
  126 + .Times(AtLeast(2))
  127 + .WillOnce(Return(""))
  128 + .WillRepeatedly(Return("\r\n\r\ntestreply"));
  129 +
  130 + EXPECT_THROW(handler.DELETEString("UrI", "text/html", "body", "192.168.2.1", 90), HueException);
  131 + EXPECT_EQ("testreply", handler.DELETEString("UrI", "text/html", "body", "192.168.2.1", 90));
  132 +}
  133 +
  134 +TEST(BaseHttpHandler, GETJson)
  135 +{
  136 + using namespace ::testing;
  137 + MockBaseHttpHandler handler;
  138 +
  139 + nlohmann::json testval;
  140 + testval["test"] = 100;
  141 + std::string expected_call = "GET UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
  142 + expected_call.append(std::to_string(testval.dump().size()));
  143 + expected_call.append("\r\n\r\n");
  144 + expected_call.append(testval.dump());
  145 + expected_call.append("\r\n\r\n");
  146 +
  147 + EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
  148 + .Times(AtLeast(2))
  149 + .WillOnce(Return(""))
  150 + .WillOnce(Return("\r\n\r\n"))
  151 + .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
  152 + nlohmann::json expected;
  153 + expected["test"] = "whatever";
  154 +
  155 + EXPECT_THROW(handler.GETJson("UrI", testval, "192.168.2.1", 90), HueException);
  156 + EXPECT_THROW(handler.GETJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
  157 + EXPECT_EQ(expected, handler.GETJson("UrI", testval, "192.168.2.1", 90));
  158 +}
  159 +
  160 +TEST(BaseHttpHandler, POSTJson)
  161 +{
  162 + using namespace ::testing;
  163 + MockBaseHttpHandler handler;
  164 +
  165 + nlohmann::json testval;
  166 + testval["test"] = 100;
  167 + std::string expected_call = "POST UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
  168 + expected_call.append(std::to_string(testval.dump().size()));
  169 + expected_call.append("\r\n\r\n");
  170 + expected_call.append(testval.dump());
  171 + expected_call.append("\r\n\r\n");
  172 +
  173 + EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
  174 + .Times(AtLeast(2))
  175 + .WillOnce(Return(""))
  176 + .WillOnce(Return("\r\n\r\n"))
  177 + .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
  178 + nlohmann::json expected;
  179 + expected["test"] = "whatever";
  180 +
  181 + EXPECT_THROW(handler.POSTJson("UrI", testval, "192.168.2.1", 90), HueException);
  182 + EXPECT_THROW(handler.POSTJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
  183 + EXPECT_EQ(expected, handler.POSTJson("UrI", testval, "192.168.2.1", 90));
  184 +}
  185 +
  186 +TEST(BaseHttpHandler, PUTJson)
  187 +{
  188 + using namespace ::testing;
  189 + MockBaseHttpHandler handler;
  190 +
  191 + nlohmann::json testval;
  192 + testval["test"] = 100;
  193 + std::string expected_call = "PUT UrI HTTP/1.0\r\nContent-Type: application/json\r\nContent-Length: ";
  194 + expected_call.append(std::to_string(testval.dump().size()));
  195 + expected_call.append("\r\n\r\n");
  196 + expected_call.append(testval.dump());
  197 + expected_call.append("\r\n\r\n");
  198 +
  199 + EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
  200 + .Times(AtLeast(2))
  201 + .WillOnce(Return(""))
  202 + .WillOnce(Return("\r\n\r\n"))
  203 + .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
  204 + nlohmann::json expected;
  205 + expected["test"] = "whatever";
  206 +
  207 + EXPECT_THROW(handler.PUTJson("UrI", testval, "192.168.2.1", 90), HueException);
  208 + EXPECT_THROW(handler.PUTJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
  209 + EXPECT_EQ(expected, handler.PUTJson("UrI", testval, "192.168.2.1", 90));
  210 +}
  211 +
  212 +TEST(BaseHttpHandler, DELETEJson)
  213 +{
  214 + using namespace ::testing;
  215 + MockBaseHttpHandler handler;
  216 +
  217 + nlohmann::json testval;
  218 + testval["test"] = 100;
  219 + std::string expected_call = "DELETE UrI HTTP/1.0\r\nContent-Type: "
  220 + "application/json\r\nContent-Length: ";
  221 + expected_call.append(std::to_string(testval.dump().size()));
  222 + expected_call.append("\r\n\r\n");
  223 + expected_call.append(testval.dump());
  224 + expected_call.append("\r\n\r\n");
  225 +
  226 + EXPECT_CALL(handler, send(expected_call, "192.168.2.1", 90))
  227 + .Times(AtLeast(2))
  228 + .WillOnce(Return(""))
  229 + .WillOnce(Return("\r\n\r\n"))
  230 + .WillRepeatedly(Return("\r\n\r\n{\"test\" : \"whatever\"}"));
  231 + nlohmann::json expected;
  232 + expected["test"] = "whatever";
  233 +
  234 + EXPECT_THROW(handler.DELETEJson("UrI", testval, "192.168.2.1", 90), HueException);
  235 + EXPECT_THROW(handler.DELETEJson("UrI", testval, "192.168.2.1", 90), nlohmann::json::parse_error);
  236 + EXPECT_EQ(expected, handler.DELETEJson("UrI", testval, "192.168.2.1", 90));
  237 +}
... ...
hueplusplus/test/test_ExtendedColorHueStrategy.cpp renamed to src/test/test_ExtendedColorHueStrategy.cpp 100755 → 100644
1   -/**
2   - \file test_ExtendedColorHueStrategy.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <memory>
24   -#include <string>
25   -
26   -#include <gmock/gmock.h>
27   -#include <gtest/gtest.h>
28   -
29   -#include "testhelper.h"
30   -
31   -#include "../include/ExtendedColorHueStrategy.h"
32   -#include "../include/json/json.hpp"
33   -#include "mocks/mock_HttpHandler.h"
34   -#include "mocks/mock_HueLight.h"
35   -
36   -TEST(ExtendedColorHueStrategy, alertHueSaturation)
37   -{
38   - using namespace ::testing;
39   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
40   - EXPECT_CALL(
41   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
42   - .Times(AtLeast(1))
43   - .WillRepeatedly(Return(nlohmann::json::object()));
44   - MockHueLight test_light(handler);
45   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
46   -
47   - test_light.getState()["state"]["colormode"] = "invalid";
48   - test_light.getState()["state"]["on"] = false;
49   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(30000, 128, test_light));
50   -
51   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
52   - .Times(AtLeast(2))
53   - .WillOnce(Return(false))
54   - .WillRepeatedly(Return(true));
55   - test_light.getState()["state"]["colormode"] = "hs";
56   - test_light.getState()["state"]["on"] = true;
57   - test_light.getState()["state"]["sat"] = 100;
58   - test_light.getState()["state"]["hue"] = 200;
59   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
60   -
61   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
62   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
63   -
64   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
65   -
66   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
67   - test_light.getState()["state"]["on"] = false;
68   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
69   -
70   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
71   - .Times(AtLeast(2))
72   - .WillOnce(Return(false))
73   - .WillRepeatedly(Return(true));
74   - test_light.getState()["state"]["colormode"] = "xy";
75   - test_light.getState()["state"]["on"] = true;
76   - test_light.getState()["state"]["xy"][0] = 0.1;
77   - test_light.getState()["state"]["xy"][1] = 0.1;
78   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
79   -
80   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
81   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
82   -
83   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
84   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
85   -
86   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
87   - test_light.getState()["state"]["on"] = false;
88   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
89   -
90   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
91   - .Times(AtLeast(2))
92   - .WillOnce(Return(false))
93   - .WillRepeatedly(Return(true));
94   - test_light.getState()["state"]["colormode"] = "ct";
95   - test_light.getState()["state"]["on"] = true;
96   - test_light.getState()["state"]["ct"] = 200;
97   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
98   -
99   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
100   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
101   -
102   - EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
103   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
104   -
105   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
106   - test_light.getState()["state"]["on"] = false;
107   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
108   -}
109   -
110   -TEST(ExtendedColorHueStrategy, alertXY)
111   -{
112   - using namespace ::testing;
113   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
114   - EXPECT_CALL(
115   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
116   - .Times(AtLeast(1))
117   - .WillRepeatedly(Return(nlohmann::json::object()));
118   - MockHueLight test_light(handler);
119   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
120   -
121   - test_light.getState()["state"]["colormode"] = "invalid";
122   - test_light.getState()["state"]["on"] = false;
123   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
124   -
125   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
126   - test_light.getState()["state"]["colormode"] = "hs";
127   - test_light.getState()["state"]["on"] = true;
128   - test_light.getState()["state"]["xy"][0] = 0.1;
129   - test_light.getState()["state"]["xy"][1] = 0.1;
130   - test_light.getState()["state"]["sat"] = 100;
131   - test_light.getState()["state"]["hue"] = 200;
132   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
133   -
134   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
135   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
136   -
137   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
138   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
139   -
140   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
141   - test_light.getState()["state"]["on"] = false;
142   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
143   -
144   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
145   - test_light.getState()["state"]["colormode"] = "xy";
146   - test_light.getState()["state"]["on"] = true;
147   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
148   -
149   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
150   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
151   -
152   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
153   -
154   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
155   - test_light.getState()["state"]["on"] = false;
156   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
157   -
158   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
159   - test_light.getState()["state"]["colormode"] = "ct";
160   - test_light.getState()["state"]["on"] = true;
161   - test_light.getState()["state"]["ct"] = 200;
162   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
163   -
164   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
165   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
166   -
167   - EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
168   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
169   -
170   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
171   - test_light.getState()["state"]["on"] = false;
172   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
173   -}
174   -
175   -TEST(ExtendedColorHueStrategy, alertRGB)
176   -{
177   - using namespace ::testing;
178   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
179   - EXPECT_CALL(
180   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
181   - .Times(AtLeast(1))
182   - .WillRepeatedly(Return(nlohmann::json::object()));
183   - MockHueLight test_light(handler);
184   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
185   -
186   - test_light.getState()["state"]["colormode"] = "invalid";
187   - test_light.getState()["state"]["on"] = false;
188   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
189   -
190   - EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
191   - .Times(AtLeast(2))
192   - .WillOnce(Return(false))
193   - .WillRepeatedly(Return(true));
194   - test_light.getState()["state"]["colormode"] = "hs";
195   - test_light.getState()["state"]["on"] = true;
196   - test_light.getState()["state"]["sat"] = 100;
197   - test_light.getState()["state"]["hue"] = 200;
198   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
199   -
200   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
201   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
202   -
203   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
204   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
205   -
206   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
207   - test_light.getState()["state"]["on"] = false;
208   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
209   -
210   - EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
211   - .Times(AtLeast(2))
212   - .WillOnce(Return(false))
213   - .WillRepeatedly(Return(true));
214   - test_light.getState()["state"]["colormode"] = "xy";
215   - test_light.getState()["state"]["on"] = true;
216   - test_light.getState()["state"]["xy"][0] = 0.1;
217   - test_light.getState()["state"]["xy"][1] = 0.1;
218   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
219   -
220   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
221   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
222   -
223   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
224   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
225   -
226   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
227   - test_light.getState()["state"]["on"] = false;
228   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
229   -
230   - EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
231   - .Times(AtLeast(2))
232   - .WillOnce(Return(false))
233   - .WillRepeatedly(Return(true));
234   - test_light.getState()["state"]["colormode"] = "ct";
235   - test_light.getState()["state"]["on"] = true;
236   - test_light.getState()["state"]["ct"] = 200;
237   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
238   -
239   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
240   - EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
241   -
242   - EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
243   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
244   -
245   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
246   - test_light.getState()["state"]["on"] = false;
247   - EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
248   -}
  1 +/**
  2 + \file test_ExtendedColorHueStrategy.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <memory>
  24 +#include <string>
  25 +
  26 +#include <gmock/gmock.h>
  27 +#include <gtest/gtest.h>
  28 +
  29 +#include "testhelper.h"
  30 +
  31 +#include "../include/ExtendedColorHueStrategy.h"
  32 +#include "../include/json/json.hpp"
  33 +#include "mocks/mock_HttpHandler.h"
  34 +#include "mocks/mock_HueLight.h"
  35 +
  36 +TEST(ExtendedColorHueStrategy, alertHueSaturation)
  37 +{
  38 + using namespace ::testing;
  39 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  40 + EXPECT_CALL(
  41 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  42 + .Times(AtLeast(1))
  43 + .WillRepeatedly(Return(nlohmann::json::object()));
  44 + MockHueLight test_light(handler);
  45 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  46 +
  47 + test_light.getState()["state"]["colormode"] = "invalid";
  48 + test_light.getState()["state"]["on"] = false;
  49 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(30000, 128, test_light));
  50 +
  51 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
  52 + .Times(AtLeast(2))
  53 + .WillOnce(Return(false))
  54 + .WillRepeatedly(Return(true));
  55 + test_light.getState()["state"]["colormode"] = "hs";
  56 + test_light.getState()["state"]["on"] = true;
  57 + test_light.getState()["state"]["sat"] = 100;
  58 + test_light.getState()["state"]["hue"] = 200;
  59 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  60 +
  61 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  62 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  63 +
  64 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  65 +
  66 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  67 + test_light.getState()["state"]["on"] = false;
  68 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  69 +
  70 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
  71 + .Times(AtLeast(2))
  72 + .WillOnce(Return(false))
  73 + .WillRepeatedly(Return(true));
  74 + test_light.getState()["state"]["colormode"] = "xy";
  75 + test_light.getState()["state"]["on"] = true;
  76 + test_light.getState()["state"]["xy"][0] = 0.1;
  77 + test_light.getState()["state"]["xy"][1] = 0.1;
  78 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  79 +
  80 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  81 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  82 +
  83 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  84 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  85 +
  86 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  87 + test_light.getState()["state"]["on"] = false;
  88 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  89 +
  90 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
  91 + .Times(AtLeast(2))
  92 + .WillOnce(Return(false))
  93 + .WillRepeatedly(Return(true));
  94 + test_light.getState()["state"]["colormode"] = "ct";
  95 + test_light.getState()["state"]["on"] = true;
  96 + test_light.getState()["state"]["ct"] = 200;
  97 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  98 +
  99 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  100 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  101 +
  102 + EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  103 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  104 +
  105 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  106 + test_light.getState()["state"]["on"] = false;
  107 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertHueSaturation(200, 100, test_light));
  108 +}
  109 +
  110 +TEST(ExtendedColorHueStrategy, alertXY)
  111 +{
  112 + using namespace ::testing;
  113 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  114 + EXPECT_CALL(
  115 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  116 + .Times(AtLeast(1))
  117 + .WillRepeatedly(Return(nlohmann::json::object()));
  118 + MockHueLight test_light(handler);
  119 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  120 +
  121 + test_light.getState()["state"]["colormode"] = "invalid";
  122 + test_light.getState()["state"]["on"] = false;
  123 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  124 +
  125 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  126 + test_light.getState()["state"]["colormode"] = "hs";
  127 + test_light.getState()["state"]["on"] = true;
  128 + test_light.getState()["state"]["xy"][0] = 0.1;
  129 + test_light.getState()["state"]["xy"][1] = 0.1;
  130 + test_light.getState()["state"]["sat"] = 100;
  131 + test_light.getState()["state"]["hue"] = 200;
  132 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  133 +
  134 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  135 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  136 +
  137 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  138 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  139 +
  140 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  141 + test_light.getState()["state"]["on"] = false;
  142 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  143 +
  144 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  145 + test_light.getState()["state"]["colormode"] = "xy";
  146 + test_light.getState()["state"]["on"] = true;
  147 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  148 +
  149 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  150 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  151 +
  152 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  153 +
  154 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  155 + test_light.getState()["state"]["on"] = false;
  156 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  157 +
  158 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  159 + test_light.getState()["state"]["colormode"] = "ct";
  160 + test_light.getState()["state"]["on"] = true;
  161 + test_light.getState()["state"]["ct"] = 200;
  162 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  163 +
  164 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  165 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  166 +
  167 + EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  168 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  169 +
  170 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  171 + test_light.getState()["state"]["on"] = false;
  172 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  173 +}
  174 +
  175 +TEST(ExtendedColorHueStrategy, alertRGB)
  176 +{
  177 + using namespace ::testing;
  178 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  179 + EXPECT_CALL(
  180 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  181 + .Times(AtLeast(1))
  182 + .WillRepeatedly(Return(nlohmann::json::object()));
  183 + MockHueLight test_light(handler);
  184 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  185 +
  186 + test_light.getState()["state"]["colormode"] = "invalid";
  187 + test_light.getState()["state"]["on"] = false;
  188 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  189 +
  190 + EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
  191 + .Times(AtLeast(2))
  192 + .WillOnce(Return(false))
  193 + .WillRepeatedly(Return(true));
  194 + test_light.getState()["state"]["colormode"] = "hs";
  195 + test_light.getState()["state"]["on"] = true;
  196 + test_light.getState()["state"]["sat"] = 100;
  197 + test_light.getState()["state"]["hue"] = 200;
  198 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  199 +
  200 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  201 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  202 +
  203 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  204 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  205 +
  206 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  207 + test_light.getState()["state"]["on"] = false;
  208 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  209 +
  210 + EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
  211 + .Times(AtLeast(2))
  212 + .WillOnce(Return(false))
  213 + .WillRepeatedly(Return(true));
  214 + test_light.getState()["state"]["colormode"] = "xy";
  215 + test_light.getState()["state"]["on"] = true;
  216 + test_light.getState()["state"]["xy"][0] = 0.1;
  217 + test_light.getState()["state"]["xy"][1] = 0.1;
  218 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  219 +
  220 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  221 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  222 +
  223 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  224 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  225 +
  226 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  227 + test_light.getState()["state"]["on"] = false;
  228 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  229 +
  230 + EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
  231 + .Times(AtLeast(2))
  232 + .WillOnce(Return(false))
  233 + .WillRepeatedly(Return(true));
  234 + test_light.getState()["state"]["colormode"] = "ct";
  235 + test_light.getState()["state"]["on"] = true;
  236 + test_light.getState()["state"]["ct"] = 200;
  237 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  238 +
  239 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  240 + EXPECT_EQ(false, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  241 +
  242 + EXPECT_CALL(test_light, setColorTemperature(_, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  243 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  244 +
  245 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  246 + test_light.getState()["state"]["on"] = false;
  247 + EXPECT_EQ(true, ExtendedColorHueStrategy().alertRGB(128, 128, 128, test_light));
  248 +}
... ...
hueplusplus/test/test_ExtendedColorTemperatureStrategy.cpp renamed to src/test/test_ExtendedColorTemperatureStrategy.cpp 100755 → 100644
1   -/**
2   - \file test_ExtendedColorTemperatureStrategy.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <memory>
24   -#include <string>
25   -
26   -#include <gmock/gmock.h>
27   -#include <gtest/gtest.h>
28   -
29   -#include "testhelper.h"
30   -
31   -#include "../include/ExtendedColorTemperatureStrategy.h"
32   -#include "../include/json/json.hpp"
33   -#include "mocks/mock_HttpHandler.h"
34   -#include "mocks/mock_HueLight.h"
35   -
36   -TEST(ExtendedColorTemperatureStrategy, setColorTemperature)
37   -{
38   - using namespace ::testing;
39   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
40   - EXPECT_CALL(
41   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
42   - .Times(AtLeast(1))
43   - .WillRepeatedly(Return(nlohmann::json::object()));
44   - MockHueLight test_light(handler);
45   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
46   - nlohmann::json prep_ret;
47   - prep_ret = nlohmann::json::array();
48   - prep_ret[0] = nlohmann::json::object();
49   - prep_ret[0]["success"] = nlohmann::json::object();
50   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
51   - prep_ret[1] = nlohmann::json::object();
52   - prep_ret[1]["success"] = nlohmann::json::object();
53   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
54   - prep_ret[2] = nlohmann::json::object();
55   - prep_ret[2]["success"] = nlohmann::json::object();
56   - prep_ret[2]["success"]["/lights/1/state/ct"] = 155;
57   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
58   -
59   - test_light.getState()["state"]["colormode"] = "ct";
60   - test_light.getState()["state"]["on"] = true;
61   - test_light.getState()["state"]["ct"] = 200;
62   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(200, 4, test_light));
63   -
64   - test_light.getState()["state"]["on"] = false;
65   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(155, 6, test_light));
66   -
67   - prep_ret[2]["success"]["/lights/1/state/ct"] = 153;
68   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
69   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(0, 6, test_light));
70   -
71   - prep_ret[2]["success"]["/lights/1/state/ct"] = 500;
72   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
73   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(600, 6, test_light));
74   -}
75   -
76   -TEST(ExtendedColorTemperatureStrategy, alertTemperature)
77   -{
78   - using namespace ::testing;
79   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
80   - EXPECT_CALL(
81   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
82   - .Times(AtLeast(1))
83   - .WillRepeatedly(Return(nlohmann::json::object()));
84   - MockHueLight test_light(handler);
85   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
86   -
87   - test_light.getState()["state"]["colormode"] = "invalid";
88   - test_light.getState()["state"]["on"] = false;
89   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
90   -
91   - EXPECT_CALL(test_light, setColorTemperature(_, _))
92   - .Times(AtLeast(2))
93   - .WillOnce(Return(false))
94   - .WillRepeatedly(Return(true));
95   - test_light.getState()["state"]["colormode"] = "hs";
96   - test_light.getState()["state"]["on"] = true;
97   - test_light.getState()["state"]["ct"] = 200;
98   - test_light.getState()["state"]["sat"] = 100;
99   - test_light.getState()["state"]["hue"] = 200;
100   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
101   -
102   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
103   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
104   -
105   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
106   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
107   -
108   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
109   - test_light.getState()["state"]["on"] = false;
110   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
111   -
112   - EXPECT_CALL(test_light, setColorTemperature(_, _))
113   - .Times(AtLeast(2))
114   - .WillOnce(Return(false))
115   - .WillRepeatedly(Return(true));
116   - test_light.getState()["state"]["colormode"] = "xy";
117   - test_light.getState()["state"]["on"] = true;
118   - test_light.getState()["state"]["xy"][0] = 0.1;
119   - test_light.getState()["state"]["xy"][1] = 0.1;
120   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
121   -
122   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
123   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
124   -
125   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
126   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
127   -
128   - test_light.getState()["state"]["on"] = false;
129   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
130   -
131   - EXPECT_CALL(test_light, setColorTemperature(_, _))
132   - .Times(AtLeast(2))
133   - .WillOnce(Return(false))
134   - .WillRepeatedly(Return(true));
135   - test_light.getState()["state"]["colormode"] = "ct";
136   - test_light.getState()["state"]["on"] = true;
137   - test_light.getState()["state"]["on"] = true;
138   - test_light.getState()["state"]["ct"] = 200;
139   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
140   -
141   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
142   - EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
143   -
144   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
145   -
146   - test_light.getState()["state"]["on"] = false;
147   - EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
148   -}
  1 +/**
  2 + \file test_ExtendedColorTemperatureStrategy.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <memory>
  24 +#include <string>
  25 +
  26 +#include <gmock/gmock.h>
  27 +#include <gtest/gtest.h>
  28 +
  29 +#include "testhelper.h"
  30 +
  31 +#include "../include/ExtendedColorTemperatureStrategy.h"
  32 +#include "../include/json/json.hpp"
  33 +#include "mocks/mock_HttpHandler.h"
  34 +#include "mocks/mock_HueLight.h"
  35 +
  36 +TEST(ExtendedColorTemperatureStrategy, setColorTemperature)
  37 +{
  38 + using namespace ::testing;
  39 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  40 + EXPECT_CALL(
  41 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  42 + .Times(AtLeast(1))
  43 + .WillRepeatedly(Return(nlohmann::json::object()));
  44 + MockHueLight test_light(handler);
  45 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  46 + nlohmann::json prep_ret;
  47 + prep_ret = nlohmann::json::array();
  48 + prep_ret[0] = nlohmann::json::object();
  49 + prep_ret[0]["success"] = nlohmann::json::object();
  50 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  51 + prep_ret[1] = nlohmann::json::object();
  52 + prep_ret[1]["success"] = nlohmann::json::object();
  53 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  54 + prep_ret[2] = nlohmann::json::object();
  55 + prep_ret[2]["success"] = nlohmann::json::object();
  56 + prep_ret[2]["success"]["/lights/1/state/ct"] = 155;
  57 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  58 +
  59 + test_light.getState()["state"]["colormode"] = "ct";
  60 + test_light.getState()["state"]["on"] = true;
  61 + test_light.getState()["state"]["ct"] = 200;
  62 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(200, 4, test_light));
  63 +
  64 + test_light.getState()["state"]["on"] = false;
  65 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(155, 6, test_light));
  66 +
  67 + prep_ret[2]["success"]["/lights/1/state/ct"] = 153;
  68 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  69 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(0, 6, test_light));
  70 +
  71 + prep_ret[2]["success"]["/lights/1/state/ct"] = 500;
  72 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  73 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().setColorTemperature(600, 6, test_light));
  74 +}
  75 +
  76 +TEST(ExtendedColorTemperatureStrategy, alertTemperature)
  77 +{
  78 + using namespace ::testing;
  79 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  80 + EXPECT_CALL(
  81 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  82 + .Times(AtLeast(1))
  83 + .WillRepeatedly(Return(nlohmann::json::object()));
  84 + MockHueLight test_light(handler);
  85 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  86 +
  87 + test_light.getState()["state"]["colormode"] = "invalid";
  88 + test_light.getState()["state"]["on"] = false;
  89 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  90 +
  91 + EXPECT_CALL(test_light, setColorTemperature(_, _))
  92 + .Times(AtLeast(2))
  93 + .WillOnce(Return(false))
  94 + .WillRepeatedly(Return(true));
  95 + test_light.getState()["state"]["colormode"] = "hs";
  96 + test_light.getState()["state"]["on"] = true;
  97 + test_light.getState()["state"]["ct"] = 200;
  98 + test_light.getState()["state"]["sat"] = 100;
  99 + test_light.getState()["state"]["hue"] = 200;
  100 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  101 +
  102 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  103 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  104 +
  105 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  106 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  107 +
  108 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  109 + test_light.getState()["state"]["on"] = false;
  110 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  111 +
  112 + EXPECT_CALL(test_light, setColorTemperature(_, _))
  113 + .Times(AtLeast(2))
  114 + .WillOnce(Return(false))
  115 + .WillRepeatedly(Return(true));
  116 + test_light.getState()["state"]["colormode"] = "xy";
  117 + test_light.getState()["state"]["on"] = true;
  118 + test_light.getState()["state"]["xy"][0] = 0.1;
  119 + test_light.getState()["state"]["xy"][1] = 0.1;
  120 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  121 +
  122 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  123 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  124 +
  125 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  126 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  127 +
  128 + test_light.getState()["state"]["on"] = false;
  129 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  130 +
  131 + EXPECT_CALL(test_light, setColorTemperature(_, _))
  132 + .Times(AtLeast(2))
  133 + .WillOnce(Return(false))
  134 + .WillRepeatedly(Return(true));
  135 + test_light.getState()["state"]["colormode"] = "ct";
  136 + test_light.getState()["state"]["on"] = true;
  137 + test_light.getState()["state"]["on"] = true;
  138 + test_light.getState()["state"]["ct"] = 200;
  139 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  140 +
  141 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  142 + EXPECT_EQ(false, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  143 +
  144 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  145 +
  146 + test_light.getState()["state"]["on"] = false;
  147 + EXPECT_EQ(true, ExtendedColorTemperatureStrategy().alertTemperature(400, test_light));
  148 +}
... ...
hueplusplus/test/test_Hue.cpp renamed to src/test/test_Hue.cpp
1   -/**
2   - \file test_Hue.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <atomic>
24   -#include <iostream>
25   -#include <memory>
26   -#include <string>
27   -
28   -#include <gmock/gmock.h>
29   -#include <gtest/gtest.h>
30   -
31   -#include "testhelper.h"
32   -
33   -#include "../include/Hue.h"
34   -#include "../include/json/json.hpp"
35   -#include "mocks/mock_HttpHandler.h"
36   -
37   -class HueFinderTest : public ::testing::Test
38   -{
39   -protected:
40   - std::shared_ptr<MockHttpHandler> handler;
41   -
42   -protected:
43   - HueFinderTest() : handler(std::make_shared<MockHttpHandler>())
44   - {
45   - using namespace ::testing;
46   -
47   - EXPECT_CALL(*handler,
48   - sendMulticast("M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: "
49   - "\"ssdp:discover\"\r\nMX: 5\r\nST: ssdp:all\r\n\r\n",
50   - "239.255.255.250", 1900, 5))
51   - .Times(AtLeast(1))
52   - .WillRepeatedly(Return(getMulticastReply()));
53   -
54   - EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", "192.168.2.1", getBridgePort()))
55   - .Times(0);
56   -
57   - EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", getBridgeIp(), getBridgePort()))
58   - .Times(AtLeast(1))
59   - .WillRepeatedly(Return(getBridgeXml()));
60   - }
61   - ~HueFinderTest(){};
62   -};
63   -
64   -TEST_F(HueFinderTest, FindBridges)
65   -{
66   - HueFinder finder(handler);
67   - std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
68   -
69   - HueFinder::HueIdentification bridge_to_comp;
70   - bridge_to_comp.ip = getBridgeIp();
71   - bridge_to_comp.port = getBridgePort();
72   - bridge_to_comp.mac = getBridgeMac();
73   -
74   - EXPECT_EQ(bridges.size(), 1) << "HueFinder found more than one Bridge";
75   - EXPECT_EQ(bridges[0].ip, bridge_to_comp.ip) << "HueIdentification ip does not match";
76   - EXPECT_EQ(bridges[0].port, bridge_to_comp.port) << "HueIdentification port does not match";
77   - EXPECT_EQ(bridges[0].mac, bridge_to_comp.mac) << "HueIdentification mac does not match";
78   -
79   - // Test invalid description
80   - EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", getBridgeIp(), getBridgePort()))
81   - .Times(1)
82   - .WillOnce(::testing::Return("invalid stuff"));
83   - bridges = finder.FindBridges();
84   - EXPECT_TRUE(bridges.empty());
85   -}
86   -
87   -TEST_F(HueFinderTest, GetBridge)
88   -{
89   - using namespace ::testing;
90   - nlohmann::json request{{"devicetype", "HuePlusPlus#User"}};
91   -
92   - nlohmann::json errorResponse
93   - = {{{"error", {{"type", 101}, {"address", ""}, {"description", "link button not pressed"}}}}};
94   -
95   - EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
96   - .Times(AtLeast(1))
97   - .WillRepeatedly(Return(errorResponse));
98   -
99   - HueFinder finder(handler);
100   - std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
101   -
102   - ASSERT_THROW(finder.GetBridge(bridges[0]), HueException);
103   -
104   - nlohmann::json successResponse = {{{"success", {{"username", getBridgeUsername()}}}}};
105   -
106   - EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
107   - .Times(1)
108   - .WillOnce(Return(successResponse));
109   -
110   - finder = HueFinder(handler);
111   - bridges = finder.FindBridges();
112   -
113   - Hue test_bridge = finder.GetBridge(bridges[0]);
114   -
115   - EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
116   - EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
117   - EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
118   -
119   - // Verify that username is correctly set in api requests
120   - nlohmann::json hue_bridge_state{{"lights", {}}};
121   - EXPECT_CALL(
122   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
123   - .Times(1)
124   - .WillOnce(Return(hue_bridge_state));
125   -
126   - test_bridge.getAllLights();
127   -
128   - Mock::VerifyAndClearExpectations(handler.get());
129   -}
130   -
131   -TEST_F(HueFinderTest, AddUsername)
132   -{
133   - HueFinder finder(handler);
134   - std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
135   -
136   - finder.AddUsername(bridges[0].mac, getBridgeUsername());
137   - Hue test_bridge = finder.GetBridge(bridges[0]);
138   -
139   - EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
140   - EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
141   - EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
142   -}
143   -
144   -TEST_F(HueFinderTest, GetAllUsernames)
145   -{
146   - HueFinder finder(handler);
147   - std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
148   -
149   - finder.AddUsername(bridges[0].mac, getBridgeUsername());
150   -
151   - std::map<std::string, std::string> users = finder.GetAllUsernames();
152   - EXPECT_EQ(users[getBridgeMac()], getBridgeUsername()) << "Username of MAC:" << getBridgeMac() << "not matching";
153   -}
154   -
155   -TEST(Hue, Constructor)
156   -{
157   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
158   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
159   -
160   - EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
161   - EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
162   - EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
163   -}
164   -
165   -TEST(Hue, requestUsername)
166   -{
167   - using namespace ::testing;
168   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
169   - nlohmann::json request{{"devicetype", "HuePlusPlus#User"}};
170   -
171   - {
172   - nlohmann::json errorResponse
173   - = {{{"error", {{"type", 101}, {"address", ""}, {"description", "link button not pressed"}}}}};
174   -
175   - EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
176   - .Times(AtLeast(1))
177   - .WillRepeatedly(Return(errorResponse));
178   -
179   - Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
180   -
181   - std::string username = test_bridge.requestUsername();
182   - EXPECT_EQ(username, "") << "Returned username not matching";
183   - EXPECT_EQ(test_bridge.getUsername(), "") << "Bridge username not matching";
184   - }
185   -
186   - {
187   - // Other error code causes exception
188   - int otherError = 1;
189   - nlohmann::json exceptionResponse
190   - = {{{"error", {{"type", otherError}, {"address", ""}, {"description", "some error"}}}}};
191   - Hue testBridge(getBridgeIp(), getBridgePort(), "", handler);
192   -
193   - EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
194   - .WillOnce(Return(exceptionResponse));
195   -
196   - try
197   - {
198   - testBridge.requestUsername();
199   - FAIL() << "requestUsername did not throw";
200   - }
201   - catch (const HueAPIResponseException& e)
202   - {
203   - EXPECT_EQ(e.GetErrorNumber(), otherError);
204   - }
205   - catch (const std::exception& e)
206   - {
207   - FAIL() << "wrong exception: " << e.what();
208   - }
209   - }
210   -
211   - {
212   - nlohmann::json successResponse = {{{"success", {{"username", getBridgeUsername()}}}}};
213   - EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
214   - .Times(1)
215   - .WillRepeatedly(Return(successResponse));
216   -
217   - Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
218   -
219   - std::string username = test_bridge.requestUsername();
220   -
221   - EXPECT_EQ(username, test_bridge.getUsername()) << "Returned username not matching";
222   - EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
223   - EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
224   -
225   - // Verify that username is correctly set in api requests
226   - nlohmann::json hue_bridge_state{{"lights", {}}};
227   - EXPECT_CALL(
228   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
229   - .Times(1)
230   - .WillOnce(Return(hue_bridge_state));
231   -
232   - test_bridge.getAllLights();
233   - }
234   -}
235   -
236   -TEST(Hue, setIP)
237   -{
238   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
239   - Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
240   - EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching after initialization";
241   - test_bridge.setIP("192.168.2.112");
242   - EXPECT_EQ(test_bridge.getBridgeIP(), "192.168.2.112") << "Bridge IP not matching after setting it";
243   -}
244   -
245   -TEST(Hue, setPort)
246   -{
247   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
248   - Hue test_bridge = Hue(getBridgeIp(), getBridgePort(), "", handler);
249   - EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching after initialization";
250   - test_bridge.setPort(81);
251   - EXPECT_EQ(test_bridge.getBridgePort(), 81) << "Bridge Port not matching after setting it";
252   -}
253   -
254   -TEST(Hue, getLight)
255   -{
256   - using namespace ::testing;
257   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
258   - EXPECT_CALL(
259   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
260   - .Times(1);
261   -
262   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
263   -
264   - // Test exception
265   - ASSERT_THROW(test_bridge.getLight(1), HueException);
266   -
267   - nlohmann::json hue_bridge_state{{"lights",
268   - {{"1",
269   - {{"state",
270   - {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
271   - {"reachable", true}}},
272   - {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
273   - {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
274   - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}};
275   -
276   - EXPECT_CALL(
277   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
278   - .Times(1)
279   - .WillOnce(Return(hue_bridge_state));
280   -
281   - EXPECT_CALL(*handler,
282   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
283   - .Times(AtLeast(1))
284   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
285   -
286   - // Test when correct data is sent
287   - HueLight test_light_1 = test_bridge.getLight(1);
288   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
289   - EXPECT_EQ(test_light_1.getColorType(), ColorType::TEMPERATURE);
290   -
291   - // Test again to check whether light is returned directly -> interesting for
292   - // code coverage test
293   - test_light_1 = test_bridge.getLight(1);
294   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
295   - EXPECT_EQ(test_light_1.getColorType(), ColorType::TEMPERATURE);
296   -
297   - // more coverage stuff
298   - hue_bridge_state["lights"]["1"]["modelid"] = "LCT001";
299   - EXPECT_CALL(
300   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
301   - .Times(1)
302   - .WillOnce(Return(hue_bridge_state));
303   -
304   - EXPECT_CALL(*handler,
305   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
306   - .Times(AtLeast(1))
307   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
308   - test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
309   -
310   - // Test when correct data is sent
311   - test_light_1 = test_bridge.getLight(1);
312   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
313   - EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_B);
314   -
315   - hue_bridge_state["lights"]["1"]["modelid"] = "LCT010";
316   - EXPECT_CALL(
317   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
318   - .Times(1)
319   - .WillOnce(Return(hue_bridge_state));
320   -
321   - EXPECT_CALL(*handler,
322   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
323   - .Times(AtLeast(1))
324   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
325   - test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
326   -
327   - // Test when correct data is sent
328   - test_light_1 = test_bridge.getLight(1);
329   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
330   - EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_C);
331   -
332   - hue_bridge_state["lights"]["1"]["modelid"] = "LST001";
333   - EXPECT_CALL(
334   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
335   - .Times(1)
336   - .WillOnce(Return(hue_bridge_state));
337   -
338   - EXPECT_CALL(*handler,
339   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
340   - .Times(AtLeast(1))
341   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
342   - test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
343   -
344   - // Test when correct data is sent
345   - test_light_1 = test_bridge.getLight(1);
346   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
347   - EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_A);
348   -
349   - hue_bridge_state["lights"]["1"]["modelid"] = "LWB004";
350   - EXPECT_CALL(
351   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
352   - .Times(1)
353   - .WillOnce(Return(hue_bridge_state));
354   -
355   - EXPECT_CALL(*handler,
356   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
357   - .Times(AtLeast(1))
358   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
359   - test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
360   -
361   - // Test when correct data is sent
362   - test_light_1 = test_bridge.getLight(1);
363   - EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
364   - EXPECT_EQ(test_light_1.getColorType(), ColorType::NONE);
365   -
366   - hue_bridge_state["lights"]["1"]["modelid"] = "ABC000";
367   - EXPECT_CALL(
368   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
369   - .Times(1)
370   - .WillOnce(Return(hue_bridge_state));
371   - test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
372   - ASSERT_THROW(test_bridge.getLight(1), HueException);
373   -}
374   -
375   -TEST(Hue, removeLight)
376   -{
377   - using namespace ::testing;
378   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
379   - nlohmann::json hue_bridge_state{ {"lights",
380   - {{"1",
381   - {{"state",
382   - {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
383   - {"reachable", true}}},
384   - {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
385   - {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
386   - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
387   - EXPECT_CALL(
388   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
389   - .Times(1)
390   - .WillOnce(Return(hue_bridge_state));
391   -
392   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
393   -
394   - EXPECT_CALL(*handler,
395   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
396   - .Times(1)
397   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
398   -
399   - nlohmann::json return_answer;
400   - return_answer = nlohmann::json::array();
401   - return_answer[0] = nlohmann::json::object();
402   - return_answer[0]["success"] = "/lights/1 deleted";
403   - EXPECT_CALL(*handler,
404   - DELETEJson(
405   - "/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
406   - .Times(2)
407   - .WillOnce(Return(return_answer))
408   - .WillOnce(Return(nlohmann::json()));
409   -
410   - // Test when correct data is sent
411   - HueLight test_light_1 = test_bridge.getLight(1);
412   -
413   - EXPECT_EQ(test_bridge.removeLight(1), true);
414   -
415   - EXPECT_EQ(test_bridge.removeLight(1), false);
416   -}
417   -
418   -TEST(Hue, getAllLights)
419   -{
420   - using namespace ::testing;
421   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
422   - nlohmann::json hue_bridge_state{ {"lights",
423   - {{"1",
424   - {{"state",
425   - {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
426   - {"reachable", true}}},
427   - {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
428   - {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
429   - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
430   -
431   - EXPECT_CALL(
432   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
433   - .Times(2)
434   - .WillRepeatedly(Return(hue_bridge_state));
435   -
436   - EXPECT_CALL(*handler,
437   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
438   - .Times(2)
439   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
440   -
441   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
442   -
443   - std::vector<std::reference_wrapper<HueLight>> test_lights = test_bridge.getAllLights();
444   - ASSERT_EQ(1, test_lights.size());
445   - EXPECT_EQ(test_lights[0].get().getName(), "Hue ambiance lamp 1");
446   - EXPECT_EQ(test_lights[0].get().getColorType(), ColorType::TEMPERATURE);
447   -}
448   -
449   -TEST(Hue, lightExists)
450   -{
451   - using namespace ::testing;
452   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
453   - nlohmann::json hue_bridge_state{ {"lights",
454   - {{"1",
455   - {{"state",
456   - {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
457   - {"reachable", true}}},
458   - {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
459   - {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
460   - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
461   - EXPECT_CALL(
462   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
463   - .Times(AtLeast(2))
464   - .WillRepeatedly(Return(hue_bridge_state));
465   - EXPECT_CALL(*handler,
466   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
467   - .Times(AtLeast(1))
468   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
469   -
470   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
471   -
472   - EXPECT_EQ(true, test_bridge.lightExists(1));
473   - EXPECT_EQ(false, test_bridge.lightExists(2));
474   -
475   - const Hue const_test_bridge1 = test_bridge;
476   - EXPECT_EQ(true, const_test_bridge1.lightExists(1));
477   - EXPECT_EQ(false, const_test_bridge1.lightExists(2));
478   -
479   - test_bridge.getLight(1);
480   - const Hue const_test_bridge2 = test_bridge;
481   - EXPECT_EQ(true, test_bridge.lightExists(1));
482   - EXPECT_EQ(true, const_test_bridge2.lightExists(1));
483   -}
484   -
485   -TEST(Hue, getPictureOfLight)
486   -{
487   - using namespace ::testing;
488   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
489   - nlohmann::json hue_bridge_state{ {"lights",
490   - {{"1",
491   - {{"state",
492   - {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
493   - {"reachable", true}}},
494   - {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
495   - {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
496   - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
497   -
498   - EXPECT_CALL(
499   - *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
500   - .Times(AtLeast(1))
501   - .WillRepeatedly(Return(hue_bridge_state));
502   - EXPECT_CALL(*handler,
503   - GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
504   - .Times(AtLeast(1))
505   - .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
506   -
507   - Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
508   -
509   - test_bridge.getLight(1);
510   -
511   - EXPECT_EQ("", test_bridge.getPictureOfLight(2));
512   -
513   - EXPECT_EQ("e27_waca", test_bridge.getPictureOfLight(1));
514   -}
515   -
516   -TEST(Hue, refreshState)
517   -{
518   - std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
519   - Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler); // NULL as username leads to segfault
520   -
521   - std::vector<std::reference_wrapper<HueLight>> test_lights = test_bridge.getAllLights();
522   - EXPECT_EQ(test_lights.size(), 0);
523   -}
  1 +/**
  2 + \file test_Hue.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <atomic>
  24 +#include <iostream>
  25 +#include <memory>
  26 +#include <string>
  27 +
  28 +#include <gmock/gmock.h>
  29 +#include <gtest/gtest.h>
  30 +
  31 +#include "testhelper.h"
  32 +
  33 +#include "../include/Hue.h"
  34 +#include "../include/json/json.hpp"
  35 +#include "mocks/mock_HttpHandler.h"
  36 +
  37 +class HueFinderTest : public ::testing::Test
  38 +{
  39 +protected:
  40 + std::shared_ptr<MockHttpHandler> handler;
  41 +
  42 +protected:
  43 + HueFinderTest() : handler(std::make_shared<MockHttpHandler>())
  44 + {
  45 + using namespace ::testing;
  46 +
  47 + EXPECT_CALL(*handler,
  48 + sendMulticast("M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: "
  49 + "\"ssdp:discover\"\r\nMX: 5\r\nST: ssdp:all\r\n\r\n",
  50 + "239.255.255.250", 1900, 5))
  51 + .Times(AtLeast(1))
  52 + .WillRepeatedly(Return(getMulticastReply()));
  53 +
  54 + EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", "192.168.2.1", getBridgePort()))
  55 + .Times(0);
  56 +
  57 + EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", getBridgeIp(), getBridgePort()))
  58 + .Times(AtLeast(1))
  59 + .WillRepeatedly(Return(getBridgeXml()));
  60 + }
  61 + ~HueFinderTest(){};
  62 +};
  63 +
  64 +TEST_F(HueFinderTest, FindBridges)
  65 +{
  66 + HueFinder finder(handler);
  67 + std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
  68 +
  69 + HueFinder::HueIdentification bridge_to_comp;
  70 + bridge_to_comp.ip = getBridgeIp();
  71 + bridge_to_comp.port = getBridgePort();
  72 + bridge_to_comp.mac = getBridgeMac();
  73 +
  74 + EXPECT_EQ(bridges.size(), 1) << "HueFinder found more than one Bridge";
  75 + EXPECT_EQ(bridges[0].ip, bridge_to_comp.ip) << "HueIdentification ip does not match";
  76 + EXPECT_EQ(bridges[0].port, bridge_to_comp.port) << "HueIdentification port does not match";
  77 + EXPECT_EQ(bridges[0].mac, bridge_to_comp.mac) << "HueIdentification mac does not match";
  78 +
  79 + // Test invalid description
  80 + EXPECT_CALL(*handler, GETString("/description.xml", "application/xml", "", getBridgeIp(), getBridgePort()))
  81 + .Times(1)
  82 + .WillOnce(::testing::Return("invalid stuff"));
  83 + bridges = finder.FindBridges();
  84 + EXPECT_TRUE(bridges.empty());
  85 +}
  86 +
  87 +TEST_F(HueFinderTest, GetBridge)
  88 +{
  89 + using namespace ::testing;
  90 + nlohmann::json request{{"devicetype", "HuePlusPlus#User"}};
  91 +
  92 + nlohmann::json errorResponse
  93 + = {{{"error", {{"type", 101}, {"address", ""}, {"description", "link button not pressed"}}}}};
  94 +
  95 + EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
  96 + .Times(AtLeast(1))
  97 + .WillRepeatedly(Return(errorResponse));
  98 +
  99 + HueFinder finder(handler);
  100 + std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
  101 +
  102 + ASSERT_THROW(finder.GetBridge(bridges[0]), HueException);
  103 +
  104 + nlohmann::json successResponse = {{{"success", {{"username", getBridgeUsername()}}}}};
  105 +
  106 + EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
  107 + .Times(1)
  108 + .WillOnce(Return(successResponse));
  109 +
  110 + finder = HueFinder(handler);
  111 + bridges = finder.FindBridges();
  112 +
  113 + Hue test_bridge = finder.GetBridge(bridges[0]);
  114 +
  115 + EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
  116 + EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
  117 + EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
  118 +
  119 + // Verify that username is correctly set in api requests
  120 + nlohmann::json hue_bridge_state{{"lights", {}}};
  121 + EXPECT_CALL(
  122 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  123 + .Times(1)
  124 + .WillOnce(Return(hue_bridge_state));
  125 +
  126 + test_bridge.getAllLights();
  127 +
  128 + Mock::VerifyAndClearExpectations(handler.get());
  129 +}
  130 +
  131 +TEST_F(HueFinderTest, AddUsername)
  132 +{
  133 + HueFinder finder(handler);
  134 + std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
  135 +
  136 + finder.AddUsername(bridges[0].mac, getBridgeUsername());
  137 + Hue test_bridge = finder.GetBridge(bridges[0]);
  138 +
  139 + EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
  140 + EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
  141 + EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
  142 +}
  143 +
  144 +TEST_F(HueFinderTest, GetAllUsernames)
  145 +{
  146 + HueFinder finder(handler);
  147 + std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges();
  148 +
  149 + finder.AddUsername(bridges[0].mac, getBridgeUsername());
  150 +
  151 + std::map<std::string, std::string> users = finder.GetAllUsernames();
  152 + EXPECT_EQ(users[getBridgeMac()], getBridgeUsername()) << "Username of MAC:" << getBridgeMac() << "not matching";
  153 +}
  154 +
  155 +TEST(Hue, Constructor)
  156 +{
  157 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  158 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  159 +
  160 + EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
  161 + EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching";
  162 + EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
  163 +}
  164 +
  165 +TEST(Hue, requestUsername)
  166 +{
  167 + using namespace ::testing;
  168 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  169 + nlohmann::json request{{"devicetype", "HuePlusPlus#User"}};
  170 +
  171 + {
  172 + nlohmann::json errorResponse
  173 + = {{{"error", {{"type", 101}, {"address", ""}, {"description", "link button not pressed"}}}}};
  174 +
  175 + EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
  176 + .Times(AtLeast(1))
  177 + .WillRepeatedly(Return(errorResponse));
  178 +
  179 + Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
  180 +
  181 + std::string username = test_bridge.requestUsername();
  182 + EXPECT_EQ(username, "") << "Returned username not matching";
  183 + EXPECT_EQ(test_bridge.getUsername(), "") << "Bridge username not matching";
  184 + }
  185 +
  186 + {
  187 + // Other error code causes exception
  188 + int otherError = 1;
  189 + nlohmann::json exceptionResponse
  190 + = {{{"error", {{"type", otherError}, {"address", ""}, {"description", "some error"}}}}};
  191 + Hue testBridge(getBridgeIp(), getBridgePort(), "", handler);
  192 +
  193 + EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
  194 + .WillOnce(Return(exceptionResponse));
  195 +
  196 + try
  197 + {
  198 + testBridge.requestUsername();
  199 + FAIL() << "requestUsername did not throw";
  200 + }
  201 + catch (const HueAPIResponseException& e)
  202 + {
  203 + EXPECT_EQ(e.GetErrorNumber(), otherError);
  204 + }
  205 + catch (const std::exception& e)
  206 + {
  207 + FAIL() << "wrong exception: " << e.what();
  208 + }
  209 + }
  210 +
  211 + {
  212 + nlohmann::json successResponse = {{{"success", {{"username", getBridgeUsername()}}}}};
  213 + EXPECT_CALL(*handler, POSTJson("/api", request, getBridgeIp(), getBridgePort()))
  214 + .Times(1)
  215 + .WillRepeatedly(Return(successResponse));
  216 +
  217 + Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
  218 +
  219 + std::string username = test_bridge.requestUsername();
  220 +
  221 + EXPECT_EQ(username, test_bridge.getUsername()) << "Returned username not matching";
  222 + EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching";
  223 + EXPECT_EQ(test_bridge.getUsername(), getBridgeUsername()) << "Bridge username not matching";
  224 +
  225 + // Verify that username is correctly set in api requests
  226 + nlohmann::json hue_bridge_state{{"lights", {}}};
  227 + EXPECT_CALL(
  228 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  229 + .Times(1)
  230 + .WillOnce(Return(hue_bridge_state));
  231 +
  232 + test_bridge.getAllLights();
  233 + }
  234 +}
  235 +
  236 +TEST(Hue, setIP)
  237 +{
  238 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  239 + Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler);
  240 + EXPECT_EQ(test_bridge.getBridgeIP(), getBridgeIp()) << "Bridge IP not matching after initialization";
  241 + test_bridge.setIP("192.168.2.112");
  242 + EXPECT_EQ(test_bridge.getBridgeIP(), "192.168.2.112") << "Bridge IP not matching after setting it";
  243 +}
  244 +
  245 +TEST(Hue, setPort)
  246 +{
  247 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  248 + Hue test_bridge = Hue(getBridgeIp(), getBridgePort(), "", handler);
  249 + EXPECT_EQ(test_bridge.getBridgePort(), getBridgePort()) << "Bridge Port not matching after initialization";
  250 + test_bridge.setPort(81);
  251 + EXPECT_EQ(test_bridge.getBridgePort(), 81) << "Bridge Port not matching after setting it";
  252 +}
  253 +
  254 +TEST(Hue, getLight)
  255 +{
  256 + using namespace ::testing;
  257 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  258 + EXPECT_CALL(
  259 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  260 + .Times(1);
  261 +
  262 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  263 +
  264 + // Test exception
  265 + ASSERT_THROW(test_bridge.getLight(1), HueException);
  266 +
  267 + nlohmann::json hue_bridge_state{{"lights",
  268 + {{"1",
  269 + {{"state",
  270 + {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
  271 + {"reachable", true}}},
  272 + {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
  273 + {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
  274 + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}};
  275 +
  276 + EXPECT_CALL(
  277 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  278 + .Times(1)
  279 + .WillOnce(Return(hue_bridge_state));
  280 +
  281 + EXPECT_CALL(*handler,
  282 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  283 + .Times(AtLeast(1))
  284 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  285 +
  286 + // Test when correct data is sent
  287 + HueLight test_light_1 = test_bridge.getLight(1);
  288 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  289 + EXPECT_EQ(test_light_1.getColorType(), ColorType::TEMPERATURE);
  290 +
  291 + // Test again to check whether light is returned directly -> interesting for
  292 + // code coverage test
  293 + test_light_1 = test_bridge.getLight(1);
  294 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  295 + EXPECT_EQ(test_light_1.getColorType(), ColorType::TEMPERATURE);
  296 +
  297 + // more coverage stuff
  298 + hue_bridge_state["lights"]["1"]["modelid"] = "LCT001";
  299 + EXPECT_CALL(
  300 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  301 + .Times(1)
  302 + .WillOnce(Return(hue_bridge_state));
  303 +
  304 + EXPECT_CALL(*handler,
  305 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  306 + .Times(AtLeast(1))
  307 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  308 + test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  309 +
  310 + // Test when correct data is sent
  311 + test_light_1 = test_bridge.getLight(1);
  312 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  313 + EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_B);
  314 +
  315 + hue_bridge_state["lights"]["1"]["modelid"] = "LCT010";
  316 + EXPECT_CALL(
  317 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  318 + .Times(1)
  319 + .WillOnce(Return(hue_bridge_state));
  320 +
  321 + EXPECT_CALL(*handler,
  322 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  323 + .Times(AtLeast(1))
  324 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  325 + test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  326 +
  327 + // Test when correct data is sent
  328 + test_light_1 = test_bridge.getLight(1);
  329 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  330 + EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_C);
  331 +
  332 + hue_bridge_state["lights"]["1"]["modelid"] = "LST001";
  333 + EXPECT_CALL(
  334 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  335 + .Times(1)
  336 + .WillOnce(Return(hue_bridge_state));
  337 +
  338 + EXPECT_CALL(*handler,
  339 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  340 + .Times(AtLeast(1))
  341 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  342 + test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  343 +
  344 + // Test when correct data is sent
  345 + test_light_1 = test_bridge.getLight(1);
  346 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  347 + EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_A);
  348 +
  349 + hue_bridge_state["lights"]["1"]["modelid"] = "LWB004";
  350 + EXPECT_CALL(
  351 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  352 + .Times(1)
  353 + .WillOnce(Return(hue_bridge_state));
  354 +
  355 + EXPECT_CALL(*handler,
  356 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  357 + .Times(AtLeast(1))
  358 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  359 + test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  360 +
  361 + // Test when correct data is sent
  362 + test_light_1 = test_bridge.getLight(1);
  363 + EXPECT_EQ(test_light_1.getName(), "Hue ambiance lamp 1");
  364 + EXPECT_EQ(test_light_1.getColorType(), ColorType::NONE);
  365 +
  366 + hue_bridge_state["lights"]["1"]["modelid"] = "ABC000";
  367 + EXPECT_CALL(
  368 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  369 + .Times(1)
  370 + .WillOnce(Return(hue_bridge_state));
  371 + test_bridge = Hue(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  372 + ASSERT_THROW(test_bridge.getLight(1), HueException);
  373 +}
  374 +
  375 +TEST(Hue, removeLight)
  376 +{
  377 + using namespace ::testing;
  378 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  379 + nlohmann::json hue_bridge_state{ {"lights",
  380 + {{"1",
  381 + {{"state",
  382 + {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
  383 + {"reachable", true}}},
  384 + {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
  385 + {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
  386 + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
  387 + EXPECT_CALL(
  388 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  389 + .Times(1)
  390 + .WillOnce(Return(hue_bridge_state));
  391 +
  392 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  393 +
  394 + EXPECT_CALL(*handler,
  395 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  396 + .Times(1)
  397 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  398 +
  399 + nlohmann::json return_answer;
  400 + return_answer = nlohmann::json::array();
  401 + return_answer[0] = nlohmann::json::object();
  402 + return_answer[0]["success"] = "/lights/1 deleted";
  403 + EXPECT_CALL(*handler,
  404 + DELETEJson(
  405 + "/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  406 + .Times(2)
  407 + .WillOnce(Return(return_answer))
  408 + .WillOnce(Return(nlohmann::json()));
  409 +
  410 + // Test when correct data is sent
  411 + HueLight test_light_1 = test_bridge.getLight(1);
  412 +
  413 + EXPECT_EQ(test_bridge.removeLight(1), true);
  414 +
  415 + EXPECT_EQ(test_bridge.removeLight(1), false);
  416 +}
  417 +
  418 +TEST(Hue, getAllLights)
  419 +{
  420 + using namespace ::testing;
  421 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  422 + nlohmann::json hue_bridge_state{ {"lights",
  423 + {{"1",
  424 + {{"state",
  425 + {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
  426 + {"reachable", true}}},
  427 + {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
  428 + {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
  429 + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
  430 +
  431 + EXPECT_CALL(
  432 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  433 + .Times(2)
  434 + .WillRepeatedly(Return(hue_bridge_state));
  435 +
  436 + EXPECT_CALL(*handler,
  437 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  438 + .Times(2)
  439 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  440 +
  441 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  442 +
  443 + std::vector<std::reference_wrapper<HueLight>> test_lights = test_bridge.getAllLights();
  444 + ASSERT_EQ(1, test_lights.size());
  445 + EXPECT_EQ(test_lights[0].get().getName(), "Hue ambiance lamp 1");
  446 + EXPECT_EQ(test_lights[0].get().getColorType(), ColorType::TEMPERATURE);
  447 +}
  448 +
  449 +TEST(Hue, lightExists)
  450 +{
  451 + using namespace ::testing;
  452 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  453 + nlohmann::json hue_bridge_state{ {"lights",
  454 + {{"1",
  455 + {{"state",
  456 + {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
  457 + {"reachable", true}}},
  458 + {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
  459 + {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
  460 + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
  461 + EXPECT_CALL(
  462 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  463 + .Times(AtLeast(2))
  464 + .WillRepeatedly(Return(hue_bridge_state));
  465 + EXPECT_CALL(*handler,
  466 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  467 + .Times(AtLeast(1))
  468 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  469 +
  470 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  471 +
  472 + EXPECT_EQ(true, test_bridge.lightExists(1));
  473 + EXPECT_EQ(false, test_bridge.lightExists(2));
  474 +
  475 + const Hue const_test_bridge1 = test_bridge;
  476 + EXPECT_EQ(true, const_test_bridge1.lightExists(1));
  477 + EXPECT_EQ(false, const_test_bridge1.lightExists(2));
  478 +
  479 + test_bridge.getLight(1);
  480 + const Hue const_test_bridge2 = test_bridge;
  481 + EXPECT_EQ(true, test_bridge.lightExists(1));
  482 + EXPECT_EQ(true, const_test_bridge2.lightExists(1));
  483 +}
  484 +
  485 +TEST(Hue, getPictureOfLight)
  486 +{
  487 + using namespace ::testing;
  488 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  489 + nlohmann::json hue_bridge_state{ {"lights",
  490 + {{"1",
  491 + {{"state",
  492 + {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"},
  493 + {"reachable", true}}},
  494 + {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"},
  495 + {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"},
  496 + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} };
  497 +
  498 + EXPECT_CALL(
  499 + *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  500 + .Times(AtLeast(1))
  501 + .WillRepeatedly(Return(hue_bridge_state));
  502 + EXPECT_CALL(*handler,
  503 + GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), getBridgePort()))
  504 + .Times(AtLeast(1))
  505 + .WillRepeatedly(Return(hue_bridge_state["lights"]["1"]));
  506 +
  507 + Hue test_bridge(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler);
  508 +
  509 + test_bridge.getLight(1);
  510 +
  511 + EXPECT_EQ("", test_bridge.getPictureOfLight(2));
  512 +
  513 + EXPECT_EQ("e27_waca", test_bridge.getPictureOfLight(1));
  514 +}
  515 +
  516 +TEST(Hue, refreshState)
  517 +{
  518 + std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>();
  519 + Hue test_bridge(getBridgeIp(), getBridgePort(), "", handler); // NULL as username leads to segfault
  520 +
  521 + std::vector<std::reference_wrapper<HueLight>> test_lights = test_bridge.getAllLights();
  522 + EXPECT_EQ(test_lights.size(), 0);
  523 +}
... ...
hueplusplus/test/test_HueCommandAPI.cpp renamed to src/test/test_HueCommandAPI.cpp
hueplusplus/test/test_HueLight.cpp renamed to src/test/test_HueLight.cpp
hueplusplus/test/test_Main.cpp renamed to src/test/test_Main.cpp 100755 → 100644
1   -/**
2   - \file test_Main.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <gtest/gtest.h>
24   -
25   -int main(int argc, char** argv)
26   -{
27   - ::testing::InitGoogleTest(&argc, argv);
28   - return RUN_ALL_TESTS();
29   -}
  1 +/**
  2 + \file test_Main.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <gtest/gtest.h>
  24 +
  25 +int main(int argc, char** argv)
  26 +{
  27 + ::testing::InitGoogleTest(&argc, argv);
  28 + return RUN_ALL_TESTS();
  29 +}
... ...
hueplusplus/test/test_SimpleBrightnessStrategy.cpp renamed to src/test/test_SimpleBrightnessStrategy.cpp 100755 → 100644
1   -/**
2   - \file test_SimpleBrightnessStrategy.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <iostream>
24   -#include <memory>
25   -#include <string>
26   -
27   -#include <gmock/gmock.h>
28   -#include <gtest/gtest.h>
29   -
30   -#include "testhelper.h"
31   -
32   -#include "../include/SimpleBrightnessStrategy.h"
33   -#include "../include/json/json.hpp"
34   -#include "mocks/mock_HttpHandler.h"
35   -#include "mocks/mock_HueLight.h"
36   -
37   -TEST(SimpleBrightnessStrategy, setBrightness)
38   -{
39   - using namespace ::testing;
40   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
41   - EXPECT_CALL(
42   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
43   - .Times(AtLeast(1))
44   - .WillRepeatedly(Return(nlohmann::json::object()));
45   - MockHueLight test_light(handler);
46   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
47   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
48   - nlohmann::json prep_ret;
49   - prep_ret = nlohmann::json::array();
50   - prep_ret[0] = nlohmann::json::object();
51   - prep_ret[0]["success"] = nlohmann::json::object();
52   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
53   - prep_ret[1] = nlohmann::json::object();
54   - prep_ret[1]["success"] = nlohmann::json::object();
55   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
56   - prep_ret[2] = nlohmann::json::object();
57   - prep_ret[2]["success"] = nlohmann::json::object();
58   - prep_ret[2]["success"]["/lights/1/state/bri"] = 50;
59   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
60   -
61   - test_light.getState()["state"]["on"] = true;
62   - EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(0, 4, test_light));
63   - test_light.getState()["state"]["on"] = false;
64   - EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(0, 4, test_light));
65   -
66   - test_light.getState()["state"]["bri"] = 0;
67   - EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(50, 6, test_light));
68   - test_light.getState()["state"]["on"] = true;
69   - test_light.getState()["state"]["bri"] = 50;
70   - EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(50, 6, test_light));
71   -
72   - prep_ret[2]["success"]["/lights/1/state/bri"] = 254;
73   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
74   - test_light.getState()["state"]["on"] = false;
75   - EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(255, 6, test_light));
76   -}
77   -
78   -TEST(SimpleBrightnessStrategy, getBrightness)
79   -{
80   - using namespace ::testing;
81   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
82   - EXPECT_CALL(
83   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
84   - .Times(AtLeast(1))
85   - .WillRepeatedly(Return(nlohmann::json::object()));
86   - MockHueLight test_light(handler);
87   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
88   -
89   - test_light.getState()["state"]["bri"] = 200;
90   - EXPECT_EQ(200, SimpleBrightnessStrategy().getBrightness(test_light));
91   - test_light.getState()["state"]["bri"] = 0;
92   - EXPECT_EQ(0, SimpleBrightnessStrategy().getBrightness(static_cast<const HueLight>(test_light)));
93   -}
  1 +/**
  2 + \file test_SimpleBrightnessStrategy.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <iostream>
  24 +#include <memory>
  25 +#include <string>
  26 +
  27 +#include <gmock/gmock.h>
  28 +#include <gtest/gtest.h>
  29 +
  30 +#include "testhelper.h"
  31 +
  32 +#include "../include/SimpleBrightnessStrategy.h"
  33 +#include "../include/json/json.hpp"
  34 +#include "mocks/mock_HttpHandler.h"
  35 +#include "mocks/mock_HueLight.h"
  36 +
  37 +TEST(SimpleBrightnessStrategy, setBrightness)
  38 +{
  39 + using namespace ::testing;
  40 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  41 + EXPECT_CALL(
  42 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  43 + .Times(AtLeast(1))
  44 + .WillRepeatedly(Return(nlohmann::json::object()));
  45 + MockHueLight test_light(handler);
  46 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  47 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  48 + nlohmann::json prep_ret;
  49 + prep_ret = nlohmann::json::array();
  50 + prep_ret[0] = nlohmann::json::object();
  51 + prep_ret[0]["success"] = nlohmann::json::object();
  52 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  53 + prep_ret[1] = nlohmann::json::object();
  54 + prep_ret[1]["success"] = nlohmann::json::object();
  55 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  56 + prep_ret[2] = nlohmann::json::object();
  57 + prep_ret[2]["success"] = nlohmann::json::object();
  58 + prep_ret[2]["success"]["/lights/1/state/bri"] = 50;
  59 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  60 +
  61 + test_light.getState()["state"]["on"] = true;
  62 + EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(0, 4, test_light));
  63 + test_light.getState()["state"]["on"] = false;
  64 + EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(0, 4, test_light));
  65 +
  66 + test_light.getState()["state"]["bri"] = 0;
  67 + EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(50, 6, test_light));
  68 + test_light.getState()["state"]["on"] = true;
  69 + test_light.getState()["state"]["bri"] = 50;
  70 + EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(50, 6, test_light));
  71 +
  72 + prep_ret[2]["success"]["/lights/1/state/bri"] = 254;
  73 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  74 + test_light.getState()["state"]["on"] = false;
  75 + EXPECT_EQ(true, SimpleBrightnessStrategy().setBrightness(255, 6, test_light));
  76 +}
  77 +
  78 +TEST(SimpleBrightnessStrategy, getBrightness)
  79 +{
  80 + using namespace ::testing;
  81 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  82 + EXPECT_CALL(
  83 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  84 + .Times(AtLeast(1))
  85 + .WillRepeatedly(Return(nlohmann::json::object()));
  86 + MockHueLight test_light(handler);
  87 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  88 +
  89 + test_light.getState()["state"]["bri"] = 200;
  90 + EXPECT_EQ(200, SimpleBrightnessStrategy().getBrightness(test_light));
  91 + test_light.getState()["state"]["bri"] = 0;
  92 + EXPECT_EQ(0, SimpleBrightnessStrategy().getBrightness(static_cast<const HueLight>(test_light)));
  93 +}
... ...
hueplusplus/test/test_SimpleColorHueStrategy.cpp renamed to src/test/test_SimpleColorHueStrategy.cpp 100755 → 100644
1   -/**
2   - \file test_SimpleColorHuewStrategy.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <memory>
24   -#include <string>
25   -
26   -#include <gmock/gmock.h>
27   -#include <gtest/gtest.h>
28   -
29   -#include "testhelper.h"
30   -
31   -#include "../include/SimpleColorHueStrategy.h"
32   -#include "../include/json/json.hpp"
33   -#include "mocks/mock_HttpHandler.h"
34   -#include "mocks/mock_HueLight.h"
35   -
36   -TEST(SimpleColorHueStrategy, setColorHue)
37   -{
38   - using namespace ::testing;
39   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
40   - EXPECT_CALL(
41   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
42   - .Times(AtLeast(1))
43   - .WillRepeatedly(Return(nlohmann::json::object()));
44   - MockHueLight test_light(handler);
45   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
46   - nlohmann::json prep_ret;
47   - prep_ret = nlohmann::json::array();
48   - prep_ret[0] = nlohmann::json::object();
49   - prep_ret[0]["success"] = nlohmann::json::object();
50   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
51   - prep_ret[1] = nlohmann::json::object();
52   - prep_ret[1]["success"] = nlohmann::json::object();
53   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
54   - prep_ret[2] = nlohmann::json::object();
55   - prep_ret[2]["success"] = nlohmann::json::object();
56   - prep_ret[2]["success"]["/lights/1/state/hue"] = 30500;
57   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
58   -
59   - test_light.getState()["state"]["on"] = true;
60   - test_light.getState()["state"]["hue"] = 200;
61   - test_light.getState()["state"]["colormode"] = "hs";
62   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorHue(200, 4, test_light));
63   -
64   - test_light.getState()["state"]["on"] = false;
65   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorHue(30500, 6, test_light));
66   -}
67   -
68   -TEST(SimpleColorHueStrategy, setColorSaturation)
69   -{
70   - using namespace ::testing;
71   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
72   - EXPECT_CALL(
73   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
74   - .Times(AtLeast(1))
75   - .WillRepeatedly(Return(nlohmann::json::object()));
76   - MockHueLight test_light(handler);
77   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
78   - nlohmann::json prep_ret;
79   - prep_ret = nlohmann::json::array();
80   - prep_ret[0] = nlohmann::json::object();
81   - prep_ret[0]["success"] = nlohmann::json::object();
82   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
83   - prep_ret[1] = nlohmann::json::object();
84   - prep_ret[1]["success"] = nlohmann::json::object();
85   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
86   - prep_ret[2] = nlohmann::json::object();
87   - prep_ret[2]["success"] = nlohmann::json::object();
88   - prep_ret[2]["success"]["/lights/1/state/sat"] = 254;
89   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
90   -
91   - test_light.getState()["state"]["on"] = true;
92   - test_light.getState()["state"]["sat"] = 100;
93   - test_light.getState()["state"]["colormode"] = "hs";
94   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorSaturation(100, 4, test_light));
95   -
96   - test_light.getState()["state"]["on"] = false;
97   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorSaturation(255, 6, test_light));
98   -}
99   -
100   -TEST(SimpleColorHueStrategy, setColorHueSaturation)
101   -{
102   - using namespace ::testing;
103   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
104   - EXPECT_CALL(
105   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
106   - .Times(AtLeast(1))
107   - .WillRepeatedly(Return(nlohmann::json::object()));
108   - MockHueLight test_light(handler);
109   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
110   - nlohmann::json prep_ret;
111   - prep_ret = nlohmann::json::array();
112   - prep_ret[0] = nlohmann::json::object();
113   - prep_ret[0]["success"] = nlohmann::json::object();
114   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
115   - prep_ret[1] = nlohmann::json::object();
116   - prep_ret[1]["success"] = nlohmann::json::object();
117   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
118   - prep_ret[2] = nlohmann::json::object();
119   - prep_ret[2]["success"] = nlohmann::json::object();
120   - prep_ret[2]["success"]["/lights/1/state/hue"] = 30500;
121   - prep_ret[3] = nlohmann::json::object();
122   - prep_ret[3]["success"] = nlohmann::json::object();
123   - prep_ret[3]["success"]["/lights/1/state/sat"] = 254;
124   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
125   -
126   - test_light.getState()["state"]["on"] = true;
127   - test_light.getState()["state"]["sat"] = 100;
128   - test_light.getState()["state"]["hue"] = 200;
129   - test_light.getState()["state"]["colormode"] = "hs";
130   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorHueSaturation(200, 100, 4, test_light));
131   -
132   - test_light.getState()["state"]["on"] = false;
133   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorHueSaturation(30500, 255, 6, test_light));
134   -}
135   -
136   -TEST(SimpleColorHueStrategy, setColorXY)
137   -{
138   - using namespace ::testing;
139   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
140   - EXPECT_CALL(
141   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
142   - .Times(AtLeast(1))
143   - .WillRepeatedly(Return(nlohmann::json::object()));
144   - MockHueLight test_light(handler);
145   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
146   - nlohmann::json prep_ret;
147   - prep_ret = nlohmann::json::array();
148   - prep_ret[0] = nlohmann::json::object();
149   - prep_ret[0]["success"] = nlohmann::json::object();
150   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
151   - prep_ret[1] = nlohmann::json::object();
152   - prep_ret[1]["success"] = nlohmann::json::object();
153   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
154   - prep_ret[2] = nlohmann::json::object();
155   - prep_ret[2]["success"] = nlohmann::json::object();
156   - prep_ret[2]["success"]["/lights/1/state/xy"][0] = 0.2355;
157   - prep_ret[2]["success"]["/lights/1/state/xy"][1] = 0.1234;
158   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
159   -
160   - test_light.getState()["state"]["on"] = true;
161   - test_light.getState()["state"]["xy"][0] = 0.1f;
162   - test_light.getState()["state"]["xy"][1] = 0.1f;
163   - test_light.getState()["state"]["colormode"] = "xy";
164   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorXY(0.1f, 0.1f, 4, test_light));
165   -
166   - test_light.getState()["state"]["on"] = false;
167   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorXY(0.2355f, 0.1234f, 6, test_light));
168   -}
169   -
170   -TEST(SimpleColorHueStrategy, setColorRGB)
171   -{
172   - using namespace ::testing;
173   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
174   - EXPECT_CALL(
175   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
176   - .Times(AtLeast(1))
177   - .WillRepeatedly(Return(nlohmann::json::object()));
178   - MockHueLight test_light(handler);
179   - EXPECT_CALL(test_light, setColorXY(_, _, 4)).Times(2).WillRepeatedly(Return(true));
180   -
181   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(128, 128, 128, 4, test_light));
182   -
183   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(255, 255, 255, 4, test_light));
184   -
185   - EXPECT_CALL(test_light, OffNoRefresh(4)).Times(1).WillOnce(Return(true));
186   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(0, 0, 0, 4, test_light));
187   -}
188   -
189   -TEST(SimpleColorHueStrategy, setColorLoop)
190   -{
191   - using namespace ::testing;
192   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
193   - EXPECT_CALL(
194   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
195   - .Times(AtLeast(1))
196   - .WillRepeatedly(Return(nlohmann::json::object()));
197   - MockHueLight test_light(handler);
198   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
199   - nlohmann::json prep_ret;
200   - prep_ret = nlohmann::json::array();
201   - prep_ret[0] = nlohmann::json::object();
202   - prep_ret[0]["success"] = nlohmann::json::object();
203   - prep_ret[0]["success"]["/lights/1/state/on"] = true;
204   - prep_ret[1] = nlohmann::json::object();
205   - prep_ret[1]["success"] = nlohmann::json::object();
206   - prep_ret[1]["success"]["/lights/1/state/effect"] = "colorloop";
207   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
208   -
209   - test_light.getState()["state"]["on"] = true;
210   - test_light.getState()["state"]["effect"] = "colorloop";
211   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorLoop(true, test_light));
212   -
213   - test_light.getState()["state"]["on"] = false;
214   - test_light.getState()["state"]["effect"] = "none";
215   - EXPECT_EQ(true, SimpleColorHueStrategy().setColorLoop(true, test_light));
216   -}
217   -
218   -TEST(SimpleColorHueStrategy, alertHueSaturation)
219   -{
220   - using namespace ::testing;
221   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
222   - EXPECT_CALL(
223   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
224   - .Times(AtLeast(1))
225   - .WillRepeatedly(Return(nlohmann::json::object()));
226   - MockHueLight test_light(handler);
227   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
228   -
229   - test_light.getState()["state"]["colormode"] = "invalid";
230   - test_light.getState()["state"]["on"] = false;
231   - EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(30000, 128, test_light));
232   -
233   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
234   - .Times(AtLeast(2))
235   - .WillOnce(Return(false))
236   - .WillRepeatedly(Return(true));
237   - test_light.getState()["state"]["colormode"] = "hs";
238   - test_light.getState()["state"]["on"] = true;
239   - test_light.getState()["state"]["sat"] = 100;
240   - test_light.getState()["state"]["hue"] = 200;
241   - EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
242   -
243   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
244   - EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
245   -
246   - EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
247   -
248   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
249   - test_light.getState()["state"]["on"] = false;
250   - EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
251   -
252   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
253   - .Times(AtLeast(2))
254   - .WillOnce(Return(false))
255   - .WillRepeatedly(Return(true));
256   - test_light.getState()["state"]["colormode"] = "xy";
257   - test_light.getState()["state"]["on"] = true;
258   - test_light.getState()["state"]["xy"][0] = 0.1;
259   - test_light.getState()["state"]["xy"][1] = 0.1;
260   - EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
261   -
262   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
263   - EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
264   -
265   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
266   - EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
267   -
268   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
269   - test_light.getState()["state"]["on"] = false;
270   - EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
271   -}
272   -
273   -TEST(SimpleColorHueStrategy, alertXY)
274   -{
275   - using namespace ::testing;
276   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
277   - EXPECT_CALL(
278   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
279   - .Times(AtLeast(1))
280   - .WillRepeatedly(Return(nlohmann::json::object()));
281   - MockHueLight test_light(handler);
282   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
283   -
284   - test_light.getState()["state"]["colormode"] = "invalid";
285   - test_light.getState()["state"]["on"] = false;
286   - EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
287   -
288   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
289   - test_light.getState()["state"]["colormode"] = "hs";
290   - test_light.getState()["state"]["on"] = true;
291   - test_light.getState()["state"]["xy"][0] = 0.1;
292   - test_light.getState()["state"]["xy"][1] = 0.1;
293   - test_light.getState()["state"]["sat"] = 100;
294   - test_light.getState()["state"]["hue"] = 200;
295   - EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
296   -
297   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
298   - EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
299   -
300   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
301   - EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
302   -
303   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
304   - test_light.getState()["state"]["on"] = false;
305   - EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
306   -
307   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
308   - test_light.getState()["state"]["colormode"] = "xy";
309   - test_light.getState()["state"]["on"] = true;
310   - EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
311   -
312   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
313   - EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
314   -
315   - EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
316   -
317   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
318   - test_light.getState()["state"]["on"] = false;
319   - EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
320   -}
321   -
322   -TEST(SimpleColorHueStrategy, alertRGB)
323   -{
324   - using namespace ::testing;
325   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
326   - EXPECT_CALL(
327   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
328   - .Times(AtLeast(1))
329   - .WillRepeatedly(Return(nlohmann::json::object()));
330   - MockHueLight test_light(handler);
331   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
332   -
333   - test_light.getState()["state"]["colormode"] = "invalid";
334   - test_light.getState()["state"]["on"] = false;
335   - EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
336   -
337   - EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
338   - .Times(AtLeast(2))
339   - .WillOnce(Return(false))
340   - .WillRepeatedly(Return(true));
341   - test_light.getState()["state"]["colormode"] = "hs";
342   - test_light.getState()["state"]["on"] = true;
343   - test_light.getState()["state"]["sat"] = 100;
344   - test_light.getState()["state"]["hue"] = 200;
345   - EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
346   -
347   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
348   - EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
349   -
350   - EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
351   - EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
352   -
353   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
354   - test_light.getState()["state"]["on"] = false;
355   - EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
356   -
357   - EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
358   - .Times(AtLeast(2))
359   - .WillOnce(Return(false))
360   - .WillRepeatedly(Return(true));
361   - test_light.getState()["state"]["colormode"] = "xy";
362   - test_light.getState()["state"]["on"] = true;
363   - test_light.getState()["state"]["xy"][0] = 0.1;
364   - test_light.getState()["state"]["xy"][1] = 0.1;
365   - EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
366   -
367   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
368   - EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
369   -
370   - EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
371   - EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
372   -
373   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
374   - test_light.getState()["state"]["on"] = false;
375   - EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
376   -}
377   -
378   -TEST(SimpleColorHueStrategy, getColorHueSaturation)
379   -{
380   - using namespace ::testing;
381   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
382   - EXPECT_CALL(
383   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
384   - .Times(AtLeast(1))
385   - .WillRepeatedly(Return(nlohmann::json::object()));
386   - MockHueLight test_light(handler);
387   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
388   -
389   - test_light.getState()["state"]["hue"] = 5000;
390   - test_light.getState()["state"]["sat"] = 128;
391   - EXPECT_EQ(std::make_pair(static_cast<uint16_t>(5000), static_cast<uint8_t>(128)),
392   - SimpleColorHueStrategy().getColorHueSaturation(test_light));
393   - test_light.getState()["state"]["hue"] = 50000;
394   - test_light.getState()["state"]["sat"] = 158;
395   - EXPECT_EQ(std::make_pair(static_cast<uint16_t>(50000), static_cast<uint8_t>(158)),
396   - SimpleColorHueStrategy().getColorHueSaturation(static_cast<const HueLight>(test_light)));
397   -}
398   -
399   -TEST(SimpleColorHueStrategy, getColorXY)
400   -{
401   - using namespace ::testing;
402   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
403   - EXPECT_CALL(
404   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
405   - .Times(AtLeast(1))
406   - .WillRepeatedly(Return(nlohmann::json::object()));
407   - MockHueLight test_light(handler);
408   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
409   -
410   - test_light.getState()["state"]["xy"][0] = 0.1234;
411   - test_light.getState()["state"]["xy"][1] = 0.1234;
412   - EXPECT_EQ(std::make_pair(static_cast<float>(0.1234), static_cast<float>(0.1234)),
413   - SimpleColorHueStrategy().getColorXY(test_light));
414   - test_light.getState()["state"]["xy"][0] = 0.12;
415   - test_light.getState()["state"]["xy"][1] = 0.6458;
416   - EXPECT_EQ(std::make_pair(static_cast<float>(0.12), static_cast<float>(0.6458)),
417   - SimpleColorHueStrategy().getColorXY(static_cast<const HueLight>(test_light)));
418   -}
  1 +/**
  2 + \file test_SimpleColorHuewStrategy.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <memory>
  24 +#include <string>
  25 +
  26 +#include <gmock/gmock.h>
  27 +#include <gtest/gtest.h>
  28 +
  29 +#include "testhelper.h"
  30 +
  31 +#include "../include/SimpleColorHueStrategy.h"
  32 +#include "../include/json/json.hpp"
  33 +#include "mocks/mock_HttpHandler.h"
  34 +#include "mocks/mock_HueLight.h"
  35 +
  36 +TEST(SimpleColorHueStrategy, setColorHue)
  37 +{
  38 + using namespace ::testing;
  39 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  40 + EXPECT_CALL(
  41 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  42 + .Times(AtLeast(1))
  43 + .WillRepeatedly(Return(nlohmann::json::object()));
  44 + MockHueLight test_light(handler);
  45 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  46 + nlohmann::json prep_ret;
  47 + prep_ret = nlohmann::json::array();
  48 + prep_ret[0] = nlohmann::json::object();
  49 + prep_ret[0]["success"] = nlohmann::json::object();
  50 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  51 + prep_ret[1] = nlohmann::json::object();
  52 + prep_ret[1]["success"] = nlohmann::json::object();
  53 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  54 + prep_ret[2] = nlohmann::json::object();
  55 + prep_ret[2]["success"] = nlohmann::json::object();
  56 + prep_ret[2]["success"]["/lights/1/state/hue"] = 30500;
  57 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  58 +
  59 + test_light.getState()["state"]["on"] = true;
  60 + test_light.getState()["state"]["hue"] = 200;
  61 + test_light.getState()["state"]["colormode"] = "hs";
  62 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorHue(200, 4, test_light));
  63 +
  64 + test_light.getState()["state"]["on"] = false;
  65 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorHue(30500, 6, test_light));
  66 +}
  67 +
  68 +TEST(SimpleColorHueStrategy, setColorSaturation)
  69 +{
  70 + using namespace ::testing;
  71 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  72 + EXPECT_CALL(
  73 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  74 + .Times(AtLeast(1))
  75 + .WillRepeatedly(Return(nlohmann::json::object()));
  76 + MockHueLight test_light(handler);
  77 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  78 + nlohmann::json prep_ret;
  79 + prep_ret = nlohmann::json::array();
  80 + prep_ret[0] = nlohmann::json::object();
  81 + prep_ret[0]["success"] = nlohmann::json::object();
  82 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  83 + prep_ret[1] = nlohmann::json::object();
  84 + prep_ret[1]["success"] = nlohmann::json::object();
  85 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  86 + prep_ret[2] = nlohmann::json::object();
  87 + prep_ret[2]["success"] = nlohmann::json::object();
  88 + prep_ret[2]["success"]["/lights/1/state/sat"] = 254;
  89 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  90 +
  91 + test_light.getState()["state"]["on"] = true;
  92 + test_light.getState()["state"]["sat"] = 100;
  93 + test_light.getState()["state"]["colormode"] = "hs";
  94 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorSaturation(100, 4, test_light));
  95 +
  96 + test_light.getState()["state"]["on"] = false;
  97 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorSaturation(255, 6, test_light));
  98 +}
  99 +
  100 +TEST(SimpleColorHueStrategy, setColorHueSaturation)
  101 +{
  102 + using namespace ::testing;
  103 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  104 + EXPECT_CALL(
  105 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  106 + .Times(AtLeast(1))
  107 + .WillRepeatedly(Return(nlohmann::json::object()));
  108 + MockHueLight test_light(handler);
  109 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  110 + nlohmann::json prep_ret;
  111 + prep_ret = nlohmann::json::array();
  112 + prep_ret[0] = nlohmann::json::object();
  113 + prep_ret[0]["success"] = nlohmann::json::object();
  114 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  115 + prep_ret[1] = nlohmann::json::object();
  116 + prep_ret[1]["success"] = nlohmann::json::object();
  117 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  118 + prep_ret[2] = nlohmann::json::object();
  119 + prep_ret[2]["success"] = nlohmann::json::object();
  120 + prep_ret[2]["success"]["/lights/1/state/hue"] = 30500;
  121 + prep_ret[3] = nlohmann::json::object();
  122 + prep_ret[3]["success"] = nlohmann::json::object();
  123 + prep_ret[3]["success"]["/lights/1/state/sat"] = 254;
  124 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  125 +
  126 + test_light.getState()["state"]["on"] = true;
  127 + test_light.getState()["state"]["sat"] = 100;
  128 + test_light.getState()["state"]["hue"] = 200;
  129 + test_light.getState()["state"]["colormode"] = "hs";
  130 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorHueSaturation(200, 100, 4, test_light));
  131 +
  132 + test_light.getState()["state"]["on"] = false;
  133 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorHueSaturation(30500, 255, 6, test_light));
  134 +}
  135 +
  136 +TEST(SimpleColorHueStrategy, setColorXY)
  137 +{
  138 + using namespace ::testing;
  139 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  140 + EXPECT_CALL(
  141 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  142 + .Times(AtLeast(1))
  143 + .WillRepeatedly(Return(nlohmann::json::object()));
  144 + MockHueLight test_light(handler);
  145 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  146 + nlohmann::json prep_ret;
  147 + prep_ret = nlohmann::json::array();
  148 + prep_ret[0] = nlohmann::json::object();
  149 + prep_ret[0]["success"] = nlohmann::json::object();
  150 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  151 + prep_ret[1] = nlohmann::json::object();
  152 + prep_ret[1]["success"] = nlohmann::json::object();
  153 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  154 + prep_ret[2] = nlohmann::json::object();
  155 + prep_ret[2]["success"] = nlohmann::json::object();
  156 + prep_ret[2]["success"]["/lights/1/state/xy"][0] = 0.2355;
  157 + prep_ret[2]["success"]["/lights/1/state/xy"][1] = 0.1234;
  158 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  159 +
  160 + test_light.getState()["state"]["on"] = true;
  161 + test_light.getState()["state"]["xy"][0] = 0.1f;
  162 + test_light.getState()["state"]["xy"][1] = 0.1f;
  163 + test_light.getState()["state"]["colormode"] = "xy";
  164 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorXY(0.1f, 0.1f, 4, test_light));
  165 +
  166 + test_light.getState()["state"]["on"] = false;
  167 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorXY(0.2355f, 0.1234f, 6, test_light));
  168 +}
  169 +
  170 +TEST(SimpleColorHueStrategy, setColorRGB)
  171 +{
  172 + using namespace ::testing;
  173 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  174 + EXPECT_CALL(
  175 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  176 + .Times(AtLeast(1))
  177 + .WillRepeatedly(Return(nlohmann::json::object()));
  178 + MockHueLight test_light(handler);
  179 + EXPECT_CALL(test_light, setColorXY(_, _, 4)).Times(2).WillRepeatedly(Return(true));
  180 +
  181 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(128, 128, 128, 4, test_light));
  182 +
  183 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(255, 255, 255, 4, test_light));
  184 +
  185 + EXPECT_CALL(test_light, OffNoRefresh(4)).Times(1).WillOnce(Return(true));
  186 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorRGB(0, 0, 0, 4, test_light));
  187 +}
  188 +
  189 +TEST(SimpleColorHueStrategy, setColorLoop)
  190 +{
  191 + using namespace ::testing;
  192 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  193 + EXPECT_CALL(
  194 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  195 + .Times(AtLeast(1))
  196 + .WillRepeatedly(Return(nlohmann::json::object()));
  197 + MockHueLight test_light(handler);
  198 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  199 + nlohmann::json prep_ret;
  200 + prep_ret = nlohmann::json::array();
  201 + prep_ret[0] = nlohmann::json::object();
  202 + prep_ret[0]["success"] = nlohmann::json::object();
  203 + prep_ret[0]["success"]["/lights/1/state/on"] = true;
  204 + prep_ret[1] = nlohmann::json::object();
  205 + prep_ret[1]["success"] = nlohmann::json::object();
  206 + prep_ret[1]["success"]["/lights/1/state/effect"] = "colorloop";
  207 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  208 +
  209 + test_light.getState()["state"]["on"] = true;
  210 + test_light.getState()["state"]["effect"] = "colorloop";
  211 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorLoop(true, test_light));
  212 +
  213 + test_light.getState()["state"]["on"] = false;
  214 + test_light.getState()["state"]["effect"] = "none";
  215 + EXPECT_EQ(true, SimpleColorHueStrategy().setColorLoop(true, test_light));
  216 +}
  217 +
  218 +TEST(SimpleColorHueStrategy, alertHueSaturation)
  219 +{
  220 + using namespace ::testing;
  221 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  222 + EXPECT_CALL(
  223 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  224 + .Times(AtLeast(1))
  225 + .WillRepeatedly(Return(nlohmann::json::object()));
  226 + MockHueLight test_light(handler);
  227 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  228 +
  229 + test_light.getState()["state"]["colormode"] = "invalid";
  230 + test_light.getState()["state"]["on"] = false;
  231 + EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(30000, 128, test_light));
  232 +
  233 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
  234 + .Times(AtLeast(2))
  235 + .WillOnce(Return(false))
  236 + .WillRepeatedly(Return(true));
  237 + test_light.getState()["state"]["colormode"] = "hs";
  238 + test_light.getState()["state"]["on"] = true;
  239 + test_light.getState()["state"]["sat"] = 100;
  240 + test_light.getState()["state"]["hue"] = 200;
  241 + EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  242 +
  243 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  244 + EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  245 +
  246 + EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  247 +
  248 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  249 + test_light.getState()["state"]["on"] = false;
  250 + EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  251 +
  252 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1))
  253 + .Times(AtLeast(2))
  254 + .WillOnce(Return(false))
  255 + .WillRepeatedly(Return(true));
  256 + test_light.getState()["state"]["colormode"] = "xy";
  257 + test_light.getState()["state"]["on"] = true;
  258 + test_light.getState()["state"]["xy"][0] = 0.1;
  259 + test_light.getState()["state"]["xy"][1] = 0.1;
  260 + EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  261 +
  262 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  263 + EXPECT_EQ(false, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  264 +
  265 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  266 + EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  267 +
  268 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  269 + test_light.getState()["state"]["on"] = false;
  270 + EXPECT_EQ(true, SimpleColorHueStrategy().alertHueSaturation(200, 100, test_light));
  271 +}
  272 +
  273 +TEST(SimpleColorHueStrategy, alertXY)
  274 +{
  275 + using namespace ::testing;
  276 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  277 + EXPECT_CALL(
  278 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  279 + .Times(AtLeast(1))
  280 + .WillRepeatedly(Return(nlohmann::json::object()));
  281 + MockHueLight test_light(handler);
  282 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  283 +
  284 + test_light.getState()["state"]["colormode"] = "invalid";
  285 + test_light.getState()["state"]["on"] = false;
  286 + EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  287 +
  288 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  289 + test_light.getState()["state"]["colormode"] = "hs";
  290 + test_light.getState()["state"]["on"] = true;
  291 + test_light.getState()["state"]["xy"][0] = 0.1;
  292 + test_light.getState()["state"]["xy"][1] = 0.1;
  293 + test_light.getState()["state"]["sat"] = 100;
  294 + test_light.getState()["state"]["hue"] = 200;
  295 + EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  296 +
  297 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  298 + EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  299 +
  300 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  301 + EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  302 +
  303 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  304 + test_light.getState()["state"]["on"] = false;
  305 + EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  306 +
  307 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  308 + test_light.getState()["state"]["colormode"] = "xy";
  309 + test_light.getState()["state"]["on"] = true;
  310 + EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  311 +
  312 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  313 + EXPECT_EQ(false, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  314 +
  315 + EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  316 +
  317 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  318 + test_light.getState()["state"]["on"] = false;
  319 + EXPECT_EQ(true, SimpleColorHueStrategy().alertXY(0.1f, 0.1f, test_light));
  320 +}
  321 +
  322 +TEST(SimpleColorHueStrategy, alertRGB)
  323 +{
  324 + using namespace ::testing;
  325 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  326 + EXPECT_CALL(
  327 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  328 + .Times(AtLeast(1))
  329 + .WillRepeatedly(Return(nlohmann::json::object()));
  330 + MockHueLight test_light(handler);
  331 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  332 +
  333 + test_light.getState()["state"]["colormode"] = "invalid";
  334 + test_light.getState()["state"]["on"] = false;
  335 + EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  336 +
  337 + EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
  338 + .Times(AtLeast(2))
  339 + .WillOnce(Return(false))
  340 + .WillRepeatedly(Return(true));
  341 + test_light.getState()["state"]["colormode"] = "hs";
  342 + test_light.getState()["state"]["on"] = true;
  343 + test_light.getState()["state"]["sat"] = 100;
  344 + test_light.getState()["state"]["hue"] = 200;
  345 + EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  346 +
  347 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  348 + EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  349 +
  350 + EXPECT_CALL(test_light, setColorHueSaturation(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  351 + EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  352 +
  353 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  354 + test_light.getState()["state"]["on"] = false;
  355 + EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  356 +
  357 + EXPECT_CALL(test_light, setColorRGB(_, _, _, 1))
  358 + .Times(AtLeast(2))
  359 + .WillOnce(Return(false))
  360 + .WillRepeatedly(Return(true));
  361 + test_light.getState()["state"]["colormode"] = "xy";
  362 + test_light.getState()["state"]["on"] = true;
  363 + test_light.getState()["state"]["xy"][0] = 0.1;
  364 + test_light.getState()["state"]["xy"][1] = 0.1;
  365 + EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  366 +
  367 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  368 + EXPECT_EQ(false, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  369 +
  370 + EXPECT_CALL(test_light, setColorXY(_, _, 1)).Times(AtLeast(2)).WillRepeatedly(Return(true));
  371 + EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  372 +
  373 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  374 + test_light.getState()["state"]["on"] = false;
  375 + EXPECT_EQ(true, SimpleColorHueStrategy().alertRGB(128, 128, 128, test_light));
  376 +}
  377 +
  378 +TEST(SimpleColorHueStrategy, getColorHueSaturation)
  379 +{
  380 + using namespace ::testing;
  381 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  382 + EXPECT_CALL(
  383 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  384 + .Times(AtLeast(1))
  385 + .WillRepeatedly(Return(nlohmann::json::object()));
  386 + MockHueLight test_light(handler);
  387 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  388 +
  389 + test_light.getState()["state"]["hue"] = 5000;
  390 + test_light.getState()["state"]["sat"] = 128;
  391 + EXPECT_EQ(std::make_pair(static_cast<uint16_t>(5000), static_cast<uint8_t>(128)),
  392 + SimpleColorHueStrategy().getColorHueSaturation(test_light));
  393 + test_light.getState()["state"]["hue"] = 50000;
  394 + test_light.getState()["state"]["sat"] = 158;
  395 + EXPECT_EQ(std::make_pair(static_cast<uint16_t>(50000), static_cast<uint8_t>(158)),
  396 + SimpleColorHueStrategy().getColorHueSaturation(static_cast<const HueLight>(test_light)));
  397 +}
  398 +
  399 +TEST(SimpleColorHueStrategy, getColorXY)
  400 +{
  401 + using namespace ::testing;
  402 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  403 + EXPECT_CALL(
  404 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  405 + .Times(AtLeast(1))
  406 + .WillRepeatedly(Return(nlohmann::json::object()));
  407 + MockHueLight test_light(handler);
  408 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  409 +
  410 + test_light.getState()["state"]["xy"][0] = 0.1234;
  411 + test_light.getState()["state"]["xy"][1] = 0.1234;
  412 + EXPECT_EQ(std::make_pair(static_cast<float>(0.1234), static_cast<float>(0.1234)),
  413 + SimpleColorHueStrategy().getColorXY(test_light));
  414 + test_light.getState()["state"]["xy"][0] = 0.12;
  415 + test_light.getState()["state"]["xy"][1] = 0.6458;
  416 + EXPECT_EQ(std::make_pair(static_cast<float>(0.12), static_cast<float>(0.6458)),
  417 + SimpleColorHueStrategy().getColorXY(static_cast<const HueLight>(test_light)));
  418 +}
... ...
hueplusplus/test/test_SimpleColorTemperatureStrategy.cpp renamed to src/test/test_SimpleColorTemperatureStrategy.cpp 100755 → 100644
1   -/**
2   - \file test_SimpleColorTemperatureStrategy.cpp
3   - Copyright Notice\n
4   - Copyright (C) 2017 Jan Rogall - developer\n
5   - Copyright (C) 2017 Moritz Wirger - developer\n
6   -
7   - This file is part of hueplusplus.
8   -
9   - hueplusplus is free software: you can redistribute it and/or modify
10   - it under the terms of the GNU Lesser General Public License as published by
11   - the Free Software Foundation, either version 3 of the License, or
12   - (at your option) any later version.
13   -
14   - hueplusplus is distributed in the hope that it will be useful,
15   - but WITHOUT ANY WARRANTY; without even the implied warranty of
16   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17   - GNU Lesser General Public License for more details.
18   -
19   - You should have received a copy of the GNU Lesser General Public License
20   - along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
21   -**/
22   -
23   -#include <iostream>
24   -#include <memory>
25   -#include <string>
26   -
27   -#include <gmock/gmock.h>
28   -#include <gtest/gtest.h>
29   -
30   -#include "testhelper.h"
31   -
32   -#include "../include/SimpleColorTemperatureStrategy.h"
33   -#include "../include/json/json.hpp"
34   -#include "mocks/mock_HttpHandler.h"
35   -#include "mocks/mock_HueLight.h"
36   -
37   -TEST(SimpleColorTemperatureStrategy, setColorTemperature)
38   -{
39   - using namespace ::testing;
40   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
41   - EXPECT_CALL(
42   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
43   - .Times(AtLeast(1))
44   - .WillRepeatedly(Return(nlohmann::json::object()));
45   - MockHueLight test_light(handler);
46   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
47   - nlohmann::json prep_ret;
48   - prep_ret = nlohmann::json::array();
49   - prep_ret[0] = nlohmann::json::object();
50   - prep_ret[0]["success"] = nlohmann::json::object();
51   - prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
52   - prep_ret[1] = nlohmann::json::object();
53   - prep_ret[1]["success"] = nlohmann::json::object();
54   - prep_ret[1]["success"]["/lights/1/state/on"] = true;
55   - prep_ret[2] = nlohmann::json::object();
56   - prep_ret[2]["success"] = nlohmann::json::object();
57   - prep_ret[2]["success"]["/lights/1/state/ct"] = 155;
58   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
59   -
60   - test_light.getState()["state"]["on"] = true;
61   - test_light.getState()["state"]["ct"] = 200;
62   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(200, 4, test_light));
63   -
64   - test_light.getState()["state"]["on"] = false;
65   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(155, 6, test_light));
66   -
67   - prep_ret[2]["success"]["/lights/1/state/ct"] = 153;
68   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
69   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(0, 6, test_light));
70   -
71   - prep_ret[2]["success"]["/lights/1/state/ct"] = 500;
72   - EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
73   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(600, 6, test_light));
74   -}
75   -
76   -TEST(SimpleColorTemperatureStrategy, alertTemperature)
77   -{
78   - using namespace ::testing;
79   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
80   - EXPECT_CALL(
81   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
82   - .Times(AtLeast(1))
83   - .WillRepeatedly(Return(nlohmann::json::object()));
84   - MockHueLight test_light(handler);
85   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
86   -
87   - test_light.getState()["state"]["colormode"] = "invalid";
88   - test_light.getState()["state"]["on"] = false;
89   - EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
90   -
91   - EXPECT_CALL(test_light, setColorTemperature(_, _))
92   - .Times(AtLeast(2))
93   - .WillOnce(Return(false))
94   - .WillRepeatedly(Return(true));
95   - test_light.getState()["state"]["colormode"] = "ct";
96   - test_light.getState()["state"]["on"] = true;
97   - test_light.getState()["state"]["ct"] = 200;
98   - EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
99   -
100   - EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
101   - EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
102   -
103   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
104   -
105   - EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
106   - test_light.getState()["state"]["on"] = false;
107   - EXPECT_EQ(true, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
108   -}
109   -
110   -TEST(SimpleColorTemperatureStrategy, getColorTemperature)
111   -{
112   - using namespace ::testing;
113   - std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
114   - EXPECT_CALL(
115   - *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
116   - .Times(AtLeast(1))
117   - .WillRepeatedly(Return(nlohmann::json::object()));
118   - MockHueLight test_light(handler);
119   - EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
120   -
121   - test_light.getState()["state"]["ct"] = 200;
122   - EXPECT_EQ(200, SimpleColorTemperatureStrategy().getColorTemperature(test_light));
123   - test_light.getState()["state"]["ct"] = 500;
124   - EXPECT_EQ(500, SimpleColorTemperatureStrategy().getColorTemperature(static_cast<const HueLight>(test_light)));
125   -}
  1 +/**
  2 + \file test_SimpleColorTemperatureStrategy.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2017 Jan Rogall - developer\n
  5 + Copyright (C) 2017 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <iostream>
  24 +#include <memory>
  25 +#include <string>
  26 +
  27 +#include <gmock/gmock.h>
  28 +#include <gtest/gtest.h>
  29 +
  30 +#include "testhelper.h"
  31 +
  32 +#include "../include/SimpleColorTemperatureStrategy.h"
  33 +#include "../include/json/json.hpp"
  34 +#include "mocks/mock_HttpHandler.h"
  35 +#include "mocks/mock_HueLight.h"
  36 +
  37 +TEST(SimpleColorTemperatureStrategy, setColorTemperature)
  38 +{
  39 + using namespace ::testing;
  40 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  41 + EXPECT_CALL(
  42 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  43 + .Times(AtLeast(1))
  44 + .WillRepeatedly(Return(nlohmann::json::object()));
  45 + MockHueLight test_light(handler);
  46 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  47 + nlohmann::json prep_ret;
  48 + prep_ret = nlohmann::json::array();
  49 + prep_ret[0] = nlohmann::json::object();
  50 + prep_ret[0]["success"] = nlohmann::json::object();
  51 + prep_ret[0]["success"]["/lights/1/state/transitiontime"] = 6;
  52 + prep_ret[1] = nlohmann::json::object();
  53 + prep_ret[1]["success"] = nlohmann::json::object();
  54 + prep_ret[1]["success"]["/lights/1/state/on"] = true;
  55 + prep_ret[2] = nlohmann::json::object();
  56 + prep_ret[2]["success"] = nlohmann::json::object();
  57 + prep_ret[2]["success"]["/lights/1/state/ct"] = 155;
  58 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  59 +
  60 + test_light.getState()["state"]["on"] = true;
  61 + test_light.getState()["state"]["ct"] = 200;
  62 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(200, 4, test_light));
  63 +
  64 + test_light.getState()["state"]["on"] = false;
  65 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(155, 6, test_light));
  66 +
  67 + prep_ret[2]["success"]["/lights/1/state/ct"] = 153;
  68 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  69 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(0, 6, test_light));
  70 +
  71 + prep_ret[2]["success"]["/lights/1/state/ct"] = 500;
  72 + EXPECT_CALL(test_light, SendPutRequest(_, "/state", _)).Times(1).WillOnce(Return(prep_ret));
  73 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().setColorTemperature(600, 6, test_light));
  74 +}
  75 +
  76 +TEST(SimpleColorTemperatureStrategy, alertTemperature)
  77 +{
  78 + using namespace ::testing;
  79 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  80 + EXPECT_CALL(
  81 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  82 + .Times(AtLeast(1))
  83 + .WillRepeatedly(Return(nlohmann::json::object()));
  84 + MockHueLight test_light(handler);
  85 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  86 +
  87 + test_light.getState()["state"]["colormode"] = "invalid";
  88 + test_light.getState()["state"]["on"] = false;
  89 + EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
  90 +
  91 + EXPECT_CALL(test_light, setColorTemperature(_, _))
  92 + .Times(AtLeast(2))
  93 + .WillOnce(Return(false))
  94 + .WillRepeatedly(Return(true));
  95 + test_light.getState()["state"]["colormode"] = "ct";
  96 + test_light.getState()["state"]["on"] = true;
  97 + test_light.getState()["state"]["ct"] = 200;
  98 + EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
  99 +
  100 + EXPECT_CALL(test_light, alert()).Times(AtLeast(2)).WillOnce(Return(false)).WillRepeatedly(Return(true));
  101 + EXPECT_EQ(false, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
  102 +
  103 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
  104 +
  105 + EXPECT_CALL(test_light, OffNoRefresh(_)).Times(AtLeast(1)).WillRepeatedly(Return(true));
  106 + test_light.getState()["state"]["on"] = false;
  107 + EXPECT_EQ(true, SimpleColorTemperatureStrategy().alertTemperature(400, test_light));
  108 +}
  109 +
  110 +TEST(SimpleColorTemperatureStrategy, getColorTemperature)
  111 +{
  112 + using namespace ::testing;
  113 + std::shared_ptr<MockHttpHandler> handler(std::make_shared<MockHttpHandler>());
  114 + EXPECT_CALL(
  115 + *handler, GETJson("/api/" + getBridgeUsername() + "/lights/1", nlohmann::json::object(), getBridgeIp(), 80))
  116 + .Times(AtLeast(1))
  117 + .WillRepeatedly(Return(nlohmann::json::object()));
  118 + MockHueLight test_light(handler);
  119 + EXPECT_CALL(test_light, refreshState()).Times(AtLeast(1)).WillRepeatedly(Return());
  120 +
  121 + test_light.getState()["state"]["ct"] = 200;
  122 + EXPECT_EQ(200, SimpleColorTemperatureStrategy().getColorTemperature(test_light));
  123 + test_light.getState()["state"]["ct"] = 500;
  124 + EXPECT_EQ(500, SimpleColorTemperatureStrategy().getColorTemperature(static_cast<const HueLight>(test_light)));
  125 +}
... ...
hueplusplus/test/test_UPnP.cpp renamed to src/test/test_UPnP.cpp 100755 → 100644
hueplusplus/test/testhelper.h renamed to src/test/testhelper.h