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
16 #include <gtest/gtest.h>
17
18 #include "event_runner.h"
19 #include "pointer_event.h"
20 #include "window_inner_manager.h"
21 #include "wm_common.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25 namespace OHOS {
26 namespace Rosen {
27 using InnerTask = std::function<void()>;
28 using EventRunner = OHOS::AppExecFwk::EventRunner;
29 using EventHandler = OHOS::AppExecFwk::EventHandler;
30 using EventPriority = OHOS::AppExecFwk::EventQueue::Priority;
31
32 namespace {
33 const std::string INNER_WM_THREAD_NAME = "TestInnerWindowManager";
34 }
35
36 class WindowInnerManagerTest : public testing::Test {
37 public:
38 static void SetUpTestCase();
39 static void TearDownTestCase();
40 void SetUp() override;
41 void TearDown() override;
42 };
43
SetUpTestCase()44 void WindowInnerManagerTest::SetUpTestCase()
45 {
46 }
47
TearDownTestCase()48 void WindowInnerManagerTest::TearDownTestCase()
49 {
50 }
51
SetUp()52 void WindowInnerManagerTest::SetUp()
53 {
54 }
55
TearDown()56 void WindowInnerManagerTest::TearDown()
57 {
58 }
59
60 namespace {
61 /**
62 * @tc.name: Stop
63 * @tc.desc: test WindowInnerManager Stop
64 * @tc.type: FUNC
65 */
66 HWTEST_F(WindowInnerManagerTest, Stop, Function | SmallTest | Level2)
67 {
68 WindowInnerManager& windowInnerManager = WindowInnerManager::GetInstance();
69 windowInnerManager.state_ = InnerWMRunningState::STATE_RUNNING;
70 windowInnerManager.eventLoop_ = nullptr;
71 windowInnerManager.eventHandler_ = nullptr;
72 windowInnerManager.moveDragController_ = nullptr;
73 windowInnerManager.Stop();
74 ASSERT_EQ(InnerWMRunningState::STATE_NOT_START, windowInnerManager.state_);
75
76 windowInnerManager.eventLoop_ = AppExecFwk::EventRunner::Create(INNER_WM_THREAD_NAME);
77 windowInnerManager.eventHandler_ = std::make_shared<EventHandler>(windowInnerManager.eventLoop_);
78 windowInnerManager.moveDragController_ = new MoveDragController();
79 windowInnerManager.Stop();
80 ASSERT_EQ(0, windowInnerManager.eventLoop_.use_count());
81 ASSERT_EQ(0, windowInnerManager.eventHandler_.use_count());
82 }
83
84 /**
85 * @tc.name: NotifyServerReadyToMoveOrDrag
86 * @tc.desc: test WindowInnerManager NotifyServerReadyToMoveOrDrag
87 * @tc.type: FUNC
88 */
89 HWTEST_F(WindowInnerManagerTest, NotifyServerReadyToMoveOrDrag, Function | SmallTest | Level2)
90 {
91 WindowInnerManager& windowInnerManager = WindowInnerManager::GetInstance();
92 windowInnerManager.eventHandler_ = nullptr;
93 windowInnerManager.moveDragController_ = new MoveDragController();
94 windowInnerManager.moveDragController_->activeWindowId_ = 1;
95 uint32_t windowId = 1;
96 sptr<WindowProperty> property = new WindowProperty();
97 ASSERT_NE(property, nullptr);
98 sptr<MoveDragProperty> moveDragProperty = new MoveDragProperty();
99 ASSERT_NE(moveDragProperty, nullptr);
100 auto result = windowInnerManager.NotifyServerReadyToMoveOrDrag(windowId, property, moveDragProperty);
101 ASSERT_EQ(false, result);
102
103 windowInnerManager.moveDragController_->activeWindowId_ = INVALID_WINDOW_ID;
104 result = windowInnerManager.NotifyServerReadyToMoveOrDrag(windowId, property, moveDragProperty);
105 ASSERT_EQ(true, result);
106 }
107
108 /**
109 * @tc.name: NotifyWindowEndUpMovingOrDragging
110 * @tc.desc: test WindowInnerManager NotifyWindowEndUpMovingOrDragging
111 * @tc.type: FUNC
112 */
113 HWTEST_F(WindowInnerManagerTest, NotifyWindowEndUpMovingOrDragging, Function | SmallTest | Level2)
114 {
115 WindowInnerManager& windowInnerManager = WindowInnerManager::GetInstance();
116 windowInnerManager.eventHandler_ = nullptr;
117 windowInnerManager.moveDragController_ = new MoveDragController();
118 windowInnerManager.moveDragController_->activeWindowId_ = INVALID_WINDOW_ID;
119 uint32_t windowId = 1;
120
121 windowInnerManager.NotifyWindowEndUpMovingOrDragging(windowId);
122
123 windowId = INVALID_WINDOW_ID;
124 windowInnerManager.NotifyWindowEndUpMovingOrDragging(windowId);
125 }
126 /**
127 * @tc.name: NotifyWindowRemovedOrDestroyed
128 * @tc.desc: test WindowInnerManager NotifyWindowRemovedOrDestroyed
129 * @tc.type: FUNC
130 */
131 HWTEST_F(WindowInnerManagerTest, NotifyWindowRemovedOrDestroyed, Function | SmallTest | Level2)
132 {
133 WindowInnerManager& windowInnerManager = WindowInnerManager::GetInstance();
134 windowInnerManager.eventHandler_ = nullptr;
135 windowInnerManager.moveDragController_ = new MoveDragController();
136 windowInnerManager.moveDragController_->activeWindowId_ = INVALID_WINDOW_ID;
137
138 uint32_t windowId = 1;
139 windowInnerManager.NotifyWindowRemovedOrDestroyed(windowId);
140
141 windowId = INVALID_WINDOW_ID;
142 windowInnerManager.NotifyWindowRemovedOrDestroyed(windowId);
143 }
144 /**
145 * @tc.name: ConsumePointerEvent
146 * @tc.desc: test WindowInnerManager ConsumePointerEvent
147 * @tc.type: FUNC
148 */
149 HWTEST_F(WindowInnerManagerTest, ConsumePointerEvent, Function | SmallTest | Level2)
150 {
151 WindowInnerManager& windowInnerManager = WindowInnerManager::GetInstance();
152 windowInnerManager.eventHandler_ = nullptr;
153 windowInnerManager.moveDragController_ = new MoveDragController();
154
155 auto pointerEvent = MMI::PointerEvent::Create();
156 pointerEvent->processedCallback_ = nullptr;
157 pointerEvent->sourceType_ = MMI::PointerEvent::SOURCE_TYPE_MOUSE;
158 pointerEvent->buttonId_ = MMI::PointerEvent::MOUSE_BUTTON_RIGHT;
159 pointerEvent->pointerAction_ = MMI::PointerEvent::POINTER_ACTION_UNKNOWN;
160
161 pointerEvent->agentWindowId_ = 1;
162 windowInnerManager.moveDragController_->activeWindowId_ = INVALID_WINDOW_ID;
163 windowInnerManager.ConsumePointerEvent(pointerEvent);
164
165 pointerEvent->agentWindowId_ = 1;
166 windowInnerManager.moveDragController_->activeWindowId_ = 1;
167 windowInnerManager.ConsumePointerEvent(pointerEvent);
168
169 pointerEvent->agentWindowId_ = INVALID_WINDOW_ID;
170 windowInnerManager.moveDragController_->activeWindowId_ = INVALID_WINDOW_ID;
171 windowInnerManager.ConsumePointerEvent(pointerEvent);
172 }
173 }
174 }
175 }
176