• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 <chrono>
17 #include <cstdio>
18 #include <gtest/gtest.h>
19 #include <iostream>
20 #include <sys/types.h>
21 #include <unistd.h>
22 
23 #include "accesstoken_kit.h"
24 #include "syspara/parameter.h"
25 #include "system_ability_definition.h"
26 #include "ui_appearance_ability.h"
27 #include "ui_appearance_log.h"
28 
29 using namespace testing::ext;
30 static constexpr int UISERVER_UID = 3050;
31 
32 namespace OHOS {
33 namespace ArkUi::UiAppearance {
34 class UiAppearanceAbilityTest : public UiAppearanceAbility {
35 public:
UiAppearanceAbilityTest()36     UiAppearanceAbilityTest() : UiAppearanceAbility(ARKUI_UI_APPEARANCE_SERVICE_ID, true) {}
~UiAppearanceAbilityTest()37     ~UiAppearanceAbilityTest() {}
OnStart()38     void OnStart() override
39     {
40         return;
41     }
42 };
43 
44 class DarkModeTest : public testing::Test {
45 public:
46     static void SetUpTestCase(void);
47     static void TearDownTestCase(void);
48     void SetUp();
49     void TearDown();
50 
GetUiAppearanceAbilityTest()51     static sptr<UiAppearanceAbilityTest> GetUiAppearanceAbilityTest()
52     {
53         return new UiAppearanceAbilityTest;
54     }
55 
56 private:
57     int userId_;
58 };
59 
SetUpTestCase(void)60 void DarkModeTest::SetUpTestCase(void) {}
61 
TearDownTestCase(void)62 void DarkModeTest::TearDownTestCase(void) {}
63 
SetUp(void)64 void DarkModeTest::SetUp(void)
65 {
66     userId_ = geteuid();
67     seteuid(UISERVER_UID);
68 }
69 
TearDown(void)70 void DarkModeTest::TearDown(void)
71 {
72     seteuid(userId_);
73 }
74 
75 /**
76  * @tc.name: ui_appearance_test_001
77  * @tc.desc: Test SetDarkMode and GetDarkMode APIs when setting dark/light.
78  * @tc.type: FUNC
79  */
80 HWTEST_F(DarkModeTest, ui_appearance_test_001, TestSize.Level0)
81 {
82     LOGI("Test SetDarkMode and GetDarkMode APIs when setting dark/light.");
83 
84     auto test = DarkModeTest::GetUiAppearanceAbilityTest();
85     auto result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
86     EXPECT_EQ(result, 0);
87     auto mode = test->GetDarkMode();
88     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
89 
90     result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
91     EXPECT_EQ(result, 0);
92     mode = test->GetDarkMode();
93     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
94 }
95 
96 /**
97  * @tc.name: ui_appearance_test_002
98  * @tc.desc: Test SetDarkMode and GetDarkMode APIs when repeatedly setting dark/light.
99  * @tc.type: FUNC
100  */
101 HWTEST_F(DarkModeTest, ui_appearance_test_002, TestSize.Level0)
102 {
103     LOGI("Test SetDarkMode and GetDarkMode APIs when repeatedly setting dark/light.");
104 
105     auto test = DarkModeTest::GetUiAppearanceAbilityTest();
106     auto result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
107     EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SUCCEEDED);
108     auto mode = test->GetDarkMode();
109     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
110 
111     result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
112     EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SYS_ERR);
113     mode = test->GetDarkMode();
114     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_DARK);
115 
116     result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
117     EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SUCCEEDED);
118     mode = test->GetDarkMode();
119     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
120 
121     result = test->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
122     EXPECT_EQ(result, UiAppearanceAbilityInterface::ErrCode::SYS_ERR);
123     mode = test->GetDarkMode();
124     EXPECT_EQ(mode, UiAppearanceAbilityInterface::DarkMode::ALWAYS_LIGHT);
125 }
126 
127 /**
128  * @tc.name: ui_appearance_test_003
129  * @tc.desc: Test the SetDarkMode API when setting an unexpected value
130  * @tc.type: FUNC
131  */
132 HWTEST_F(DarkModeTest, ui_appearance_test_003, TestSize.Level0)
133 {
134     LOGI("Test the SetDarkMode API when setting an unexpected value.");
135 
136     int result =
137         DarkModeTest::GetUiAppearanceAbilityTest()->SetDarkMode(UiAppearanceAbilityInterface::DarkMode::UNKNOWN);
138     EXPECT_NE(result, 0);
139 }
140 } // namespace ArkUi::UiAppearance
141 } // namespace OHOS
142