1 /*
2 * Copyright (c) 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 #include <gtest/gtest.h>
16
17 #include "display_manager.h"
18 #include "display_manager_config.h"
19 #include "future.h"
20 #include "wm_math.h"
21 #include "window_node.h"
22 #include "window_node_container.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace Rosen {
29 class WindowNodeTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 virtual void SetUp() override;
34 virtual void TearDown() override;
35 };
36
SetUpTestCase()37 void WindowNodeTest::SetUpTestCase()
38 {
39 }
40
TearDownTestCase()41 void WindowNodeTest::TearDownTestCase()
42 {
43 }
44
SetUp()45 void WindowNodeTest::SetUp()
46 {
47 }
48
TearDown()49 void WindowNodeTest::TearDown()
50 {
51 }
52 class WindowListener : public IWindow {
53 public:
UpdateWindowRect(const struct Rect & rect,bool decoStatus,WindowSizeChangeReason reason,const std::shared_ptr<RSTransaction> & rsTransaction=nullptr)54 virtual WMError UpdateWindowRect(const struct Rect& rect, bool decoStatus, WindowSizeChangeReason reason,
55 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr) override
56 {
57 return WMError::WM_OK;
58 };
UpdateWindowMode(WindowMode mode)59 virtual WMError UpdateWindowMode(WindowMode mode) override
60 {
61 return WMError::WM_OK;
62 };
UpdateWindowModeSupportType(uint32_t windowModeSupportType)63 virtual WMError UpdateWindowModeSupportType(uint32_t windowModeSupportType) override
64 {
65 return WMError::WM_OK;
66 };
UpdateFocusStatus(bool focused)67 virtual WMError UpdateFocusStatus(bool focused) override
68 {
69 return WMError::WM_OK;
70 };
UpdateAvoidArea(const sptr<AvoidArea> & avoidArea,AvoidAreaType type)71 virtual WMError UpdateAvoidArea(const sptr<AvoidArea>& avoidArea, AvoidAreaType type) override
72 {
73 return WMError::WM_OK;
74 };
UpdateWindowState(WindowState state)75 virtual WMError UpdateWindowState(WindowState state) override
76 {
77 return WMError::WM_OK;
78 };
UpdateWindowDragInfo(const PointInfo & point,DragEvent event)79 virtual WMError UpdateWindowDragInfo(const PointInfo& point, DragEvent event) override
80 {
81 return WMError::WM_OK;
82 };
UpdateDisplayId(DisplayId from,DisplayId to)83 virtual WMError UpdateDisplayId(DisplayId from, DisplayId to) override
84 {
85 return WMError::WM_OK;
86 };
UpdateOccupiedAreaChangeInfo(const sptr<OccupiedAreaChangeInfo> & info,const std::shared_ptr<RSTransaction> & rsTransaction=nullptr)87 virtual WMError UpdateOccupiedAreaChangeInfo(const sptr<OccupiedAreaChangeInfo>& info,
88 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr) override
89 {
90 return WMError::WM_OK;
91 };
UpdateOccupiedAreaAndRect(const sptr<OccupiedAreaChangeInfo> & info,const Rect & rect,const std::shared_ptr<RSTransaction> & rsTransaction=nullptr)92 virtual WMError UpdateOccupiedAreaAndRect(const sptr<OccupiedAreaChangeInfo>& info, const Rect& rect,
93 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr) override
94 {
95 return WMError::WM_OK;
96 };
UpdateActiveStatus(bool isActive)97 virtual WMError UpdateActiveStatus(bool isActive) override
98 {
99 return WMError::WM_OK;
100 };
GetWindowProperty()101 virtual sptr<WindowProperty> GetWindowProperty() override
102 {
103 return nullptr;
104 };
NotifyTouchOutside()105 virtual WMError NotifyTouchOutside() override
106 {
107 return WMError::WM_OK;
108 };
NotifyScreenshot()109 virtual WMError NotifyScreenshot() override
110 {
111 return WMError::WM_OK;
112 };
DumpInfo(const std::vector<std::string> & params)113 virtual WMError DumpInfo(const std::vector<std::string>& params) override
114 {
115 return WMError::WM_OK;
116 };
NotifyDestroy(void)117 virtual WMError NotifyDestroy(void) override
118 {
119 return WMError::WM_OK;
120 };
NotifyForeground(void)121 WMError NotifyForeground(void) override
122 {
123 return WMError::WM_OK;
124 };
NotifyBackground(void)125 WMError NotifyBackground(void) override
126 {
127 return WMError::WM_OK;
128 };
NotifyWindowClientPointUp(const std::shared_ptr<MMI::PointerEvent> & pointerEvent)129 virtual WMError NotifyWindowClientPointUp(const std::shared_ptr<MMI::PointerEvent>& pointerEvent) override
130 {
131 return WMError::WM_OK;
132 };
UpdateZoomTransform(const Transform & trans,bool isDisplayZoomOn)133 WMError UpdateZoomTransform(const Transform& trans, bool isDisplayZoomOn) override
134 {
135 return WMError::WM_OK;
136 };
RestoreSplitWindowMode(uint32_t mode)137 virtual WMError RestoreSplitWindowMode(uint32_t mode) override
138 {
139 return WMError::WM_OK;
140 };
141
AsObject()142 virtual sptr<IRemoteObject> AsObject() override
143 {
144 return nullptr;
145 };
ConsumeKeyEvent(std::shared_ptr<MMI::KeyEvent> event)146 void ConsumeKeyEvent(std::shared_ptr<MMI::KeyEvent> event) override {}
NotifyForegroundInteractiveStatus(bool interactive)147 void NotifyForegroundInteractiveStatus(bool interactive) override {}
148 };
149
CreateWindowProperty(uint32_t windowId,const std::string & windowName)150 sptr<WindowProperty> CreateWindowProperty(uint32_t windowId, const std::string& windowName)
151 {
152 sptr<WindowProperty> property = new WindowProperty();
153 property->SetWindowId(windowId);
154 property->SetWindowName(windowName);
155 return property;
156 }
157
CreateRSSurfaceNode(std::string windowNode)158 RSSurfaceNode::SharedPtr CreateRSSurfaceNode(std::string windowNode)
159 {
160 struct RSSurfaceNodeConfig rsSurfaceNodeConfig;
161 rsSurfaceNodeConfig.SurfaceNodeName = windowNode;
162 auto surfaceNode = RSSurfaceNode::Create(rsSurfaceNodeConfig);
163 return surfaceNode;
164 }
165 namespace {
166 /**
167 * @tc.name: NewWindowNode01
168 * @tc.desc: new window node with WindowProperty
169 * @tc.type: FUNC
170 */
171 HWTEST_F(WindowNodeTest, NewWindowNode01, Function | SmallTest | Level3)
172 {
173 std::string windowName = "WindowNode01";
174 auto property = CreateWindowProperty(1, windowName);
175 ASSERT_NE(nullptr, property);
176
177 sptr<WindowNode> windowNode2 = new WindowNode(property);
178 windowNode2->SetWindowProperty(property);
179 ASSERT_NE(nullptr, windowNode2);
180 ASSERT_EQ(windowName, windowNode2->GetWindowName());
181 }
182 /**
183 * @tc.name: NewWindowNode02
184 * @tc.desc: new window node with WindowProperty, RSSurfaceNode, IWindow
185 * @tc.type: FUNC
186 */
187 HWTEST_F(WindowNodeTest, NewWindowNode02, Function | SmallTest | Level1)
188 {
189 std::string windowName = "WindowNode02";
190 auto property = CreateWindowProperty(2, windowName);
191 ASSERT_NE(nullptr, property);
192
193 auto surfaceNode = CreateRSSurfaceNode(windowName);
194 ASSERT_NE(nullptr, surfaceNode);
195
196 WindowListener* iWindow = new WindowListener();
197 ASSERT_NE(nullptr, iWindow);
198
199 sptr<WindowNode> windowNode = new WindowNode(property, iWindow, surfaceNode);
200 ASSERT_NE(nullptr, windowNode);
201 windowNode->SetWindowProperty(property);
202 ASSERT_EQ(windowName, windowNode->GetWindowName());
203 }
204 /**
205 * @tc.name: NewWindowNode03
206 * @tc.desc: new window node with WindowProperty, RSSurfaceNode, IWindow, pid , uid
207 * @tc.type: FUNC
208 */
209 HWTEST_F(WindowNodeTest, NewWindowNode03, Function | SmallTest | Level1)
210 {
211 std::string windowName = "WindowNode03";
212 auto property = CreateWindowProperty(3, windowName);
213 ASSERT_NE(nullptr, property);
214 auto surfaceNode = CreateRSSurfaceNode(windowName);
215 ASSERT_NE(nullptr, surfaceNode);
216 sptr<WindowListener> iWindow = new Rosen::WindowListener();
217 ASSERT_NE(nullptr, iWindow);
218
219 int32_t pid = 1;
220 int32_t uid = 2;
221 WindowNode* windowNode = new WindowNode(property, iWindow, surfaceNode, pid, uid);
222 windowNode->SetWindowProperty(property);
223 ASSERT_NE(nullptr, windowNode);
224
225 ASSERT_EQ(0, windowNode->GetInputEventCallingPid());
226 ASSERT_EQ(2, windowNode->GetCallingPid());
227 ASSERT_EQ(0, windowNode->GetCallingUid());
228 }
229
230 /**
231 * @tc.name: SetDisplayId01
232 * @tc.desc: SetDisplayId & GetDisplayId
233 * @tc.type: FUNC
234 */
235 HWTEST_F(WindowNodeTest, SetDisplayId01, Function | SmallTest | Level1)
236 {
237 std::string windowName = "WindowNode04";
238 auto property = CreateWindowProperty(4, windowName);
239 ASSERT_NE(nullptr, property);
240
241 WindowNode* windowNode = new WindowNode(property);
242 windowNode->SetWindowProperty(property);
243 ASSERT_NE(nullptr, windowNode);
244 ASSERT_EQ(0, windowNode->GetDisplayId());
245
246 windowNode->SetDisplayId(1);
247 ASSERT_EQ(1, windowNode->GetDisplayId());
248 }
249
250 /**
251 * @tc.name: SetEntireWindowTouchHotArea01
252 * @tc.desc: SetEntireWindowTouchHotArea & GetEntireWindowTouchHotArea
253 * @tc.type: FUNC
254 */
255 HWTEST_F(WindowNodeTest, SetEntireWindowTouchHotArea01, Function | SmallTest | Level1)
256 {
257 std::string windowName = "WindowNode05";
258 auto property = CreateWindowProperty(5, windowName);
259 ASSERT_NE(nullptr, property);
260
261 sptr<WindowNode> windowNode = new WindowNode(property);
262 ASSERT_NE(nullptr, windowNode);
263 windowNode->SetWindowProperty(property);
264
265 ASSERT_EQ(0, windowNode->GetEntireWindowTouchHotArea().posX_);
266 ASSERT_EQ(0, windowNode->GetEntireWindowTouchHotArea().posY_);
267 ASSERT_EQ(0, windowNode->GetEntireWindowTouchHotArea().width_);
268 ASSERT_EQ(0, windowNode->GetEntireWindowTouchHotArea().height_);
269
270 Rect testValue = { 10, 10, 255, 255 };
271 windowNode->SetEntireWindowTouchHotArea(testValue);
272 ASSERT_EQ(testValue.posX_, windowNode->GetEntireWindowTouchHotArea().posX_);
273 ASSERT_EQ(testValue.posY_, windowNode->GetEntireWindowTouchHotArea().posY_);
274 ASSERT_EQ(testValue.width_, windowNode->GetEntireWindowTouchHotArea().width_);
275 ASSERT_EQ(testValue.height_, windowNode->GetEntireWindowTouchHotArea().height_);
276 }
277 /**
278 * @tc.name: SetEntireWindowPointerHotArea01
279 * @tc.desc: SetEntireWindowPointerHotArea & GetEntireWindowPointerHotArea
280 * @tc.type: FUNC
281 */
282 HWTEST_F(WindowNodeTest, SetEntireWindowPointerHotArea01, Function | SmallTest | Level1)
283 {
284 std::string windowName = "WindowNode06";
285 auto property = CreateWindowProperty(6, windowName);
286 ASSERT_NE(nullptr, property);
287
288 sptr<WindowNode> windowNode = new WindowNode(property);
289 ASSERT_NE(nullptr, windowNode);
290 windowNode->SetWindowProperty(property);
291
292 Rect rect1 = {0, 0, 0, 0};
293 windowNode->SetEntireWindowPointerHotArea(rect1);
294 ASSERT_EQ(0, windowNode->GetEntireWindowPointerHotArea().posX_);
295 ASSERT_EQ(0, windowNode->GetEntireWindowPointerHotArea().posY_);
296 ASSERT_EQ(0, windowNode->GetEntireWindowPointerHotArea().width_);
297 ASSERT_EQ(0, windowNode->GetEntireWindowPointerHotArea().height_);
298
299 Rect rect2 = {10, 10, 255, 255};
300 windowNode->SetEntireWindowPointerHotArea(rect2);
301 ASSERT_EQ(10, windowNode->GetEntireWindowPointerHotArea().posX_);
302 ASSERT_EQ(10, windowNode->GetEntireWindowPointerHotArea().posY_);
303 ASSERT_EQ(255, windowNode->GetEntireWindowPointerHotArea().width_);
304 ASSERT_EQ(255, windowNode->GetEntireWindowPointerHotArea().height_);
305 }
306 /**
307 * @tc.name: SetWindowRect01
308 * @tc.desc: SetWindowRect & GetWindowRect
309 * @tc.type: FUNC
310 */
311 HWTEST_F(WindowNodeTest, SetWindowRect01, Function | SmallTest | Level1)
312 {
313 std::string windowName = "WindowNode07";
314 auto property = CreateWindowProperty(7, windowName);
315 ASSERT_NE(nullptr, property);
316
317 sptr<WindowNode> windowNode = new WindowNode(property);
318 ASSERT_NE(nullptr, windowNode);
319
320 Rect rect1 = {0, 0, 0, 0};
321 windowNode->SetWindowProperty(property);
322 windowNode->SetWindowRect(rect1);
323 ASSERT_EQ(0, windowNode->GetWindowRect().posX_);
324 ASSERT_EQ(0, windowNode->GetWindowRect().posY_);
325 ASSERT_EQ(0, windowNode->GetWindowRect().width_);
326 ASSERT_EQ(0, windowNode->GetWindowRect().height_);
327
328 Rect rect2 = {10, 10, 255, 255};
329 windowNode->SetWindowRect(rect2);
330 ASSERT_EQ(10, windowNode->GetWindowRect().posX_);
331 ASSERT_EQ(10, windowNode->GetWindowRect().posY_);
332 ASSERT_EQ(255, windowNode->GetWindowRect().width_);
333 ASSERT_EQ(255, windowNode->GetWindowRect().height_);
334 }
335 /**
336 * @tc.name: SetDecoStatus01
337 * @tc.desc: SetDecoStatus & GetDecoStatus
338 * @tc.type: FUNC
339 */
340 HWTEST_F(WindowNodeTest, SetDecoStatus01, Function | SmallTest | Level1)
341 {
342 std::string windowName = "WindowNode08";
343 auto property = CreateWindowProperty(8, windowName);
344 ASSERT_NE(nullptr, property);
345 sptr<WindowNode> windowNode = new WindowNode(property);
346 ASSERT_NE(nullptr, windowNode);
347
348 windowNode->SetWindowProperty(property);
349 windowNode->SetDecoStatus(true);
350 ASSERT_EQ(true, windowNode->GetDecoStatus());
351 windowNode->SetDecoStatus(false);
352 ASSERT_EQ(false, windowNode->GetDecoStatus());
353
354 windowNode->SetDecorEnable(true);
355 ASSERT_EQ(true, windowNode->GetWindowProperty()->GetDecorEnable());
356 windowNode->SetDecorEnable(false);
357 ASSERT_EQ(false, windowNode->GetWindowProperty()->GetDecorEnable());
358 }
359 /**
360 * @tc.name: SetRequestRect01
361 * @tc.desc: SetRequestRect & GetRequestRect
362 * @tc.type: FUNC
363 */
364 HWTEST_F(WindowNodeTest, SetRequestRect01, Function | SmallTest | Level1)
365 {
366 std::string windowName = "WindowNode09";
367 auto property = CreateWindowProperty(9, windowName);
368 ASSERT_NE(nullptr, property);
369 sptr<WindowNode> windowNode = new WindowNode(property);
370 ASSERT_NE(nullptr, windowNode);
371
372 windowNode->SetWindowProperty(property);
373 Rect rect1 = { 0, 0, 0, 0 };
374 windowNode->SetRequestRect(rect1);
375 ASSERT_EQ(0, windowNode->GetRequestRect().posX_);
376 ASSERT_EQ(0, windowNode->GetRequestRect().posY_);
377 ASSERT_EQ(0, windowNode->GetRequestRect().width_);
378 ASSERT_EQ(0, windowNode->GetRequestRect().height_);
379
380 Rect rect2 = { 10, 10, 255, 255 };
381 windowNode->SetRequestRect(rect2);
382 ASSERT_EQ(10, windowNode->GetRequestRect().posX_);
383 ASSERT_EQ(10, windowNode->GetRequestRect().posY_);
384 ASSERT_EQ(255, windowNode->GetRequestRect().width_);
385 ASSERT_EQ(255, windowNode->GetRequestRect().height_);
386 }
387 /**
388 * @tc.name: SetWindowProperty01
389 * @tc.desc: SetWindowProperty & GetWindowProperty
390 * @tc.type: FUNC
391 */
392 HWTEST_F(WindowNodeTest, SetWindowProperty01, Function | SmallTest | Level1)
393 {
394 std::string windowName = "WindowNode09";
395 auto property = CreateWindowProperty(9, windowName);
396 ASSERT_NE(nullptr, property);
397 sptr<WindowNode> windowNode = new WindowNode(property);
398 ASSERT_NE(nullptr, windowNode);
399 windowNode->SetWindowProperty(property);
400 ASSERT_EQ(property, windowNode->GetWindowProperty());
401
402 auto property2 = CreateWindowProperty(10, windowName);
403 ASSERT_NE(nullptr, property2);
404 windowNode->SetWindowProperty(property2);
405 ASSERT_EQ(property2, windowNode->GetWindowProperty());
406 }
407 /**
408 * @tc.name: SetSystemBarProperty01
409 * @tc.desc: SetSystemBarProperty & GetSystemBarProperty
410 * @tc.type: FUNC
411 */
412 HWTEST_F(WindowNodeTest, SetSystemBarProperty01, Function | SmallTest | Level1)
413 {
414 std::string windowName = "WindowNode10";
415 auto property = CreateWindowProperty(10, windowName);
416 ASSERT_NE(nullptr, property);
417 sptr<WindowNode> windowNode = new WindowNode(property);
418 ASSERT_NE(nullptr, windowNode);
419
420 windowNode->SetWindowProperty(property);
421 SystemBarProperty systemBarProperty1;
422 SystemBarProperty systemBarProperty2;
423 SystemBarProperty systemBarProperty3;
424 windowNode->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, systemBarProperty1);
425 windowNode->SetSystemBarProperty(WindowType::WINDOW_TYPE_NAVIGATION_BAR, systemBarProperty2);
426 windowNode->SetSystemBarProperty(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, systemBarProperty3);
427
428 auto systemBarProperties = windowNode->GetSystemBarProperty();
429 ASSERT_EQ(systemBarProperty1, systemBarProperties.find(WindowType::WINDOW_TYPE_STATUS_BAR)->second);
430 ASSERT_EQ(systemBarProperty2, systemBarProperties.find(WindowType::WINDOW_TYPE_NAVIGATION_BAR)->second);
431 ASSERT_EQ(systemBarProperties.end(), systemBarProperties.find(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW));
432 }
433 /**
434 * @tc.name: SetWindowMode01
435 * @tc.desc: SetWindowMode & GetWindowMode
436 * @tc.type: FUNC
437 */
438 HWTEST_F(WindowNodeTest, SetWindowMode01, Function | SmallTest | Level1)
439 {
440 std::string windowName = "WindowNode11";
441 auto property = CreateWindowProperty(11, windowName);
442 ASSERT_NE(nullptr, property);
443 sptr<WindowNode> windowNode = new WindowNode(property);
444 ASSERT_NE(nullptr, windowNode);
445
446 windowNode->SetWindowProperty(property);
447 ASSERT_EQ(WindowMode::WINDOW_MODE_UNDEFINED, windowNode->GetWindowMode());
448
449 windowNode->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
450 ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, windowNode->GetWindowMode());
451 }
452 /**
453 * @tc.name: SetBrightness01
454 * @tc.desc: SetBrightness & GetBrightness
455 * @tc.type: FUNC
456 */
457 HWTEST_F(WindowNodeTest, SetBrightness01, Function | SmallTest | Level1)
458 {
459 std::string windowName = "WindowNode12";
460 auto property = CreateWindowProperty(12, windowName);
461 ASSERT_NE(nullptr, property);
462 sptr<WindowNode> windowNode = new WindowNode(property);
463 ASSERT_NE(nullptr, windowNode);
464
465 windowNode->SetWindowProperty(property);
466 ASSERT_EQ(UNDEFINED_BRIGHTNESS, windowNode->GetBrightness());
467
468 windowNode->SetBrightness(0.5f);
469 ASSERT_EQ(0.5f, windowNode->GetBrightness());
470 windowNode->SetBrightness(1.1f);
471 ASSERT_EQ(1.1f, windowNode->GetBrightness());
472 }
473 /**
474 * @tc.name: SetTurnScreenOn01
475 * @tc.desc: SetTurnScreenOn & IsTurnScreenOn
476 * @tc.type: FUNC
477 */
478 HWTEST_F(WindowNodeTest, SetTurnScreenOn01, Function | SmallTest | Level1)
479 {
480 std::string windowName = "WindowNode13";
481 auto property = CreateWindowProperty(13, windowName);
482 ASSERT_NE(nullptr, property);
483 sptr<WindowNode> windowNode = new WindowNode(property);
484 ASSERT_NE(nullptr, windowNode);
485 windowNode->SetWindowProperty(property);
486 ASSERT_EQ(false, windowNode->IsTurnScreenOn());
487 windowNode->SetTurnScreenOn(true);
488 ASSERT_EQ(true, windowNode->IsTurnScreenOn());
489 }
490 /**
491 * @tc.name: SetKeepScreenOn01
492 * @tc.desc: SetKeepScreenOn & IsKeepScreenOn
493 * @tc.type: FUNC
494 */
495 HWTEST_F(WindowNodeTest, SetKeepScreenOn01, Function | SmallTest | Level1)
496 {
497 std::string windowName = "WindowNode14";
498 auto property = CreateWindowProperty(14, windowName);
499 ASSERT_NE(nullptr, property);
500 sptr<WindowNode> windowNode = new WindowNode(property);
501 ASSERT_NE(nullptr, windowNode);
502 windowNode->SetWindowProperty(property);
503 ASSERT_EQ(false, windowNode->IsKeepScreenOn());
504 windowNode->SetKeepScreenOn(true);
505 ASSERT_EQ(true, windowNode->IsKeepScreenOn());
506 }
507 /**
508 * @tc.name: SetCallingWindow01
509 * @tc.desc: SetCallingWindow & GetCallingWindow
510 * @tc.type: FUNC
511 */
512 HWTEST_F(WindowNodeTest, SetCallingWindow01, Function | SmallTest | Level1)
513 {
514 std::string windowName = "WindowNode15";
515 auto property = CreateWindowProperty(15, windowName);
516 ASSERT_NE(nullptr, property);
517 sptr<WindowNode> windowNode = new WindowNode(property);
518 ASSERT_NE(nullptr, windowNode);
519 windowNode->SetWindowProperty(property);
520 ASSERT_EQ(INVALID_WINDOW_ID, windowNode->GetCallingWindow());
521 windowNode->SetCallingWindow(100);
522 ASSERT_EQ(100, windowNode->GetCallingWindow());
523 }
524 /**
525 * @tc.name: SetCallingPid01
526 * @tc.desc: SetCallingPid & GetCallingPid, SetInputEventCallingPid & GetInputEventCallingPid
527 * @tc.type: FUNC
528 */
529 HWTEST_F(WindowNodeTest, SetCallingPid01, Function | SmallTest | Level1)
530 {
531 std::string windowName = "WindowNode16";
532 auto property = CreateWindowProperty(16, windowName);
533 ASSERT_NE(nullptr, property);
534 sptr<WindowNode> windowNode = new WindowNode(property);
535 ASSERT_NE(nullptr, windowNode);
536 windowNode->SetWindowProperty(property);
537 ASSERT_EQ(0, windowNode->GetCallingPid());
538 ASSERT_EQ(0, windowNode->GetInputEventCallingPid());
539
540 windowNode->SetCallingPid(1);
541 ASSERT_EQ(1, windowNode->GetCallingPid());
542 ASSERT_EQ(1, windowNode->GetInputEventCallingPid());
543
544 windowNode->SetInputEventCallingPid(2);
545 ASSERT_EQ(1, windowNode->GetCallingPid());
546 ASSERT_EQ(2, windowNode->GetInputEventCallingPid());
547 }
548 /**
549 * @tc.name: SetCallingUid01
550 * @tc.desc: SetCallingUid & GetCallingUid
551 * @tc.type: FUNC
552 */
553 HWTEST_F(WindowNodeTest, SetCallingUid01, Function | SmallTest | Level1)
554 {
555 std::string windowName = "WindowNode17";
556 auto property = CreateWindowProperty(17, windowName);
557 ASSERT_NE(nullptr, property);
558 sptr<WindowNode> windowNode = new WindowNode(property);
559 ASSERT_NE(nullptr, windowNode);
560 windowNode->SetWindowProperty(property);
561
562 ASSERT_EQ(0, windowNode->GetCallingUid());
563
564 windowNode->SetCallingUid(1);
565 ASSERT_EQ(1, windowNode->GetCallingUid());
566 }
567 /**
568 * @tc.name: SetWindowSizeChangeReason01
569 * @tc.desc: SetWindowSizeChangeReason & GetWindowSizeChangeReason & ResetWindowSizeChangeReason
570 * @tc.type: FUNC
571 */
572 HWTEST_F(WindowNodeTest, SetWindowSizeChangeReason01, Function | SmallTest | Level1)
573 {
574 std::string windowName = "WindowNode19";
575 auto property = CreateWindowProperty(19, windowName);
576 ASSERT_NE(nullptr, property);
577 sptr<WindowNode> windowNode = new WindowNode(property);
578 ASSERT_NE(nullptr, windowNode);
579 windowNode->SetWindowProperty(property);
580
581 ASSERT_EQ(WindowSizeChangeReason::UNDEFINED, windowNode->GetWindowSizeChangeReason());
582 windowNode->SetWindowSizeChangeReason(WindowSizeChangeReason::MAXIMIZE);
583 ASSERT_EQ(WindowSizeChangeReason::MAXIMIZE, windowNode->GetWindowSizeChangeReason());
584 windowNode->ResetWindowSizeChangeReason();
585 ASSERT_EQ(WindowSizeChangeReason::UNDEFINED, windowNode->GetWindowSizeChangeReason());
586 }
587 /**
588 * @tc.name: SetRequestedOrientation01
589 * @tc.desc: SetRequestedOrientation & GetRequestedOrientation
590 * @tc.type: FUNC
591 */
592 HWTEST_F(WindowNodeTest, SetRequestedOrientation01, Function | SmallTest | Level1)
593 {
594 std::string windowName = "WindowNode20";
595 auto property = CreateWindowProperty(20, windowName);
596 ASSERT_NE(nullptr, property);
597 sptr<WindowNode> windowNode = new WindowNode(property);
598 ASSERT_NE(nullptr, windowNode);
599 windowNode->SetWindowProperty(property);
600 ASSERT_EQ(Orientation::UNSPECIFIED, windowNode->GetRequestedOrientation());
601 windowNode->SetRequestedOrientation(Orientation::REVERSE_VERTICAL);
602 ASSERT_EQ(Orientation::REVERSE_VERTICAL, windowNode->GetRequestedOrientation());
603 }
604 /**
605 * @tc.name: SetShowingDisplays01
606 * @tc.desc: SetShowingDisplays & GetShowingDisplays
607 * @tc.type: FUNC
608 */
609 HWTEST_F(WindowNodeTest, SetShowingDisplays01, Function | SmallTest | Level1)
610 {
611 std::string windowName = "WindowNode21";
612 auto property = CreateWindowProperty(21, windowName);
613 ASSERT_NE(nullptr, property);
614 sptr<WindowNode> windowNode = new WindowNode(property);
615 ASSERT_NE(nullptr, windowNode);
616 windowNode->SetWindowProperty(property);
617
618 auto displays = windowNode->GetShowingDisplays();
619 ASSERT_EQ(true, displays.empty());
620
621 std::vector<DisplayId> emptyDisplayIds;
622 windowNode->SetShowingDisplays(emptyDisplayIds);
623 ASSERT_EQ(true, windowNode->GetShowingDisplays().empty());
624
625 displays.push_back(static_cast<DisplayId>(0));
626 windowNode->SetShowingDisplays(displays);
627 ASSERT_EQ(1, windowNode->GetShowingDisplays().size());
628 }
629 /**
630 * @tc.name: SetWindowModeSupportType01
631 * @tc.desc: SetWindowModeSupportType & GetWindowModeSupportType
632 * @tc.type: FUNC
633 */
634 HWTEST_F(WindowNodeTest, SetWindowModeSupportType01, Function | SmallTest | Level1)
635 {
636 std::string windowName = "WindowNode22";
637 auto property = CreateWindowProperty(22, windowName);
638 ASSERT_NE(nullptr, property);
639 sptr<WindowNode> windowNode = new WindowNode(property);
640 ASSERT_NE(nullptr, windowNode);
641 windowNode->SetWindowProperty(property);
642 ASSERT_EQ(WindowModeSupport::WINDOW_MODE_SUPPORT_ALL, windowNode->GetWindowModeSupportType());
643 windowNode->SetWindowModeSupportType(WindowModeSupport::WINDOW_MODE_SUPPORT_FULLSCREEN);
644 ASSERT_EQ(WindowModeSupport::WINDOW_MODE_SUPPORT_FULLSCREEN, windowNode->GetWindowModeSupportType());
645 }
646 /**
647 * @tc.name: SetDragType01
648 * @tc.desc: SetDragType & GetDragType
649 * @tc.type: FUNC
650 */
651 HWTEST_F(WindowNodeTest, SetDragType01, Function | SmallTest | Level1)
652 {
653 std::string windowName = "WindowNode23";
654 auto property = CreateWindowProperty(23, windowName);
655 ASSERT_NE(nullptr, property);
656 sptr<WindowNode> windowNode = new WindowNode(property);
657 ASSERT_NE(nullptr, windowNode);
658 windowNode->SetWindowProperty(property);
659 ASSERT_EQ(DragType::DRAG_UNDEFINED, windowNode->GetDragType());
660 windowNode->SetDragType(DragType::DRAG_BOTTOM_OR_TOP);
661 ASSERT_EQ(DragType::DRAG_BOTTOM_OR_TOP, windowNode->GetDragType());
662 }
663 /**
664 * @tc.name: SetOriginRect01
665 * @tc.desc: SetOriginRect & GetOriginRect
666 * @tc.type: FUNC
667 */
668 HWTEST_F(WindowNodeTest, SetOriginRect01, Function | SmallTest | Level1)
669 {
670 std::string windowName = "WindowNode24";
671 auto property = CreateWindowProperty(24, windowName);
672 ASSERT_NE(nullptr, property);
673 sptr<WindowNode> windowNode = new WindowNode(property);
674 ASSERT_NE(nullptr, windowNode);
675 windowNode->SetWindowProperty(property);
676 auto defaultRect = windowNode->GetOriginRect();
677 ASSERT_EQ(0, defaultRect.posX_);
678 ASSERT_EQ(0, defaultRect.posX_);
679 ASSERT_EQ(0, defaultRect.width_);
680 ASSERT_EQ(0, defaultRect.height_);
681
682 Rect testRect = { 10, 10, 150, 150 };
683 windowNode->SetOriginRect(testRect);
684 auto resultRect = windowNode->GetOriginRect();
685 ASSERT_EQ(testRect, resultRect);
686 }
687 /**
688 * @tc.name: SetTouchHotAreas01
689 * @tc.desc: SetTouchHotAreas & GetTouchHotAreas
690 * @tc.type: FUNC
691 */
692 HWTEST_F(WindowNodeTest, SetTouchHotAreas01, Function | SmallTest | Level1)
693 {
694 std::string windowName = "WindowNode25";
695 auto property = CreateWindowProperty(25, windowName);
696 ASSERT_NE(nullptr, property);
697 sptr<WindowNode> windowNode = new WindowNode(property);
698 ASSERT_NE(nullptr, windowNode);
699 windowNode->SetWindowProperty(property);
700 std::vector<Rect> testRects;
701 windowNode->GetTouchHotAreas(testRects);
702 ASSERT_EQ(true, testRects.empty());
703
704 Rect rect1 = { 10, 10, 10, 10 };
705 testRects.push_back(rect1);
706 windowNode->SetTouchHotAreas(testRects);
707
708 std::vector<Rect> resultRect;
709 windowNode->GetTouchHotAreas(resultRect);
710 ASSERT_EQ(1, resultRect.size());
711 ASSERT_EQ(rect1, resultRect[0]);
712 }
713 /**
714 * @tc.name: SetPointerHotAreas01
715 * @tc.desc: SetPointerHotAreas & GetPointerHotAreas
716 * @tc.type: FUNC
717 */
718 HWTEST_F(WindowNodeTest, SetPointerHotAreas01, Function | SmallTest | Level1)
719 {
720 std::string windowName = "WindowNode26";
721 auto property = CreateWindowProperty(26, windowName);
722 ASSERT_NE(nullptr, property);
723 sptr<WindowNode> windowNode = new WindowNode(property);
724 ASSERT_NE(nullptr, windowNode);
725 windowNode->SetWindowProperty(property);
726
727 std::vector<Rect> testRects;
728 windowNode->GetPointerHotAreas(testRects);
729 ASSERT_EQ(true, testRects.empty());
730
731 Rect rect1 = { 10, 10, 10, 10 };
732 testRects.push_back(rect1);
733 windowNode->SetPointerHotAreas(testRects);
734 std::vector<Rect> resultRect;
735 windowNode->GetPointerHotAreas(resultRect);
736 ASSERT_EQ(1, resultRect.size());
737 ASSERT_EQ(rect1, resultRect[0]);
738 }
739 /**
740 * @tc.name: SetPointerHotAreas01
741 * @tc.desc: SetWindowSizeLimits & GetWindowSizeLimits
742 * @tc.type: FUNC
743 */
744 HWTEST_F(WindowNodeTest, SetWindowSizeLimits01, Function | SmallTest | Level1)
745 {
746 std::string windowName = "WindowNode27";
747 auto property = CreateWindowProperty(27, windowName);
748 ASSERT_NE(nullptr, property);
749 sptr<WindowNode> windowNode = new WindowNode(property);
750 ASSERT_NE(nullptr, windowNode);
751 windowNode->SetWindowProperty(property);
752 auto defaultValue = windowNode->GetWindowSizeLimits();
753 ASSERT_EQ(0, defaultValue.minWidth_);
754 ASSERT_EQ(0, defaultValue.minHeight_);
755 ASSERT_EQ(0.0f, defaultValue.minRatio_);
756 ASSERT_EQ(UINT32_MAX, defaultValue.maxWidth_);
757 ASSERT_EQ(UINT32_MAX, defaultValue.maxHeight_);
758 ASSERT_EQ(FLT_MAX, defaultValue.maxRatio_);
759
760 WindowLimits testValue = { 200, 200, 50, 50, 2.0f, 2.0f };
761 windowNode->SetWindowSizeLimits(testValue);
762
763 auto resultValue = windowNode->GetWindowSizeLimits();
764 ASSERT_EQ(testValue.minWidth_, resultValue.minWidth_);
765 ASSERT_EQ(testValue.minHeight_, resultValue.minHeight_);
766 ASSERT_EQ(testValue.minRatio_, resultValue.minRatio_);
767 ASSERT_EQ(testValue.maxWidth_, resultValue.maxWidth_);
768 ASSERT_EQ(testValue.maxHeight_, resultValue.maxHeight_);
769 ASSERT_EQ(testValue.maxRatio_, resultValue.maxRatio_);
770 }
771 /**
772 * @tc.name: SetWindowUpdatedSizeLimits01
773 * @tc.desc: SetWindowUpdatedSizeLimits & GetWindowUpdatedSizeLimits
774 * @tc.type: FUNC
775 */
776 HWTEST_F(WindowNodeTest, SetWindowUpdatedSizeLimits01, Function | SmallTest | Level1)
777 {
778 std::string windowName = "WindowNode28";
779 auto property = CreateWindowProperty(28, windowName);
780 ASSERT_NE(nullptr, property);
781 sptr<WindowNode> windowNode = new WindowNode(property);
782 ASSERT_NE(nullptr, windowNode);
783 windowNode->SetWindowProperty(property);
784 auto defaultValue = windowNode->GetWindowUpdatedSizeLimits();
785 ASSERT_EQ(0, defaultValue.minWidth_);
786 ASSERT_EQ(0, defaultValue.minHeight_);
787 ASSERT_EQ(0.0f, defaultValue.minRatio_);
788 ASSERT_EQ(UINT32_MAX, defaultValue.maxWidth_);
789 ASSERT_EQ(UINT32_MAX, defaultValue.maxHeight_);
790 ASSERT_EQ(FLT_MAX, defaultValue.maxRatio_);
791
792 WindowLimits testValue = { 200, 200, 50, 50, 2.0f, 2.0f };
793 windowNode->SetWindowUpdatedSizeLimits(testValue);
794
795 auto resultValue = windowNode->GetWindowUpdatedSizeLimits();
796 ASSERT_EQ(testValue.minWidth_, resultValue.minWidth_);
797 ASSERT_EQ(testValue.minHeight_, resultValue.minHeight_);
798 ASSERT_EQ(testValue.minRatio_, resultValue.minRatio_);
799 ASSERT_EQ(testValue.maxWidth_, resultValue.maxWidth_);
800 ASSERT_EQ(testValue.maxHeight_, resultValue.maxHeight_);
801 ASSERT_EQ(testValue.maxRatio_, resultValue.maxRatio_);
802 }
803 /**
804 * @tc.name: SetSnapshot01
805 * @tc.desc: SetSnapshot & GetSnapshot
806 * @tc.type: FUNC
807 */
808 HWTEST_F(WindowNodeTest, SetSnapshot01, Function | SmallTest | Level1)
809 {
810 std::string windowName = "WindowNode29";
811 auto property = CreateWindowProperty(29, windowName);
812 ASSERT_NE(nullptr, property);
813 sptr<WindowNode> windowNode = new WindowNode(property);
814 ASSERT_NE(nullptr, windowNode);
815 windowNode->SetWindowProperty(property);
816
817 auto defaultValue = windowNode->GetSnapshot();
818 ASSERT_EQ(0, defaultValue.use_count());
819
820 Media::InitializationOptions opts;
821 opts.size.width = 200; // 200: test width
822 opts.size.height = 300; // 300: test height
823 opts.pixelFormat = Media::PixelFormat::ARGB_8888;
824 opts.alphaType = Media::AlphaType::IMAGE_ALPHA_TYPE_OPAQUE;
825 std::unique_ptr<Media::PixelMap> pixelMapPtr = Media::PixelMap::Create(opts);
826 std::shared_ptr<Media::PixelMap> pixelMap(pixelMapPtr.release());
827 windowNode->SetSnapshot(pixelMap);
828
829 auto resultValue = windowNode->GetSnapshot();
830 ASSERT_EQ(3, resultValue.use_count());
831 }
832 /**
833 * @tc.name: UpdateZoomTransform01
834 * @tc.desc: UpdateZoomTransform & GetZoomTransform
835 * @tc.type: FUNC
836 */
837 HWTEST_F(WindowNodeTest, UpdateZoomTransform01, Function | SmallTest | Level1)
838 {
839 std::string windowName = "WindowNode30";
840 auto property = CreateWindowProperty(30, windowName);
841 ASSERT_NE(nullptr, property);
842 sptr<WindowNode> windowNode = new WindowNode(property);
843 ASSERT_NE(nullptr, windowNode);
844 windowNode->SetWindowProperty(property);
845 Transform transformData;
846 auto defaultValue = windowNode->GetZoomTransform();
847 ASSERT_EQ(transformData, defaultValue);
848
849 transformData.pivotX_ = 1.0f;
850 transformData.pivotY_ = 1.0f;
851 windowNode->UpdateZoomTransform(transformData, false);
852
853 auto resultValue = windowNode->GetZoomTransform();
854 ASSERT_EQ(1.0f, resultValue.pivotX_);
855 ASSERT_EQ(1.0f, resultValue.pivotY_);
856 }
857 /**
858 * @tc.name: SetTransform01
859 * @tc.desc: SetTransform & ComputeTransform
860 * @tc.type: FUNC
861 */
862 HWTEST_F(WindowNodeTest, SetTransform01, Function | SmallTest | Level1)
863 {
864 std::string windowName = "WindowNode31";
865 auto property = CreateWindowProperty(31, windowName);
866 ASSERT_NE(nullptr, property);
867 sptr<WindowNode> windowNode = new WindowNode(property);
868 ASSERT_NE(nullptr, windowNode);
869 windowNode->SetWindowProperty(property);
__anon4510ab640202(TransformHelper::Matrix4 expectVal, TransformHelper::Matrix4 checkValue) 870 auto isSameValueMat4 = [](TransformHelper::Matrix4 expectVal, TransformHelper::Matrix4 checkValue) -> bool {
871 uint32_t m = 0, n = 0;
872 for (uint32_t i = 0; i < 16; i++) {
873 m = i / 4;
874 n = i % 4;
875 if (m > 4 || n > 4 || (expectVal.mat_[m][n] != checkValue.mat_[m][n])) {
876 return false;
877 }
878 }
879 return true;
880 };
881
882 Transform transformData;
883 auto defaultTrans = windowNode->property_->trans_;
884 auto defaultWorldTransformMat4 = windowNode->property_->worldTransformMat_;
885 ASSERT_EQ(transformData, defaultTrans);
886 ASSERT_EQ(true, isSameValueMat4(TransformHelper::Matrix4::Identity, defaultWorldTransformMat4));
887
888 transformData.pivotX_ = 1.0f;
889 transformData.pivotY_ = 1.0f;
890 transformData.translateX_ = 1.0f;
891 transformData.translateY_ = 1.0f;
892 windowNode->SetTransform(transformData);
893 windowNode->ComputeTransform();
894
895 auto resultTrans = windowNode->property_->trans_;
896 auto resultWorldTransformMat4 = windowNode->property_->worldTransformMat_;
897 ASSERT_EQ(1.0f, resultTrans.pivotX_);
898 ASSERT_EQ(1.0f, resultTrans.pivotY_);
899
900 ASSERT_EQ(1.0f, resultWorldTransformMat4.mat_[3][0]);
901 ASSERT_EQ(1.0f, resultWorldTransformMat4.mat_[3][1]);
902 }
903
904 /**
905 * @tc.name: GetVisibilityState001
906 * @tc.desc: SetVisibilityState & GetVisibilityState
907 * @tc.type: FUNC
908 */
909 HWTEST_F(WindowNodeTest, GetVisibilityState001, Function | SmallTest | Level1)
910 {
911 std::string windowName = "WindowNode32";
912 auto property = CreateWindowProperty(7, windowName);
913 ASSERT_NE(nullptr, property);
914
915 sptr<WindowNode> windowNode = new WindowNode(property);
916 ASSERT_NE(nullptr, windowNode);
917 windowNode->SetWindowProperty(property);
918
919 ASSERT_EQ(windowNode->GetVisibilityState(), WINDOW_VISIBILITY_STATE_NO_OCCLUSION);
920 windowNode->SetVisibilityState(WINDOW_VISIBILITY_STATE_PARTICALLY_OCCLUSION);
921 ASSERT_EQ(windowNode->GetVisibilityState(), WINDOW_VISIBILITY_STATE_PARTICALLY_OCCLUSION);
922 }
923
924 /**
925 * @tc.name: GetTouchable01
926 * @tc.desc: SetTouchable & GetTouchable
927 * @tc.type: FUNC
928 */
929 HWTEST_F(WindowNodeTest, GetTouchable01, Function | SmallTest | Level1)
930 {
931 std::string windowName = "WindowNode33";
932 auto property = CreateWindowProperty(33, windowName);
933 ASSERT_NE(nullptr, property);
934 sptr<WindowNode> windowNode = new WindowNode(property);
935 ASSERT_NE(nullptr, windowNode);
936
937 windowNode->SetTouchable(false);
938 ASSERT_EQ(false, windowNode->GetTouchable());
939 windowNode->SetTouchable(true);
940 ASSERT_EQ(true, windowNode->GetTouchable());
941 }
942 }
943 }
944 }