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 * @tc.name: MinimizeAppTest02
108 * @tc.desc: add, find and clear
109 * @tc.type: FUNC
110 */
111 HWTEST_F(MinimizeAppTest, MinimizeAppTest02, Function | SmallTest | Level2)
112 {
113 sptr<WindowNode> node1 = new WindowNode();
114
115 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_ALL);
116
117 auto getNodes = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
118 ASSERT_EQ(node1, getNodes[0]);
119
120 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
121 }
122 /**
123 * @tc.name: MinimizeAppTest03
124 * @tc.desc: add and find
125 * @tc.type: FUNC
126 */
127 HWTEST_F(MinimizeAppTest, MinimizeAppTest03, Function | SmallTest | Level2)
128 {
129 MinimizeApp::SetMinimizedByOtherConfig(false);
130 sptr<WindowNode> node1 = new WindowNode();
131
132 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::OTHER_WINDOW);
133 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(node1));
134 MinimizeApp::SetMinimizedByOtherConfig(true);
135
136 MinimizeApp::ClearNodesWithReason(MinimizeReason::OTHER_WINDOW);
137 }
138 /**
139 * @tc.name: MinimizeAppTest04
140 * @tc.desc: add and recover
141 * @tc.type: FUNC
142 */
143 HWTEST_F(MinimizeAppTest, MinimizeAppTest04, Function | SmallTest | Level2)
144 {
145 sptr<WindowNode> node1 = new WindowNode();
146 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::LAYOUT_TILE);
147
148 ASSERT_EQ(node1, MinimizeApp::GetRecoverdNodeFromMinimizeList());
149 ASSERT_EQ(nullptr, MinimizeApp::GetRecoverdNodeFromMinimizeList());
150
151 MinimizeApp::ClearNodesWithReason(MinimizeReason::LAYOUT_TILE);
152 }
153 /**
154 * @tc.name: MinimizeAppTest05
155 * @tc.desc: insert nullptr to needMinimizeAppNodes_
156 * @tc.type: FUNC
157 */
158 HWTEST_F(MinimizeAppTest, MinimizeAppTest05, Function | SmallTest | Level2)
159 {
160 MinimizeApp::needMinimizeAppNodes_[MinimizeReason::MINIMIZE_ALL].emplace_back(nullptr);
161 auto getNodes = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
162 ASSERT_EQ(nullptr, getNodes[0].promote());
163
164 sptr<WindowNode> node1 = new WindowNode();
165 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_ALL);
166 auto getNodes2 = MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL);
167 ASSERT_EQ(node1, getNodes2[1]);
168
169 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
170 }
171 /**
172 * @tc.name: IsNodeNeedMinimizeWithReason
173 * @tc.desc: check node need minimize or not
174 * @tc.type: FUNC
175 */
176 HWTEST_F(MinimizeAppTest, IsNodeNeedMinimizeWithReason01, Function | SmallTest | Level2)
177 {
178 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(nullptr, MinimizeReason::MINIMIZE_ALL));
179
180 sptr<WindowNode> node1 = new WindowNode();
181 sptr<WindowNode> node2 = new WindowNode();
182 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
183 MinimizeApp::AddNeedMinimizeApp(node2, MinimizeReason::MINIMIZE_ALL);
184
185 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::GESTURE_ANIMATION));
186 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::MINIMIZE_ALL));
187 ASSERT_EQ(true, MinimizeApp::IsNodeNeedMinimizeWithReason(node1, MinimizeReason::MINIMIZE_BUTTON));
188
189 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
190 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_BUTTON);
191 }
192 /**
193 * @tc.name: ClearNodesWithReason
194 * @tc.desc: clear node with reason
195 * @tc.type: FUNC
196 */
197 HWTEST_F(MinimizeAppTest, ClearNodesWithReason01, Function | SmallTest | Level2)
198 {
199 sptr<WindowNode> node1 = new WindowNode();
200 sptr<WindowNode> node2 = new WindowNode();
201 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
202 MinimizeApp::AddNeedMinimizeApp(node2, MinimizeReason::MINIMIZE_ALL);
203
204 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_ALL);
205 ASSERT_EQ(0, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_ALL).size());
206 MinimizeApp::ClearNodesWithReason(MinimizeReason::GESTURE_ANIMATION);
207 ASSERT_EQ(1, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
208 }
209 /**
210 * @tc.name: GetRecoverdNodeFromMinimizeList
211 * @tc.desc: Get recoverd node from list
212 * @tc.type: FUNC
213 */
214 HWTEST_F(MinimizeAppTest, GetRecoverdNodeFromMinimizeList01, Function | SmallTest | Level2)
215 {
216 sptr<WindowNode> node1 = new WindowNode();
217 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
218
219 ASSERT_EQ(nullptr, MinimizeApp::GetRecoverdNodeFromMinimizeList());
220 MinimizeApp::ClearNodesWithReason(MinimizeReason::MINIMIZE_BUTTON);
221 }
222 /**
223 * @tc.name: IsNodeNeedMinimize
224 * @tc.desc: check node need minize or not
225 * @tc.type: FUNC
226 */
227 HWTEST_F(MinimizeAppTest, IsNodeNeedMinimize01, Function | SmallTest | Level2)
228 {
229 ASSERT_EQ(false, MinimizeApp::IsNodeNeedMinimize(nullptr));
230 }
231 /**
232 * @tc.name: ExecuteMinimizeTargetReasons
233 * @tc.desc: Execute Minimize With TargetReason
234 * @tc.type: FUNC
235 */
236 HWTEST_F(MinimizeAppTest, ExecuteMinimizeTargetReasons01, Function | SmallTest | Level2)
237 {
238 sptr<WindowNode> node1 = new WindowNode();
239 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
240
241 MinimizeApp::ExecuteMinimizeTargetReasons(MinimizeReason::MINIMIZE_BUTTON);
242 ASSERT_EQ(0, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
243
244 MinimizeApp::AddNeedMinimizeApp(node1, MinimizeReason::MINIMIZE_BUTTON);
245 MinimizeApp::ExecuteMinimizeTargetReasons(MinimizeReason::GESTURE_ANIMATION);
246 ASSERT_EQ(1, MinimizeApp::GetNeedMinimizeAppNodesWithReason(MinimizeReason::MINIMIZE_BUTTON).size());
247 }
248 }
249 }
250 }
251