1db372d24Sopenharmony_ci/* 2db372d24Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3db372d24Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4db372d24Sopenharmony_ci * you may not use this file except in compliance with the License. 5db372d24Sopenharmony_ci * You may obtain a copy of the License at 6db372d24Sopenharmony_ci * 7db372d24Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8db372d24Sopenharmony_ci * 9db372d24Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10db372d24Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11db372d24Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12db372d24Sopenharmony_ci * See the License for the specific language governing permissions and 13db372d24Sopenharmony_ci * limitations under the License. 14db372d24Sopenharmony_ci */ 15db372d24Sopenharmony_ci 16db372d24Sopenharmony_ci#include <chrono> 17db372d24Sopenharmony_ci#include <cstdio> 18db372d24Sopenharmony_ci#include <gtest/gtest.h> 19db372d24Sopenharmony_ci#include <iostream> 20db372d24Sopenharmony_ci#include <sys/types.h> 21db372d24Sopenharmony_ci#include <unistd.h> 22db372d24Sopenharmony_ci#include <string> 23db372d24Sopenharmony_ci 24db372d24Sopenharmony_ci#include "accesstoken_kit.h" 25db372d24Sopenharmony_ci#include "syspara/parameter.h" 26db372d24Sopenharmony_ci#include "system_ability_definition.h" 27db372d24Sopenharmony_ci#include "ui_appearance_ability.h" 28db372d24Sopenharmony_ci#include "ui_appearance_log.h" 29db372d24Sopenharmony_ci 30db372d24Sopenharmony_ciusing namespace testing::ext; 31db372d24Sopenharmony_cistatic constexpr int UISERVER_UID = 3050; 32db372d24Sopenharmony_ci 33db372d24Sopenharmony_cinamespace OHOS { 34db372d24Sopenharmony_cinamespace ArkUi::UiAppearance { 35db372d24Sopenharmony_ciclass UiAppearanceAbilityTest : public UiAppearanceAbility { 36db372d24Sopenharmony_cipublic: 37db372d24Sopenharmony_ci UiAppearanceAbilityTest() : UiAppearanceAbility(ARKUI_UI_APPEARANCE_SERVICE_ID, true) {} 38db372d24Sopenharmony_ci ~UiAppearanceAbilityTest() {} 39db372d24Sopenharmony_ci void OnStart() override 40db372d24Sopenharmony_ci { 41db372d24Sopenharmony_ci return; 42db372d24Sopenharmony_ci } 43db372d24Sopenharmony_ci}; 44db372d24Sopenharmony_ci 45db372d24Sopenharmony_ciclass DarkModeTest : public testing::Test { 46db372d24Sopenharmony_cipublic: 47db372d24Sopenharmony_ci static void SetUpTestCase(void); 48db372d24Sopenharmony_ci static void TearDownTestCase(void); 49db372d24Sopenharmony_ci void SetUp(); 50db372d24Sopenharmony_ci void TearDown(); 51db372d24Sopenharmony_ci 52db372d24Sopenharmony_ci static sptr<UiAppearanceAbilityTest> GetUiAppearanceAbilityTest() 53db372d24Sopenharmony_ci { 54db372d24Sopenharmony_ci return new UiAppearanceAbilityTest; 55db372d24Sopenharmony_ci } 56db372d24Sopenharmony_ci 57db372d24Sopenharmony_ciprivate: 58db372d24Sopenharmony_ci int userId_; 59db372d24Sopenharmony_ci}; 60db372d24Sopenharmony_ci 61db372d24Sopenharmony_civoid DarkModeTest::SetUpTestCase(void) {} 62db372d24Sopenharmony_ci 63db372d24Sopenharmony_civoid DarkModeTest::TearDownTestCase(void) {} 64db372d24Sopenharmony_ci 65db372d24Sopenharmony_civoid DarkModeTest::SetUp(void) 66db372d24Sopenharmony_ci{ 67db372d24Sopenharmony_ci userId_ = geteuid(); 68db372d24Sopenharmony_ci seteuid(UISERVER_UID); 69db372d24Sopenharmony_ci} 70db372d24Sopenharmony_ci 71db372d24Sopenharmony_civoid DarkModeTest::TearDown(void) 72db372d24Sopenharmony_ci{ 73db372d24Sopenharmony_ci seteuid(userId_); 74db372d24Sopenharmony_ci} 75db372d24Sopenharmony_ci 76db372d24Sopenharmony_ci/** 77db372d24Sopenharmony_ci * @tc.name: ui_appearance_test_001 78db372d24Sopenharmony_ci * @tc.desc: Test SetDarkMode and GetDarkMode APIs when setting dark/light. 79db372d24Sopenharmony_ci * @tc.type: FUNC 80db372d24Sopenharmony_ci */ 81db372d24Sopenharmony_ciHWTEST_F(DarkModeTest, ui_appearance_test_001, TestSize.Level0) 82db372d24Sopenharmony_ci{ 83db372d24Sopenharmony_ci LOGI("Test SetDarkMode and GetDarkMode APIs when setting dark/light."); 84db372d24Sopenharmony_ci 85db372d24Sopenharmony_ci auto test = DarkModeTest::GetUiAppearanceAbilityTest(); 86db372d24Sopenharmony_ci auto result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 87db372d24Sopenharmony_ci EXPECT_EQ(result, 0); 88db372d24Sopenharmony_ci auto mode = test->GetDarkMode(); 89db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 90db372d24Sopenharmony_ci 91db372d24Sopenharmony_ci result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 92db372d24Sopenharmony_ci EXPECT_EQ(result, 0); 93db372d24Sopenharmony_ci mode = test->GetDarkMode(); 94db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 95db372d24Sopenharmony_ci} 96db372d24Sopenharmony_ci 97db372d24Sopenharmony_ci/** 98db372d24Sopenharmony_ci * @tc.name: ui_appearance_test_002 99db372d24Sopenharmony_ci * @tc.desc: Test SetDarkMode and GetDarkMode APIs when repeatedly setting dark/light. 100db372d24Sopenharmony_ci * @tc.type: FUNC 101db372d24Sopenharmony_ci */ 102db372d24Sopenharmony_ciHWTEST_F(DarkModeTest, ui_appearance_test_002, TestSize.Level0) 103db372d24Sopenharmony_ci{ 104db372d24Sopenharmony_ci LOGI("Test SetDarkMode and GetDarkMode APIs when repeatedly setting dark/light."); 105db372d24Sopenharmony_ci 106db372d24Sopenharmony_ci auto test = DarkModeTest::GetUiAppearanceAbilityTest(); 107db372d24Sopenharmony_ci auto result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 108db372d24Sopenharmony_ci EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SUCCEEDED); 109db372d24Sopenharmony_ci auto mode = test->GetDarkMode(); 110db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 111db372d24Sopenharmony_ci 112db372d24Sopenharmony_ci result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 113db372d24Sopenharmony_ci EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SYS_ERR); 114db372d24Sopenharmony_ci mode = test->GetDarkMode(); 115db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK); 116db372d24Sopenharmony_ci 117db372d24Sopenharmony_ci result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 118db372d24Sopenharmony_ci EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SUCCEEDED); 119db372d24Sopenharmony_ci mode = test->GetDarkMode(); 120db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 121db372d24Sopenharmony_ci 122db372d24Sopenharmony_ci result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 123db372d24Sopenharmony_ci EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SYS_ERR); 124db372d24Sopenharmony_ci mode = test->GetDarkMode(); 125db372d24Sopenharmony_ci EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT); 126db372d24Sopenharmony_ci} 127db372d24Sopenharmony_ci 128db372d24Sopenharmony_ci/** 129db372d24Sopenharmony_ci * @tc.name: ui_appearance_test_003 130db372d24Sopenharmony_ci * @tc.desc: Test the SetDarkMode API when setting an unexpected value 131db372d24Sopenharmony_ci * @tc.type: FUNC 132db372d24Sopenharmony_ci */ 133db372d24Sopenharmony_ciHWTEST_F(DarkModeTest, ui_appearance_test_003, TestSize.Level0) 134db372d24Sopenharmony_ci{ 135db372d24Sopenharmony_ci LOGI("Test the SetDarkMode API when setting an unexpected value."); 136db372d24Sopenharmony_ci 137db372d24Sopenharmony_ci int result = 138db372d24Sopenharmony_ci DarkModeTest::GetUiAppearanceAbilityTest()->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::UNKNOWN); 139db372d24Sopenharmony_ci EXPECT_NE(result, 0); 140db372d24Sopenharmony_ci} 141db372d24Sopenharmony_ci 142db372d24Sopenharmony_ci/** 143db372d24Sopenharmony_ci * @tc.name: ui_appearance_test_004 144db372d24Sopenharmony_ci * @tc.desc: Test the font API 145db372d24Sopenharmony_ci * @tc.type: FUNC 146db372d24Sopenharmony_ci */ 147db372d24Sopenharmony_ciHWTEST_F(DarkModeTest, ui_appearance_test_004, TestSize.Level0) 148db372d24Sopenharmony_ci{ 149db372d24Sopenharmony_ci LOGI("Test the font API"); 150db372d24Sopenharmony_ci 151db372d24Sopenharmony_ci std::string fontScale; 152db372d24Sopenharmony_ci int result = 153db372d24Sopenharmony_ci DarkModeTest::GetUiAppearanceAbilityTest()->GetFontScale(fontScale); 154db372d24Sopenharmony_ci EXPECT_EQ(result, 0); 155db372d24Sopenharmony_ci 156db372d24Sopenharmony_ci std::string fontWeightScale; 157db372d24Sopenharmony_ci result = 158db372d24Sopenharmony_ci DarkModeTest::GetUiAppearanceAbilityTest()->GetFontWeightScale(fontWeightScale); 159db372d24Sopenharmony_ci EXPECT_EQ(result, 0); 160db372d24Sopenharmony_ci} 161db372d24Sopenharmony_ci} // namespace ArkUi::UiAppearance 162db372d24Sopenharmony_ci} // namespace OHOS 163