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