1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#include <cmath>
17094332d3Sopenharmony_ci#include <cstdio>
18094332d3Sopenharmony_ci#include <gtest/gtest.h>
19094332d3Sopenharmony_ci#include <securec.h>
20094332d3Sopenharmony_ci#include "hdf_base.h"
21094332d3Sopenharmony_ci#include "osal_time.h"
22094332d3Sopenharmony_ci#include "osal_mem.h"
23094332d3Sopenharmony_ci#include "light_if.h"
24094332d3Sopenharmony_ci#include "light_type.h"
25094332d3Sopenharmony_ci
26094332d3Sopenharmony_ciusing namespace testing::ext;
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_cinamespace {
29094332d3Sopenharmony_ci    const struct LightInterface *g_lightDev = nullptr;
30094332d3Sopenharmony_ci    static struct LightInfo *g_lightInfo = nullptr;
31094332d3Sopenharmony_ci    static uint32_t g_count = 0;
32094332d3Sopenharmony_ci    const int32_t ON_TIME = 500;
33094332d3Sopenharmony_ci    const int32_t OFF_TIME = 500;
34094332d3Sopenharmony_ci    const int32_t LIGHT_WAIT_TIME = 2;
35094332d3Sopenharmony_ci    const int32_t MIN_LIGHT_ID = LIGHT_ID_NONE;
36094332d3Sopenharmony_ci    const int32_t MAX_LIGHT_ID = LIGHT_ID_BUTT;
37094332d3Sopenharmony_ci}
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ciclass HdfLightTest : public testing::Test {
40094332d3Sopenharmony_cipublic:
41094332d3Sopenharmony_ci    static void SetUpTestCase();
42094332d3Sopenharmony_ci    static void TearDownTestCase();
43094332d3Sopenharmony_ci    void SetUp();
44094332d3Sopenharmony_ci    void TearDown();
45094332d3Sopenharmony_ci};
46094332d3Sopenharmony_ci
47094332d3Sopenharmony_civoid HdfLightTest::SetUpTestCase()
48094332d3Sopenharmony_ci{
49094332d3Sopenharmony_ci    g_lightDev = NewLightInterfaceInstance();
50094332d3Sopenharmony_ci    if (g_lightDev == nullptr) {
51094332d3Sopenharmony_ci        printf("test light get Module instance failed\n\r");
52094332d3Sopenharmony_ci        return;
53094332d3Sopenharmony_ci    }
54094332d3Sopenharmony_ci    int32_t ret = g_lightDev->GetLightInfo(&g_lightInfo, &g_count);
55094332d3Sopenharmony_ci    if (ret == HDF_FAILURE) {
56094332d3Sopenharmony_ci        printf("get light information failed\n\r");
57094332d3Sopenharmony_ci    }
58094332d3Sopenharmony_ci}
59094332d3Sopenharmony_ci
60094332d3Sopenharmony_civoid HdfLightTest::TearDownTestCase()
61094332d3Sopenharmony_ci{
62094332d3Sopenharmony_ci    if (g_lightDev != nullptr) {
63094332d3Sopenharmony_ci        FreeLightInterfaceInstance();
64094332d3Sopenharmony_ci        g_lightDev = nullptr;
65094332d3Sopenharmony_ci    }
66094332d3Sopenharmony_ci}
67094332d3Sopenharmony_ci
68094332d3Sopenharmony_civoid HdfLightTest::SetUp()
69094332d3Sopenharmony_ci{
70094332d3Sopenharmony_ci}
71094332d3Sopenharmony_ci
72094332d3Sopenharmony_civoid HdfLightTest::TearDown()
73094332d3Sopenharmony_ci{
74094332d3Sopenharmony_ci}
75094332d3Sopenharmony_ci
76094332d3Sopenharmony_ci/**
77094332d3Sopenharmony_ci  * @tc.name: CheckLightInstanceIsEmpty
78094332d3Sopenharmony_ci  * @tc.desc: Create a light instance. The instance is not empty.
79094332d3Sopenharmony_ci  * @tc.type: FUNC
80094332d3Sopenharmony_ci  * @tc.require: #I4NN4Z
81094332d3Sopenharmony_ci  */
82094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, CheckLightInstanceIsEmpty, TestSize.Level1)
83094332d3Sopenharmony_ci{
84094332d3Sopenharmony_ci    ASSERT_NE(nullptr, g_lightDev);
85094332d3Sopenharmony_ci}
86094332d3Sopenharmony_ci
87094332d3Sopenharmony_ci/**
88094332d3Sopenharmony_ci  * @tc.name: GetLightList001
89094332d3Sopenharmony_ci  * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters.
90094332d3Sopenharmony_ci  * @tc.type: FUNC
91094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869Q
92094332d3Sopenharmony_ci  */
93094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, GetLightList001, TestSize.Level1)
94094332d3Sopenharmony_ci{
95094332d3Sopenharmony_ci    struct LightInfo *info = nullptr;
96094332d3Sopenharmony_ci
97094332d3Sopenharmony_ci    if (g_lightInfo == nullptr) {
98094332d3Sopenharmony_ci        EXPECT_NE(nullptr, g_lightInfo);
99094332d3Sopenharmony_ci        return;
100094332d3Sopenharmony_ci    }
101094332d3Sopenharmony_ci
102094332d3Sopenharmony_ci    printf("get light list num[%u]\n\r", g_count);
103094332d3Sopenharmony_ci    info = g_lightInfo;
104094332d3Sopenharmony_ci
105094332d3Sopenharmony_ci    for (uint32_t i = 0; i < g_count; ++i) {
106094332d3Sopenharmony_ci        printf("get lightId[%u]\n\r", info->lightId);
107094332d3Sopenharmony_ci        EXPECT_GE(info->lightId, MIN_LIGHT_ID);
108094332d3Sopenharmony_ci        EXPECT_LE(info->lightId, MAX_LIGHT_ID);
109094332d3Sopenharmony_ci        info++;
110094332d3Sopenharmony_ci    }
111094332d3Sopenharmony_ci}
112094332d3Sopenharmony_ci
113094332d3Sopenharmony_ci/**
114094332d3Sopenharmony_ci  * @tc.name: GetLightList002
115094332d3Sopenharmony_ci  * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters.
116094332d3Sopenharmony_ci  * @tc.type: FUNC
117094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869Q
118094332d3Sopenharmony_ci  */
119094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, GetLightList002, TestSize.Level1)
120094332d3Sopenharmony_ci{
121094332d3Sopenharmony_ci    int32_t ret = g_lightDev->GetLightInfo(nullptr, &g_count);
122094332d3Sopenharmony_ci    EXPECT_EQ(HDF_FAILURE, ret);
123094332d3Sopenharmony_ci    ret = g_lightDev->GetLightInfo(&g_lightInfo, nullptr);
124094332d3Sopenharmony_ci    EXPECT_EQ(HDF_FAILURE, ret);
125094332d3Sopenharmony_ci    ret = g_lightDev->GetLightInfo(nullptr, nullptr);
126094332d3Sopenharmony_ci    EXPECT_EQ(HDF_FAILURE, ret);
127094332d3Sopenharmony_ci}
128094332d3Sopenharmony_ci
129094332d3Sopenharmony_ci/**
130094332d3Sopenharmony_ci  * @tc.name: EnableLight001
131094332d3Sopenharmony_ci  * @tc.desc: Enables the light available in the light list based on the specified light id.
132094332d3Sopenharmony_ci  * @tc.type: FUNC
133094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869R, AR000F8QNL
134094332d3Sopenharmony_ci  */
135094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, EnableLight001, TestSize.Level1)
136094332d3Sopenharmony_ci{
137094332d3Sopenharmony_ci    uint32_t i;
138094332d3Sopenharmony_ci    struct LightEffect effect;
139094332d3Sopenharmony_ci    effect.flashEffect.flashMode = LIGHT_FLASH_NONE;
140094332d3Sopenharmony_ci    effect.flashEffect.onTime = 0;
141094332d3Sopenharmony_ci    effect.flashEffect.offTime = 0;
142094332d3Sopenharmony_ci
143094332d3Sopenharmony_ci    for (i = 0; i < g_count; ++i) {
144094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 255;
145094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 0;
146094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
147094332d3Sopenharmony_ci        int32_t ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
148094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
149094332d3Sopenharmony_ci
150094332d3Sopenharmony_ci        OsalSleep(LIGHT_WAIT_TIME);
151094332d3Sopenharmony_ci
152094332d3Sopenharmony_ci        ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
153094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
154094332d3Sopenharmony_ci
155094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 0;
156094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 255;
157094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
158094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
159094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
160094332d3Sopenharmony_ci
161094332d3Sopenharmony_ci        OsalSleep(LIGHT_WAIT_TIME);
162094332d3Sopenharmony_ci
163094332d3Sopenharmony_ci        ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
164094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
165094332d3Sopenharmony_ci    }
166094332d3Sopenharmony_ci}
167094332d3Sopenharmony_ci
168094332d3Sopenharmony_ci/**
169094332d3Sopenharmony_ci  * @tc.name: EnableLight002
170094332d3Sopenharmony_ci  * @tc.desc: Enables the light available in the light list based on the specified light id.
171094332d3Sopenharmony_ci  * @tc.type: FUNC
172094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869R, AR000F8QNL
173094332d3Sopenharmony_ci  */
174094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, EnableLight002, TestSize.Level1)
175094332d3Sopenharmony_ci{
176094332d3Sopenharmony_ci    uint32_t i;
177094332d3Sopenharmony_ci    struct LightEffect effect;
178094332d3Sopenharmony_ci    effect.flashEffect.flashMode = LIGHT_FLASH_BLINK;
179094332d3Sopenharmony_ci    effect.flashEffect.onTime = ON_TIME;
180094332d3Sopenharmony_ci    effect.flashEffect.offTime = OFF_TIME;
181094332d3Sopenharmony_ci
182094332d3Sopenharmony_ci    for (i = 0; i < g_count; ++i) {
183094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 255;
184094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 0;
185094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
186094332d3Sopenharmony_ci        int32_t ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
187094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
188094332d3Sopenharmony_ci
189094332d3Sopenharmony_ci        OsalSleep(LIGHT_WAIT_TIME);
190094332d3Sopenharmony_ci
191094332d3Sopenharmony_ci        ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
192094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
193094332d3Sopenharmony_ci
194094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 0;
195094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 255;
196094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
197094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
198094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
199094332d3Sopenharmony_ci
200094332d3Sopenharmony_ci        OsalSleep(LIGHT_WAIT_TIME);
201094332d3Sopenharmony_ci
202094332d3Sopenharmony_ci        ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
203094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
204094332d3Sopenharmony_ci
205094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 255;
206094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 255;
207094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
208094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
209094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
210094332d3Sopenharmony_ci
211094332d3Sopenharmony_ci        OsalSleep(LIGHT_WAIT_TIME);
212094332d3Sopenharmony_ci
213094332d3Sopenharmony_ci        ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
214094332d3Sopenharmony_ci        EXPECT_EQ(0, ret);
215094332d3Sopenharmony_ci    }
216094332d3Sopenharmony_ci}
217094332d3Sopenharmony_ci
218094332d3Sopenharmony_ci/**
219094332d3Sopenharmony_ci  * @tc.name: EnableLight003
220094332d3Sopenharmony_ci  * @tc.desc: Enables the light available in the light list based on the specified light id.
221094332d3Sopenharmony_ci  * @tc.type: FUNC
222094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869R, AR000F8QNL
223094332d3Sopenharmony_ci  */
224094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, EnableLight003, TestSize.Level1)
225094332d3Sopenharmony_ci{
226094332d3Sopenharmony_ci    uint32_t i;
227094332d3Sopenharmony_ci    int32_t ret;
228094332d3Sopenharmony_ci    uint32_t lightId = LIGHT_ID_BUTT;
229094332d3Sopenharmony_ci    struct LightEffect effect;
230094332d3Sopenharmony_ci
231094332d3Sopenharmony_ci    ret = g_lightDev->TurnOnLight(lightId, &effect);
232094332d3Sopenharmony_ci    EXPECT_EQ(LIGHT_NOT_SUPPORT, ret);
233094332d3Sopenharmony_ci
234094332d3Sopenharmony_ci    for (i = 0; i < g_count; ++i) {
235094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.r = 255;
236094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.g = 0;
237094332d3Sopenharmony_ci        effect.lightColor.colorValue.rgbColor.b = 0;
238094332d3Sopenharmony_ci        effect.flashEffect.flashMode = LIGHT_FLASH_BUTT;
239094332d3Sopenharmony_ci        effect.flashEffect.onTime = ON_TIME;
240094332d3Sopenharmony_ci        effect.flashEffect.offTime = OFF_TIME;
241094332d3Sopenharmony_ci
242094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
243094332d3Sopenharmony_ci        EXPECT_EQ(LIGHT_NOT_FLASH, ret);
244094332d3Sopenharmony_ci
245094332d3Sopenharmony_ci        effect.flashEffect.flashMode = LIGHT_FLASH_GRADIENT;
246094332d3Sopenharmony_ci        effect.flashEffect.onTime = 0;
247094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
248094332d3Sopenharmony_ci        EXPECT_EQ(LIGHT_NOT_FLASH, ret);
249094332d3Sopenharmony_ci
250094332d3Sopenharmony_ci        effect.flashEffect.onTime = ON_TIME;
251094332d3Sopenharmony_ci        effect.flashEffect.offTime = 0;
252094332d3Sopenharmony_ci        ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
253094332d3Sopenharmony_ci        EXPECT_EQ(LIGHT_NOT_FLASH, ret);
254094332d3Sopenharmony_ci    }
255094332d3Sopenharmony_ci}
256094332d3Sopenharmony_ci
257094332d3Sopenharmony_ci/**
258094332d3Sopenharmony_ci  * @tc.name: DisableLight001
259094332d3Sopenharmony_ci  * @tc.desc: Disable the light available in the light list based on the specified light id.
260094332d3Sopenharmony_ci  * @tc.type: FUNC
261094332d3Sopenharmony_ci  * @tc.require: SR000F869M, AR000F869R, AR000F8QNL
262094332d3Sopenharmony_ci  */
263094332d3Sopenharmony_ciHWTEST_F(HdfLightTest, DisableLight001, TestSize.Level1)
264094332d3Sopenharmony_ci{
265094332d3Sopenharmony_ci    uint32_t lightId = LIGHT_ID_BUTT;
266094332d3Sopenharmony_ci
267094332d3Sopenharmony_ci    int32_t ret = g_lightDev->TurnOffLight(lightId);
268094332d3Sopenharmony_ci    EXPECT_EQ(HDF_FAILURE, ret);
269094332d3Sopenharmony_ci}
270