1 /*
2  * Copyright (c) 2021 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 <gtest/gtest.h>
17 #include "window_option.h"
18 
19 using namespace testing;
20 using namespace testing::ext;
21 
22 namespace OHOS {
23 namespace Rosen {
24 namespace {
25     const SystemBarProperty SYS_BAR_PROP_DEFAULT;
26     const SystemBarProperty SYS_BAR_PROP_1(true, 0xE5111111, 0xE5222222);
27     const SystemBarProperty SYS_BAR_PROP_2(false, 0xE5222222, 0xE5333333);
28     const std::unordered_map<WindowType, SystemBarProperty>& SYS_BAR_PROPS_TEST = {
29         { WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP_1 },
30         { WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_2 },
31     };
32     const std::unordered_map<WindowType, SystemBarProperty>& SYS_BAR_PROPS_DEFAULT = {
33         { WindowType::WINDOW_TYPE_STATUS_BAR,     SYS_BAR_PROP_DEFAULT },
34         { WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_DEFAULT },
35     };
36 }
37 class WindowOptionTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
41     virtual void SetUp() override;
42     virtual void TearDown() override;
43 };
SetUpTestCase()44 void WindowOptionTest::SetUpTestCase()
45 {
46 }
47 
TearDownTestCase()48 void WindowOptionTest::TearDownTestCase()
49 {
50 }
51 
SetUp()52 void WindowOptionTest::SetUp()
53 {
54 }
55 
TearDown()56 void WindowOptionTest::TearDown()
57 {
58 }
59 
60 namespace {
61 /**
62  * @tc.name: WindowRect01
63  * @tc.desc: SetWindowRect/GetWindowRect
64  * @tc.type: FUNC
65  */
66 HWTEST_F(WindowOptionTest, WindowRect01, Function | SmallTest | Level2)
67 {
68     sptr<WindowOption> option = new WindowOption();
69     struct Rect rect = {1, 2, 3u, 4u};
70     option->SetWindowRect(rect);
71 
72     ASSERT_EQ(1, option->GetWindowRect().posX_);
73     ASSERT_EQ(2, option->GetWindowRect().posY_);
74     ASSERT_EQ(3u, option->GetWindowRect().width_);
75     ASSERT_EQ(4u, option->GetWindowRect().height_);
76 }
77 
78 /**
79  * @tc.name: WindowType01
80  * @tc.desc: SetWindowType/GetWindowType
81  * @tc.type: FUNC
82  */
83 HWTEST_F(WindowOptionTest, WindowType01, Function | SmallTest | Level2)
84 {
85     sptr<WindowOption> option = new WindowOption();
86     option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
87     ASSERT_EQ(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, option->GetWindowType());
88 }
89 
90 /**
91  * @tc.name: WindowMode01
92  * @tc.desc: SetWindowMode/GetWindowMode
93  * @tc.type: FUNC
94  */
95 HWTEST_F(WindowOptionTest, WindowMode01, Function | SmallTest | Level2)
96 {
97     sptr<WindowOption> option = new WindowOption();
98     option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
99     ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, option->GetWindowMode());
100 }
101 
102 /**
103  * @tc.name: WindowMode02
104  * @tc.desc: SetWindowMode/GetWindowMode
105  * @tc.type: FUNC
106  */
107 HWTEST_F(WindowOptionTest, WindowMode02, Function | SmallTest | Level2)
108 {
109     sptr<WindowOption> option = new WindowOption();
110     WindowMode defaultMode = option->GetWindowMode();
111     option->SetWindowMode(WindowMode::WINDOW_MODE_UNDEFINED);
112     ASSERT_EQ(defaultMode, option->GetWindowMode());
113 }
114 
115 /**
116  * @tc.name: WindowMode03
117  * @tc.desc: SetWindowMode/GetWindowMode
118  * @tc.type: FUNC
119  */
120 HWTEST_F(WindowOptionTest, WindowMode03, Function | SmallTest | Level2)
121 {
122     sptr<WindowOption> option = new WindowOption();
123     option->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
124     ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, option->GetWindowMode());
125 }
126 
127 /**
128  * @tc.name: WindowMode04
129  * @tc.desc: SetWindowMode/GetWindowMode
130  * @tc.type: FUNC
131  */
132 HWTEST_F(WindowOptionTest, WindowMode04, Function | SmallTest | Level2)
133 {
134     sptr<WindowOption> option = new WindowOption();
135     option->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
136     ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_SECONDARY, option->GetWindowMode());
137 }
138 
139 /**
140  * @tc.name: WindowMode05
141  * @tc.desc: SetWindowMode/GetWindowMode
142  * @tc.type: FUNC
143  */
144 HWTEST_F(WindowOptionTest, WindowMode05, Function | SmallTest | Level2)
145 {
146     sptr<WindowOption> option = new WindowOption();
147     option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
148     ASSERT_EQ(WindowMode::WINDOW_MODE_FLOATING, option->GetWindowMode());
149 }
150 
151 /**
152  * @tc.name: WindowMode06
153  * @tc.desc: SetWindowMode/GetWindowMode
154  * @tc.type: FUNC
155  */
156 HWTEST_F(WindowOptionTest, WindowMode06, Function | SmallTest | Level2)
157 {
158     sptr<WindowOption> option = new WindowOption();
159     option->SetWindowMode(WindowMode::WINDOW_MODE_PIP);
160     ASSERT_EQ(WindowMode::WINDOW_MODE_PIP, option->GetWindowMode());
161 }
162 /**
163  * @tc.name: Focusable01
164  * @tc.desc: SetFocusable/GetFocusable
165  * @tc.type: FUNC
166  */
167 HWTEST_F(WindowOptionTest, Focusable01, Function | SmallTest | Level2)
168 {
169     sptr<WindowOption> option = new WindowOption();
170     option->SetFocusable(true);
171     ASSERT_EQ(true, option->GetFocusable());
172 }
173 
174 /**
175  * @tc.name: Touchable01
176  * @tc.desc: SetTouchable/GetTouchable
177  * @tc.type: FUNC
178  */
179 HWTEST_F(WindowOptionTest, Touchable01, Function | SmallTest | Level2)
180 {
181     sptr<WindowOption> option = new WindowOption();
182     option->SetTouchable(true);
183     ASSERT_EQ(true, option->GetTouchable());
184 }
185 
186 /**
187  * @tc.name: DisplayId01
188  * @tc.desc: SetDisplayId/GetDisplayId
189  * @tc.type: FUNC
190  */
191 HWTEST_F(WindowOptionTest, DisplayId01, Function | SmallTest | Level2)
192 {
193     sptr<WindowOption> option = new WindowOption();
194     option->SetDisplayId(1);
195     ASSERT_EQ(1, option->GetDisplayId());
196 }
197 
198 /**
199  * @tc.name: ParentId01
200  * @tc.desc: SetParentId/GetParentId
201  * @tc.type: FUNC
202  */
203 HWTEST_F(WindowOptionTest, ParentId01, Function | SmallTest | Level2)
204 {
205     sptr<WindowOption> option = new WindowOption();
206     option->SetParentId(1);
207     ASSERT_EQ(1, option->GetParentId());
208 }
209 
210 /**
211  * @tc.name: WindowName01
212  * @tc.desc: SetWindowName/GetWindowName
213  * @tc.type: FUNC
214  */
215 HWTEST_F(WindowOptionTest, WindowName01, Function | SmallTest | Level2)
216 {
217     sptr<WindowOption> option = new WindowOption();
218     option->SetWindowName("Sub Window");
219     ASSERT_EQ("Sub Window", option->GetWindowName());
220 }
221 
222 /**
223  * @tc.name: BundleName01
224  * @tc.desc: SetBundleName/GetBundleName
225  * @tc.type: FUNC
226  */
227 HWTEST_F(WindowOptionTest, BundleName01, Function | SmallTest | Level2)
228 {
229     sptr<WindowOption> option = new WindowOption();
230     option->SetBundleName("settings");
231     ASSERT_EQ("settings", option->GetBundleName());
232 }
233 
234 /**
235  * @tc.name: WindowFlag01
236  * @tc.desc: SetWindowFlags/GetWindowFlags
237  * @tc.type: FUNC
238  */
239 HWTEST_F(WindowOptionTest, WindowFlag01, Function | SmallTest | Level2)
240 {
241     sptr<WindowOption> option = new WindowOption();
242     option->SetWindowFlags(1u);
243     ASSERT_EQ(1u, option->GetWindowFlags());
244 }
245 
246 /**
247  * @tc.name: WindowFlag02
248  * @tc.desc: AddWindowFlag/GetWindowFlags
249  * @tc.type: FUNC
250  */
251 HWTEST_F(WindowOptionTest, WindowFlag02, Function | SmallTest | Level2)
252 {
253     sptr<WindowOption> option = new WindowOption();
254     option->AddWindowFlag(WindowFlag::WINDOW_FLAG_NEED_AVOID);
255     ASSERT_EQ(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID), option->GetWindowFlags());
256 }
257 
258 /**
259  * @tc.name: WindowFlag03
260  * @tc.desc: AddWindowFlag/RemoveWindowFlag/GetWindowFlags
261  * @tc.type: FUNC
262  */
263 HWTEST_F(WindowOptionTest, WindowFlag03, Function | SmallTest | Level2)
264 {
265     sptr<WindowOption> option = new WindowOption();
266     option->AddWindowFlag(WindowFlag::WINDOW_FLAG_NEED_AVOID);
267     option->AddWindowFlag(WindowFlag::WINDOW_FLAG_PARENT_LIMIT);
268     option->RemoveWindowFlag(WindowFlag::WINDOW_FLAG_NEED_AVOID);
269     ASSERT_EQ(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT), option->GetWindowFlags());
270 }
271 
272 /**
273  * @tc.name: SetGetSystemBarProperty01
274  * @tc.desc: SetSystemBarProperty with test param and get
275  * @tc.type: FUNC
276  */
277 HWTEST_F(WindowOptionTest, SetGetSystemBarProperty01, Function | SmallTest | Level3)
278 {
279     sptr<WindowOption> option = new WindowOption();
280     option->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP_1);
281     option->SetSystemBarProperty(WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_2);
282     ASSERT_EQ(SYS_BAR_PROPS_TEST, option->GetSystemBarProperty());
283 }
284 
285 /**
286  * @tc.name: SetGetSystemBarProperty02
287  * @tc.desc: SetSystemBarProperty with invalid type and get
288  * @tc.type: FUNC
289  */
290 HWTEST_F(WindowOptionTest, SetGetSystemBarProperty02, Function | SmallTest | Level3)
291 {
292     sptr<WindowOption> option = new WindowOption();
293     option->SetSystemBarProperty(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, SYS_BAR_PROP_1);
294     option->SetSystemBarProperty(WindowType::WINDOW_TYPE_MEDIA, SYS_BAR_PROP_2);
295     ASSERT_EQ(SYS_BAR_PROPS_DEFAULT, option->GetSystemBarProperty());
296 }
297 
298 /**
299  * @tc.name: SetGetSystemBarProperty03
300  * @tc.desc: GetSystemBarProperty with no set
301  * @tc.type: FUNC
302  */
303 HWTEST_F(WindowOptionTest, SetGetSystemBarProperty03, Function | SmallTest | Level3)
304 {
305     sptr<WindowOption> option = new WindowOption();
306     ASSERT_EQ(SYS_BAR_PROPS_DEFAULT, option->GetSystemBarProperty());
307 }
308 
309 /**
310  * @tc.name: HitOffset
311  * @tc.desc: HitOffset setter/getter test
312  * @tc.type: FUNC
313  */
314 HWTEST_F(WindowOptionTest, HitOffset, Function | SmallTest | Level3)
315 {
316     sptr<WindowOption> option = new WindowOption();
317     option->SetHitOffset(1, 1);
318     PointInfo point = {1, 1};
319     ASSERT_EQ(point.x, option->GetHitOffset().x);
320     ASSERT_EQ(point.y, option->GetHitOffset().y);
321 }
322 
323 /**
324  * @tc.name: KeepScreenOn
325  * @tc.desc: KeepScreenOn setter/getter test
326  * @tc.type: FUNC
327  */
328 HWTEST_F(WindowOptionTest, KeepScreenOn, Function | SmallTest | Level3)
329 {
330     sptr<WindowOption> option = new WindowOption();
331     option->SetKeepScreenOn(true);
332     ASSERT_EQ(true, option->IsKeepScreenOn());
333     option->SetKeepScreenOn(false);
334     ASSERT_EQ(false, option->IsKeepScreenOn());
335 }
336 
337 /**
338  * @tc.name: TurnScreenOn
339  * @tc.desc: TurnScreenOn setter/getter test
340  * @tc.type: FUNC
341  */
342 HWTEST_F(WindowOptionTest, TurnScreenOn, Function | SmallTest | Level3)
343 {
344     sptr<WindowOption> option = new WindowOption();
345     option->SetTurnScreenOn(true);
346     ASSERT_EQ(true, option->IsTurnScreenOn());
347     option->SetTurnScreenOn(false);
348     ASSERT_EQ(false, option->IsTurnScreenOn());
349 }
350 
351 /**
352  * @tc.name: Brightness
353  * @tc.desc: Brightness setter/getter test
354  * @tc.type: FUNC
355  */
356 HWTEST_F(WindowOptionTest, Brightness, Function | SmallTest | Level3)
357 {
358     sptr<WindowOption> option = new WindowOption();
359     option->SetBrightness(MINIMUM_BRIGHTNESS);
360     ASSERT_EQ(MINIMUM_BRIGHTNESS, option->GetBrightness());
361     option->SetBrightness(MAXIMUM_BRIGHTNESS);
362     ASSERT_EQ(MAXIMUM_BRIGHTNESS, option->GetBrightness());
363 }
364 
365 /**
366  * @tc.name: CallingWindow
367  * @tc.desc: CallingWindow setter/getter test
368  * @tc.type: FUNC
369  */
370 HWTEST_F(WindowOptionTest, CallingWindow, Function | SmallTest | Level3)
371 {
372     sptr<WindowOption> option = new WindowOption();
373     option->SetCallingWindow(1);
374     ASSERT_EQ(1, option->GetCallingWindow());
375 }
376 
377 /**
378  * @tc.name: SetWindowSessionType
379  * @tc.desc: SetWindowSessionType fun
380  * @tc.type: FUNC
381  */
382 HWTEST_F(WindowOptionTest, SetWindowSessionType, Function | SmallTest | Level3)
383 {
384     sptr<WindowOption> option = new WindowOption();
385     auto ret = true;
386     option->SetWindowSessionType(WindowSessionType::SCENE_SESSION);
387     ASSERT_EQ(true, ret);
388 }
389 
390 /**
391  * @tc.name: GetWindowSessionType
392  * @tc.desc: GetWindowSessionType fun
393  * @tc.type: FUNC
394  */
395 HWTEST_F(WindowOptionTest, GetWindowSessionType, Function | SmallTest | Level3)
396 {
397     sptr<WindowOption> option = new WindowOption();
398     option->SetWindowSessionType(WindowSessionType::SCENE_SESSION);
399     option->GetWindowSessionType();
400     ASSERT_EQ(WindowSessionType::SCENE_SESSION, option->GetWindowSessionType());
401 }
402 
403 /**
404  * @tc.name: Test01
405  * @tc.desc: Test01
406  * @tc.type: FUNC
407  */
408 HWTEST_F(WindowOptionTest, Test01, Function | SmallTest | Level3)
409 {
410     sptr<WindowOption> option = new WindowOption();
411     ASSERT_NE(nullptr, option);
412     option->SetExtensionTag(true);
413     option->SetSubWindowTitle("Test");
414     std::string ret = option->GetSubWindowTitle();
415     ASSERT_EQ(true, ret == "Test");
416     option->SetSubWindowDecorEnable(true);
417     bool ret1 = option->GetSubWindowDecorEnable();
418     ASSERT_EQ(true, ret1);
419     option->SetOnlySupportSceneBoard(true);
420     bool ret2 = option->GetOnlySupportSceneBoard();
421     ASSERT_EQ(true, ret2);
422 }
423 
424 /**
425  * @tc.name: RealParentId
426  * @tc.desc: RealParentId setter and getter test
427  * @tc.type: FUNC
428  */
429 HWTEST_F(WindowOptionTest, SetRealParentId, Function | SmallTest | Level3)
430 {
431     sptr<WindowOption> option = sptr<WindowOption>::MakeSptr();
432     ASSERT_NE(nullptr, option);
433     option->SetRealParentId(114);
434     EXPECT_EQ(114, option->GetRealParentId());
435     option->SetRealParentId(514);
436     EXPECT_EQ(514, option->GetRealParentId());
437 }
438 
439 /**
440  * @tc.name: SetParentWindowType
441  * @tc.desc: SetParentWindowType setter and getter test
442  * @tc.type: FUNC
443  */
444 HWTEST_F(WindowOptionTest, SetParentWindowType, Function | SmallTest | Level3)
445 {
446     sptr<WindowOption> option = sptr<WindowOption>::MakeSptr();
447     ASSERT_NE(nullptr, option);
448     option->SetParentWindowType(WindowType::WINDOW_TYPE_TOAST);
449     EXPECT_EQ(WindowType::WINDOW_TYPE_TOAST, option->GetParentWindowType());
450     option->SetParentWindowType(WindowType::WINDOW_TYPE_APP_COMPONENT);
451     EXPECT_EQ(WindowType::WINDOW_TYPE_APP_COMPONENT, option->GetParentWindowType());
452 }
453 
454 /**
455  * @tc.name: UIExtensionUsage
456  * @tc.desc: UIExtensionUsage setter and getter test
457  * @tc.type: FUNC
458  */
459 HWTEST_F(WindowOptionTest, SetUIExtensionUsage, Function | SmallTest | Level3)
460 {
461     sptr<WindowOption> option = sptr<WindowOption>::MakeSptr();
462     ASSERT_NE(nullptr, option);
463     option->SetUIExtensionUsage(0);
464     EXPECT_EQ(0, option->GetUIExtensionUsage());
465     option->SetUIExtensionUsage(1);
466     EXPECT_EQ(1, option->GetUIExtensionUsage());
467 }
468 
469 /**
470  * @tc.name: SetDialogDecorEnable
471  * @tc.desc: SetDialogDecorEnable
472  * @tc.type: FUNC
473  */
474 HWTEST_F(WindowOptionTest, SetDialogDecorEnable, Function | SmallTest | Level3)
475 {
476     sptr<WindowOption> option = new WindowOption();
477     ASSERT_NE(nullptr, option);
478     option->SetDialogDecorEnable(true);
479     ASSERT_EQ(true, option->GetDialogDecorEnable());
480     option->SetDialogDecorEnable(false);
481     ASSERT_EQ(false, option->GetDialogDecorEnable());
482 }
483 
484 /**
485  * @tc.name: SetDialogTitle
486  * @tc.desc: SetDialogTitle
487  * @tc.type: FUNC
488  */
489 HWTEST_F(WindowOptionTest, SetDialogTitle, Function | SmallTest | Level3)
490 {
491     sptr<WindowOption> option = new WindowOption();
492     ASSERT_NE(nullptr, option);
493     option->SetDialogTitle("Test");
494     std::string ret = option->GetDialogTitle();
495     ASSERT_EQ(true, ret == "Test");
496 }
497 
498 /**
499  * @tc.name: SetWindowTopmost
500  * @tc.desc: SetWindowTopmost
501  * @tc.type: FUNC
502  */
503 HWTEST_F(WindowOptionTest, SetWindowTopmost, Function | SmallTest | Level3)
504 {
505     sptr<WindowOption> option = new WindowOption();
506     ASSERT_NE(nullptr, option);
507     option->SetWindowTopmost(true);
508     ASSERT_EQ(true, option->GetWindowTopmost());
509     option->SetWindowTopmost(false);
510     ASSERT_EQ(false, option->GetWindowTopmost());
511 }
512 }
513 } // namespace Rosen
514 } // namespace OHOS
515