• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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);
__anon3e8de5220202(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