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 #include "minimize_app.h"
18
19 using namespace testing;
20 using namespace testing::ext;
21
22 namespace OHOS {
23 namespace Rosen {
24 class MinimizeAppTest : public testing::Test {
25 public:
26 static void SetUpTestCase();
27 static void TearDownTestCase();
28 virtual void SetUp() override;
29 virtual void TearDown() override;
30
31 sptr<WindowProperty> CreateWindowProperty(uint32_t windowId);
32 };
33
SetUpTestCase()34 void MinimizeAppTest::SetUpTestCase()
35 {
36 }
37
TearDownTestCase()38 void MinimizeAppTest::TearDownTestCase()
39 {
40 }
41
SetUp()42 void MinimizeAppTest::SetUp()
43 {
44 }
45
TearDown()46 void MinimizeAppTest::TearDown()
47 {
48 }
49
CreateWindowProperty(uint32_t windowId)50 sptr<WindowProperty> MinimizeAppTest::CreateWindowProperty(uint32_t windowId)
51 {
52 sptr<WindowProperty> property = new WindowProperty();
53 property->SetWindowId(windowId);
54 return property;
55 }
56 namespace {
57 /**
58 * @tc.name: MinimizeAppTest01
59 * @tc.desc: add and excute
60 * @tc.type: FUNC
61 */
62 HWTEST_F(MinimizeAppTest, MinimizeAppTest01, Function | SmallTest | Level2)
63 {
64 sptr<WindowNode> node1 = new WindowNode(CreateWindowProperty(1));
65 sptr<WindowNode> node2 = new WindowNode(CreateWindowProperty(2));
66 sptr<WindowNode> node3 = new WindowNode(CreateWindowProperty(3));
67 sptr<WindowNode> node4 = new WindowNode(CreateWindowProperty(4));
68 sptr<WindowNode> node5 = new WindowNode(CreateWindowProperty(5));
69 sptr<WindowNode> node6 = new WindowNode(CreateWindowProperty(6));
70 sptr<WindowNode> node7 = new WindowNode(CreateWindowProperty(7));
71 sptr<WindowNode> node8 = new WindowNode(CreateWindowProperty(8));
72 sptr<WindowNode> node9 = new WindowNode(CreateWindowProperty(9));
73
74 sptr<WindowNode> node10 = new WindowNode();
75 sptr<WindowNode> node11 = nullptr;
76 sptr<WindowNode> conflictNode = new WindowNode(CreateWindowProperty(2));
77
78 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
79 MinimizeApp::AddNeedMinimizeApp(node2, MinimizeReason::MINIMIZE_ALL);
80 MinimizeApp::AddNeedMinimizeApp(node3, MinimizeReason::LAYOUT_TILE);
81 MinimizeApp::AddNeedMinimizeApp(node4, MinimizeReason::LAYOUT_CASCADE);
82 MinimizeApp::AddNeedMinimizeApp(node5, MinimizeReason::MAX_APP_COUNT);
83 MinimizeApp::AddNeedMinimizeApp(node6, MinimizeReason::SPLIT_REPLACE);
84 MinimizeApp::AddNeedMinimizeApp(node7, MinimizeReason::SPLIT_QUIT);
85 MinimizeApp::AddNeedMinimizeApp(node8, MinimizeReason::GESTURE_ANIMATION);
86 MinimizeApp::AddNeedMinimizeApp(node9, MinimizeReason::OTHER_WINDOW);
87 MinimizeApp::AddNeedMinimizeApp(conflictNode, MinimizeReason::MINIMIZE_ALL);
88
89 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node1));
90 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node2));
91 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node3));
92 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node4));
93 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node5));
94 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node6));
95 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node7));
96 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node8));
97 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimize(node9));
98
99 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(node10));
100 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(node11));
101 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(conflictNode));
102
103 MinimizeApp::ExecuteMinimizeTargetReasons(MinimizeReason::SPLIT_REPLACE);
104 MinimizeApp::ExecuteMinimizeAll();
105 }
106
107 /**
108 * @tc.name: MinimizeAppTest02
109 * @tc.desc: add, find and clear
110 * @tc.type: FUNC
111 */
112 HWTEST_F(MinimizeAppTest, MinimizeAppTest02, Function | SmallTest | Level2)
113 {
114 sptr<WindowNode> node1 = new WindowNode();
115
116 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_ALL);
117
118 auto getNodes = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
119 ASSERT_EQ(node1, getNodes[0]);
120
121 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
122 }
123
124 /**
125 * @tc.name: MinimizeAppTest03
126 * @tc.desc: add and find
127 * @tc.type: FUNC
128 */
129 HWTEST_F(MinimizeAppTest, MinimizeAppTest03, Function | SmallTest | Level2)
130 {
131 MinimizeApp::SetMinimizedByOtherConfig(false);
132 sptr<WindowNode> node1 = new WindowNode();
133
134 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::OTHER_WINDOW);
135 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(node1));
136 MinimizeApp::SetMinimizedByOtherConfig(true);
137
138 MinimizeApp::ClearNodesWithReason(MinimizeReason::OTHER_WINDOW);
139 }
140
141 /**
142 * @tc.name: MinimizeAppTest04
143 * @tc.desc: add and recover
144 * @tc.type: FUNC
145 */
146 HWTEST_F(MinimizeAppTest, MinimizeAppTest04, Function | SmallTest | Level2)
147 {
148 sptr<WindowNode> node1 = new WindowNode();
149 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::LAYOUT_TILE);
150
151 ASSERT_EQ(node1, MinimizeApp::GetRecoverdNodeFromMinimizeList());
152 ASSERT_EQ(nullptr, MinimizeApp::GetRecoverdNodeFromMinimizeList());
153
154 MinimizeApp::ClearNodesWithReason(MinimizeReason::LAYOUT_TILE);
155 }
156
157 /**
158 * @tc.name: MinimizeAppTest05
159 * @tc.desc: insert nullptr to needMinimizeAppNodes_
160 * @tc.type: FUNC
161 */
162 HWTEST_F(MinimizeAppTest, MinimizeAppTest05, Function | SmallTest | Level2)
163 {
164 MinimizeApp::needMinimizeAppNodes_[MinimizeReason::MINIMIZE_ALL].emplace_back(nullptr);
165 auto getNodes = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
166 ASSERT_EQ(nullptr, getNodes[0].promote());
167
168 sptr<WindowNode> node1 = new WindowNode();
169 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_ALL);
170 auto getNodes2 = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
171 ASSERT_EQ(node1, getNodes2[1]);
172
173 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
174 }
175
176 /**
177 * @tc.name: IsNodeNeedMinimizeWithReason
178 * @tc.desc: check node need minimize or not
179 * @tc.type: FUNC
180 */
181 HWTEST_F(MinimizeAppTest, IsNodeNeedMinimizeWithReason01, Function | SmallTest | Level2)
182 {
183 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(nullptr, MinimizeReason::MINIMIZE_ALL));
184
185 sptr<WindowNode> node1 = new WindowNode();
186 sptr<WindowNode> node2 = new WindowNode();
187 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
188 MinimizeApp::AddNeedMinimizeApp(node2, MinimizeReason::MINIMIZE_ALL);
189
190 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::GESTURE_ANIMATION));
191 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::MINIMIZE_ALL));
192 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::MINIMIZE_BUTTON));
193
194 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
195 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_BUTTON);
196 }
197
198 /**
199 * @tc.name: ClearNodesWithReason
200 * @tc.desc: clear node with reason
201 * @tc.type: FUNC
202 */
203 HWTEST_F(MinimizeAppTest, ClearNodesWithReason01, Function | SmallTest | Level2)
204 {
205 sptr<WindowNode> node1 = new WindowNode();
206 sptr<WindowNode> node2 = new WindowNode();
207 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
208 MinimizeApp::AddNeedMinimizeApp(node2, MinimizeReason::MINIMIZE_ALL);
209
210 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
211 ASSERT_EQ(0, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL).size());
212 MinimizeApp::ClearNodesWithReason(MinimizeReason::GESTURE_ANIMATION);
213 ASSERT_EQ(1, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
214 }
215
216 /**
217 * @tc.name: GetRecoverdNodeFromMinimizeList
218 * @tc.desc: Get recoverd node from list
219 * @tc.type: FUNC
220 */
221 HWTEST_F(MinimizeAppTest, GetRecoverdNodeFromMinimizeList01, Function | SmallTest | Level2)
222 {
223 sptr<WindowNode> node1 = new WindowNode();
224 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
225
226 ASSERT_EQ(nullptr, MinimizeApp::GetRecoverdNodeFromMinimizeList());
227 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_BUTTON);
228 }
229
230 /**
231 * @tc.name: IsNodeNeedMinimize
232 * @tc.desc: check node need minize or not
233 * @tc.type: FUNC
234 */
235 HWTEST_F(MinimizeAppTest, IsNodeNeedMinimize01, Function | SmallTest | Level2)
236 {
237 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(nullptr));
238 }
239
240 /**
241 * @tc.name: ExecuteMinimizeTargetReasons
242 * @tc.desc: Execute Minimize With TargetReason
243 * @tc.type: FUNC
244 */
245 HWTEST_F(MinimizeAppTest, ExecuteMinimizeTargetReasons01, Function | SmallTest | Level2)
246 {
247 sptr<WindowNode> node1 = new WindowNode();
248 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
249
250 MinimizeApp::ExecuteMinimizeTargetReasons(MinimizeReason::MINIMIZE_BUTTON);
251 ASSERT_EQ(0, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
252
253 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
254 MinimizeApp::ExecuteMinimizeTargetReasons(MinimizeReason::GESTURE_ANIMATION);
255 ASSERT_EQ(1, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
256 }
257 }
258 }
259 }
260