• 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 <utility>
17 #include "gtest/gtest.h"
18 #include "ui_test_graphic_engine.h"
19 #include "view/component/img_view_adapter.h"
20 #include "view/component/text_label_adapter.h"
21 #include "view/page/page_manager.h"
22 
23 using namespace Updater;
24 using namespace std;
25 using namespace testing::ext;
26 
27 namespace {
ToString(const std::vector<std::string> & vec)28 std::string ToString(const std::vector<std::string> &vec)
29 {
30     if (vec.empty()) {
31         return "{}";
32     }
33     std::string res = "{";
34     for (auto &str : vec) {
35         res += str + ",";
36     }
37     res.pop_back();
38     res += "}";
39     return res;
40 }
41 
42 class UpdaterUiPageManagerUnitTest : public testing::Test {
43 public:
SetUpTestCase(void)44     static void SetUpTestCase(void)
45     {
46         TestGraphicEngine::GetInstance();
47     }
TearDownTestCase(void)48     static void TearDownTestCase(void) {}
SetUp()49     void SetUp() override {}
TearDown()50     void TearDown() override {}
51 protected:
52     constexpr static const char *MAIN_PAGE_ID = "page1";
53     const static std::vector<Updater::UxPageInfo> pageInfos_;
54 };
55 
GetInstance()56 inline PageManager &GetInstance()
57 {
58     return PageManager::GetInstance();
59 }
60 
61 constexpr std::array VALID_COMINFOS {
62     std::pair {"page1", "label_id_0"}, std::pair {"page1", "image_view"},
63     std::pair {"page1:subpage1", "label_id_0"}, std::pair {"page1:subpage1", "image_view"},
64     std::pair {"page1:subpage2", "image_view"}, std::pair {"page1:subpage3", "label_id_0"},
65     std::pair {"page2", "label_id_0"}, std::pair {"page2", "image_view"},
66     std::pair {"page2:subpage1", "label_id_0"}, std::pair {"page2:subpage2", "image_view"},
67     std::pair {"page3", "label_id_0"}, std::pair {"page3", "image_view"}
68 };
69 
70 const std::vector<UxPageInfo> UpdaterUiPageManagerUnitTest::pageInfos_ = {
71     {"page1",
72      "#000000ff",
73      {UxViewInfo {
74          UxViewCommonInfo {
75              300, 400, 600, 200, "label_id_0", "UILabel", true},
76          UxLabelInfo {
77              50, "this is page1", "center", "#ff0000ff", "#000000ff"}},
78       UxViewInfo {
79           UxViewCommonInfo {
80               300, 700, 400, 400, "image_view", "UIImageView", false},
81           UxImageInfo {
82               "/resources/img1", "empty", 100, 0 // just test page manger, image need not to exist
83           }}},
84      {UxSubPageInfo {"subpage1", "#000000ff", {"label_id_0", "image_view"}},
85       UxSubPageInfo {"subpage2", "#000000ff", {"image_view"}},
86       UxSubPageInfo {"subpage3", "#000000ff", {"label_id_0"}}}},
87     {"page2",
88      "#ffffffff",
89      {UxViewInfo {
90          UxViewCommonInfo {
91              300, 400, 600, 200, "label_id_0", "UILabel", true},
92          UxLabelInfo {
93              50, "this is page2", "center", "#00ff00ff", "#000000ff"}},
94       UxViewInfo {
95           UxViewCommonInfo {
96               300, 700, 400, 400, "image_view", "UIImageView", false},
97           UxImageInfo {
98               "/resources/img2", "empty", 100, 0 // just test page manger, image need not to exist
99           }}},
100      {UxSubPageInfo {"subpage1", "#000000ff", {"label_id_0"}},
101       UxSubPageInfo {"subpage2", "#000000ff", {"image_view"}}}},
102     {"page3",
103      "#000000ff",
104      {UxViewInfo {
105          UxViewCommonInfo {
106              300, 400, 600, 200, "label_id_0", "UILabel", true},
107          UxLabelInfo {
108              50, "this is page2", "center", "#0000ffff", "#000000ff"}},
109       UxViewInfo {
110           UxViewCommonInfo {
111               300, 700, 400, 400, "image_view", "UIImageView", false},
112           UxImageInfo {
113               "/resources/img2", "empty", 100, 0 // just test page manger, image need not to exist
114           }}}}};
115 
CheckResult(const std::vector<std::string> & expected,std::vector<std::string> && checked)116 inline bool CheckResult(const std::vector<std::string> &expected, std::vector<std::string> &&checked)
117 {
118     std::sort(checked.begin(), checked.end());
119     EXPECT_TRUE(expected == checked) << ToString(expected) << "!=" << ToString(checked);
120     return expected == checked;
121 }
122 
123 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_init_failed, TestSize.Level0)
124 {
125     {
126         // invalid page id
127         std::vector<UxPageInfo> pageInfo { { "", "#000000ff", {}, {} } };
128         EXPECT_FALSE(GetInstance().Init(pageInfo, ""));
129 
130         // duplicate page id
131         pageInfo = {
132             { "page1", "#000000ff", {}, {} },
133             { "page1", "#000000ff", {}, {} }
134         };
135         EXPECT_FALSE(GetInstance().Init(pageInfo, "page1"));
136 
137         // invalid page's view info
138         pageInfo = {
139             {"page1",
140             "#000000ff",
141             {UxViewInfo {
142                 UxViewCommonInfo {
143                     300, 400, 600, 200, "label_id_0", "UILabel", true},
144                 UxLabelInfo {
145                     50, "this is page1", "center", "#ff0ff", "#0"}}}, {}}
146         };
147         EXPECT_FALSE(GetInstance().Init(pageInfo, "page1"));
148     }
149     {
150         GetInstance().Reset();
151         // invalid subpage id
152         std::vector<UxPageInfo> pageInfo {
153             {"page1",
154              "#000000ff",
155              {UxViewInfo {
156                  UxViewCommonInfo {
157                      300, 400, 600, 200, "label_id_0", "UILabel", true},
158                  UxLabelInfo {
159                      50, "this is page1", "center", "#000000ff", "#000000ff"}}},
160              {{UxSubPageInfo {"", "#000000ff", {"label_id_0"}}}}}};
161         EXPECT_FALSE(GetInstance().Init(pageInfo, "page1"));
162 
163         // duplicate subpage id
164         pageInfo[0].subpages = { UxSubPageInfo {"subpage1", "#000000ff", {"label_id_0"}},
165             UxSubPageInfo {"subpage1", "#000000ff", {"label_id_0"}}};
166         EXPECT_FALSE(GetInstance().Init(pageInfo, "page1"));
167 
168         // invalid subpage's component id
169         pageInfo[0].subpages = {UxSubPageInfo {"subpage1", "#000000ff", {"invalid_id"}}};
170         EXPECT_FALSE(GetInstance().Init(pageInfo, "page1"));
171     }
172     {
173         GetInstance().Reset();
174         std::vector<UxPageInfo> pageInfo {
175             { "page1", "#000000ff", {}, {} },
176             { "page2", "#000000ff", {}, {} },
177             { "page3", "#000000ff", {}, {} }
178         };
179         EXPECT_FALSE(GetInstance().Init(pageInfo, "page")); // invalid main page id
180     }
181 }
182 
183 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_is_valid_com, TestSize.Level0)
184 {
185     auto pageInfo = pageInfos_;
186     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
187     for (auto [pageId, comId] : VALID_COMINFOS) {
188         EXPECT_TRUE(GetInstance().IsValidCom(ComInfo {pageId, comId})) << pageId << "[" << comId << "] is invalid";
189     }
190     const std::array inValidCominfos {
191         ComInfo {"page1", "invalid"}, ComInfo {"invalid", "image_view"}, ComInfo {"page1:subpage2", "label_id_0"}
192     };
193     for (auto cominfo : inValidCominfos) {
194         EXPECT_FALSE(GetInstance().IsValidCom(cominfo)) << cominfo.pageId << "[" << cominfo.comId << "] is valid";
195     }
196     GetInstance().Reset();
197 }
198 
199 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_operator_subscript_for_pages, TestSize.Level0)
200 {
201     auto pageInfo = pageInfos_;
202     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
203     auto *dummyPage = &GetInstance()[""];
204     for (auto pageId : { "page1", "page2", "page3", "page1:subpage1",  "page1:subpage2",  "page1:subpage3",
205         "page2:subpage1", "page2:subpage2"}) {
206         EXPECT_NE(&GetInstance()[pageId], dummyPage);
207     }
208     EXPECT_EQ(&GetInstance()["nonexist"], dummyPage);
209     GetInstance().Reset();
210 }
211 
212 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_operator_subscript_for_coms, TestSize.Level0)
213 {
214     auto pageInfo = pageInfos_;
215     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
216 
217     std::string errMsg {};
218     for (auto [pageId, comId] : { std::pair {"page1", "label_id_0"}, std::pair {"page1:subpage1", "label_id_0"},
219         std::pair {"page1:subpage3", "label_id_0"}, std::pair {"page2", "label_id_0"},
220         std::pair {"page2:subpage1", "label_id_0"}, std::pair {"page3", "label_id_0"}}) {
221             GetInstance()[ComInfo {pageId, comId}].As<TextLabelAdapter>(errMsg);
222             ASSERT_EQ(errMsg, "") << errMsg;
223         }
224     for (auto [pageId, comId] : { std::pair {"page1", "image_view"}, std::pair {"page1:subpage1", "image_view"},
225         std::pair {"page1:subpage2", "image_view"}, std::pair {"page2", "image_view"},
226         std::pair {"page2:subpage2", "image_view"}, std::pair {"page3", "image_view"}}) {
227             GetInstance()[ComInfo {pageId, comId}].As<ImgViewAdapter>(errMsg);
228             ASSERT_EQ(errMsg, "") << errMsg;
229         }
230     GetInstance()[ComInfo {"", ""}].As(errMsg);
231     EXPECT_EQ(errMsg, " view is null");
232     GetInstance().Reset();
233 }
234 
235 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_after_init_success, TestSize.Level1)
236 {
237     auto pageInfo = pageInfos_;
238     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
239     EXPECT_TRUE(CheckResult(GetInstance().Report(), {}));
240     GetInstance().Reset();
241 }
242 
243 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_main_page, TestSize.Level1)
244 {
245     auto pageInfo = pageInfos_;
246     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
247     GetInstance().ShowPage("page2");
248     GetInstance().ShowMainPage();
249     EXPECT_TRUE(CheckResult(GetInstance().Report(), { MAIN_PAGE_ID }));
250     GetInstance().Reset();
251 }
252 
253 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_page, TestSize.Level1)
254 {
255     auto pageInfo = pageInfos_;
256     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
257     GetInstance().ShowPage("page2");
258     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
259     GetInstance().Reset();
260 }
261 
262 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_non_exist_page, TestSize.Level1)
263 {
264     auto pageInfo = pageInfos_;
265     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
266     GetInstance().ShowMainPage();
267     GetInstance().ShowPage("nonexist");
268     EXPECT_TRUE(CheckResult(GetInstance().Report(), { MAIN_PAGE_ID }));
269     GetInstance().Reset();
270 }
271 
272 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_switch_between_page, TestSize.Level1)
273 {
274     auto pageInfo = pageInfos_;
275     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
276     GetInstance().ShowPage("page2");
277     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
278     GetInstance().ShowPage("page3");
279     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
280     GetInstance().Reset();
281 }
282 
283 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_sub_page, TestSize.Level1)
284 {
285     auto pageInfo = pageInfos_;
286     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
287     GetInstance().ShowPage("page2:subpage1");
288     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2:subpage1", "page2" }));
289     GetInstance().Reset();
290 }
291 
292 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_non_exist_sub_page, TestSize.Level1)
293 {
294     auto pageInfo = pageInfos_;
295     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
296     GetInstance().ShowPage("page2");
297     GetInstance().ShowPage("page2:subpage3");
298     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
299     GetInstance().Reset();
300 }
301 
302 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_switch_between_sub_pages, TestSize.Level1)
303 {
304     auto pageInfo = pageInfos_;
305     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
306     GetInstance().ShowPage("page2");
307     GetInstance().ShowPage("page1:subpage1");
308     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page1:subpage1", "page1" }));
309 
310     GetInstance().ShowPage("page2:subpage2");
311     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2:subpage2", "page2" }));
312     GetInstance().Reset();
313 }
314 
315 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_switch_between_sub_page_and_page, TestSize.Level1)
316 {
317     auto pageInfo = pageInfos_;
318     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
319     GetInstance().ShowPage("page1:subpage1");
320     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page1:subpage1", "page1" }));
321 
322     GetInstance().ShowPage("page2");
323     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
324 
325     GetInstance().ShowPage("page1:subpage2");
326     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page1:subpage2", "page1" }));
327     GetInstance().Reset();
328 }
329 
330 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_go_back, TestSize.Level1)
331 {
332     auto pageInfo = pageInfos_;
333     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
334     GetInstance().ShowMainPage();
335     GetInstance().ShowPage("page2");
336     GetInstance().ShowPage("page3");
337     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
338 
339     GetInstance().GoBack();
340     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
341 
342     GetInstance().GoBack();
343     EXPECT_TRUE(CheckResult(GetInstance().Report(), { MAIN_PAGE_ID }));
344     GetInstance().Reset();
345 }
346 
347 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_same_page_and_goback, TestSize.Level1)
348 {
349     auto pageInfo = pageInfos_;
350     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
351     GetInstance().ShowMainPage();
352     GetInstance().ShowPage("page1");
353     GetInstance().ShowPage("page2");
354     GetInstance().ShowPage("page2");
355     GetInstance().ShowPage("page3");
356     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
357 
358     // don't show and enqueue page showing currently
359     GetInstance().GoBack();
360     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
361 
362     GetInstance().GoBack();
363     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page1" }));
364     GetInstance().Reset();
365 }
366 
367 HWTEST_F(UpdaterUiPageManagerUnitTest, test_page_manager_show_more_page_than_queue_limit, TestSize.Level1)
368 {
369     auto pageInfo = pageInfos_;
370     ASSERT_EQ(GetInstance().Init(pageInfo, MAIN_PAGE_ID), true);
371     GetInstance().ShowMainPage();
372     GetInstance().ShowPage("page3");
373     GetInstance().ShowPage("page1");
374     GetInstance().ShowPage("page2");
375     GetInstance().ShowPage("page3");
376     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
377 
378     // Don't show and enqueue page showing currently
379     GetInstance().GoBack();
380     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page2" }));
381 
382     GetInstance().GoBack();
383     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page1" }));
384 
385     GetInstance().GoBack();
386     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
387 
388     // max queue size is 3, when bigger than 3, queue tail will be pop, so can't show page3 here
389     GetInstance().GoBack();
390     EXPECT_TRUE(CheckResult(GetInstance().Report(), { "page3" }));
391     GetInstance().Reset();
392 }
393 }
394