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