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