• 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 #include "window_manager_service.h"
18 
19 using namespace testing;
20 using namespace testing::ext;
21 
22 namespace OHOS {
23 namespace Rosen {
24 using ConfigItem = WindowManagerConfig::ConfigItem;
25 const std::string XML_STR = R"(<?xml version='1.0' encoding="utf-8"?>
26 <Configs>
27     <!--decor enable is true means app main window show decoration-->
28     <decor enable="false"></decor>
29     <!--max number of main window that could be shown on display-->
30     <maxAppWindowNumber>100</maxAppWindowNumber>
31     <!--maximum number of windows supported by unified rendering -->
32     <maxUniRenderAppWindowNumber>99</maxUniRenderAppWindowNumber>
33     <!--minimizeByOther enable is true means fullscreen window will be minmized by other fullscreen window-->
34     <minimizeByOther enable="true"></minimizeByOther>
35     <!--window mdoe change hot zones config, fullscreen primary secondary-->
36     <modeChangeHotZones>50 50 50</modeChangeHotZones>
37     <!--stretchable enable is true means all window be stretchable-->
38     <stretchable enable="false"></stretchable>
39     <!--exit split screen mode ratio config-->
40     <exitSplitRatios>0.1 0.9</exitSplitRatios>
41     <!--split screen ratios config-->
42     <splitRatios>0.5 0.33 0.67</splitRatios>
43     <!--default window mode config-->
44     <defaultWindowMode>1</defaultWindowMode>
45     <!--window animation config-->
46     <windowAnimation>
47         <timing>
48             <!--duration of animation when add/remove window, unit is ms-->
49             <duration>350</duration>
50             <!--timing curve of animation, config it as below:
51             name=ease, easeIn, easeOut, easeInOut, default, linear,
52             spring, interactiveSpring, cubic(float float float float)-->
53             <curve name="easeOut"></curve>
54         </timing>
55         <!--scaleX and scaleY of animation start state-->
56         <scale>0.7 0.7</scale>
57         <!--rotation of animation start state, 4 numbers is axis and angle-->
58         <rotation>0 0 1 0</rotation>
59         <!--translateX and translateY of animation start state-->
60         <translate>0 0</translate>
61         <!--opacity of animation start state-->
62         <opacity>0</opacity>
63     </windowAnimation>
64     <!--keyboard animation config-->
65     <keyboardAnimation>
66         <timing>
67             <!--duration of animation when add keyboard, unit is ms-->
68             <durationIn>500</durationIn>
69             <!--duration of animation when remove keyboard, unit is ms-->
70             <durationOut>300</durationOut>
71             <!--friction curve-->
72             <curve name="cubic">0.2 0.0 0.2 1.0</curve>
73         </timing>
74     </keyboardAnimation>
75     <!--enable/disable remote animation-->
76     <remoteAnimation enable="true"></remoteAnimation>
77     <!--window effect config-->
78     <windowEffect>
79         <appWindows>
80             <cornerRadius>
81                 <!--off: no corner, defaultCornerRadiusXS: 4vp, defaultCornerRadiusS: 8vp-->
82                 <!--defaultCornerRadiusM: 12vp, defaultCornerRadiusL: 16vp, defaultCornerRadiusXL: 24vp-->
83                 <fullScreen>off</fullScreen>
84                 <split>off</split>
85                 <float>off</float>
86             </cornerRadius>
87             <shadow>
88                 <focused>
89                     <elevation>0</elevation>
90                     <color>#000000</color>
91                     <offsetX>0</offsetX>
92                     <offsetY>0</offsetY>
93                     <alpha>0</alpha>
94                 </focused>
95                 <unfocused>
96                     <elevation>0</elevation>
97                     <color>#000000</color>
98                     <offsetX>0</offsetX>
99                     <offsetY>0</offsetY>
100                     <alpha>0</alpha>
101                 </unfocused>
102             </shadow>
103         </appWindows>
104     </windowEffect>
105 </Configs>
106 )";
107 
108 class WindowManagerConfigTest : public testing::Test {
109 public:
110     static void SetUpTestCase();
111     static void TearDownTestCase();
112     virtual void SetUp() override;
113     virtual void TearDown() override;
114     ConfigItem ReadConfig(const std::string& xmlStr);
115 };
116 
SetUpTestCase()117 void WindowManagerConfigTest::SetUpTestCase()
118 {
119 }
120 
TearDownTestCase()121 void WindowManagerConfigTest::TearDownTestCase()
122 {
123 }
124 
SetUp()125 void WindowManagerConfigTest::SetUp()
126 {
127 }
128 
TearDown()129 void WindowManagerConfigTest::TearDown()
130 {
131 }
132 
ReadConfig(const std::string & xmlStr)133 ConfigItem WindowManagerConfigTest::ReadConfig(const std::string& xmlStr)
134 {
135     ConfigItem config;
136     xmlDocPtr docPtr = xmlParseMemory(xmlStr.c_str(), xmlStr.length() + 1);
137     if (docPtr == nullptr) {
138         return config;
139     }
140 
141     xmlNodePtr rootPtr = xmlDocGetRootElement(docPtr);
142     if (rootPtr == nullptr || rootPtr->name == nullptr ||
143         xmlStrcmp(rootPtr->name, reinterpret_cast<const xmlChar*>("Configs"))) {
144         xmlFreeDoc(docPtr);
145         return config;
146     }
147 
148     std::map<std::string, ConfigItem> configMap;
149     config.SetValue(configMap);
150     WindowManagerConfig::ReadConfig(rootPtr, *config.mapValue_);
151     xmlFreeDoc(docPtr);
152     return config;
153 }
154 namespace {
155 /**
156  * @tc.name: AnimationConfig
157  * @tc.desc: animation config test
158  * @tc.type: FUNC
159  * @tc.require issueI5N26H
160  */
161 HWTEST_F(WindowManagerConfigTest, AnimationConfig, Function | SmallTest | Level2)
162 {
163     WindowManagerConfig::config_ = ReadConfig(XML_STR);
164     WindowManagerService::GetInstance().ConfigureWindowManagerService();
165     ConfigItem item = WindowManagerConfig::config_["windowAnimation"];
166     ASSERT_EQ(true, item.IsMap());
167     item = WindowManagerConfig::config_["windowAnimation"]["timing"]["duration"];
168     ASSERT_EQ(true, item.IsInts());
169     auto value = *item.intsValue_;
170     ASSERT_EQ(true, value.size() == 1);
171     ASSERT_EQ(350, value[0]);
172     item = WindowManagerConfig::config_["windowAnimation"]["timing"]["curve"].GetProp("name");
173     ASSERT_EQ(true, item.IsString());
174     ASSERT_EQ("easeOut", item.stringValue_);
175     item = WindowManagerConfig::config_["windowAnimation"]["scale"];
176     ASSERT_EQ(true, item.IsFloats());
177     ASSERT_EQ(true, item.floatsValue_->size() == 2);
178     item = WindowManagerConfig::config_["windowAnimation"]["rotation"];
179     ASSERT_EQ(true, item.IsFloats());
180     ASSERT_EQ(true, item.floatsValue_->size() == 4);
181     item = WindowManagerConfig::config_["windowAnimation"]["translate"];
182     ASSERT_EQ(true, item.IsFloats());
183     ASSERT_EQ(true, item.floatsValue_->size() == 2);
184     item = WindowManagerConfig::config_["windowAnimation"]["opacity"];
185     ASSERT_EQ(true, item.IsFloats());
186     ASSERT_EQ(true, item.floatsValue_->size() == 1);
187 }
188 
189 /**
190  * @tc.name: maxAppWindowNumber
191  * @tc.desc: maxAppWindowNumber test
192  * @tc.type: FUNC
193  */
194 HWTEST_F(WindowManagerConfigTest, MaxAppWindowNumber, Function | SmallTest | Level2)
195 {
196     std::string xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
197         "<Configs>"
198         "<maxAppWindowNumber>0</maxAppWindowNumber>"
199         "</Configs>";
200     WindowManagerConfig::config_ = ReadConfig(xmlStr);
201     WindowManagerService::GetInstance().ConfigureWindowManagerService();
202     ASSERT_EQ(true, WindowManagerService::GetInstance().windowRoot_->maxAppWindowNumber_ == 100);
203 
204     xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
205         "<Configs>"
206         "<maxAppWindowNumber>-2</maxAppWindowNumber>"
207         "</Configs>";
208     WindowManagerConfig::config_ = ReadConfig(xmlStr);
209     WindowManagerService::GetInstance().ConfigureWindowManagerService();
210     ASSERT_EQ(true, WindowManagerService::GetInstance().windowRoot_->maxAppWindowNumber_ == 100);
211 
212     xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
213         "<Configs>"
214         "<maxAppWindowNumber>4</maxAppWindowNumber>"
215         "</Configs>";
216     WindowManagerConfig::config_ = ReadConfig(xmlStr);
217     WindowManagerService::GetInstance().ConfigureWindowManagerService();
218     ASSERT_EQ(true, WindowManagerService::GetInstance().windowRoot_->maxAppWindowNumber_ == 4);
219 
220     xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
221         "<Configs>"
222         "<maxAppWindowNumber>1000</maxAppWindowNumber>"
223         "</Configs>";
224     WindowManagerConfig::config_ = ReadConfig(xmlStr);
225     WindowManagerService::GetInstance().ConfigureWindowManagerService();
226     ASSERT_EQ(true, WindowManagerService::GetInstance().windowRoot_->maxAppWindowNumber_ == 1000);
227 }
228 
229 /**
230  * @tc.name: decor
231  * @tc.desc: set decor true and false.
232  * @tc.type: FUNC
233  */
234 HWTEST_F(WindowManagerConfigTest, Decor, Function | SmallTest | Level2)
235 {
236     std::string xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
237         "<Configs>"
238         "<decor enable=\"true\"/>"
239         "</Configs>";
240     WindowManagerConfig::config_ = ReadConfig(xmlStr);
241     WindowManagerService::GetInstance().ConfigureWindowManagerService();
242     ASSERT_EQ(true, WindowManagerService::GetInstance().systemConfig_.isSystemDecorEnable_);
243 
244     xmlStr = "<?xml version='1.0' encoding=\"utf-8\"?>"
245         "<Configs>"
246         "<decor enable=\"false\"/>"
247         "</Configs>";
248     WindowManagerConfig::config_ = ReadConfig(xmlStr);
249     WindowManagerService::GetInstance().ConfigureWindowManagerService();
250     ASSERT_EQ(false, WindowManagerService::GetInstance().systemConfig_.isSystemDecorEnable_);
251 }
252 } // namespace
253 } // namespace Rosen
254 } // namespace OHOS