1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <cmath>
17 #include <cstdio>
18 #include <gtest/gtest.h>
19 #include <securec.h>
20 #include "hdf_base.h"
21 #include "osal_time.h"
22 #include "osal_mem.h"
23 #include "light_if.h"
24 #include "light_type.h"
25
26 using namespace testing::ext;
27
28 namespace {
29 const struct LightInterface *g_lightDev = nullptr;
30 static struct LightInfo *g_lightInfo = nullptr;
31 static uint32_t g_count = 0;
32 const int32_t g_onTime = 500;
33 const int32_t g_offTime = 500;
34 const int32_t LIGHT_WAIT_TIME = 3;
35 const int32_t g_minLightId = LIGHT_ID_NONE;
36 const int32_t g_maxLightId = LIGHT_ID_BUTT;
37 }
38
39 class HdfLightTest : public testing::Test {
40 public:
41 static void SetUpTestCase();
42 static void TearDownTestCase();
43 void SetUp();
44 void TearDown();
45 };
46
SetUpTestCase()47 void HdfLightTest::SetUpTestCase()
48 {
49 g_lightDev = NewLightInterfaceInstance();
50 if (g_lightDev == nullptr) {
51 printf("test light get Module instance failed\n\r");
52 }
53 int32_t ret = g_lightDev->GetLightInfo(&g_lightInfo, &g_count);
54 if (ret == HDF_FAILURE) {
55 printf("get light information failed\n\r");
56 }
57 }
58
TearDownTestCase()59 void HdfLightTest::TearDownTestCase()
60 {
61 if (g_lightDev != nullptr) {
62 FreeLightInterfaceInstance();
63 g_lightDev = nullptr;
64 }
65 }
66
SetUp()67 void HdfLightTest::SetUp()
68 {
69 }
70
TearDown()71 void HdfLightTest::TearDown()
72 {
73 }
74
75 /**
76 * @tc.name: CheckLightInstanceIsEmpty
77 * @tc.desc: Creat a light instance. The instance is not empty.
78 * @tc.type: FUNC
79 */
80 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0010, Function | MediumTest | Level1)
81 {
82 ASSERT_NE(nullptr, g_lightDev);
83 }
84
85 /**
86 * @tc.name: GetLightList001
87 * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters.
88 * @tc.type: FUNC
89 */
90 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0100, Function | MediumTest | Level1)
91 {
92 struct LightInfo *info = nullptr;
93
94 if (g_lightInfo == nullptr) {
95 EXPECT_NE(nullptr, g_lightInfo);
96 return;
97 }
98
99 printf("get light list num[%d]\n\r", g_count);
100 info = g_lightInfo;
101
102 for (int i = 0; i < g_count; ++i) {
103 printf("get lightId[%d]\n\r", info->lightId);
104 EXPECT_GE(info->lightId, g_minLightId);
105 EXPECT_LE(info->lightId, g_maxLightId);
106 info++;
107 }
108 }
109
110 /**
111 * @tc.name: GetLightList002
112 * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters.
113 * @tc.type: FUNC
114 */
115 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0110 , Function | MediumTest | Level1)
116 {
117 int32_t ret = g_lightDev->GetLightInfo(nullptr, &g_count);
118 EXPECT_EQ(HDF_FAILURE, ret);
119 ret = g_lightDev->GetLightInfo(&g_lightInfo, nullptr);
120 EXPECT_EQ(HDF_FAILURE, ret);
121 ret = g_lightDev->GetLightInfo(nullptr, nullptr);
122 EXPECT_EQ(HDF_FAILURE, ret);
123 }
124
125 /**
126 * @tc.name: EnableLight001
127 * @tc.desc: Enables the light available in the light list based on the specified light id.
128 * @tc.type: FUNC
129 */
130 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0120, Function | MediumTest | Level1)
131 {
132 int32_t i;
133 int32_t ret;
134 struct LightEffect effect;
135 effect.lightColor.colorValue.rgbColor.r = 255;
136 effect.lightColor.colorValue.rgbColor.g = 0;
137 effect.lightColor.colorValue.rgbColor.b = 0;
138 effect.flashEffect.flashMode = LIGHT_FLASH_NONE;
139 effect.flashEffect.onTime = 0;
140 effect.flashEffect.offTime = 0;
141
142 for (i = 0; i < g_count; ++i) {
143 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
144 EXPECT_EQ(0, ret);
145
146 OsalSleep(LIGHT_WAIT_TIME);
147
148 ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
149 EXPECT_EQ(0, ret);
150 }
151 }
152
153 /**
154 * @tc.name: EnableLight002
155 * @tc.desc: Enables the light available in the light list based on the specified light id.
156 * @tc.type: FUNC
157 */
158 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0130, Function | MediumTest | Level1)
159 {
160 int32_t i;
161 int32_t ret;
162 struct LightEffect effect;
163 effect.lightColor.colorValue.rgbColor.r = 255;
164 effect.lightColor.colorValue.rgbColor.g = 0;
165 effect.lightColor.colorValue.rgbColor.b = 0;
166 effect.flashEffect.flashMode = LIGHT_FLASH_BLINK;
167 effect.flashEffect.onTime = g_onTime;
168 effect.flashEffect.offTime = g_offTime;
169
170 for (i = 0; i < g_count; ++i) {
171 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
172 EXPECT_EQ(0, ret);
173
174 OsalSleep(LIGHT_WAIT_TIME);
175
176 ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
177 EXPECT_EQ(0, ret);
178 }
179 }
180
181 /**
182 * @tc.name: EnableLight003
183 * @tc.desc: Enables the light available in the light list based on the specified light id.
184 * @tc.type: FUNC
185 */
186 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0140, Function | MediumTest | Level1)
187 {
188 int32_t i;
189 int32_t ret;
190 uint32_t lightId = LIGHT_ID_BUTT;
191 struct LightEffect effect;
192
193 ret = g_lightDev->TurnOnLight(lightId, &effect);
194 EXPECT_EQ(LIGHT_NOT_SUPPORT, ret);
195
196 for (i = 0; i < g_count; ++i) {
197 effect.lightColor.colorValue.rgbColor.r = 255;
198 effect.lightColor.colorValue.rgbColor.g = 0;
199 effect.lightColor.colorValue.rgbColor.b = 0;
200 effect.flashEffect.flashMode = LIGHT_FLASH_BUTT;
201 effect.flashEffect.onTime = g_onTime;
202 effect.flashEffect.offTime = g_offTime;
203
204 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
205 EXPECT_EQ(LIGHT_NOT_FLASH, ret);
206
207 effect.flashEffect.flashMode = LIGHT_FLASH_BLINK;
208 effect.flashEffect.onTime = 0;
209 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
210 EXPECT_EQ(LIGHT_NOT_FLASH, ret);
211
212 effect.flashEffect.onTime = g_onTime;
213 effect.flashEffect.offTime = 0;
214 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
215 EXPECT_EQ(LIGHT_NOT_FLASH, ret);
216 }
217 }
218
219 /**
220 * @tc.name: DisableLight001
221 * @tc.desc: Disable the light available in the light list based on the specified light id.
222 * @tc.type: FUNC
223 */
224 HWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0150, Function | MediumTest | Level1)
225 {
226 uint32_t lightId = LIGHT_ID_BUTT;
227
228 int32_t ret = g_lightDev->TurnOffLight(lightId);
229 EXPECT_EQ(HDF_FAILURE, ret);
230 }
231