1 /*
2 * Copyright (c) 2021-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 <gtest/gtest.h>
17 #include "ability_context_impl.h"
18 #include "mock_window_adapter.h"
19 #include "singleton_mocker.h"
20 #include "window_impl.h"
21 #include "mock_uicontent.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 using Mocker = SingletonMocker<WindowAdapter, MockWindowAdapter>;
29 class MockAceAbilityHandler : public IAceAbilityHandler {
30 public:
31 MOCK_METHOD1(SetBackgroundColor, void(uint32_t color));
32 MOCK_METHOD0(GetBackgroundColor, uint32_t());
33 };
34
35 class MockAnimationTransitionController : public IAnimationTransitionController {
36 public:
37 MOCK_METHOD0(AnimationForShown, void());
38 MOCK_METHOD0(AnimationForHidden, void());
39 };
40
41 class MockDialogDeathRecipientListener : public IDialogDeathRecipientListener {
42 public:
43 MOCK_CONST_METHOD0(OnDialogDeathRecipient, void());
44 };
45
46 class MockScreenshotListener : public IScreenshotListener {
47 public:
48 MOCK_METHOD0(OnScreenshot, void());
49 };
50
51 class MockDialogTargetTouchListener : public IDialogTargetTouchListener {
52 public:
53 MOCK_CONST_METHOD0(OnDialogTargetTouch, void());
54 };
55
56 class MockWindowChangeListener : public IWindowChangeListener {
57 public:
58 MOCK_METHOD2(OnSizeChange, void(Rect rect, WindowSizeChangeReason reason));
59 MOCK_METHOD1(OnModeChange, void(WindowMode mode));
60 };
61
62 class MockAvoidAreaChangedListener : public IAvoidAreaChangedListener {
63 public:
64 MOCK_METHOD2(OnAvoidAreaChanged, void(const AvoidArea avoidArea, AvoidAreaType type));
65 };
66
67 class MockDisplayMoveListener : public IDisplayMoveListener {
68 public:
69 MOCK_METHOD2(OnDisplayMove, void(DisplayId from, DisplayId to));
70 };
71
72 class MockInputEventConsumer : public IInputEventConsumer {
73 public:
74 MOCK_CONST_METHOD1(OnInputEvent, bool(const std::shared_ptr<MMI::KeyEvent>&));
75 MOCK_CONST_METHOD1(OnInputEvent, bool(const std::shared_ptr<MMI::PointerEvent>&));
76 MOCK_CONST_METHOD1(OnInputEvent, bool(const std::shared_ptr<MMI::AxisEvent>&));
77 };
78
79 class MockKeyEvent : public MMI::KeyEvent {
80 public:
MockKeyEvent()81 MockKeyEvent() : MMI::KeyEvent(0) {}
82 };
83
84 class MockPointerEvent : public MMI::PointerEvent {
85 public:
MockPointerEvent()86 MockPointerEvent() : MMI::PointerEvent(0) {}
87 };
88
89 class WindowImplTest : public testing::Test {
90 public:
91 static void SetUpTestCase();
92 static void TearDownTestCase();
93 virtual void SetUp() override;
94 virtual void TearDown() override;
95 void CreateStretchableWindow(sptr<WindowImpl>& window, const Rect& rect);
96
97 static inline std::shared_ptr<AbilityRuntime::AbilityContext> abilityContext_;
98 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
99 };
SetUpTestCase()100 void WindowImplTest::SetUpTestCase()
101 {
102 }
103
TearDownTestCase()104 void WindowImplTest::TearDownTestCase()
105 {
106 }
107
SetUp()108 void WindowImplTest::SetUp()
109 {
110 }
111
TearDown()112 void WindowImplTest::TearDown()
113 {
114 }
115
CreateStretchableWindow(sptr<WindowImpl> & window,const Rect & rect)116 void WindowImplTest::CreateStretchableWindow(sptr<WindowImpl>& window, const Rect& rect)
117 {
118 sptr<WindowOption> option = new WindowOption();
119 option->SetWindowName("StretchableWindowTest");
120 option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
121 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
122 option->SetWindowRect({ 1, 1, 1, 1 });
123 window = new WindowImpl(option);
124 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
125 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
126 window->windowSystemConfig_.isStretchable_ = true;
127 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
128 ASSERT_EQ(WMError::WM_OK, window->Show());
129 window->UpdateRect(rect, true, WindowSizeChangeReason::UNDEFINED);
130 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect);
131 }
132
133 namespace {
134 /**
135 * @tc.name: CreateWindow01
136 * @tc.desc: Create window with no parentId
137 * @tc.type: FUNC
138 */
139 HWTEST_F(WindowImplTest, CreateWindow01, Function | SmallTest | Level2)
140 {
141 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
142 sptr<WindowOption> option = new WindowOption();
143 option->SetWindowName("CreateWindow01");
144 sptr<WindowImpl> window = new WindowImpl(option);
145
146 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
147 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
148
149 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
150 ASSERT_EQ(WMError::WM_OK, window->Destroy());
151 }
152
153 /**
154 * @tc.name: CreateWindow02
155 * @tc.desc: Create window with no parentId and no abilityContext
156 * @tc.type: FUNC
157 */
158 HWTEST_F(WindowImplTest, CreateWindow02, Function | SmallTest | Level2)
159 {
160 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
161 sptr<WindowOption> option = new WindowOption();
162 option->SetWindowName("CreateWindow02");
163 sptr<WindowImpl> window = new WindowImpl(option);
164
165 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
166 ASSERT_EQ(WMError::WM_ERROR_SAMGR, window->Create(INVALID_WINDOW_ID));
167 }
168
169 /**
170 * @tc.name: CreateWindow03
171 * @tc.desc: Create window with illegal parentId
172 * @tc.type: FUNC
173 */
174 HWTEST_F(WindowImplTest, CreateWindow03, Function | SmallTest | Level2)
175 {
176 sptr<WindowOption> option = new WindowOption();
177 option->SetWindowName("CreateWindow03");
178 sptr<WindowImpl> window = new WindowImpl(option);
179 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->Create(1234));
180 }
181
182 /**
183 * @tc.name: CreateWindow04
184 * @tc.desc: Create window with repeated windowName
185 * @tc.type: FUNC
186 */
187 HWTEST_F(WindowImplTest, CreateWindow04, Function | SmallTest | Level2)
188 {
189 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
190 sptr<WindowOption> option = new WindowOption();
191 option->SetWindowName("CreateWindow04");
192 sptr<WindowImpl> window = new WindowImpl(option);
193 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
194 window->Create(INVALID_WINDOW_ID);
195
196 sptr<WindowOption> option_other = new WindowOption();
197 option_other->SetWindowName("CreateWindow04");
198 sptr<WindowImpl> window_other = new WindowImpl(option_other);
199
200 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window_other->Create(INVALID_WINDOW_ID));
201 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
202 ASSERT_EQ(WMError::WM_OK, window->Destroy());
203 ASSERT_EQ(WMError::WM_OK, window_other->Destroy());
204 }
205
206 /**
207 * @tc.name: CreateWindow05
208 * @tc.desc: Create window with exist parentId
209 * @tc.type: FUNC
210 */
211 HWTEST_F(WindowImplTest, CreateWindow05, Function | SmallTest | Level2)
212 {
213 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
214 sptr<WindowOption> option = new WindowOption();
215 option->SetWindowName("CreateWindow05_parent");
216 sptr<WindowImpl> window = new WindowImpl(option);
217
218 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
219 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
220
221 sptr<WindowOption> option2 = new WindowOption();
222 option2->SetWindowName("CreateWindow05");
223 sptr<WindowImpl> window2 = new WindowImpl(option2);
224
225 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
226 ASSERT_EQ(WMError::WM_OK, window2->Create(window->GetWindowId()));
227
228 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
229 ASSERT_EQ(WMError::WM_OK, window->Destroy());
230 ASSERT_EQ(WMError::WM_OK, window2->Destroy());
231 }
232
233 /**
234 * @tc.name: CreateWindow06
235 * @tc.desc: Create window with no default option, get and check Property
236 * @tc.type: FUNC
237 */
238 HWTEST_F(WindowImplTest, CreateWindow06, Function | SmallTest | Level2)
239 {
240 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
241 sptr<WindowOption> option = new WindowOption();
242 option->SetWindowName("CreateWindow06");
243 struct Rect rect = {1, 2, 3u, 4u};
244 option->SetWindowRect(rect);
245 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
246 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
247 sptr<WindowImpl> window = new WindowImpl(option);
248
249 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
250 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
251
252 ASSERT_EQ(1, window->GetRequestRect().posX_);
253 ASSERT_EQ(2, window->GetRequestRect().posY_);
254 ASSERT_EQ(3u, window->GetRequestRect().width_);
255 ASSERT_EQ(4u, window->GetRequestRect().height_);
256 ASSERT_EQ(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, window->GetType());
257 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
258 ASSERT_EQ("CreateWindow06", window->GetWindowName());
259
260 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
261 ASSERT_EQ(WMError::WM_OK, window->Destroy());
262 }
263
264 /**
265 * @tc.name: FindWindow01
266 * @tc.desc: Find one exit window
267 * @tc.type: FUNC
268 */
269 HWTEST_F(WindowImplTest, FindWindow01, Function | SmallTest | Level2)
270 {
271 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
272 sptr<WindowOption> option = new WindowOption();
273 option->SetWindowName("FindWindow01");
274 sptr<WindowImpl> window = new WindowImpl(option);
275 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
276 window->Create(INVALID_WINDOW_ID);
277 ASSERT_NE(nullptr, WindowImpl::Find("FindWindow01"));
278 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
279 ASSERT_EQ(WMError::WM_OK, window->Destroy());
280 }
281
282 /**
283 * @tc.name: FindWindow02
284 * @tc.desc: Add another window, find both two windows
285 * @tc.type: FUNC
286 */
287 HWTEST_F(WindowImplTest, FindWindow02, Function | SmallTest | Level2)
288 {
289 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
290 sptr<WindowOption> option = new WindowOption();
291 option->SetWindowName("FindWindow02");
292 sptr<WindowImpl> window = new WindowImpl(option);
293 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
294 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
295
296 option->SetWindowName("FindWindow02_other");
297 sptr<WindowImpl> window2 = new WindowImpl(option);
298 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
299 ASSERT_EQ(WMError::WM_OK, window2->Create(INVALID_WINDOW_ID));
300
301 ASSERT_NE(nullptr, WindowImpl::Find("FindWindow02_other"));
302 ASSERT_NE(nullptr, WindowImpl::Find("FindWindow02"));
303
304 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
305 ASSERT_EQ(WMError::WM_OK, window->Destroy());
306 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
307 ASSERT_EQ(WMError::WM_OK, window2->Destroy());
308 }
309
310 /**
311 * @tc.name: FindWindow03
312 * @tc.desc: Find one no exit window
313 * @tc.type: FUNC
314 */
315 HWTEST_F(WindowImplTest, FindWindow03, Function | SmallTest | Level2)
316 {
317 ASSERT_EQ(nullptr, WindowImpl::Find("FindWindow03"));
318 }
319
320 /**
321 * @tc.name: FindWindow04
322 * @tc.desc: Find window with empty name
323 * @tc.type: FUNC
324 */
325 HWTEST_F(WindowImplTest, FindWindow04, Function | SmallTest | Level2)
326 {
327 ASSERT_EQ(nullptr, WindowImpl::Find(""));
328 }
329
330 /**
331 * @tc.name: FindWindow05
332 * @tc.desc: Find one destroyed window
333 * @tc.type: FUNC
334 */
335 HWTEST_F(WindowImplTest, FindWindow05, Function | SmallTest | Level2)
336 {
337 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
338 sptr<WindowOption> option = new WindowOption();
339 option->SetWindowName("FindWindow05");
340 sptr<WindowImpl> window = new WindowImpl(option);
341 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
342 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
343
344 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
345 ASSERT_EQ(WMError::WM_OK, window->Destroy());
346 ASSERT_EQ(nullptr, WindowImpl::Find("FindWindow05"));
347 }
348
349 /**
350 * @tc.name: FindTopWindow01
351 * @tc.desc: Find one top window
352 * @tc.type: FUNC
353 */
354 HWTEST_F(WindowImplTest, FindTopWindow01, Function | SmallTest | Level2)
355 {
356 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
357 sptr<WindowOption> option = new WindowOption();
358 option->SetWindowName("FindTopWindow01");
359 sptr<WindowImpl> window = new WindowImpl(option);
360 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
361 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
362
363 ASSERT_NE(nullptr, window->FindTopWindow(window->property_->GetWindowId()));
364
365 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
366 ASSERT_EQ(WMError::WM_OK, window->Destroy());
367 }
368
369 /**
370 * @tc.name: SetWindowType01
371 * @tc.desc: SetWindowType
372 * @tc.type: FUNC
373 */
374 HWTEST_F(WindowImplTest, SetWindowType01, Function | SmallTest | Level2)
375 {
376 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
377 sptr<WindowOption> option = new WindowOption();
378 option->SetWindowName("SetWindowType01");
379 sptr<WindowImpl> window = new WindowImpl(option);
380 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
381 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
382 ASSERT_EQ(WMError::WM_OK, window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW));
383 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
384 ASSERT_EQ(WMError::WM_OK, window->Destroy());
385 }
386
387 /**
388 * @tc.name: SetWindowMode01
389 * @tc.desc: SetWindowMode
390 * @tc.type: FUNC
391 */
392 HWTEST_F(WindowImplTest, SetWindowMode01, Function | SmallTest | Level2)
393 {
394 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
395 sptr<WindowOption> option = new WindowOption();
396 option->SetWindowName("SetWindowType01");
397 sptr<WindowImpl> window = new WindowImpl(option);
398 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
399 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
400 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
401 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
402 ASSERT_EQ(WMError::WM_OK, window->Destroy());
403 }
404
405 /**
406 * @tc.name: SetWindowMode02
407 * @tc.desc: Set window mode to split primary
408 * @tc.type: FUNC
409 */
410 HWTEST_F(WindowImplTest, SetWindowMode02, Function | SmallTest | Level3)
411 {
412 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
413 sptr<WindowOption> option = new WindowOption();
414 option->SetWindowName("");
415 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
416 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
417 sptr<WindowImpl> window = new WindowImpl(option);
418 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
419 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
420 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
421 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY));
422 ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, window->GetMode());
423 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
424 ASSERT_EQ(WMError::WM_OK, window->Destroy());
425 }
426
427 /**
428 * @tc.name: SetWindowMode03
429 * @tc.desc: Set window mode to split secondary
430 * @tc.type: FUNC
431 */
432 HWTEST_F(WindowImplTest, SetWindowMode03, Function | SmallTest | Level3)
433 {
434 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
435 sptr<WindowOption> option = new WindowOption();
436 option->SetWindowName("");
437 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
438 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
439 sptr<WindowImpl> window = new WindowImpl(option);
440 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
441 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
442 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
443 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY));
444 ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_SECONDARY, window->GetMode());
445 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
446 ASSERT_EQ(WMError::WM_OK, window->Destroy());
447 }
448
449 /**
450 * @tc.name: SetWindowMode04
451 * @tc.desc: Set window mode to floating
452 * @tc.type: FUNC
453 */
454 HWTEST_F(WindowImplTest, SetWindowMode04, Function | SmallTest | Level3)
455 {
456 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
457 sptr<WindowOption> option = new WindowOption();
458 option->SetWindowName("");
459 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
460 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
461 sptr<WindowImpl> window = new WindowImpl(option);
462 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
463 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
464 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
465 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING));
466 ASSERT_EQ(WindowMode::WINDOW_MODE_FLOATING, window->GetMode());
467 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
468 ASSERT_EQ(WMError::WM_OK, window->Destroy());
469 }
470
471 /**
472 * @tc.name: SetWindowMode05
473 * @tc.desc: Set window mode to pip
474 * @tc.type: FUNC
475 */
476 HWTEST_F(WindowImplTest, SetWindowMode05, Function | SmallTest | Level3)
477 {
478 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
479 sptr<WindowOption> option = new WindowOption();
480 option->SetWindowName("");
481 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
482 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
483 sptr<WindowImpl> window = new WindowImpl(option);
484 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
485 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
486 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
487 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_PIP));
488 ASSERT_EQ(WindowMode::WINDOW_MODE_PIP, window->GetMode());
489 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
490 ASSERT_EQ(WMError::WM_OK, window->Destroy());
491 }
492
493 /**
494 * @tc.name: ShowHideWindow01
495 * @tc.desc: Show and hide window with add and remove window ok
496 * @tc.type: FUNC
497 */
498 HWTEST_F(WindowImplTest, ShowHideWindow01, Function | SmallTest | Level2)
499 {
500 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
501 sptr<WindowOption> option = new WindowOption();
502 option->SetWindowName("ShowHideWindow01");
503 sptr<WindowImpl> window = new WindowImpl(option);
504 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
505 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
506 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
507 ASSERT_EQ(WMError::WM_OK, window->Show());
508 window->NotifyForeground();
509 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
510 ASSERT_EQ(WMError::WM_OK, window->Hide());
511 window->NotifyBackground();
512 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
513 ASSERT_EQ(WMError::WM_OK, window->Destroy());
514 }
515
516 /**
517 * @tc.name: ShowHideWindow02
518 * @tc.desc: Show window with add window WM_ERROR_SAMGR
519 * @tc.type: FUNC
520 */
521 HWTEST_F(WindowImplTest, ShowHideWindow02, Function | SmallTest | Level2)
522 {
523 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
524 sptr<WindowOption> option = new WindowOption();
525 option->SetWindowName("ShowHideWindow02");
526 sptr<WindowImpl> window = new WindowImpl(option);
527 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
528 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
529 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
530 ASSERT_EQ(WMError::WM_ERROR_SAMGR, window->Show());
531 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
532 ASSERT_EQ(WMError::WM_OK, window->Destroy());
533 }
534
535 /**
536 * @tc.name: ShowHideWindow03
537 * @tc.desc: Show window with add window WM_ERROR_IPC_FAILED
538 * @tc.type: FUNC
539 */
540 HWTEST_F(WindowImplTest, ShowHideWindow03, Function | SmallTest | Level3)
541 {
542 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
543 sptr<WindowOption> option = new WindowOption();
544 option->SetWindowName("ShowHideWindow03");
545 sptr<WindowImpl> window = new WindowImpl(option);
546 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
547 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
548 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_ERROR_IPC_FAILED));
549 ASSERT_EQ(WMError::WM_ERROR_IPC_FAILED, window->Show());
550 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
551 ASSERT_EQ(WMError::WM_OK, window->Destroy());
552 }
553
554 /**
555 * @tc.name: ShowHideWindow04
556 * @tc.desc: Show window with add window OK & Hide window with remove window WM_ERROR_SAMGR
557 * @tc.type: FUNC
558 */
559 HWTEST_F(WindowImplTest, ShowHideWindow04, Function | SmallTest | Level3)
560 {
561 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
562 sptr<WindowOption> option = new WindowOption();
563 option->SetWindowName("ShowHideWindow04");
564 sptr<WindowImpl> window = new WindowImpl(option);
565 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
566 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
567 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
568 ASSERT_EQ(WMError::WM_OK, window->Show());
569 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
570 ASSERT_EQ(WMError::WM_ERROR_SAMGR, window->Hide());
571 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
572 ASSERT_EQ(WMError::WM_OK, window->Destroy());
573 }
574
575 /**
576 * @tc.name: ShowHideWindow05
577 * @tc.desc: Hide window with remove window WM_ERROR_IPC_FAILED
578 * @tc.type: FUNC
579 */
580 HWTEST_F(WindowImplTest, ShowHideWindow05, Function | SmallTest | Level3)
581 {
582 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
583 sptr<WindowOption> option = new WindowOption();
584 option->SetWindowName("ShowHideWindow05");
585 sptr<WindowImpl> window = new WindowImpl(option);
586 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
587 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
588 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
589 ASSERT_EQ(WMError::WM_OK, window->Show());
590 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_ERROR_IPC_FAILED));
591 ASSERT_EQ(WMError::WM_ERROR_IPC_FAILED, window->Hide());
592 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
593 ASSERT_EQ(WMError::WM_OK, window->Destroy());
594 }
595
596 /**
597 * @tc.name: ShowHideWindow06
598 * @tc.desc: Hide window with remove window OK
599 * @tc.type: FUNC
600 */
601 HWTEST_F(WindowImplTest, ShowHideWindow06, Function | SmallTest | Level3)
602 {
603 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
604 sptr<WindowOption> option = new WindowOption();
605 option->SetWindowName("ShowHideWindow06");
606 sptr<WindowImpl> window = new WindowImpl(option);
607 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
608 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
609 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
610 ASSERT_EQ(WMError::WM_OK, window->Show());
611 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
612 ASSERT_EQ(WMError::WM_OK, window->Hide());
613 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
614 ASSERT_EQ(WMError::WM_OK, window->Destroy());
615 }
616
617 /**
618 * @tc.name: SetSystemBarProperty01
619 * @tc.desc: SetSystemBarProperty with default param
620 * @tc.type: FUNC
621 */
622 HWTEST_F(WindowImplTest, SetSystemBarProperty01, Function | SmallTest | Level3)
623 {
624 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
625 sptr<WindowOption> option = new WindowOption();
626 option->SetWindowName("SetSystemBarProperty01");
627 sptr<WindowImpl> window = new WindowImpl(option);
628 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
629 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
630
631 WindowType type = WindowType::WINDOW_TYPE_STATUS_BAR;
632 SystemBarProperty prop;
633 ASSERT_EQ(WMError::WM_OK, window->SetSystemBarProperty(type, prop));
634 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
635 ASSERT_EQ(WMError::WM_OK, window->Destroy());
636 }
637
638 /**
639 * @tc.name: SetSystemBarProperty02
640 * @tc.desc: SetSystemBarProperty with adapter return WM_ERROR_SAMGR
641 * @tc.type: FUNC
642 */
643 HWTEST_F(WindowImplTest, SetSystemBarProperty02, Function | SmallTest | Level3)
644 {
645 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
646 sptr<WindowOption> option = new WindowOption();
647 option->SetWindowName("SetSystemBarProperty02");
648 sptr<WindowImpl> window = new WindowImpl(option);
649 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
650 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
651
652 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
653 window->Show();
654 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
655 WindowType type = WindowType::WINDOW_TYPE_STATUS_BAR;
656 const SystemBarProperty SYS_BAR_PROP(false, 0xE5222222, 0xE5333333);
657 ASSERT_EQ(WMError::WM_ERROR_SAMGR, window->SetSystemBarProperty(type, SYS_BAR_PROP));
658 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
659 window->Hide();
660 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
661 ASSERT_EQ(WMError::WM_OK, window->Destroy());
662 }
663
664 /**
665 * @tc.name: SetSystemBarProperty03
666 * @tc.desc: SetSystemBarProperty to invalid window
667 * @tc.type: FUNC
668 */
669 HWTEST_F(WindowImplTest, SetSystemBarProperty03, Function | SmallTest | Level3)
670 {
671 sptr<WindowOption> option = new WindowOption();
672 option->SetWindowName("SetSystemBarProperty03");
673 sptr<WindowImpl> window = new WindowImpl(option);
674 WindowType type = WindowType::WINDOW_TYPE_STATUS_BAR;
675 SystemBarProperty prop;
676 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetSystemBarProperty(type, prop));
677 }
678
679 /**
680 * @tc.name: GetSystemBarPropertyByType01
681 * @tc.desc: GetSystemBarPropertyByType with exist key
682 * @tc.type: FUNC
683 */
684 HWTEST_F(WindowImplTest, GetSystemBarPropertyByType01, Function | SmallTest | Level3)
685 {
686 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
687 sptr<WindowOption> option = new WindowOption();
688 option->SetWindowName("GetSystemBarPropertyByType01");
689 sptr<WindowImpl> window = new WindowImpl(option);
690 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
691 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
692
693 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
694 ASSERT_EQ(WMError::WM_OK, window->Show());
695 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
696 WindowType type = WindowType::WINDOW_TYPE_STATUS_BAR;
697 const SystemBarProperty SYS_BAR_PROP(false, 0xE5222222, 0xE5333344);
698 ASSERT_EQ(WMError::WM_OK, window->SetSystemBarProperty(type, SYS_BAR_PROP));
699 ASSERT_EQ(SYS_BAR_PROP, window->GetSystemBarPropertyByType(type));
700 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
701 window->Hide();
702 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
703 ASSERT_EQ(WMError::WM_OK, window->Destroy());
704 }
705
706 /**
707 * @tc.name: GetSystemBarPropertyByType02
708 * @tc.desc: GetSystemBarPropertyByType with nonexist key
709 * @tc.type: FUNC
710 */
711 HWTEST_F(WindowImplTest, GetSystemBarPropertyByType02, Function | SmallTest | Level3)
712 {
713 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
714 sptr<WindowOption> option = new WindowOption();
715 option->SetWindowName("GetSystemBarPropertyByType02");
716 sptr<WindowImpl> window = new WindowImpl(option);
717 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
718 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
719
720 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
721 window->Show();
722 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
723 const SystemBarProperty SYS_BAR_PROP(false, 0xE5222222, 0xE5333333);
724 const SystemBarProperty DEFAULT_PROP;
725 ASSERT_EQ(WMError::WM_OK, window->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP));
726 ASSERT_EQ(DEFAULT_PROP, window->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_NAVIGATION_BAR));
727 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
728 window->Hide();
729 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
730 ASSERT_EQ(WMError::WM_OK, window->Destroy());
731 }
732
733 /**
734 * @tc.name: GetSystemBarPropertyByType03
735 * @tc.desc: GetSystemBarPropertyByType with not systemBar type
736 * @tc.type: FUNC
737 */
738 HWTEST_F(WindowImplTest, GetSystemBarPropertyByType03, Function | SmallTest | Level3)
739 {
740 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
741 sptr<WindowOption> option = new WindowOption();
742 option->SetWindowName("GetSystemBarPropertyByType03");
743 sptr<WindowImpl> window = new WindowImpl(option);
744 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
745 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
746
747 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
748 window->Show();
749 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
750 const SystemBarProperty SYS_BAR_PROP(false, 0xE5222222, 0xE5333366);
751 const SystemBarProperty DEFAULT_PROP;
752 ASSERT_EQ(WMError::WM_OK, window->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP));
753 ASSERT_EQ(DEFAULT_PROP, window->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW));
754 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
755 window->Hide();
756 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
757 ASSERT_EQ(WMError::WM_OK, window->Destroy());
758 }
759
760 /**
761 * @tc.name: Maximize02
762 * @tc.desc: Maximize the sub window
763 * @tc.type: FUNC
764 */
765 HWTEST_F(WindowImplTest, Maximize02, Function | SmallTest | Level3)
766 {
767 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
768 sptr<WindowOption> option = new WindowOption();
769 option->SetWindowName("Maximize02");
770 sptr<WindowImpl> window = new WindowImpl(option);
771 window->Maximize();
772 ASSERT_EQ(WindowMode::WINDOW_MODE_UNDEFINED, window->GetMode());
773 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
774 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
775 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
776 window->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
777 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
778 window->Show();
779 window->Maximize();
780 ASSERT_EQ(WindowMode::WINDOW_MODE_FLOATING, window->GetMode());
781
782 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
783 window->Hide();
784 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
785 ASSERT_EQ(WMError::WM_OK, window->Destroy());
786 }
787
788 /**
789 * @tc.name: Recover01
790 * @tc.desc: Recover the main window
791 * @tc.type: FUNC
792 */
793 HWTEST_F(WindowImplTest, Recover01, Function | SmallTest | Level3)
794 {
795 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
796 sptr<WindowOption> option = new WindowOption();
797 option->SetWindowName("Recover01");
798 sptr<WindowImpl> window = new WindowImpl(option);
799 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Recover());
800 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
801 window->Create(INVALID_WINDOW_ID);
802 window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
803 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
804 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
805 window->Show();
806 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
807 window->Recover();
808 ASSERT_EQ(WindowMode::WINDOW_MODE_FLOATING, window->GetMode());
809 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
810 window->Hide();
811 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
812 ASSERT_EQ(WMError::WM_OK, window->Destroy());
813 }
814
815 /**
816 * @tc.name: Recover02
817 * @tc.desc: Recover the sub window
818 * @tc.type: FUNC
819 */
820 HWTEST_F(WindowImplTest, Recover02, Function | SmallTest | Level3)
821 {
822 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
823 sptr<WindowOption> option = new WindowOption();
824 option->SetWindowName("Recover02");
825 sptr<WindowImpl> window = new WindowImpl(option);
826 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
827 window->Create(INVALID_WINDOW_ID);
828 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
829 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
830 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
831 window->Show();
832 window->Recover();
833 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, window->GetMode());
834 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
835 window->Hide();
836 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
837 ASSERT_EQ(WMError::WM_OK, window->Destroy());
838 }
839
840 /**
841 * @tc.name: Minimize01
842 * @tc.desc: Minimize the main window
843 * @tc.type: FUNC
844 */
845 HWTEST_F(WindowImplTest, Minimize01, Function | SmallTest | Level3)
846 {
847 auto option = new WindowOption();
848 option->SetWindowName("Minimize01");
849 sptr<WindowImpl> window = new WindowImpl(option);
850 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Minimize());
851 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
852 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
853 window->Create(INVALID_WINDOW_ID);
854 window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
855 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
856 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
857 window->Show();
858 ASSERT_TRUE((window->GetWindowState() == WindowState::STATE_SHOWN));
859 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
860 window->Minimize();
861 ASSERT_FALSE((window->GetWindowState() == WindowState::STATE_SHOWN));
862 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
863 ASSERT_EQ(WMError::WM_OK, window->Minimize());
864 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
865 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
866 EXPECT_CALL(*content, Destroy());
867 ASSERT_EQ(WMError::WM_OK, window->Destroy());
868 }
869
870 /**
871 * @tc.name: Minimize02
872 * @tc.desc: Minimize the sub window
873 * @tc.type: FUNC
874 */
875 HWTEST_F(WindowImplTest, Minimize02, Function | SmallTest | Level3)
876 {
877 auto option = new WindowOption();
878 option->SetWindowName("Minimize02");
879 sptr<WindowImpl> window = new WindowImpl(option);
880 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
881 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
882 window->Create(INVALID_WINDOW_ID);
883 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
884 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
885 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
886 window->Show();
887 ASSERT_TRUE((window->GetWindowState() == WindowState::STATE_SHOWN));
888 window->Minimize();
889 ASSERT_TRUE((window->GetWindowState() == WindowState::STATE_SHOWN));
890 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
891 ASSERT_EQ(WMError::WM_OK, window->Destroy());
892 }
893
894 /**
895 * @tc.name: IsSupportWideGamut01
896 * @tc.desc: IsSupportWideGamut
897 * @tc.type: FUNC
898 */
899 HWTEST_F(WindowImplTest, IsSupportWideGamut01, Function | SmallTest | Level3)
900 {
901 auto option = new WindowOption();
902 option->SetWindowName("IsSupportWideGamut01");
903 sptr<WindowImpl> window = new WindowImpl(option);
904 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
905 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
906 window->Create(INVALID_WINDOW_ID);
907 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
908 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
909 ASSERT_TRUE(window->IsSupportWideGamut());
910 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
911 ASSERT_EQ(WMError::WM_OK, window->Destroy());
912 }
913
914 /**
915 * @tc.name: SetColorSpace01
916 * @tc.desc: SetColorSpace
917 * @tc.type: FUNC
918 */
919 HWTEST_F(WindowImplTest, SetColorSpace01, Function | SmallTest | Level3)
920 {
921 auto option = new WindowOption();
922 option->SetWindowName("SetColorSpace01");
923 sptr<WindowImpl> window = new WindowImpl(option);
924 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
925 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
926 window->Create(INVALID_WINDOW_ID);
927 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
928 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
929 window->SetColorSpace(ColorSpace::COLOR_SPACE_WIDE_GAMUT);
930 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
931 ASSERT_EQ(WMError::WM_OK, window->Destroy());
932 }
933
934 /**
935 * @tc.name: GetColorSpace01
936 * @tc.desc: GetColorSpace
937 * @tc.type: FUNC
938 */
939 HWTEST_F(WindowImplTest, GetColorSpace01, Function | SmallTest | Level3)
940 {
941 auto option = new WindowOption();
942 option->SetWindowName("GetColorSpace01");
943 sptr<WindowImpl> window = new WindowImpl(option);
944 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
945 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
946 window->Create(INVALID_WINDOW_ID);
947 window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
948 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
949 window->SetColorSpace(ColorSpace::COLOR_SPACE_DEFAULT);
950 ASSERT_EQ(ColorSpace::COLOR_SPACE_DEFAULT, window->GetColorSpace());
951 window->SetColorSpace(ColorSpace::COLOR_SPACE_WIDE_GAMUT);
952 ASSERT_EQ(ColorSpace::COLOR_SPACE_WIDE_GAMUT, window->GetColorSpace());
953 uint32_t invalidColorSpace = 54321u;
954 window->SetColorSpace(static_cast<ColorSpace>(invalidColorSpace));
955 ASSERT_EQ(ColorSpace::COLOR_SPACE_DEFAULT, window->GetColorSpace());
956 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
957 ASSERT_EQ(WMError::WM_OK, window->Destroy());
958 }
959
960 /**
961 * @tc.name: StartMove01
962 * @tc.desc: start move main fullscreen window, test startMoveFlag
963 * @tc.type: FUNC
964 * @tc.require: issueI5J8IB
965 */
966 HWTEST_F(WindowImplTest, StartMove01, Function | SmallTest | Level3)
967 {
968 sptr<WindowOption> option = new WindowOption();
969 option->SetWindowName("StartMove01");
970 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
971 sptr<WindowImpl> window = new WindowImpl(option);
972 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
973
974 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
975 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
976 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
977 window->Show();
978 window->StartMove();
979 ASSERT_FALSE(window->moveDragProperty_->startMoveFlag_);
980 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
981 ASSERT_EQ(WMError::WM_OK, window->Destroy());
982 }
983
984 /**
985 * @tc.name: StartMove02
986 * @tc.desc: start move main fullscreen window, test startMoveFlag
987 * @tc.type: FUNC
988 * @tc.require: issueI5J8IB
989 */
990 HWTEST_F(WindowImplTest, StartMove02, Function | SmallTest | Level3)
991 {
992 sptr<WindowOption> option = new WindowOption();
993 option->SetWindowName("StartMove02");
994 option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
995 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
996 sptr<WindowImpl> window = new WindowImpl(option);
997 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
998
999 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1000 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1001 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1002 window->Show();
1003
1004 window->StartMove();
1005 ASSERT_FALSE(window->moveDragProperty_->startMoveFlag_);
1006 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1007 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1008 }
1009
1010 /**
1011 * @tc.name: StartMove03
1012 * @tc.desc: start move divider, test startMoveFlag
1013 * @tc.type: FUNC
1014 * @tc.require: issueI5J8IB
1015 */
1016 HWTEST_F(WindowImplTest, StartMove03, Function | SmallTest | Level3)
1017 {
1018 sptr<WindowOption> option = new WindowOption();
1019 option->SetWindowName("StartMove03");
1020 option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
1021 option->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1022 sptr<WindowImpl> window = new WindowImpl(option);
1023 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1024
1025 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1026 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1027 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1028 window->Show();
1029 window->StartMove();
1030 ASSERT_FALSE(window->moveDragProperty_->startMoveFlag_);
1031 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1032 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1033 }
1034
1035 /**
1036 * @tc.name: SetBackgroundColor01
1037 * @tc.desc: test SetBackgroundColor withow uiContent
1038 * @tc.type: FUNC
1039 */
1040 HWTEST_F(WindowImplTest, SetBackgroundColor01, Function | SmallTest | Level3)
1041 {
1042 sptr<WindowOption> option = new WindowOption();
1043 option->SetWindowName("SetBackgroundColor01");
1044 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1045 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1046 sptr<WindowImpl> window = new WindowImpl(option);
1047 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1048
1049 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1050 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1051 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1052 window->Show();
1053 ASSERT_FALSE(window->IsTransparent());
1054 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBackgroundColor("#000"));
1055 ASSERT_FALSE(window->IsTransparent());
1056 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->SetBackgroundColor("#00FF00"));
1057 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->SetBackgroundColor("#FF00FF00"));
1058 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1059 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1060 }
1061
1062 /**
1063 * @tc.name: SetTurnScreenOn01
1064 * @tc.desc: create window but not show, test SetTurnScreenOn
1065 * @tc.type: FUNC
1066 */
1067 HWTEST_F(WindowImplTest, SetTurnScreenOn01, Function | SmallTest | Level3)
1068 {
1069 sptr<WindowOption> option = new WindowOption();
1070 option->SetWindowName("SetTurnScreenOn01");
1071 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1072 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1073 sptr<WindowImpl> window = new WindowImpl(option);
1074 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetTurnScreenOn(true));
1075 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1076
1077 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1078 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1079 ASSERT_FALSE(window->IsTurnScreenOn());
1080 ASSERT_EQ(WMError::WM_OK, window->SetTurnScreenOn(true));
1081 ASSERT_TRUE(window->IsTurnScreenOn());
1082 ASSERT_EQ(WMError::WM_OK, window->SetTurnScreenOn(false));
1083 ASSERT_FALSE(window->IsTurnScreenOn());
1084 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1085 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1086 }
1087
1088
1089 /**
1090 * @tc.name: SetTurnScreenOn02
1091 * @tc.desc: create window with show, test SetTurnScreenOn
1092 * @tc.type: FUNC
1093 */
1094 HWTEST_F(WindowImplTest, SetTurnScreenOn02, Function | SmallTest | Level3)
1095 {
1096 sptr<WindowOption> option = new WindowOption();
1097 option->SetWindowName("SetTurnScreenOn02");
1098 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1099 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1100 sptr<WindowImpl> window = new WindowImpl(option);
1101 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1102
1103 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1104 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1105 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1106 ASSERT_EQ(WMError::WM_OK, window->Show());
1107 ASSERT_FALSE(window->IsTurnScreenOn());
1108 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2).WillOnce(Return(WMError::WM_OK))
1109 .WillOnce(Return(WMError::WM_OK));
1110 ASSERT_EQ(WMError::WM_OK, window->SetTurnScreenOn(true));
1111 ASSERT_TRUE(window->IsTurnScreenOn());
1112 ASSERT_EQ(WMError::WM_OK, window->SetTurnScreenOn(false));
1113 ASSERT_FALSE(window->IsTurnScreenOn());
1114 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1115 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1116 }
1117
1118 /**
1119 * @tc.name: SetKeepScreenOn01
1120 * @tc.desc: create window but not show, test SetKeepScreenOn
1121 * @tc.type: FUNC
1122 */
1123 HWTEST_F(WindowImplTest, SetKeepScreenOn01, Function | SmallTest | Level3)
1124 {
1125 sptr<WindowOption> option = new WindowOption();
1126 option->SetWindowName("SetKeepScreenOn01");
1127 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1128 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1129 sptr<WindowImpl> window = new WindowImpl(option);
1130 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetKeepScreenOn(true));
1131 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1132
1133 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1134 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1135 ASSERT_FALSE(window->IsKeepScreenOn());
1136 ASSERT_EQ(WMError::WM_OK, window->SetKeepScreenOn(true));
1137 ASSERT_TRUE(window->IsKeepScreenOn());
1138 ASSERT_EQ(WMError::WM_OK, window->SetKeepScreenOn(false));
1139 ASSERT_FALSE(window->IsKeepScreenOn());
1140 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1141 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1142 }
1143
1144 /**
1145 * @tc.name: SetKeepScreenOn02
1146 * @tc.desc: create window with show, test SetKeepScreenOn
1147 * @tc.type: FUNC
1148 */
1149 HWTEST_F(WindowImplTest, SetKeepScreenOn02, Function | SmallTest | Level3)
1150 {
1151 sptr<WindowOption> option = new WindowOption();
1152 option->SetWindowName("SetKeepScreenOn02");
1153 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1154 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1155 sptr<WindowImpl> window = new WindowImpl(option);
1156 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1157
1158 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1159 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1160 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1161 ASSERT_EQ(WMError::WM_OK, window->Show());
1162 ASSERT_FALSE(window->IsKeepScreenOn());
1163 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2).WillOnce(Return(WMError::WM_OK))
1164 .WillOnce(Return(WMError::WM_OK));;
1165 ASSERT_EQ(WMError::WM_OK, window->SetKeepScreenOn(true));
1166 ASSERT_TRUE(window->IsKeepScreenOn());
1167 ASSERT_EQ(WMError::WM_OK, window->SetKeepScreenOn(false));
1168 ASSERT_FALSE(window->IsKeepScreenOn());
1169
1170 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1171 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1172 }
1173
1174 /**
1175 * @tc.name: SetBrightness01
1176 * @tc.desc: test SetBrightness with invalid brightness
1177 * @tc.type: FUNC
1178 */
1179 HWTEST_F(WindowImplTest, SetBrightness01, Function | SmallTest | Level3)
1180 {
1181 sptr<WindowOption> option = new WindowOption();
1182 option->SetWindowName("SetBrightness01");
1183 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1184 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1185 sptr<WindowImpl> window = new WindowImpl(option);
1186 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetBrightness(0.f));
1187 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1188
1189 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1190 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1191 ASSERT_EQ(WMError::WM_OK, window->SetBrightness(MAXIMUM_BRIGHTNESS));
1192
1193 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1194 ASSERT_EQ(WMError::WM_OK, window->Show());
1195 ASSERT_EQ(MAXIMUM_BRIGHTNESS, window->GetBrightness());
1196 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBrightness(2.0f)); // 2.0f: brightness
1197 ASSERT_EQ(MAXIMUM_BRIGHTNESS, window->GetBrightness());
1198
1199 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1200 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1201 }
1202
1203 /**
1204 * @tc.name: SetBrightness02
1205 * @tc.desc: test SetBrightness with valid brightness
1206 * @tc.type: FUNC
1207 */
1208 HWTEST_F(WindowImplTest, SetBrightness02, Function | SmallTest | Level3)
1209 {
1210 sptr<WindowOption> option = new WindowOption();
1211 option->SetWindowName("SetBrightness02");
1212 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1213 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1214 sptr<WindowImpl> window = new WindowImpl(option);
1215 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1216
1217 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1218 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1219 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1220 ASSERT_EQ(WMError::WM_OK, window->Show());
1221 ASSERT_EQ(UNDEFINED_BRIGHTNESS, window->GetBrightness());
1222 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2).WillOnce(Return(WMError::WM_OK))
1223 .WillOnce(Return(WMError::WM_OK));
1224 ASSERT_EQ(WMError::WM_OK, window->SetBrightness(MAXIMUM_BRIGHTNESS));
1225 ASSERT_EQ(MAXIMUM_BRIGHTNESS, window->GetBrightness());
1226 ASSERT_EQ(WMError::WM_OK, window->SetBrightness(MINIMUM_BRIGHTNESS));
1227 ASSERT_EQ(MINIMUM_BRIGHTNESS, window->GetBrightness());
1228
1229 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1230 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1231 }
1232
1233 /**
1234 * @tc.name: SetBrightness03
1235 * @tc.desc: test SetBrightness with invalid type window
1236 * @tc.type: FUNC
1237 */
1238 HWTEST_F(WindowImplTest, SetBrightness03, Function | SmallTest | Level3)
1239 {
1240 sptr<WindowOption> option = new WindowOption();
1241 option->SetWindowName("SetBrightness03");
1242 option->SetWindowType(WindowType::WINDOW_TYPE_STATUS_BAR);
1243 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1244 sptr<WindowImpl> window = new WindowImpl(option);
1245 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1246
1247 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1248 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1249 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1250 ASSERT_EQ(WMError::WM_OK, window->Show());
1251 ASSERT_EQ(UNDEFINED_BRIGHTNESS, window->GetBrightness());
1252 ASSERT_EQ(WMError::WM_ERROR_INVALID_TYPE, window->SetBrightness(MAXIMUM_BRIGHTNESS));
1253 ASSERT_EQ(UNDEFINED_BRIGHTNESS, window->GetBrightness());
1254
1255 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1256 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1257 }
1258
1259 /**
1260 * @tc.name: SetFocusable01
1261 * @tc.desc: create window but not show, test SetFocusable
1262 * @tc.type: FUNC
1263 */
1264 HWTEST_F(WindowImplTest, SetFocusable01, Function | SmallTest | Level3)
1265 {
1266 sptr<WindowOption> option = new WindowOption();
1267 option->SetWindowName("SetFocusable01");
1268 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1269 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1270 sptr<WindowImpl> window = new WindowImpl(option);
1271 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->RequestFocus());
1272 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1273
1274 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1275 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1276 ASSERT_TRUE(window->GetFocusable());
1277 EXPECT_CALL(m->Mock(), RequestFocus(_)).WillOnce(Return(WMError::WM_OK));
1278 ASSERT_EQ(WMError::WM_OK, window->RequestFocus());
1279 ASSERT_EQ(WMError::WM_OK, window->SetFocusable(false));
1280 ASSERT_FALSE(window->GetFocusable());
1281 ASSERT_EQ(WMError::WM_OK, window->SetFocusable(true));
1282 ASSERT_TRUE(window->GetFocusable());
1283 WindowState state = window->GetWindowState();
1284 window->SetWindowState(WindowState::STATE_UNFROZEN);
1285 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetFocusable(false));
1286 ASSERT_TRUE(window->GetFocusable());
1287 window->SetWindowState(state);
1288 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1289 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1290 }
1291
1292 /**
1293 * @tc.name: SetFocusable02
1294 * @tc.desc: create window with show, test SetFocusable
1295 * @tc.type: FUNC
1296 */
1297 HWTEST_F(WindowImplTest, SetFocusable02, Function | SmallTest | Level3)
1298 {
1299 sptr<WindowOption> option = new WindowOption();
1300 option->SetWindowName("SetFocusable02");
1301 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1302 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1303 sptr<WindowImpl> window = new WindowImpl(option);
1304 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1305
1306 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1307 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1308 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1309 ASSERT_EQ(WMError::WM_OK, window->Show());
1310 ASSERT_TRUE(window->GetFocusable());
1311 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2).WillOnce(Return(WMError::WM_OK))
1312 .WillOnce(Return(WMError::WM_OK));
1313 ASSERT_EQ(WMError::WM_OK, window->SetFocusable(false));
1314 ASSERT_FALSE(window->GetFocusable());
1315 ASSERT_EQ(WMError::WM_OK, window->SetFocusable(true));
1316 ASSERT_TRUE(window->GetFocusable());
1317
1318 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1319 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1320 }
1321
1322 /**
1323 * @tc.name: SetTouchable01
1324 * @tc.desc: create window but not show, test SetTouchable
1325 * @tc.type: FUNC
1326 */
1327 HWTEST_F(WindowImplTest, SetTouchable01, Function | SmallTest | Level3)
1328 {
1329 sptr<WindowOption> option = new WindowOption();
1330 option->SetWindowName("SetTouchable01");
1331 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1332 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1333 sptr<WindowImpl> window = new WindowImpl(option);
1334 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1335
1336 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1337 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1338 ASSERT_TRUE(window->GetTouchable());
1339 ASSERT_EQ(WMError::WM_OK, window->SetTouchable(false));
1340 ASSERT_FALSE(window->GetTouchable());
1341 ASSERT_EQ(WMError::WM_OK, window->SetTouchable(true));
1342 ASSERT_TRUE(window->GetTouchable());
1343 WindowState state = window->GetWindowState();
1344 window->SetWindowState(WindowState::STATE_UNFROZEN);
1345 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetTouchable(false));
1346 ASSERT_TRUE(window->GetTouchable());
1347 window->SetWindowState(state);
1348
1349 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1350 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1351 }
1352
1353 /**
1354 * @tc.name: SetTouchable02
1355 * @tc.desc: create window with show, test SetTouchable
1356 * @tc.type: FUNC
1357 */
1358 HWTEST_F(WindowImplTest, SetTouchable02, Function | SmallTest | Level3)
1359 {
1360 sptr<WindowOption> option = new WindowOption();
1361 option->SetWindowName("SetTouchable02");
1362 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1363 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1364 sptr<WindowImpl> window = new WindowImpl(option);
1365 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1366
1367 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1368 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1369 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1370 ASSERT_EQ(WMError::WM_OK, window->Show());
1371 ASSERT_TRUE(window->GetTouchable());
1372 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2).WillOnce(Return(WMError::WM_OK))
1373 .WillOnce(Return(WMError::WM_OK));
1374 ASSERT_EQ(WMError::WM_OK, window->SetTouchable(false));
1375 ASSERT_FALSE(window->GetTouchable());
1376 ASSERT_EQ(WMError::WM_OK, window->SetTouchable(true));
1377 ASSERT_TRUE(window->GetTouchable());
1378
1379 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1380 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1381 }
1382
1383 /**
1384 * @tc.name: DisableAppWindowDecor01
1385 * @tc.desc: disable app window decor
1386 * @tc.type: FUNC
1387 */
1388 HWTEST_F(WindowImplTest, DisableAppWindowDecor01, Function | SmallTest | Level3)
1389 {
1390 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1391 sptr<WindowOption> option = new WindowOption();
1392 option->SetWindowName("DisableAppWindowDecor01");
1393 sptr<WindowImpl> window = new WindowImpl(option);
1394
1395 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1396 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1397 window->isAppDecorEnable_ = true;
1398 window->SetWindowType(WindowType::WINDOW_TYPE_FLOAT);
1399 window->DisableAppWindowDecor();
1400 ASSERT_TRUE(window->isAppDecorEnable_);
1401 window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1402 window->DisableAppWindowDecor();
1403 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1404 ASSERT_EQ(WMError::WM_OK, window->Show());
1405 ASSERT_FALSE(window->isAppDecorEnable_);
1406 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1407 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1408 }
1409
1410 /**
1411 * @tc.name: SetTouchHotAreas01
1412 * @tc.desc: create window with show, test SetTouchHotAreas
1413 * @tc.type: FUNC
1414 */
1415 HWTEST_F(WindowImplTest, SetTouchHotAreas01, Function | SmallTest | Level3)
1416 {
1417 sptr<WindowOption> option = new WindowOption();
1418 option->SetWindowName("SetTouchHotAreas01");
1419 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1420 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1421 sptr<WindowImpl> window = new WindowImpl(option);
1422 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1423
1424 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1425 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1426 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1427 ASSERT_EQ(WMError::WM_OK, window->Show());
1428
1429 std::vector<Rect> requestedTouchHotAreas;
1430 window->GetRequestedTouchHotAreas(requestedTouchHotAreas);
1431 ASSERT_TRUE(requestedTouchHotAreas.empty());
1432
1433 std::vector<Rect> rects;
1434 rects.emplace_back(Rect{ 0, 0, 720, 400 });
1435 rects.emplace_back(Rect{ 0, 800, 720, 300 });
1436 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1437 ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects));
1438 window->GetRequestedTouchHotAreas(requestedTouchHotAreas);
1439 ASSERT_EQ(rects.size(), requestedTouchHotAreas.size());
1440 for (uint32_t i = 0; i < rects.size(); ++i) {
1441 ASSERT_TRUE(rects[i] == requestedTouchHotAreas[i]);
1442 }
1443
1444 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1445 rects.clear();
1446 ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects));
1447 window->GetRequestedTouchHotAreas(requestedTouchHotAreas);
1448 ASSERT_TRUE(requestedTouchHotAreas.empty());
1449
1450 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1451 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1452 }
1453
1454 /**
1455 * @tc.name: SetTransform01
1456 * @tc.desc: set transform
1457 * @tc.type: FUNC
1458 * @tc.require: issueI5NDLK
1459 */
1460 HWTEST_F(WindowImplTest, SetTransform01, Function | SmallTest | Level3)
1461 {
1462 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1463 sptr<WindowOption> option = new WindowOption();
1464 option->SetWindowName("SetTransform01");
1465 sptr<WindowImpl> window = new WindowImpl(option);
1466 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1467 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1468 window->DisableAppWindowDecor();
1469 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1470 ASSERT_EQ(WMError::WM_OK, window->Show());
1471 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
1472 Transform trans_;
1473 window->UpdateZoomTransform(trans_, true);
1474 ASSERT_TRUE(window->GetZoomTransform() == trans_);
1475 window->SetTransform(trans_);
1476 window->UpdateZoomTransform(trans_, false);
1477 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
1478 window->SetTransform(trans_);
1479 ASSERT_TRUE(trans_ == window->GetTransform());
1480 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1481 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1482 }
1483
1484 /**
1485 * @tc.name: SetTransform02
1486 * @tc.desc: set transform and getTransform
1487 * @tc.type: FUNC
1488 * @tc.require: issueI5NDLK
1489 */
1490 HWTEST_F(WindowImplTest, SetTransform02, Function | SmallTest | Level3)
1491 {
1492 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1493 sptr<WindowOption> option = new WindowOption();
1494 option->SetWindowName("SetTransform01");
1495 sptr<WindowImpl> window = new WindowImpl(option);
1496 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1497 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1498 window->DisableAppWindowDecor();
1499 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1500 ASSERT_EQ(WMError::WM_OK, window->Show());
1501 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_ERROR_SAMGR));
1502 Transform trans_;
1503 trans_.pivotX_ = 1.0f;
1504 trans_.pivotY_ = 0.6f;
1505 window->SetTransform(trans_);
1506 ASSERT_TRUE(trans_ != window->GetTransform());
1507 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1508 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1509 }
1510
1511 /**
1512 * @tc.name: SetTransform03
1513 * @tc.desc: set transform and getTransform
1514 * @tc.type: FUNC
1515 * @tc.require: issueI5NDLK
1516 */
1517 HWTEST_F(WindowImplTest, SetTransform03, Function | SmallTest | Level3)
1518 {
1519 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1520 sptr<WindowOption> option = new WindowOption();
1521 option->SetWindowName("SetTransform01");
1522 sptr<WindowImpl> window = new WindowImpl(option);
1523 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1524 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1525 window->DisableAppWindowDecor();
1526 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1527 ASSERT_EQ(WMError::WM_OK, window->Show());
1528 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1529 Transform trans_;
1530 trans_.pivotX_ = 1.0f;
1531 trans_.pivotY_ = 0.6f;
1532 window->SetTransform(trans_);
1533 ASSERT_TRUE(trans_ == window->GetTransform());
1534 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1535 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1536 }
1537
1538 /**
1539 * @tc.name: SetTransform04
1540 * @tc.desc: set transform and getTransform
1541 * @tc.type: FUNC
1542 * @tc.require: issueI5NDLK
1543 */
1544 HWTEST_F(WindowImplTest, SetTransform04, Function | SmallTest | Level3)
1545 {
1546 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1547 sptr<WindowOption> option = new WindowOption();
1548 option->SetWindowName("SetTransform01");
1549 sptr<WindowImpl> window = new WindowImpl(option);
1550 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1551 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1552 window->DisableAppWindowDecor();
1553 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1554 ASSERT_EQ(WMError::WM_OK, window->Show());
1555 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1556 Transform trans_;
1557 trans_.pivotX_ = 1.0f;
1558 trans_.pivotY_ = 0.6f;
1559 Transform defaultTrans_;
1560 window->SetTransform(trans_);
1561 ASSERT_TRUE(defaultTrans_ != window->GetTransform());
1562 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1563 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1564 }
1565
1566 /**
1567 * @tc.name: SetAPPWindowLabel
1568 * @tc.desc: set window label to ace
1569 * @tc.type: FUNC
1570 * @tc.require: issueI5Q2KW
1571 */
1572 HWTEST_F(WindowImplTest, SetAPPWindowLabel, Function | SmallTest | Level3)
1573 {
1574 sptr<WindowOption> option = new WindowOption();
1575 option->SetWindowName("SetAPPWindowLabel");
1576 sptr<WindowImpl> window = new WindowImpl(option);
1577 std::string label = "openharmony";
1578
1579 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1580 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
1581 EXPECT_CALL(*content, SetAppWindowTitle(_));
1582 ASSERT_EQ(WMError::WM_OK, window->SetAPPWindowLabel(label));
1583 window->uiContent_ = nullptr;
1584 ASSERT_EQ(WMError::WM_ERROR_NULLPTR, window->SetAPPWindowLabel(label));
1585 }
1586
1587 /**
1588 * @tc.name: SetAPPWindowIcon
1589 * @tc.desc: set window Icon to ace
1590 * @tc.type: FUNC
1591 * @tc.require: issueI5Q2KW
1592 */
1593 HWTEST_F(WindowImplTest, SetAPPWindowIcon, Function | SmallTest | Level3)
1594 {
1595 sptr<WindowOption> option = new WindowOption();
1596 option->SetWindowName("SetAPPWindowIcon");
1597 sptr<WindowImpl> window = new WindowImpl(option);
1598
1599 std::shared_ptr<Media::PixelMap> icon1(nullptr);
1600 ASSERT_EQ(WMError::WM_ERROR_NULLPTR, window->SetAPPWindowIcon(icon1));
1601 std::shared_ptr<Media::PixelMap> icon2 = std::make_shared<Media::PixelMap>();
1602 ASSERT_EQ(WMError::WM_ERROR_NULLPTR, window->SetAPPWindowIcon(icon2));
1603 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1604 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
1605 EXPECT_CALL(*content, SetAppWindowIcon(_));
1606 ASSERT_EQ(WMError::WM_OK, window->SetAPPWindowIcon(icon2));
1607 }
1608
1609 /**
1610 * @tc.name: NotifyMemoryLevel01
1611 * @tc.desc: NotifyMemoryLevel without mainWindow
1612 * @tc.type: FUNC
1613 * @tc.require: issueI5JQ04
1614 */
1615 HWTEST_F(WindowImplTest, NotifyMemoryLevel01, Function | SmallTest | Level2)
1616 {
1617 sptr<WindowOption> option = new WindowOption();
1618 option->SetWindowName("NotifyMemoryLevel01");
1619 int32_t level = 0;
1620 sptr<WindowImpl> window = new WindowImpl(option);
1621
1622 ASSERT_EQ(WMError::WM_ERROR_NULLPTR, window->NotifyMemoryLevel(level));
1623 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1624 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
1625 EXPECT_CALL(*content, NotifyMemoryLevel(_));
1626 ASSERT_EQ(WMError::WM_OK, window->NotifyMemoryLevel(level));
1627 }
1628
1629 /**
1630 * @tc.name: StretchableUpdateRectDragStartTest
1631 * @tc.desc: UpdateRect test for stretchable window when drag start.
1632 * @tc.type: FUNC
1633 */
1634 HWTEST_F(WindowImplTest, StretchableUpdateRectDragStartTest, Function | SmallTest | Level3)
1635 {
1636 Rect rect1 { 10, 10, 10, 10 };
1637 sptr<WindowImpl> window;
1638 CreateStretchableWindow(window, rect1);
1639 Rect rect2 { 100, 100, 100, 100 };
1640 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1641 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
1642 EXPECT_CALL(*content, UpdateViewportConfig(_, _));
1643 window->UpdateRect(rect2, true, WindowSizeChangeReason::DRAG_START);
1644 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect1);
1645 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1646 EXPECT_CALL(*content, Destroy());
1647 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1648 }
1649
1650 /**
1651 * @tc.name: StretchableUpdateRectDragTest
1652 * @tc.desc: UpdateRect test for stretchable window when drag.
1653 * @tc.type: FUNC
1654 */
1655 HWTEST_F(WindowImplTest, StretchableUpdateRectDragTest, Function | SmallTest | Level3)
1656 {
1657 Rect rect1 { 10, 10, 10, 10 };
1658 sptr<WindowImpl> window;
1659 CreateStretchableWindow(window, rect1);
1660 Rect rect2 { 100, 100, 100, 100 };
1661 window->UpdateRect(rect2, true, WindowSizeChangeReason::DRAG);
1662 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect1);
1663 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1664 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1665 }
1666
1667 /**
1668 * @tc.name: StretchableUpdateRectDragEndTest
1669 * @tc.desc: UpdateRect test for stretchable window when drag end.
1670 * @tc.type: FUNC
1671 */
1672 HWTEST_F(WindowImplTest, StretchableUpdateRectDragEndTest, Function | SmallTest | Level3)
1673 {
1674 Rect rect1 { 10, 10, 10, 10 };
1675 sptr<WindowImpl> window;
1676 CreateStretchableWindow(window, rect1);
1677 Rect rect2 { 100, 100, 100, 100 };
1678 window->UpdateRect(rect2, true, WindowSizeChangeReason::DRAG_END);
1679 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect1);
1680 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1681 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1682 }
1683
1684 /**
1685 * @tc.name: StretchableUpdateRectRecoverTest
1686 * @tc.desc: UpdateRect test for stretchable window when recover.
1687 * @tc.type: FUNC
1688 */
1689 HWTEST_F(WindowImplTest, StretchableUpdateRectRecoverTest, Function | SmallTest | Level3)
1690 {
1691 Rect rect1 { 10, 10, 10, 10 };
1692 sptr<WindowImpl> window;
1693 CreateStretchableWindow(window, rect1);
1694 Rect rect2 { 100, 100, 100, 100 };
1695 window->UpdateRect(rect2, true, WindowSizeChangeReason::RECOVER);
1696 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect1);
1697 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1698 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1699 }
1700
1701 /**
1702 * @tc.name: StretchableUpdateRectRecoverTest
1703 * @tc.desc: UpdateRect test for stretchable window when move.
1704 * @tc.type: FUNC
1705 */
1706 HWTEST_F(WindowImplTest, StretchableUpdateRectMoveTest, Function | SmallTest | Level3)
1707 {
1708 Rect rect1 { 10, 10, 10, 10 };
1709 sptr<WindowImpl> window;
1710 CreateStretchableWindow(window, rect1);
1711 Rect rect2 { 100, 100, 100, 100 };
1712 window->UpdateRect(rect2, true, WindowSizeChangeReason::MOVE);
1713 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect1);
1714 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1715 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1716 }
1717
1718 /**
1719 * @tc.name: StretchableUpdateRectResizeTest
1720 * @tc.desc: UpdateRect test for stretchable window when resize.
1721 * @tc.type: FUNC
1722 */
1723 HWTEST_F(WindowImplTest, StretchableUpdateRectResizeTest, Function | SmallTest | Level3)
1724 {
1725 Rect rect1 { 110, 110, 10, 10 };
1726 sptr<WindowImpl> window;
1727 CreateStretchableWindow(window, rect1);
1728 Rect rect2 { 100, 100, 100, 100 };
1729 ASSERT_EQ(true, rect1.IsInsideOf(rect2));
1730 ASSERT_EQ(true, rect1 != rect2);
1731 window->UpdateRect(rect2, true, WindowSizeChangeReason::RESIZE);
1732 ASSERT_EQ(window->GetWindowProperty()->GetOriginRect(), rect2);
1733 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1734 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1735 }
1736
1737 /**
1738 * @tc.name: PrivacyMode01
1739 * @tc.desc: Set window privacy mode
1740 * @tc.type: FUNC
1741 * @tc.require: issueI5MYNX
1742 */
1743 HWTEST_F(WindowImplTest, PrivacyMode01, Function | SmallTest | Level3)
1744 {
1745 sptr<WindowOption> option = new WindowOption();
1746 option->SetWindowName("PrivacyMode01");
1747 sptr<WindowImpl> window = new WindowImpl(option);
1748 ASSERT_NE(nullptr, window);
1749
1750 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
1751 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(4).WillRepeatedly(Return(WMError::WM_OK));
1752
1753 window->SetPrivacyMode(true);
1754 window->SetSystemPrivacyMode(true);
1755 ASSERT_EQ(true, window->IsPrivacyMode());
1756
1757 window->SetPrivacyMode(true);
1758 window->SetSystemPrivacyMode(false);
1759 ASSERT_EQ(true, window->IsPrivacyMode());
1760
1761 window->SetPrivacyMode(false);
1762 window->SetSystemPrivacyMode(true);
1763 ASSERT_EQ(false, window->IsPrivacyMode());
1764
1765 window->SetPrivacyMode(false);
1766 window->SetSystemPrivacyMode(false);
1767 ASSERT_EQ(false, window->IsPrivacyMode());
1768 }
1769
1770 /**
1771 * @tc.name: CalculatePointerDirection
1772 * @tc.desc: calculate mouse style id
1773 * @tc.type: FUNC
1774 */
1775 HWTEST_F(WindowImplTest, CalculatePointerDirection, Function | SmallTest | Level3)
1776 {
1777 Rect rect1 { 1, 1, 100, 100 };
1778 sptr<WindowOption> option = new WindowOption();
1779 option->SetWindowName("CalculatePointerDirection");
1780 sptr<WindowImpl> window = new WindowImpl(option);
1781
1782 window->moveDragProperty_->startRectExceptCorner_ = rect1;
1783 ASSERT_EQ(12, window->CalculatePointerDirection(0, 0));
1784 ASSERT_EQ(6, window->CalculatePointerDirection(50, 0));
1785 ASSERT_EQ(11, window->CalculatePointerDirection(102, 0));
1786 ASSERT_EQ(5, window->CalculatePointerDirection(102, 50));
1787 }
1788
1789 /*
1790 * @tc.name: FindTopWindow
1791 * @tc.desc: FindTopWindow Test
1792 * @tc.type: FUNC
1793 */
1794 HWTEST_F(WindowImplTest, FindTopWindow, Function | SmallTest | Level3)
1795 {
1796 sptr<WindowOption> option = new WindowOption();
1797 option->SetWindowName("FindTopWindow");
1798 sptr<WindowImpl> window = new WindowImpl(option);
1799 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1800 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1801 ASSERT_EQ(nullptr, window->FindTopWindow(INVALID_WINDOW_ID));
1802 ASSERT_EQ(sptr<Window>(window), window->FindTopWindow(window->GetWindowId()));
1803 EXPECT_CALL(m->Mock(), GetTopWindowId(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1804 ASSERT_EQ(nullptr, sptr<Window>(window)->GetTopWindowWithId(INVALID_WINDOW_ID));
1805 EXPECT_CALL(m->Mock(), GetTopWindowId(_, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
1806 ASSERT_EQ(nullptr, sptr<Window>(window)->GetTopWindowWithId(INVALID_WINDOW_ID));
1807 std::shared_ptr<AbilityRuntime::Context> context;
1808 EXPECT_CALL(m->Mock(), GetTopWindowId(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1809 ASSERT_EQ(nullptr, sptr<Window>(window)->GetTopWindowWithContext(context));
1810 }
1811
1812 /*
1813 * @tc.name: GetSubWindow
1814 * @tc.desc: GetSubWindow Test
1815 * @tc.type: FUNC
1816 */
1817 HWTEST_F(WindowImplTest, GetSubWindow, Function | SmallTest | Level3)
1818 {
1819 sptr<WindowOption> option = new WindowOption();
1820 option->SetWindowName("main");
1821 sptr<WindowImpl> window = new WindowImpl(option);
1822 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1823 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1824
1825 option = new WindowOption();
1826 option->SetWindowName("sub");
1827 option->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
1828 sptr<WindowImpl> subWindow = new WindowImpl(option);
1829 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1830 ASSERT_EQ(WMError::WM_OK, subWindow->Create(window->GetWindowId()));
1831
1832 auto subWindowVec = sptr<Window>(window)->GetSubWindow(window->GetWindowId());
1833 ASSERT_EQ(1, subWindowVec.size());
1834 ASSERT_EQ(sptr<Window>(subWindow), subWindowVec[0]);
1835 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1836 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1837 }
1838
1839 /*
1840 * @tc.name: UpdateConfigurationForAll
1841 * @tc.desc: UpdateConfigurationForAll Test
1842 * @tc.type: FUNC
1843 */
1844 HWTEST_F(WindowImplTest, UpdateConfigurationForAll, Function | SmallTest | Level3)
1845 {
1846 sptr<WindowOption> option = new WindowOption();
1847 sptr<WindowImpl> window = new WindowImpl(option);
1848 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1849 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1850 std::shared_ptr<AppExecFwk::Configuration> configuration;
1851 sptr<Window>(window)->UpdateConfigurationForAll(configuration);
1852 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1853 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1854 }
1855
1856 /*
1857 * @tc.name: SetAlpha
1858 * @tc.desc: SetAlpha | GetAlpha
1859 * @tc.type: FUNC
1860 */
1861 HWTEST_F(WindowImplTest, SetAlpha, Function | SmallTest | Level3)
1862 {
1863 sptr<WindowOption> option = new WindowOption();
1864 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1865 sptr<WindowImpl> window = new WindowImpl(option);
1866
1867 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1868 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1869 float alpha = 0.5f;
1870 window->SetAlpha(alpha);
1871 ASSERT_EQ(alpha, window->GetAlpha());
1872 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1873 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1874 }
1875
1876 /*
1877 * @tc.name: GetAvoidAreaByType
1878 * @tc.desc: Test GetAvoidAreaByType when ret is not ok
1879 * @tc.type: FUNC
1880 */
1881 HWTEST_F(WindowImplTest, GetAvoidAreaByType, Function | SmallTest | Level3)
1882 {
1883 sptr<WindowOption> option = new WindowOption();
1884 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1885 sptr<WindowImpl> window = new WindowImpl(option);
1886
1887 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1888 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1889 EXPECT_CALL(m->Mock(), GetAvoidAreaByType(_, _, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
1890 AvoidArea avoidarea;
1891 ASSERT_EQ(WMError::WM_DO_NOTHING, window->GetAvoidAreaByType(AvoidAreaType::TYPE_CUTOUT, avoidarea));
1892 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1893 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1894 }
1895
1896 /*
1897 * @tc.name: SetWindowType
1898 * @tc.desc: SetWindowType Test
1899 * @tc.type: FUNC
1900 */
1901 HWTEST_F(WindowImplTest, SetWindowType, Function | SmallTest | Level3)
1902 {
1903 sptr<WindowOption> option = new WindowOption();
1904 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1905 sptr<WindowImpl> window = new WindowImpl(option);
1906
1907 window->SetWindowState(WindowState::STATE_UNFROZEN);
1908 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW));
1909
1910 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1911 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1912 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetWindowType(WindowType::SYSTEM_WINDOW_END));
1913
1914 window->SetWindowState(WindowState::STATE_FROZEN);
1915 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW));
1916
1917 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1918 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1919 }
1920
1921 /*
1922 * @tc.name: SetWindowMode
1923 * @tc.desc: SetWindowMode Test
1924 * @tc.type: FUNC
1925 */
1926 HWTEST_F(WindowImplTest, SetWindowMode, Function | SmallTest | Level3)
1927 {
1928 sptr<WindowOption> option = new WindowOption();
1929 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
1930 sptr<WindowImpl> window = new WindowImpl(option);
1931
1932 window->SetWindowState(WindowState::STATE_UNFROZEN);
1933 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
1934
1935 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1936 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1937 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1938 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
1939 EXPECT_CALL(*content, HideWindowTitleButton(_, _, _));
1940 EXPECT_CALL(*content, UpdateWindowMode(_));
1941 ASSERT_EQ(WMError::WM_OK, window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
1942 window->uiContent_ = nullptr;
1943
1944 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1945 ASSERT_EQ(WMError::WM_OK, window->Show());
1946 window->UpdateModeSupportInfo(0);
1947 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW_MODE_OR_SIZE,
1948 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
1949 window->UpdateModeSupportInfo(WindowModeSupport::WINDOW_MODE_SUPPORT_ALL);
1950 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
1951 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
1952 window->SetWindowState(WindowState::STATE_FROZEN);
1953 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY));
1954
1955 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1956 EXPECT_CALL(*content, Destroy());
1957 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1958 }
1959
1960 /*
1961 * @tc.name: WindowFlag
1962 * @tc.desc: GetWindowFlags | SetWindowFlags | AddWindowFlag | RemoveWindowFlag
1963 * @tc.type: FUNC
1964 */
1965 HWTEST_F(WindowImplTest, WindowFlag, Function | SmallTest | Level3)
1966 {
1967 sptr<WindowOption> option = new WindowOption();
1968 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1969 sptr<WindowImpl> window = new WindowImpl(option);
1970 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetWindowFlags(0));
1971 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1972 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1973 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1974 ASSERT_EQ(WMError::WM_OK, window->Show());
1975 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->AddWindowFlag(WindowFlag::WINDOW_FLAG_SHOW_WHEN_LOCKED));
1976 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->RemoveWindowFlag(WindowFlag::WINDOW_FLAG_SHOW_WHEN_LOCKED));
1977 ASSERT_EQ(static_cast<uint32_t>(1), window->GetWindowFlags());
1978 ASSERT_EQ(WindowState::STATE_SHOWN, window->GetWindowState());
1979 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
1980 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetWindowFlags(static_cast<uint32_t>(0)));
1981 ASSERT_EQ(static_cast<uint32_t>(1), window->GetWindowFlags());
1982 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1983 ASSERT_EQ(WMError::WM_OK, window->Destroy());
1984 }
1985
1986 /*
1987 * @tc.name: OnNewWant
1988 * @tc.desc: OnNewWant test
1989 * @tc.type: FUNC
1990 */
1991 HWTEST_F(WindowImplTest, OnNewWant, Function | SmallTest | Level3)
1992 {
1993 sptr<WindowOption> option = new WindowOption();
1994 sptr<WindowImpl> window = new WindowImpl(option);
1995
1996 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
1997 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
1998 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
1999 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2000 AAFwk::Want want;
2001 EXPECT_CALL(*content, OnNewWant(_)).Times(1).WillOnce(Return());
2002 window->OnNewWant(want);
2003 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2004 EXPECT_CALL(*content, Destroy());
2005 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2006 }
2007
2008 /*
2009 * @tc.name: GetContentInfo
2010 * @tc.desc: GetContentInfo test
2011 * @tc.type: FUNC
2012 */
2013 HWTEST_F(WindowImplTest, GetContentInfo, Function | SmallTest | Level3)
2014 {
2015 sptr<WindowOption> option = new WindowOption();
2016 sptr<WindowImpl> window = new WindowImpl(option);
2017 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2018 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2019 ASSERT_EQ(std::string(""), window->GetContentInfo());
2020 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2021 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2022 EXPECT_CALL(*content, GetContentInfo()).Times(1).WillOnce(Return("info"));
2023 ASSERT_EQ(std::string("info"), window->GetContentInfo());
2024 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2025 EXPECT_CALL(*content, Destroy());
2026 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2027 }
2028
2029 /*
2030 * @tc.name: Snapshot
2031 * @tc.desc: Snapshot test
2032 * @tc.type: FUNC
2033 */
2034 HWTEST_F(WindowImplTest, Snapshot, Function | SmallTest | Level3)
2035 {
2036 sptr<WindowOption> option = new WindowOption();
2037 sptr<WindowImpl> window = new WindowImpl(option);
2038
2039 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2040 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2041
2042 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2043 ASSERT_EQ(WMError::WM_OK, window->Show());
2044
2045 ASSERT_EQ(nullptr, window->Snapshot());
2046
2047 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2048 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2049 }
2050
2051 /*
2052 * @tc.name: DumpInfo
2053 * @tc.desc: DumpInfo test
2054 * @tc.type: FUNC
2055 */
2056 HWTEST_F(WindowImplTest, DumpInfo, Function | SmallTest | Level3)
2057 {
2058 sptr<WindowOption> option = new WindowOption();
2059 sptr<WindowImpl> window = new WindowImpl(option);
2060
2061 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2062 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2063
2064 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2065 ASSERT_EQ(WMError::WM_OK, window->Show());
2066 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2067 std::vector<std::string> params{"-h"};
2068 std::vector<std::string> info{""};
2069 window->DumpInfo(params, info);
2070 params.push_back("");
2071 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2072 EXPECT_CALL(*content, DumpInfo(_, _)).Times(1).WillOnce(Return());
2073 window->DumpInfo(params, info);
2074 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2075 EXPECT_CALL(*content, Destroy());
2076 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2077 }
2078
2079 /*
2080 * @tc.name: SetLayoutFullScreen01
2081 * @tc.desc: SetLayoutFullScreen true test
2082 * @tc.type: FUNC
2083 */
2084 HWTEST_F(WindowImplTest, SetLayoutFullScreen01, Function | SmallTest | Level3)
2085 {
2086 sptr<WindowOption> option = new WindowOption();
2087 sptr<WindowImpl> window = new WindowImpl(option);
2088
2089 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetLayoutFullScreen(true));
2090
2091 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2092 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2093
2094 window->UpdateModeSupportInfo(0);
2095 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetLayoutFullScreen(true));
2096 window->UpdateModeSupportInfo(WindowModeSupport::WINDOW_MODE_SUPPORT_ALL);
2097
2098 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2099 ASSERT_EQ(WMError::WM_OK, window->Show());
2100
2101 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
2102 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetLayoutFullScreen(true));
2103
2104 window->property_->SetWindowFlags(window->property_->GetWindowFlags() |
2105 (static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2106 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2)
2107 .WillOnce(Return(WMError::WM_OK))
2108 .WillOnce(Return(WMError::WM_OK));
2109 ASSERT_EQ(WMError::WM_OK, window->SetLayoutFullScreen(true));
2110
2111 window->property_->SetWindowFlags(window->property_->GetWindowFlags() |
2112 (static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2113 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2)
2114 .WillOnce(Return(WMError::WM_OK))
2115 .WillOnce(Return(WMError::WM_DO_NOTHING));
2116 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetLayoutFullScreen(true));
2117
2118 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2119 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2120 }
2121
2122 /*
2123 * @tc.name: SetLayoutFullScreen02
2124 * @tc.desc: SetLayoutFullScreen false test
2125 * @tc.type: FUNC
2126 */
2127 HWTEST_F(WindowImplTest, SetLayoutFullScreen02, Function | SmallTest | Level3)
2128 {
2129 sptr<WindowOption> option = new WindowOption();
2130 sptr<WindowImpl> window = new WindowImpl(option);
2131 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2132 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2133 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2134 ASSERT_EQ(WMError::WM_OK, window->Show());
2135
2136 window->property_->SetWindowFlags(window->property_->GetWindowFlags() &
2137 (~static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2138 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2)
2139 .WillOnce(Return(WMError::WM_OK))
2140 .WillOnce(Return(WMError::WM_OK));
2141 ASSERT_EQ(WMError::WM_OK, window->SetLayoutFullScreen(false));
2142
2143 window->property_->SetWindowFlags(window->property_->GetWindowFlags() &
2144 (~static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2145 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2)
2146 .WillOnce(Return(WMError::WM_OK))
2147 .WillOnce(Return(WMError::WM_DO_NOTHING));
2148 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetLayoutFullScreen(false));
2149
2150 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2151 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2152 }
2153
2154 /*
2155 * @tc.name: SetFullScreen
2156 * @tc.desc: SetFullScreen test
2157 * @tc.type: FUNC
2158 */
2159 HWTEST_F(WindowImplTest, SetFullScreen, Function | SmallTest | Level3)
2160 {
2161 sptr<WindowOption> option = new WindowOption();
2162 sptr<WindowImpl> window = new WindowImpl(option);
2163
2164 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetFullScreen(true));
2165
2166 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2167 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2168
2169 window->UpdateModeSupportInfo(0);
2170 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetFullScreen(true));
2171 window->UpdateModeSupportInfo(WindowModeSupport::WINDOW_MODE_SUPPORT_ALL);
2172
2173 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2174 ASSERT_EQ(WMError::WM_OK, window->Show());
2175
2176 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ = true;
2177 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_NAVIGATION_BAR].enable_ = true;
2178 window->property_->SetWindowFlags(window->property_->GetWindowFlags() |
2179 (static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2180 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(3).WillRepeatedly(Return(WMError::WM_OK));
2181 ASSERT_EQ(WMError::WM_OK, window->SetFullScreen(true));
2182
2183 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ = false;
2184 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_NAVIGATION_BAR].enable_ = false;
2185 window->property_->SetWindowFlags(window->property_->GetWindowFlags() &
2186 (~static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2187 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(3)
2188 .WillRepeatedly(Return(WMError::WM_OK));
2189 ASSERT_EQ(WMError::WM_OK, window->SetFullScreen(false));
2190
2191 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ = true;
2192 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_NAVIGATION_BAR].enable_ = true;
2193 window->property_->SetWindowFlags(window->property_->GetWindowFlags() |
2194 (static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2195 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(2)
2196 .WillOnce(Return(WMError::WM_OK))
2197 .WillOnce(Return(WMError::WM_DO_NOTHING));
2198 ASSERT_EQ(WMError::WM_DO_NOTHING, window->SetFullScreen(true));
2199
2200 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ = true;
2201 window->property_->sysBarPropMap_[WindowType::WINDOW_TYPE_NAVIGATION_BAR].enable_ = true;
2202 window->property_->SetWindowFlags(window->property_->GetWindowFlags() |
2203 (static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID)));
2204 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).Times(3)
2205 .WillOnce(Return(WMError::WM_DO_NOTHING))
2206 .WillOnce(Return(WMError::WM_OK))
2207 .WillOnce(Return(WMError::WM_OK));
2208 ASSERT_EQ(WMError::WM_OK, window->SetFullScreen(true));
2209
2210 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2211 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2212 }
2213
2214 /*
2215 * @tc.name: UpdateTitleButtonVisibility
2216 * @tc.desc: UpdateTitleButtonVisibility test
2217 * @tc.type: FUNC
2218 */
2219 HWTEST_F(WindowImplTest, UpdateTitleButtonVisibility, Function | SmallTest | Level3)
2220 {
2221 sptr<WindowOption> option = new WindowOption();
2222 sptr<WindowImpl> window = new WindowImpl(option);
2223
2224 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2225 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2226
2227 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2228 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2229 EXPECT_CALL(*content, HideWindowTitleButton(_, _, _));
2230 window->UpdateTitleButtonVisibility();
2231
2232 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2233 EXPECT_CALL(*content, Destroy());
2234 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2235 }
2236
2237 /*
2238 * @tc.name: SetWindowCornerRadiusAccordingToSystemConfig
2239 * @tc.desc: SetWindowCornerRadiusAccordingToSystemConfig test
2240 * @tc.type: FUNC
2241 */
2242 HWTEST_F(WindowImplTest, SetWindowCornerRadiusAccordingToSystemConfig, Function | SmallTest | Level3)
2243 {
2244 sptr<WindowOption> option = new WindowOption();
2245 sptr<WindowImpl> window = new WindowImpl(option);
2246
2247 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2248 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2249
2250 window->SetWindowCornerRadiusAccordingToSystemConfig();
2251 window->windowSystemConfig_.effectConfig_.fullScreenCornerRadius_ = 1.0f;
2252 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
2253 window->SetWindowCornerRadiusAccordingToSystemConfig();
2254 window->windowSystemConfig_.effectConfig_.fullScreenCornerRadius_ = 0.0f;
2255 window->windowSystemConfig_.effectConfig_.splitCornerRadius_ = 1.0f;
2256 window->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
2257 window->SetWindowCornerRadiusAccordingToSystemConfig();
2258 window->windowSystemConfig_.effectConfig_.splitCornerRadius_ = 0.0f;
2259 window->windowSystemConfig_.effectConfig_.floatCornerRadius_ = 1.0f;
2260 window->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2261 window->SetWindowCornerRadiusAccordingToSystemConfig();
2262
2263 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2264 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2265 }
2266
2267 /*
2268 * @tc.name: UpdateWindowShadowAccordingToSystemConfig
2269 * @tc.desc: UpdateWindowShadowAccordingToSystemConfig test
2270 * @tc.type: FUNC
2271 */
2272 HWTEST_F(WindowImplTest, UpdateWindowShadowAccordingToSystemConfig, Function | SmallTest | Level3)
2273 {
2274 sptr<WindowOption> option = new WindowOption();
2275 sptr<WindowImpl> window = new WindowImpl(option);
2276
2277 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2278 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2279
2280 window->windowSystemConfig_.effectConfig_.unfocusedShadow_.elevation_ = 1.0f;
2281 window->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
2282 window->UpdateWindowShadowAccordingToSystemConfig();
2283
2284 window->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2285 window->windowSystemConfig_.effectConfig_.unfocusedShadow_.color_ = "????";
2286 window->UpdateWindowShadowAccordingToSystemConfig();
2287
2288 window->windowSystemConfig_.effectConfig_.unfocusedShadow_.color_ = "#000000";
2289 window->UpdateWindowShadowAccordingToSystemConfig();
2290
2291 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2292 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2293 }
2294
2295 /*
2296 * @tc.name: WindowCreateCheck
2297 * @tc.desc: WindowCreateCheck test
2298 * @tc.type: FUNC
2299 */
2300 HWTEST_F(WindowImplTest, WindowCreateCheck, Function | SmallTest | Level3)
2301 {
2302 sptr<WindowOption> option = new WindowOption();
2303 option->SetWindowType(WindowType::WINDOW_TYPE_SYSTEM_SUB_WINDOW);
2304 sptr<WindowImpl> window = new WindowImpl(option);
2305
2306 ASSERT_EQ(WindowType::WINDOW_TYPE_SYSTEM_SUB_WINDOW, window->GetType());
2307 ASSERT_EQ(false, window->WindowCreateCheck(INVALID_WINDOW_ID));
2308 ASSERT_EQ(false, window->WindowCreateCheck(static_cast<uint32_t>(-1)));
2309 }
2310
2311 /*
2312 * @tc.name: BindDialogTarget
2313 * @tc.desc: BindDialogTarget test
2314 * @tc.type: FUNC
2315 */
2316 HWTEST_F(WindowImplTest, BindDialogTarget, Function | SmallTest | Level3)
2317 {
2318 sptr<WindowOption> option = new WindowOption();
2319 sptr<WindowImpl> window = new WindowImpl(option);
2320
2321 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2322 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2323
2324 EXPECT_CALL(m->Mock(), BindDialogTarget(_, _)).Times(2)
2325 .WillOnce(Return(WMError::WM_OK))
2326 .WillOnce(Return(WMError::WM_DO_NOTHING));
2327 sptr<IRemoteObject> targetToken;
2328 ASSERT_EQ(WMError::WM_OK, window->BindDialogTarget(targetToken));
2329 ASSERT_EQ(WMError::WM_DO_NOTHING, window->BindDialogTarget(targetToken));
2330
2331 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2332 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2333 }
2334
2335 /*
2336 * @tc.name: Destroy
2337 * @tc.desc: Destroy test
2338 * @tc.type: FUNC
2339 */
2340 HWTEST_F(WindowImplTest, Destroy, Function | SmallTest | Level3)
2341 {
2342 sptr<WindowOption> option = new WindowOption();
2343 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2344 sptr<WindowImpl> window = new WindowImpl(option);
2345
2346 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2347 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2348
2349 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
2350 ASSERT_EQ(WMError::WM_DO_NOTHING, window->Destroy());
2351
2352 window->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
2353 ASSERT_EQ(WindowType::WINDOW_TYPE_DIALOG, window->GetType());
2354 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
2355 ASSERT_EQ(WMError::WM_DO_NOTHING, window->Destroy());
2356 }
2357
2358 /*
2359 * @tc.name: UpdateSurfaceNodeAfterCustomAnimation
2360 * @tc.desc: UpdateSurfaceNodeAfterCustomAnimation test
2361 * @tc.type: FUNC
2362 */
2363 HWTEST_F(WindowImplTest, UpdateSurfaceNodeAfterCustomAnimation, Function | SmallTest | Level3)
2364 {
2365 sptr<WindowOption> option = new WindowOption();
2366 sptr<WindowImpl> window = new WindowImpl(option);
2367 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->UpdateSurfaceNodeAfterCustomAnimation(true));
2368
2369 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).WillOnce(Return(WMError::WM_OK));
2370 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2371 window->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2372 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->UpdateSurfaceNodeAfterCustomAnimation(true));
2373
2374 window->SetWindowType(WindowType::WINDOW_TYPE_FLOAT);
2375 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).WillOnce(Return(WMError::WM_DO_NOTHING));
2376 ASSERT_EQ(WMError::WM_DO_NOTHING, window->UpdateSurfaceNodeAfterCustomAnimation(true));
2377
2378 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).WillOnce(Return(WMError::WM_OK));
2379 EXPECT_CALL(m->Mock(), UpdateRsTree(_, _)).WillOnce(Return(WMError::WM_DO_NOTHING));
2380 ASSERT_EQ(WMError::WM_DO_NOTHING, window->UpdateSurfaceNodeAfterCustomAnimation(true));
2381
2382 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).WillOnce(Return(WMError::WM_OK));
2383 EXPECT_CALL(m->Mock(), UpdateRsTree(_, _)).WillOnce(Return(WMError::WM_OK));
2384 ASSERT_EQ(WMError::WM_OK, window->UpdateSurfaceNodeAfterCustomAnimation(true));
2385
2386 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2387 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2388 }
2389
2390 /**
2391 * @tc.name: ShowHide
2392 * @tc.desc: Show and Hide test
2393 * @tc.type: FUNC
2394 */
2395 HWTEST_F(WindowImplTest, ShowHide, Function | SmallTest | Level3)
2396 {
2397 sptr<WindowOption> option = new WindowOption();
2398 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2399 sptr<WindowImpl> window = new WindowImpl(option);
2400 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Show());
2401 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Hide());
2402 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2403 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2404
2405 auto state = window->GetWindowState();
2406 window->SetWindowState(WindowState::STATE_FROZEN);
2407 ASSERT_EQ(WindowState::STATE_FROZEN, window->GetWindowState());
2408 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->PreProcessShow(0, false));
2409 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->Show());
2410
2411 window->SetWindowState(state);
2412 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2413 ASSERT_EQ(WMError::WM_OK, window->Show());
2414 ASSERT_EQ(WindowState::STATE_SHOWN, window->GetWindowState());
2415
2416 ASSERT_EQ(WMError::WM_OK, window->Show(static_cast<uint32_t>(WindowStateChangeReason::KEYGUARD)));
2417 EXPECT_CALL(m->Mock(), ProcessPointDown(_, _));
2418 ASSERT_EQ(WMError::WM_OK, window->Show());
2419
2420 window->property_->SetWindowType(WindowType::WINDOW_TYPE_DESKTOP);
2421 ASSERT_EQ(WindowType::WINDOW_TYPE_DESKTOP, window->GetType());
2422 EXPECT_CALL(m->Mock(), MinimizeAllAppWindows(_));
2423 ASSERT_EQ(WMError::WM_OK, window->Show());
2424
2425 EXPECT_CALL(m->Mock(), UpdateProperty(_, _)).WillOnce(Return(WMError::WM_DO_NOTHING));
2426 ASSERT_EQ(WMError::WM_DO_NOTHING, window->Hide());
2427 ASSERT_EQ(WindowState::STATE_SHOWN, window->GetWindowState());
2428
2429 window->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2430
2431 ASSERT_EQ(WMError::WM_OK, window->Hide(static_cast<uint32_t>(WindowStateChangeReason::TOGGLING)));
2432 ASSERT_EQ(WindowState::STATE_HIDDEN, window->GetWindowState());
2433
2434 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_ERROR_INVALID_WINDOW_MODE_OR_SIZE));
2435 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW_MODE_OR_SIZE, window->Show());
2436 ASSERT_EQ(WindowState::STATE_HIDDEN, window->GetWindowState());
2437
2438 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
2439 ASSERT_EQ(WMError::WM_DO_NOTHING, window->Show());
2440 ASSERT_EQ(WindowState::STATE_HIDDEN, window->GetWindowState());
2441
2442 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2443 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2444 }
2445
2446 /*
2447 * @tc.name: InvalidWindow
2448 * @tc.desc: InvalidWindow test
2449 * @tc.type: FUNC
2450 */
2451 HWTEST_F(WindowImplTest, InvalidWindow, Function | SmallTest | Level3)
2452 {
2453 sptr<WindowOption> option = new WindowOption();
2454 sptr<WindowImpl> window = new WindowImpl(option);
2455 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->MoveTo(0, 0));
2456 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Resize(0, 0));
2457 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetCallingWindow(INVALID_WINDOW_ID));
2458 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetBackgroundColor(std::string("???")));
2459 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->Close());
2460 ASSERT_EQ(nullptr, window->GetWindowProperty());
2461 }
2462
2463 /*
2464 * @tc.name: BackgroundColor
2465 * @tc.desc: GetBackgroundColor | SetBackGroundColor test
2466 * @tc.type: FUNC
2467 */
2468 HWTEST_F(WindowImplTest, BackgroundColor, Function | SmallTest | Level3)
2469 {
2470 sptr<WindowOption> option = new WindowOption();
2471 sptr<WindowImpl> window = new WindowImpl(option);
2472
2473 MockAceAbilityHandler* aceAbilityHandler = new MockAceAbilityHandler();
2474 window->aceAbilityHandler_ = aceAbilityHandler;
2475 EXPECT_CALL(*aceAbilityHandler, SetBackgroundColor(_));
2476 ASSERT_EQ(WMError::WM_OK, window->SetBackgroundColor(0));
2477 EXPECT_CALL(*aceAbilityHandler, GetBackgroundColor()).WillOnce(Return(0));
2478 ASSERT_EQ(0, window->GetBackgroundColor());
2479
2480 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2481 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2482 EXPECT_CALL(*content, SetBackgroundColor(_));
2483 ASSERT_EQ(WMError::WM_OK, window->SetBackgroundColor(0));
2484 EXPECT_CALL(*content, GetBackgroundColor()).WillOnce(Return(0));
2485 ASSERT_EQ(0, window->GetBackgroundColor());
2486 }
2487
2488 /*
2489 * @tc.name: SetTransparent
2490 * @tc.desc: SetTransparent test
2491 * @tc.type: FUNC
2492 */
2493 HWTEST_F(WindowImplTest, SetTransparent, Function | SmallTest | Level3)
2494 {
2495 sptr<WindowOption> option = new WindowOption();
2496 sptr<WindowImpl> window = new WindowImpl(option);
2497
2498 ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, window->SetTransparent(true));
2499
2500 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2501 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2502
2503 ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, window->SetTransparent(true));
2504 ASSERT_EQ(WMError::WM_OK, window->SetTransparent(false));
2505
2506 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2507 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2508 }
2509
2510 /*
2511 * @tc.name: TransferLifeCycleEventToString
2512 * @tc.desc: TransferLifeCycleEventToString test
2513 * @tc.type: FUNC
2514 */
2515 HWTEST_F(WindowImplTest, TransferLifeCycleEventToString, Function | SmallTest | Level3)
2516 {
2517 sptr<WindowOption> option = new WindowOption();
2518 sptr<WindowImpl> window = new WindowImpl(option);
2519 ASSERT_EQ(std::string("DESTROY"), window->TransferLifeCycleEventToString(LifeCycleEvent::DESTROY_EVENT));
2520 ASSERT_EQ(std::string("UNDEFINE"), window->TransferLifeCycleEventToString(
2521 static_cast<LifeCycleEvent>(uint32_t(-1))));
2522 }
2523
2524 /*
2525 * @tc.name: NotifyWindowTransition
2526 * @tc.desc: NotifyWindowTransition test
2527 * @tc.type: FUNC
2528 */
2529 HWTEST_F(WindowImplTest, NotifyWindowTransition, Function | SmallTest | Level3)
2530 {
2531 sptr<WindowOption> option = new WindowOption();
2532 sptr<WindowImpl> window = new WindowImpl(option);
__anonedf2e0a10202(std::string) 2533 NotifyNativeWinDestroyFunc func = [](std::string) {};
2534 window->RegisterWindowDestroyedListener(func);
2535 ASSERT_EQ(WMError::WM_ERROR_NO_MEM, window->NotifyWindowTransition(TransitionReason::ABILITY_TRANSITION));
2536 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2537 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2538 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2539 ASSERT_EQ(WMError::WM_OK, window->Close());
2540 }
2541
2542 /*
2543 * @tc.name: RegisterAnimationTransitionController
2544 * @tc.desc: RegisterAnimationTransitionController test
2545 * @tc.type: FUNC
2546 */
2547 HWTEST_F(WindowImplTest, RegisterAnimationTransitionController, Function | SmallTest | Level3)
2548 {
2549 sptr<WindowOption> option = new WindowOption();
2550 sptr<WindowImpl> window = new WindowImpl(option);
2551 sptr<IAnimationTransitionController> listener;
2552 ASSERT_EQ(nullptr, listener);
2553 window->RegisterAnimationTransitionController(listener);
2554 listener = new MockAnimationTransitionController();
2555 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2556 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2557 EXPECT_CALL(*content, SetNextFrameLayoutCallback(_));
2558 window->RegisterAnimationTransitionController(listener);
2559 window->property_ = new WindowProperty();
2560 EXPECT_CALL(*content, SetNextFrameLayoutCallback(_));
2561 window->RegisterAnimationTransitionController(listener);
2562 window->property_->SetAnimationFlag(static_cast<uint32_t>(WindowAnimation::CUSTOM));
2563 EXPECT_CALL(*content, SetNextFrameLayoutCallback(_));
2564 window->RegisterAnimationTransitionController(listener);
2565 }
2566
2567 /*
2568 * @tc.name: RegisterDialogDeathRecipientListener
2569 * @tc.desc: RegisterDialogDeathRecipientListener | NotifyDestroy test
2570 * @tc.type: FUNC
2571 */
2572 HWTEST_F(WindowImplTest, RegisterDialogDeathRecipientListener, Function | SmallTest | Level3)
2573 {
2574 sptr<WindowOption> option = new WindowOption();
2575 sptr<WindowImpl> window = new WindowImpl(option);
2576
2577 sptr<MockDialogDeathRecipientListener> listener;
2578 ASSERT_EQ(nullptr, listener);
2579 window->RegisterDialogDeathRecipientListener(sptr<IDialogDeathRecipientListener>(listener));
2580 listener = new MockDialogDeathRecipientListener();
2581 ASSERT_NE(nullptr, listener);
2582 window->RegisterDialogDeathRecipientListener(sptr<IDialogDeathRecipientListener>(listener));
2583 EXPECT_CALL(*listener, OnDialogDeathRecipient());
2584 window->NotifyDestroy();
2585 window->UnregisterDialogDeathRecipientListener(sptr<IDialogDeathRecipientListener>(listener));
2586 window->NotifyDestroy();
2587 }
2588
2589 /*
2590 * @tc.name: NotifyScreenshot
2591 * @tc.desc: NotifyScreenshot test
2592 * @tc.type: FUNC
2593 */
2594 HWTEST_F(WindowImplTest, NotifyScreenshot, Function | SmallTest | Level3)
2595 {
2596 sptr<WindowOption> option = new WindowOption();
2597 sptr<WindowImpl> window = new WindowImpl(option);
2598
2599 sptr<MockScreenshotListener> listener;
2600 window->screenshotListeners_[window->GetWindowId()].push_back(sptr<IScreenshotListener>(listener));
2601 listener = new MockScreenshotListener;
2602 window->screenshotListeners_[window->GetWindowId()].push_back(sptr<IScreenshotListener>(listener));
2603 EXPECT_CALL(*listener, OnScreenshot()).Times(1);
2604 window->NotifyScreenshot();
2605 }
2606
2607 /*
2608 * @tc.name: NotifyTouchDialogTarget
2609 * @tc.desc: NotifyTouchDialogTarget test
2610 * @tc.type: FUNC
2611 */
2612 HWTEST_F(WindowImplTest, NotifyTouchDialogTarget, Function | SmallTest | Level3)
2613 {
2614 sptr<WindowOption> option = new WindowOption();
2615 sptr<WindowImpl> window = new WindowImpl(option);
2616
2617 sptr<MockDialogTargetTouchListener> listener;
2618 window->dialogTargetTouchListeners_[window->GetWindowId()].push_back(sptr<IDialogTargetTouchListener>(listener));
2619 listener = new MockDialogTargetTouchListener;
2620 window->dialogTargetTouchListeners_[window->GetWindowId()].push_back(sptr<IDialogTargetTouchListener>(listener));
2621 EXPECT_CALL(*listener, OnDialogTargetTouch());
2622 EXPECT_CALL(m->Mock(), ProcessPointDown(_, _));
2623 window->NotifyTouchDialogTarget();
2624 }
2625
2626 /*
2627 * @tc.name: NotifySizeChange
2628 * @tc.desc: NotifySizeChange test
2629 * @tc.type: FUNC
2630 */
2631 HWTEST_F(WindowImplTest, NotifySizeChange, Function | SmallTest | Level3)
2632 {
2633 sptr<WindowOption> option = new WindowOption();
2634 sptr<WindowImpl> window = new WindowImpl(option);
2635
2636 sptr<MockWindowChangeListener> listener;
2637 window->windowChangeListeners_[window->GetWindowId()].push_back(sptr<IWindowChangeListener>(listener));
2638 listener = new MockWindowChangeListener;
2639 window->windowChangeListeners_[window->GetWindowId()].push_back(sptr<IWindowChangeListener>(listener));
2640 EXPECT_CALL(*listener, OnSizeChange(_, _));
2641 Rect rect;
2642 window->NotifySizeChange(rect, WindowSizeChangeReason::UNDEFINED);
2643 window->windowChangeListeners_[window->GetWindowId()].clear();
2644 }
2645
2646 /*
2647 * @tc.name: NotifyModeChange
2648 * @tc.desc: NotifyModeChange test
2649 * @tc.type: FUNC
2650 */
2651 HWTEST_F(WindowImplTest, NotifyModeChange, Function | SmallTest | Level3)
2652 {
2653 sptr<WindowOption> option = new WindowOption();
2654 sptr<WindowImpl> window = new WindowImpl(option);
2655
2656 sptr<MockWindowChangeListener> listener;
2657 window->windowChangeListeners_[window->GetWindowId()].push_back(sptr<IWindowChangeListener>(listener));
2658 listener = new MockWindowChangeListener;
2659 window->windowChangeListeners_[window->GetWindowId()].push_back(sptr<IWindowChangeListener>(listener));
2660 EXPECT_CALL(*listener, OnModeChange(_));
2661 window->NotifyModeChange(WindowMode::WINDOW_MODE_UNDEFINED);
2662 window->windowChangeListeners_[window->GetWindowId()].clear();
2663 }
2664
2665 /*
2666 * @tc.name: NotifyAvoidAreaChange
2667 * @tc.desc: NotifyAvoidAreaChange test
2668 * @tc.type: FUNC
2669 */
2670 HWTEST_F(WindowImplTest, NotifyAvoidAreaChange, Function | SmallTest | Level3)
2671 {
2672 sptr<WindowOption> option = new WindowOption();
2673 sptr<WindowImpl> window = new WindowImpl(option);
2674
2675 sptr<MockAvoidAreaChangedListener> listener;
2676 window->avoidAreaChangeListeners_[window->GetWindowId()].push_back(sptr<IAvoidAreaChangedListener>(listener));
2677 listener = new MockAvoidAreaChangedListener;
2678 window->avoidAreaChangeListeners_[window->GetWindowId()].push_back(sptr<IAvoidAreaChangedListener>(listener));
2679 EXPECT_CALL(*listener, OnAvoidAreaChanged(_, _));
2680 sptr<AvoidArea> avoidArea = new AvoidArea;
2681 window->NotifyAvoidAreaChange(avoidArea, AvoidAreaType::TYPE_CUTOUT);
2682 }
2683
2684 /*
2685 * @tc.name: NotifyDisplayMoveChange
2686 * @tc.desc: NotifyDisplayMoveChange test
2687 * @tc.type: FUNC
2688 */
2689 HWTEST_F(WindowImplTest, NotifyDisplayMoveChange, Function | SmallTest | Level3)
2690 {
2691 sptr<WindowOption> option = new WindowOption();
2692 sptr<WindowImpl> window = new WindowImpl(option);
2693
2694 sptr<MockDisplayMoveListener> listener;
2695 window->displayMoveListeners_.push_back(sptr<IDisplayMoveListener>(listener));
2696 listener = new MockDisplayMoveListener;
2697 window->displayMoveListeners_.push_back(sptr<IDisplayMoveListener>(listener));
2698 EXPECT_CALL(*listener, OnDisplayMove(_, _));
2699 window->NotifyDisplayMoveChange(DisplayId{}, DisplayId{});
2700 }
2701
2702 /*
2703 * @tc.name: SetAceAbilityHandler
2704 * @tc.desc: SetAceAbilityHandler test
2705 * @tc.type: FUNC
2706 */
2707 HWTEST_F(WindowImplTest, SetAceAbilityHandler, Function | SmallTest | Level3)
2708 {
2709 sptr<WindowOption> option = new WindowOption();
2710 sptr<WindowImpl> window = new WindowImpl(option);
2711
2712 sptr<IAceAbilityHandler> handler;
2713 ASSERT_EQ(nullptr, handler);
2714 window->SetAceAbilityHandler(handler);
2715 handler = new MockAceAbilityHandler();
2716 ASSERT_NE(nullptr, handler);
2717 window->SetAceAbilityHandler(handler);
2718 }
2719
2720 /*
2721 * @tc.name: HandleBackKeyPressedEvent
2722 * @tc.desc: HandleBackKeyPressedEvent test
2723 * @tc.type: FUNC
2724 */
2725 HWTEST_F(WindowImplTest, HandleBackKeyPressedEvent, Function | SmallTest | Level3)
2726 {
2727 sptr<WindowOption> option = new WindowOption();
2728 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2729 sptr<WindowImpl> window = new WindowImpl(option);
2730 ASSERT_EQ(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, window->GetType());
2731 std::shared_ptr<MMI::KeyEvent> keyEvent;
2732 window->HandleBackKeyPressedEvent(keyEvent);
2733
2734 window->property_->SetWindowType(WindowType::WINDOW_TYPE_FLOAT);
2735 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2736 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2737 EXPECT_CALL(*content, ProcessBackPressed()).WillOnce(Return(false));
2738 window->HandleBackKeyPressedEvent(keyEvent);
2739
2740 window->inputEventConsumer_.reset(new MockInputEventConsumer);
2741 EXPECT_CALL(*reinterpret_cast<MockInputEventConsumer*>(window->inputEventConsumer_.get()),
2742 OnInputEvent(keyEvent)).WillOnce(Return(true));
2743 window->HandleBackKeyPressedEvent(keyEvent);
2744 }
2745
2746 /*
2747 * @tc.name: ConsumeKeyEvent
2748 * @tc.desc: ConsumeKeyEvent test
2749 * @tc.type: FUNC
2750 */
2751 HWTEST_F(WindowImplTest, ConsumeKeyEvent, Function | SmallTest | Level3)
2752 {
2753 sptr<WindowOption> option = new WindowOption();
2754 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2755 sptr<WindowImpl> window = new WindowImpl(option);
2756 std::shared_ptr<MMI::KeyEvent> keyEvent = std::make_shared<MockKeyEvent>();
2757 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2758 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2759 EXPECT_CALL(*content, ProcessKeyEvent(_));
2760 window->ConsumeKeyEvent(keyEvent);
2761
2762 window->inputEventConsumer_.reset(new MockInputEventConsumer);
2763 EXPECT_CALL(*reinterpret_cast<MockInputEventConsumer*>(window->inputEventConsumer_.get()),
2764 OnInputEvent(keyEvent));
2765 window->ConsumeKeyEvent(keyEvent);
2766
2767 keyEvent->SetKeyCode(MMI::KeyEvent::KEYCODE_BACK);
2768 keyEvent->SetKeyAction(MMI::KeyEvent::KEY_ACTION_UP);
2769 window->inputEventConsumer_ = nullptr;
2770 EXPECT_CALL(*content, ProcessBackPressed());
2771 window->ConsumeKeyEvent(keyEvent);
2772 }
2773
2774 /*
2775 * @tc.name: ConsumePointerEvent
2776 * @tc.desc: ConsumePointerEvent test
2777 * @tc.type: FUNC
2778 */
2779 HWTEST_F(WindowImplTest, ConsumePointerEvent, Function | SmallTest | Level3)
2780 {
2781 sptr<WindowOption> option = new WindowOption();
2782 option->SetWindowType(WindowType::WINDOW_TYPE_LAUNCHER_RECENT);
2783 sptr<WindowImpl> window = new WindowImpl(option);
2784 Rect rect{ 0, 0, 10u, 10u };
2785 window->property_->SetWindowRect(rect);
2786 std::shared_ptr<MMI::PointerEvent> pointerEvent = std::make_shared<MockPointerEvent>();
2787 MMI::PointerEvent::PointerItem item;
2788 pointerEvent->SetPointerId(0);
2789 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_DOWN);
2790 window->ConsumePointerEvent(pointerEvent);
2791
2792 item.SetPointerId(0);
2793 item.SetDisplayX(15); // 15 : position x
2794 item.SetDisplayY(15); // 15 : position y
2795 pointerEvent->AddPointerItem(item);
2796 window->ConsumePointerEvent(pointerEvent);
2797
2798 item.SetDisplayX(5); // 5 : position x
2799 item.SetDisplayY(5); // 5 : position y
2800 pointerEvent->UpdatePointerItem(0, item);
2801 EXPECT_CALL(m->Mock(), ProcessPointDown(_, _));
2802 window->ConsumePointerEvent(pointerEvent);
2803 }
2804
2805 /*
2806 * @tc.name: HandleModeChangeHotZones
2807 * @tc.desc: HandleModeChangeHotZones test
2808 * @tc.type: FUNC
2809 */
2810 HWTEST_F(WindowImplTest, HandleModeChangeHotZones, Function | SmallTest | Level3)
2811 {
2812 sptr<WindowOption> option = new WindowOption();
2813 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2814 option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
2815 sptr<WindowImpl> window = new WindowImpl(option);
2816 window->HandleModeChangeHotZones(0, 0);
2817 window->property_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2818 EXPECT_CALL(m->Mock(), GetModeChangeHotZones(_, _)).Times(1).WillOnce(Return(WMError::WM_DO_NOTHING));
2819 window->HandleModeChangeHotZones(0, 0);
2820 EXPECT_CALL(m->Mock(), GetModeChangeHotZones(_, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2821 window->HandleModeChangeHotZones(0, 0);
2822 }
2823
2824 /*
2825 * @tc.name: UpdatePointerEventForStretchableWindow
2826 * @tc.desc: UpdatePointerEventForStretchableWindow test
2827 * @tc.type: FUNC
2828 */
2829 HWTEST_F(WindowImplTest, UpdatePointerEventForStretchableWindow, Function | SmallTest | Level3)
2830 {
2831 sptr<WindowOption> option = new WindowOption();
2832 sptr<WindowImpl> window = new WindowImpl(option);
2833 window->property_->SetWindowRect(Rect{ 0, 0, 10, 10 });
2834 window->property_->SetOriginRect(Rect{ 0, 0, 100, 100 });
2835 std::shared_ptr<MMI::PointerEvent> pointerEvent = std::make_shared<MockPointerEvent>();
2836 MMI::PointerEvent::PointerItem item;
2837 ASSERT_FALSE(pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), item));
2838 window->UpdatePointerEventForStretchableWindow(pointerEvent);
2839 pointerEvent->SetPointerId(0);
2840 item.SetPointerId(0);
2841 item.SetDisplayX(5); // 5 : position x
2842 item.SetDisplayY(5); // 5 : position y
2843 pointerEvent->AddPointerItem(item);
2844 window->UpdatePointerEventForStretchableWindow(pointerEvent);
2845 ASSERT_TRUE(pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), item));
2846 ASSERT_EQ(50, item.GetDisplayX());
2847 ASSERT_EQ(50, item.GetDisplayY());
2848 }
2849
2850 /**
2851 * @tc.name: MoveDrag
2852 * @tc.desc: StartMove | ReadyToMoveOrDragWindow | EndMoveOrDragWindow test
2853 * @tc.type: FUNC
2854 */
2855 HWTEST_F(WindowImplTest, MoveDrag, Function | SmallTest | Level3)
2856 {
2857 sptr<WindowOption> option = new WindowOption();
2858 option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2859 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2860 sptr<WindowImpl> window = new WindowImpl(option);
2861
2862 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2863 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2864 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2865 window->Show();
2866 window->moveDragProperty_->startDragFlag_ = false;
2867 window->moveDragProperty_->pointEventStarted_ = true;
2868 EXPECT_CALL(m->Mock(), NotifyServerReadyToMoveOrDrag(_, _, _));
2869 window->StartMove();
2870 window->moveDragProperty_->pointEventStarted_ = false;
2871 window->StartMove();
2872
2873 std::shared_ptr<MMI::PointerEvent> pointerEvent = std::make_shared<MockPointerEvent>();
2874 MMI::PointerEvent::PointerItem item;
2875 pointerEvent->SetTargetDisplayId(0);
2876 item.SetDisplayX(10000);
2877 item.SetDisplayY(10000);
2878
2879 window->moveDragProperty_->pointEventStarted_ = true;
2880 window->ReadyToMoveOrDragWindow(pointerEvent, item);
2881 window->moveDragProperty_->startMoveFlag_ = true;
2882 window->moveDragProperty_->startDragFlag_ = true;
2883 EXPECT_CALL(m->Mock(), ProcessPointUp(_)).Times(2);
2884 EXPECT_CALL(m->Mock(), GetModeChangeHotZones(_, _));
2885 window->EndMoveOrDragWindow(uint32_t(), uint32_t(),
2886 window->moveDragProperty_->startPointerId_, window->moveDragProperty_->sourceType_);
2887
2888 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2889 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2890 }
2891
2892 /*
2893 * @tc.name: TransferPointerEvent
2894 * @tc.desc: TransferPointerEvent test
2895 * @tc.type: FUNC
2896 */
2897 HWTEST_F(WindowImplTest, TransferPointerEvent, Function | SmallTest | Level3)
2898 {
2899 sptr<WindowOption> option = new WindowOption();
2900 option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
2901 option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2902 sptr<WindowImpl> window = new WindowImpl(option);
2903 std::shared_ptr<MMI::PointerEvent> pointerEvent = std::make_shared<MockPointerEvent>();
2904 window->windowSystemConfig_.isStretchable_ = true;
2905 window->TransferPointerEvent(pointerEvent);
2906 window->windowSystemConfig_.isStretchable_ = false;
2907 window->TransferPointerEvent(pointerEvent);
2908 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2909 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2910 EXPECT_CALL(*content, ProcessPointerEvent(_));
2911 window->TransferPointerEvent(pointerEvent);
2912
2913 window->inputEventConsumer_.reset(new MockInputEventConsumer);
2914 EXPECT_CALL(*reinterpret_cast<MockInputEventConsumer*>(window->inputEventConsumer_.get()),
2915 OnInputEvent(pointerEvent));
2916 window->TransferPointerEvent(pointerEvent);
2917 }
2918
2919 /*
2920 * @tc.name: RequestVsync
2921 * @tc.desc: RequestVsync test
2922 * @tc.type: FUNC
2923 */
2924 HWTEST_F(WindowImplTest, RequestVsync, Function | SmallTest | Level3)
2925 {
2926 sptr<WindowOption> option = new WindowOption();
2927 sptr<WindowImpl> window = new WindowImpl(option);
2928
2929 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2930 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2931
2932 EXPECT_CALL(m->Mock(), AddWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2933 ASSERT_EQ(WMError::WM_OK, window->Show());
2934 std::shared_ptr<VsyncCallback> callback;
2935 window->RequestVsync(callback);
2936
2937 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2938 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2939 ASSERT_EQ(WindowState::STATE_DESTROYED, window->GetWindowState());
2940 window->RequestVsync(callback);
2941 }
2942
2943 /*
2944 * @tc.name: UpdateConfiguration
2945 * @tc.desc: UpdateConfiguration test
2946 * @tc.type: FUNC
2947 */
2948 HWTEST_F(WindowImplTest, UpdateConfiguration, Function | SmallTest | Level3)
2949 {
2950 sptr<WindowOption> option = new WindowOption();
2951 sptr<WindowImpl> window = new WindowImpl(option);
2952 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2953 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2954
2955 option = new WindowOption();
2956 option->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
2957 option->SetWindowName("subwindow");
2958 sptr<WindowImpl> subWindow = new WindowImpl(option);
2959 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2960 ASSERT_EQ(WMError::WM_OK, subWindow->Create(window->GetWindowId()));
2961 std::shared_ptr<AppExecFwk::Configuration> configuration;
2962 window->UpdateConfiguration(configuration);
2963
2964 window->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2965 Ace::UIContentMocker* content = reinterpret_cast<Ace::UIContentMocker*>(window->uiContent_.get());
2966 subWindow->uiContent_ = std::make_unique<Ace::UIContentMocker>();
2967 Ace::UIContentMocker* subContent = reinterpret_cast<Ace::UIContentMocker*>(subWindow->uiContent_.get());
2968 EXPECT_CALL(*content, UpdateConfiguration(_));
2969 EXPECT_CALL(*subContent, UpdateConfiguration(_));
2970 window->UpdateConfiguration(configuration);
2971 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2972 EXPECT_CALL(*content, Destroy());
2973 EXPECT_CALL(*subContent, Destroy());
2974 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2975 }
2976
2977 /*
2978 * @tc.name: UpdateWindowState
2979 * @tc.desc: UpdateWindowState test
2980 * @tc.type: FUNC
2981 */
2982 HWTEST_F(WindowImplTest, UpdateWindowState, Function | SmallTest | Level3)
2983 {
2984 sptr<WindowOption> option = new WindowOption();
2985 sptr<WindowImpl> window = new WindowImpl(option);
2986
2987 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
2988 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
2989 window->UpdateWindowState(WindowState::STATE_FROZEN);
2990 window->UpdateWindowState(WindowState::STATE_UNFROZEN);
2991 window->UpdateWindowState(WindowState::STATE_SHOWN);
2992 EXPECT_CALL(m->Mock(), RemoveWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2993 window->UpdateWindowState(WindowState::STATE_HIDDEN);
2994 window->UpdateWindowState(WindowState::STATE_INITIAL);
2995 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
2996 ASSERT_EQ(WMError::WM_OK, window->Destroy());
2997 }
2998
2999 /*
3000 * @tc.name: RestoreSplitWindowMode
3001 * @tc.desc: RestoreSplitWindowMode test
3002 * @tc.type: FUNC
3003 */
3004 HWTEST_F(WindowImplTest, RestoreSplitWindowMode, Function | SmallTest | Level3)
3005 {
3006 sptr<WindowOption> option = new WindowOption();
3007 sptr<WindowImpl> window = new WindowImpl(option);
3008 window->RestoreSplitWindowMode(0u);
3009 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
3010 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
3011 window->RestoreSplitWindowMode(static_cast<uint32_t>(WindowMode::WINDOW_MODE_SPLIT_PRIMARY));
3012 window->RestoreSplitWindowMode(static_cast<uint32_t>(WindowMode::WINDOW_MODE_SPLIT_SECONDARY));
3013 window->RestoreSplitWindowMode(static_cast<uint32_t>(WindowMode::WINDOW_MODE_UNDEFINED));
3014 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
3015 ASSERT_EQ(WMError::WM_OK, window->Destroy());
3016 }
3017
3018 /*
3019 * @tc.name: IsFocused
3020 * @tc.desc: IsFocused test
3021 * @tc.type: FUNC
3022 */
3023 HWTEST_F(WindowImplTest, IsFocused, Function | SmallTest | Level3)
3024 {
3025 sptr<WindowOption> option = new WindowOption();
3026 sptr<WindowImpl> window = new WindowImpl(option);
3027 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
3028 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
3029 window->UpdateFocusStatus(false);
3030 ASSERT_FALSE(window->IsFocused());
3031 window->UpdateFocusStatus(true);
3032 ASSERT_TRUE(window->IsFocused());
3033 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
3034 ASSERT_EQ(WMError::WM_OK, window->Destroy());
3035 }
3036 }
3037 } // namespace Rosen
3038 } // namespace OHOS
3039