19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include <cmath> 179762338dSopenharmony_ci#include <cstdio> 189762338dSopenharmony_ci#include <gtest/gtest.h> 199762338dSopenharmony_ci#include <securec.h> 209762338dSopenharmony_ci#include "hdf_base.h" 219762338dSopenharmony_ci#include "osal_time.h" 229762338dSopenharmony_ci#include "osal_mem.h" 239762338dSopenharmony_ci#include "light_if.h" 249762338dSopenharmony_ci#include "light_type.h" 259762338dSopenharmony_ci 269762338dSopenharmony_ciusing namespace testing::ext; 279762338dSopenharmony_ci 289762338dSopenharmony_cinamespace { 299762338dSopenharmony_ci const struct LightInterface *g_lightDev = nullptr; 309762338dSopenharmony_ci static struct LightInfo *g_lightInfo = nullptr; 319762338dSopenharmony_ci static uint32_t g_count = 0; 329762338dSopenharmony_ci const int32_t g_onTime = 500; 339762338dSopenharmony_ci const int32_t g_offTime = 500; 349762338dSopenharmony_ci const int32_t LIGHT_WAIT_TIME = 3; 359762338dSopenharmony_ci const int32_t g_minLightId = LIGHT_ID_NONE; 369762338dSopenharmony_ci const int32_t g_maxLightId = LIGHT_ID_BUTT; 379762338dSopenharmony_ci} 389762338dSopenharmony_ci 399762338dSopenharmony_ciclass HdfLightTest : public testing::Test { 409762338dSopenharmony_cipublic: 419762338dSopenharmony_ci static void SetUpTestCase(); 429762338dSopenharmony_ci static void TearDownTestCase(); 439762338dSopenharmony_ci void SetUp(); 449762338dSopenharmony_ci void TearDown(); 459762338dSopenharmony_ci}; 469762338dSopenharmony_ci 479762338dSopenharmony_civoid HdfLightTest::SetUpTestCase() 489762338dSopenharmony_ci{ 499762338dSopenharmony_ci g_lightDev = NewLightInterfaceInstance(); 509762338dSopenharmony_ci if (g_lightDev == nullptr) { 519762338dSopenharmony_ci printf("test light get Module instance failed\n\r"); 529762338dSopenharmony_ci } 539762338dSopenharmony_ci int32_t ret = g_lightDev->GetLightInfo(&g_lightInfo, &g_count); 549762338dSopenharmony_ci if (ret == HDF_FAILURE) { 559762338dSopenharmony_ci printf("get light information failed\n\r"); 569762338dSopenharmony_ci } 579762338dSopenharmony_ci} 589762338dSopenharmony_ci 599762338dSopenharmony_civoid HdfLightTest::TearDownTestCase() 609762338dSopenharmony_ci{ 619762338dSopenharmony_ci if (g_lightDev != nullptr) { 629762338dSopenharmony_ci FreeLightInterfaceInstance(); 639762338dSopenharmony_ci g_lightDev = nullptr; 649762338dSopenharmony_ci } 659762338dSopenharmony_ci} 669762338dSopenharmony_ci 679762338dSopenharmony_civoid HdfLightTest::SetUp() 689762338dSopenharmony_ci{ 699762338dSopenharmony_ci} 709762338dSopenharmony_ci 719762338dSopenharmony_civoid HdfLightTest::TearDown() 729762338dSopenharmony_ci{ 739762338dSopenharmony_ci} 749762338dSopenharmony_ci 759762338dSopenharmony_ci/** 769762338dSopenharmony_ci * @tc.name: CheckLightInstanceIsEmpty 779762338dSopenharmony_ci * @tc.desc: Creat a light instance. The instance is not empty. 789762338dSopenharmony_ci * @tc.type: FUNC 799762338dSopenharmony_ci */ 809762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0010, Function | MediumTest | Level1) 819762338dSopenharmony_ci{ 829762338dSopenharmony_ci ASSERT_NE(nullptr, g_lightDev); 839762338dSopenharmony_ci} 849762338dSopenharmony_ci 859762338dSopenharmony_ci/** 869762338dSopenharmony_ci * @tc.name: GetLightList001 879762338dSopenharmony_ci * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters. 889762338dSopenharmony_ci * @tc.type: FUNC 899762338dSopenharmony_ci */ 909762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0100, Function | MediumTest | Level1) 919762338dSopenharmony_ci{ 929762338dSopenharmony_ci struct LightInfo *info = nullptr; 939762338dSopenharmony_ci 949762338dSopenharmony_ci if (g_lightInfo == nullptr) { 959762338dSopenharmony_ci EXPECT_NE(nullptr, g_lightInfo); 969762338dSopenharmony_ci return; 979762338dSopenharmony_ci } 989762338dSopenharmony_ci 999762338dSopenharmony_ci printf("get light list num[%d]\n\r", g_count); 1009762338dSopenharmony_ci info = g_lightInfo; 1019762338dSopenharmony_ci 1029762338dSopenharmony_ci for (int i = 0; i < g_count; ++i) { 1039762338dSopenharmony_ci printf("get lightId[%d]\n\r", info->lightId); 1049762338dSopenharmony_ci EXPECT_GE(info->lightId, g_minLightId); 1059762338dSopenharmony_ci EXPECT_LE(info->lightId, g_maxLightId); 1069762338dSopenharmony_ci info++; 1079762338dSopenharmony_ci } 1089762338dSopenharmony_ci} 1099762338dSopenharmony_ci 1109762338dSopenharmony_ci/** 1119762338dSopenharmony_ci * @tc.name: GetLightList002 1129762338dSopenharmony_ci * @tc.desc: Obtains information about all lights in the system. Validity check of input parameters. 1139762338dSopenharmony_ci * @tc.type: FUNC 1149762338dSopenharmony_ci */ 1159762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0110 , Function | MediumTest | Level1) 1169762338dSopenharmony_ci{ 1179762338dSopenharmony_ci int32_t ret = g_lightDev->GetLightInfo(nullptr, &g_count); 1189762338dSopenharmony_ci EXPECT_EQ(HDF_FAILURE, ret); 1199762338dSopenharmony_ci ret = g_lightDev->GetLightInfo(&g_lightInfo, nullptr); 1209762338dSopenharmony_ci EXPECT_EQ(HDF_FAILURE, ret); 1219762338dSopenharmony_ci ret = g_lightDev->GetLightInfo(nullptr, nullptr); 1229762338dSopenharmony_ci EXPECT_EQ(HDF_FAILURE, ret); 1239762338dSopenharmony_ci} 1249762338dSopenharmony_ci 1259762338dSopenharmony_ci/** 1269762338dSopenharmony_ci * @tc.name: EnableLight001 1279762338dSopenharmony_ci * @tc.desc: Enables the light available in the light list based on the specified light id. 1289762338dSopenharmony_ci * @tc.type: FUNC 1299762338dSopenharmony_ci */ 1309762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0120, Function | MediumTest | Level1) 1319762338dSopenharmony_ci{ 1329762338dSopenharmony_ci int32_t i; 1339762338dSopenharmony_ci int32_t ret; 1349762338dSopenharmony_ci struct LightEffect effect; 1359762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.r = 255; 1369762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.g = 0; 1379762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.b = 0; 1389762338dSopenharmony_ci effect.flashEffect.flashMode = LIGHT_FLASH_NONE; 1399762338dSopenharmony_ci effect.flashEffect.onTime = 0; 1409762338dSopenharmony_ci effect.flashEffect.offTime = 0; 1419762338dSopenharmony_ci 1429762338dSopenharmony_ci for (i = 0; i < g_count; ++i) { 1439762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 1449762338dSopenharmony_ci EXPECT_EQ(0, ret); 1459762338dSopenharmony_ci 1469762338dSopenharmony_ci OsalSleep(LIGHT_WAIT_TIME); 1479762338dSopenharmony_ci 1489762338dSopenharmony_ci ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId); 1499762338dSopenharmony_ci EXPECT_EQ(0, ret); 1509762338dSopenharmony_ci } 1519762338dSopenharmony_ci} 1529762338dSopenharmony_ci 1539762338dSopenharmony_ci/** 1549762338dSopenharmony_ci * @tc.name: EnableLight002 1559762338dSopenharmony_ci * @tc.desc: Enables the light available in the light list based on the specified light id. 1569762338dSopenharmony_ci * @tc.type: FUNC 1579762338dSopenharmony_ci */ 1589762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0130, Function | MediumTest | Level1) 1599762338dSopenharmony_ci{ 1609762338dSopenharmony_ci int32_t i; 1619762338dSopenharmony_ci int32_t ret; 1629762338dSopenharmony_ci struct LightEffect effect; 1639762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.r = 255; 1649762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.g = 0; 1659762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.b = 0; 1669762338dSopenharmony_ci effect.flashEffect.flashMode = LIGHT_FLASH_BLINK; 1679762338dSopenharmony_ci effect.flashEffect.onTime = g_onTime; 1689762338dSopenharmony_ci effect.flashEffect.offTime = g_offTime; 1699762338dSopenharmony_ci 1709762338dSopenharmony_ci for (i = 0; i < g_count; ++i) { 1719762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 1729762338dSopenharmony_ci EXPECT_EQ(0, ret); 1739762338dSopenharmony_ci 1749762338dSopenharmony_ci OsalSleep(LIGHT_WAIT_TIME); 1759762338dSopenharmony_ci 1769762338dSopenharmony_ci ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId); 1779762338dSopenharmony_ci EXPECT_EQ(0, ret); 1789762338dSopenharmony_ci } 1799762338dSopenharmony_ci} 1809762338dSopenharmony_ci 1819762338dSopenharmony_ci/** 1829762338dSopenharmony_ci * @tc.name: EnableLight003 1839762338dSopenharmony_ci * @tc.desc: Enables the light available in the light list based on the specified light id. 1849762338dSopenharmony_ci * @tc.type: FUNC 1859762338dSopenharmony_ci */ 1869762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0140, Function | MediumTest | Level1) 1879762338dSopenharmony_ci{ 1889762338dSopenharmony_ci int32_t i; 1899762338dSopenharmony_ci int32_t ret; 1909762338dSopenharmony_ci uint32_t lightId = LIGHT_ID_BUTT; 1919762338dSopenharmony_ci struct LightEffect effect; 1929762338dSopenharmony_ci 1939762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(lightId, &effect); 1949762338dSopenharmony_ci EXPECT_EQ(LIGHT_NOT_SUPPORT, ret); 1959762338dSopenharmony_ci 1969762338dSopenharmony_ci for (i = 0; i < g_count; ++i) { 1979762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.r = 255; 1989762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.g = 0; 1999762338dSopenharmony_ci effect.lightColor.colorValue.rgbColor.b = 0; 2009762338dSopenharmony_ci effect.flashEffect.flashMode = LIGHT_FLASH_BUTT; 2019762338dSopenharmony_ci effect.flashEffect.onTime = g_onTime; 2029762338dSopenharmony_ci effect.flashEffect.offTime = g_offTime; 2039762338dSopenharmony_ci 2049762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 2059762338dSopenharmony_ci EXPECT_EQ(LIGHT_NOT_FLASH, ret); 2069762338dSopenharmony_ci 2079762338dSopenharmony_ci effect.flashEffect.flashMode = LIGHT_FLASH_BLINK; 2089762338dSopenharmony_ci effect.flashEffect.onTime = 0; 2099762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 2109762338dSopenharmony_ci EXPECT_EQ(LIGHT_NOT_FLASH, ret); 2119762338dSopenharmony_ci 2129762338dSopenharmony_ci effect.flashEffect.onTime = g_onTime; 2139762338dSopenharmony_ci effect.flashEffect.offTime = 0; 2149762338dSopenharmony_ci ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 2159762338dSopenharmony_ci EXPECT_EQ(LIGHT_NOT_FLASH, ret); 2169762338dSopenharmony_ci } 2179762338dSopenharmony_ci} 2189762338dSopenharmony_ci 2199762338dSopenharmony_ci/** 2209762338dSopenharmony_ci * @tc.name: DisableLight001 2219762338dSopenharmony_ci * @tc.desc: Disable the light available in the light list based on the specified light id. 2229762338dSopenharmony_ci * @tc.type: FUNC 2239762338dSopenharmony_ci */ 2249762338dSopenharmony_ciHWTEST_F(HdfLightTest, SUB_DriverSystem_LightHdi_0150, Function | MediumTest | Level1) 2259762338dSopenharmony_ci{ 2269762338dSopenharmony_ci uint32_t lightId = LIGHT_ID_BUTT; 2279762338dSopenharmony_ci 2289762338dSopenharmony_ci int32_t ret = g_lightDev->TurnOffLight(lightId); 2299762338dSopenharmony_ci EXPECT_EQ(HDF_FAILURE, ret); 2309762338dSopenharmony_ci} 231