1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#include <gtest/gtest.h>
17e0dac50fSopenharmony_ci#include "root_scene.h"
18e0dac50fSopenharmony_ci#include <event_handler.h>
19e0dac50fSopenharmony_ci#include <input_manager.h>
20e0dac50fSopenharmony_ci#include <ui_content.h>
21e0dac50fSopenharmony_ci#include <viewport_config.h>
22e0dac50fSopenharmony_ci
23e0dac50fSopenharmony_ci#include "app_mgr_client.h"
24e0dac50fSopenharmony_ci#include "singleton.h"
25e0dac50fSopenharmony_ci#include "singleton_container.h"
26e0dac50fSopenharmony_ci
27e0dac50fSopenharmony_ci#include "vsync_station.h"
28e0dac50fSopenharmony_ci#include "window_manager_hilog.h"
29e0dac50fSopenharmony_ci
30e0dac50fSopenharmony_ciusing namespace testing;
31e0dac50fSopenharmony_ciusing namespace testing::ext;
32e0dac50fSopenharmony_ci
33e0dac50fSopenharmony_cinamespace OHOS {
34e0dac50fSopenharmony_cinamespace Rosen {
35e0dac50fSopenharmony_ciconst uint32_t MOCK_LEM_SUB_WIDTH = 340;
36e0dac50fSopenharmony_ciconst uint32_t MOCK_LEM_SUB_HEIGHT = 340;
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ciclass RootSceneTest : public testing::Test {
39e0dac50fSopenharmony_cipublic:
40e0dac50fSopenharmony_ci    static void SetUpTestCase();
41e0dac50fSopenharmony_ci    static void TearDownTestCase();
42e0dac50fSopenharmony_ci    void SetUp() override;
43e0dac50fSopenharmony_ci    void TearDown() override;
44e0dac50fSopenharmony_ciprivate:
45e0dac50fSopenharmony_ci    static constexpr uint32_t WAIT_SYNC_IN_NS = 200000;
46e0dac50fSopenharmony_ci};
47e0dac50fSopenharmony_ci
48e0dac50fSopenharmony_civoid RootSceneTest::SetUpTestCase()
49e0dac50fSopenharmony_ci{
50e0dac50fSopenharmony_ci}
51e0dac50fSopenharmony_ci
52e0dac50fSopenharmony_civoid RootSceneTest::TearDownTestCase()
53e0dac50fSopenharmony_ci{
54e0dac50fSopenharmony_ci}
55e0dac50fSopenharmony_ci
56e0dac50fSopenharmony_civoid RootSceneTest::SetUp()
57e0dac50fSopenharmony_ci{
58e0dac50fSopenharmony_ci}
59e0dac50fSopenharmony_ci
60e0dac50fSopenharmony_civoid RootSceneTest::TearDown()
61e0dac50fSopenharmony_ci{
62e0dac50fSopenharmony_ci    usleep(WAIT_SYNC_IN_NS);
63e0dac50fSopenharmony_ci}
64e0dac50fSopenharmony_ci
65e0dac50fSopenharmony_cinamespace {
66e0dac50fSopenharmony_ci/**
67e0dac50fSopenharmony_ci * @tc.name: LoadContent01
68e0dac50fSopenharmony_ci * @tc.desc: context is nullptr
69e0dac50fSopenharmony_ci * @tc.type: FUNC
70e0dac50fSopenharmony_ci */
71e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, LoadContent01, Function | SmallTest | Level3)
72e0dac50fSopenharmony_ci{
73e0dac50fSopenharmony_ci    RootScene rootScene;
74e0dac50fSopenharmony_ci    rootScene.LoadContent("a", nullptr, nullptr, nullptr);
75e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
76e0dac50fSopenharmony_ci}
77e0dac50fSopenharmony_ci
78e0dac50fSopenharmony_ci/**
79e0dac50fSopenharmony_ci * @tc.name: UpdateViewportConfig01
80e0dac50fSopenharmony_ci * @tc.desc: UpdateViewportConfig Test
81e0dac50fSopenharmony_ci * @tc.type: FUNC
82e0dac50fSopenharmony_ci */
83e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, UpdateViewportConfig01, Function | SmallTest | Level3)
84e0dac50fSopenharmony_ci{
85e0dac50fSopenharmony_ci    RootScene rootScene;
86e0dac50fSopenharmony_ci    Rect rect;
87e0dac50fSopenharmony_ci
88e0dac50fSopenharmony_ci    rootScene.uiContent_ = nullptr;
89e0dac50fSopenharmony_ci    rootScene.UpdateViewportConfig(rect, WindowSizeChangeReason::UNDEFINED);
90e0dac50fSopenharmony_ci
91e0dac50fSopenharmony_ci    rect.width_ = MOCK_LEM_SUB_WIDTH;
92e0dac50fSopenharmony_ci    rect.height_ = MOCK_LEM_SUB_HEIGHT;
93e0dac50fSopenharmony_ci    rootScene.UpdateViewportConfig(rect, WindowSizeChangeReason::UNDEFINED);
94e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
95e0dac50fSopenharmony_ci}
96e0dac50fSopenharmony_ci
97e0dac50fSopenharmony_ci/**
98e0dac50fSopenharmony_ci * @tc.name: UpdateConfiguration
99e0dac50fSopenharmony_ci * @tc.desc: UpdateConfiguration Test
100e0dac50fSopenharmony_ci * @tc.type: FUNC
101e0dac50fSopenharmony_ci */
102e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, UpdateConfiguration, Function | SmallTest | Level3)
103e0dac50fSopenharmony_ci{
104e0dac50fSopenharmony_ci    RootScene rootScene;
105e0dac50fSopenharmony_ci    std::shared_ptr<AppExecFwk::Configuration> configuration = std::make_shared<AppExecFwk::Configuration>();
106e0dac50fSopenharmony_ci
107e0dac50fSopenharmony_ci    rootScene.uiContent_ = nullptr;
108e0dac50fSopenharmony_ci    rootScene.UpdateConfiguration(configuration);
109e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
110e0dac50fSopenharmony_ci}
111e0dac50fSopenharmony_ci
112e0dac50fSopenharmony_ci/**
113e0dac50fSopenharmony_ci * @tc.name: UpdateConfigurationForAll
114e0dac50fSopenharmony_ci * @tc.desc: UpdateConfigurationForAll Test
115e0dac50fSopenharmony_ci * @tc.type: FUNC
116e0dac50fSopenharmony_ci */
117e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, UpdateConfigurationForAll, Function | SmallTest | Level3)
118e0dac50fSopenharmony_ci{
119e0dac50fSopenharmony_ci    RootScene rootScene;
120e0dac50fSopenharmony_ci    std::shared_ptr<AppExecFwk::Configuration> configuration = std::make_shared<AppExecFwk::Configuration>();
121e0dac50fSopenharmony_ci
122e0dac50fSopenharmony_ci    auto prevStaticRootScene = RootScene::staticRootScene_;
123e0dac50fSopenharmony_ci    rootScene.UpdateConfigurationForAll(configuration);
124e0dac50fSopenharmony_ci
125e0dac50fSopenharmony_ci    sptr<RootScene> staticRootScene;
126e0dac50fSopenharmony_ci    RootScene::staticRootScene_ = staticRootScene;
127e0dac50fSopenharmony_ci    rootScene.UpdateConfigurationForAll(configuration);
128e0dac50fSopenharmony_ci
129e0dac50fSopenharmony_ci    RootScene::staticRootScene_ = prevStaticRootScene;
130e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
131e0dac50fSopenharmony_ci}
132e0dac50fSopenharmony_ci
133e0dac50fSopenharmony_ci/**
134e0dac50fSopenharmony_ci * @tc.name: RegisterInputEventListener01
135e0dac50fSopenharmony_ci * @tc.desc: RegisterInputEventListener Test
136e0dac50fSopenharmony_ci * @tc.type: FUNC
137e0dac50fSopenharmony_ci */
138e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, RegisterInputEventListener01, Function | SmallTest | Level3)
139e0dac50fSopenharmony_ci{
140e0dac50fSopenharmony_ci    RootScene rootScene;
141e0dac50fSopenharmony_ci    rootScene.RegisterInputEventListener();
142e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
143e0dac50fSopenharmony_ci}
144e0dac50fSopenharmony_ci
145e0dac50fSopenharmony_ci/**
146e0dac50fSopenharmony_ci * @tc.name: RequestVsyncErr
147e0dac50fSopenharmony_ci * @tc.desc: RequestVsync Test Err
148e0dac50fSopenharmony_ci * @tc.type: FUNC
149e0dac50fSopenharmony_ci */
150e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, RequestVsyncErr, Function | SmallTest | Level3)
151e0dac50fSopenharmony_ci{
152e0dac50fSopenharmony_ci    RootScene rootScene;
153e0dac50fSopenharmony_ci    std::shared_ptr<VsyncCallback> vsyncCallback = std::make_shared<VsyncCallback>();
154e0dac50fSopenharmony_ci    rootScene.RequestVsync(vsyncCallback);
155e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
156e0dac50fSopenharmony_ci}
157e0dac50fSopenharmony_ci
158e0dac50fSopenharmony_ci/**
159e0dac50fSopenharmony_ci * @tc.name: GetVSyncPeriod
160e0dac50fSopenharmony_ci * @tc.desc: GetVSyncPeriod Test
161e0dac50fSopenharmony_ci * @tc.type: FUNC
162e0dac50fSopenharmony_ci */
163e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, GetVSyncPeriod, Function | SmallTest | Level3)
164e0dac50fSopenharmony_ci{
165e0dac50fSopenharmony_ci    RootScene rootScene;
166e0dac50fSopenharmony_ci    rootScene.GetVSyncPeriod();
167e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
168e0dac50fSopenharmony_ci}
169e0dac50fSopenharmony_ci
170e0dac50fSopenharmony_ci/**
171e0dac50fSopenharmony_ci * @tc.name: FlushFrameRate
172e0dac50fSopenharmony_ci * @tc.desc: FlushFrameRate Test
173e0dac50fSopenharmony_ci * @tc.type: FUNC
174e0dac50fSopenharmony_ci */
175e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, FlushFrameRate, Function | SmallTest | Level3)
176e0dac50fSopenharmony_ci{
177e0dac50fSopenharmony_ci    RootScene rootScene;
178e0dac50fSopenharmony_ci    uint32_t rate = 120;
179e0dac50fSopenharmony_ci    int32_t animatorExpectedFrameRate = -1;
180e0dac50fSopenharmony_ci    rootScene.FlushFrameRate(rate, animatorExpectedFrameRate);
181e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
182e0dac50fSopenharmony_ci}
183e0dac50fSopenharmony_ci
184e0dac50fSopenharmony_ci/**
185e0dac50fSopenharmony_ci * @tc.name: SetFrameLayoutFinishCallback
186e0dac50fSopenharmony_ci * @tc.desc: SetFrameLayoutFinishCallback Test
187e0dac50fSopenharmony_ci * @tc.type: FUNC
188e0dac50fSopenharmony_ci */
189e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, SetFrameLayoutFinishCallback, Function | SmallTest | Level3)
190e0dac50fSopenharmony_ci{
191e0dac50fSopenharmony_ci    RootScene rootScene;
192e0dac50fSopenharmony_ci
193e0dac50fSopenharmony_ci    rootScene.SetFrameLayoutFinishCallback(nullptr);
194e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
195e0dac50fSopenharmony_ci}
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ci/**
198e0dac50fSopenharmony_ci * @tc.name: SetUiDvsyncSwitch
199e0dac50fSopenharmony_ci * @tc.desc: SetUiDvsyncSwitch Test
200e0dac50fSopenharmony_ci * @tc.type: FUNC
201e0dac50fSopenharmony_ci */
202e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, SetUiDvsyncSwitchSucc, Function | SmallTest | Level3)
203e0dac50fSopenharmony_ci{
204e0dac50fSopenharmony_ci    RootScene rootScene;
205e0dac50fSopenharmony_ci    rootScene.SetUiDvsyncSwitch(true);
206e0dac50fSopenharmony_ci    rootScene.SetUiDvsyncSwitch(false);
207e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
208e0dac50fSopenharmony_ci}
209e0dac50fSopenharmony_ci
210e0dac50fSopenharmony_ci/**
211e0dac50fSopenharmony_ci * @tc.name: SetUiDvsyncSwitch
212e0dac50fSopenharmony_ci * @tc.desc: SetUiDvsyncSwitch Test
213e0dac50fSopenharmony_ci * @tc.type: FUNC
214e0dac50fSopenharmony_ci */
215e0dac50fSopenharmony_ciHWTEST_F(RootSceneTest, SetUiDvsyncSwitchErr, Function | SmallTest | Level3)
216e0dac50fSopenharmony_ci{
217e0dac50fSopenharmony_ci    RootScene rootScene;
218e0dac50fSopenharmony_ci    rootScene.SetUiDvsyncSwitch(true);
219e0dac50fSopenharmony_ci    rootScene.SetUiDvsyncSwitch(false);
220e0dac50fSopenharmony_ci    ASSERT_EQ(1, rootScene.GetWindowId());
221e0dac50fSopenharmony_ci}
222e0dac50fSopenharmony_ci}
223e0dac50fSopenharmony_ci} // namespace Rosen
224e0dac50fSopenharmony_ci} // namespace OHOS