• 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 <fstream>
17 #include <vector>
18 #include "file_ex.h"
19 #include "gtest/gtest.h"
20 #include "layout/layout_parser.h"
21 #include "view_api.h"
22 
23 using namespace Updater;
24 using namespace std;
25 using namespace testing::ext;
26 namespace Fs = std::filesystem;
27 namespace Updater {
operator ==(const UxViewCommonInfo & lhs,const UxViewCommonInfo & rhs)28 bool operator == (const UxViewCommonInfo &lhs, const UxViewCommonInfo &rhs)
29 {
30     return std::tie(lhs.x, lhs.y, lhs.w, lhs.h, lhs.id, lhs.type, lhs.visible) ==
31         std::tie(rhs.x, rhs.y, rhs.w, rhs.h, rhs.id, rhs.type, rhs.visible);
32 }
33 
operator ==(const UxBoxProgressInfo & lhs,const UxBoxProgressInfo & rhs)34 bool operator == (const UxBoxProgressInfo &lhs, const UxBoxProgressInfo &rhs)
35 {
36     return std::tie(lhs.defaultValue, lhs.fgColor, lhs.bgColor, lhs.hasEp, lhs.endPoint) ==
37         std::tie(rhs.defaultValue, rhs.fgColor, rhs.bgColor, rhs.hasEp, rhs.endPoint);
38 }
39 
operator ==(const UxLabelInfo & lhs,const UxLabelInfo & rhs)40 bool operator == (const UxLabelInfo &lhs, const UxLabelInfo &rhs)
41 {
42     return std::tie(lhs.text, lhs.bgColor, lhs.align, lhs.fontColor, lhs.fontSize) ==
43         std::tie(rhs.text, rhs.bgColor, rhs.align, rhs.fontColor, rhs.fontSize);
44 }
45 
operator ==(const UxImageInfo & lhs,const UxImageInfo & rhs)46 bool operator == (const UxImageInfo &lhs, const UxImageInfo &rhs)
47 {
48     return std::tie(lhs.imgCnt, lhs.updInterval, lhs.resPath, lhs.filePrefix) ==
49         std::tie(rhs.imgCnt, rhs.updInterval, rhs.resPath, rhs.filePrefix);
50 }
51 
operator ==(const UxLabelBtnInfo & lhs,const UxLabelBtnInfo & rhs)52 bool operator == (const UxLabelBtnInfo &lhs, const UxLabelBtnInfo &rhs)
53 {
54     return std::tie(lhs.fontSize, lhs.text, lhs.txtColor, lhs.bgColor, lhs.focusedBgColor, lhs.focusedTxtColor) ==
55         std::tie(rhs.fontSize, rhs.text, rhs.txtColor, rhs.bgColor, rhs.focusedBgColor, rhs.focusedTxtColor);
56 }
57 
operator ==(const UxViewInfo & lhs,const UxViewInfo & rhs)58 bool operator == (const UxViewInfo &lhs, const UxViewInfo &rhs)
59 {
60     return lhs.commonInfo == rhs.commonInfo && lhs.specificInfo == rhs.specificInfo;
61 }
62 }
63 namespace {
64 class UpdaterUiLayoutParserUnitTest : public testing::Test {
65 public:
66     static void SetUpTestCase(void);
67     static void TearDownTestCase(void);
68     void SetUp() override;
69     void TearDown() override;
70 };
71 
72 
73 // do something at the each function begining
SetUp(void)74 void UpdaterUiLayoutParserUnitTest::SetUp(void)
75 {
76     cout << "Updater Unit UpdaterUiLayoutParserUnitTest Begin!" << endl;
77 }
78 
79 // do something at the each function end
TearDown(void)80 void UpdaterUiLayoutParserUnitTest::TearDown(void)
81 {
82     cout << "Updater Unit UpdaterUiLayoutParserUnitTest End!" << endl;
83 }
84 
85 // init
SetUpTestCase(void)86 void UpdaterUiLayoutParserUnitTest::SetUpTestCase(void)
87 {
88     cout << "SetUpTestCase" << endl;
89 }
90 
91 // end
TearDownTestCase(void)92 void UpdaterUiLayoutParserUnitTest::TearDownTestCase(void)
93 {
94     cout << "TearDownTestCase" << endl;
95 }
96 
97 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_label_parser, TestSize.Level0)
98 {
99     UxPageInfo pageInfo;
100     LayoutParser::GetInstance().LoadLayout("/data/updater/ui/label.json", pageInfo);
101     ASSERT_EQ(pageInfo.viewInfos.size(), 1UL);
102     EXPECT_EQ(pageInfo.id, "menu"s);
103 
104     UxViewInfo expectedLabel { UxViewCommonInfo { 0, 0, 100, 100, "label_id_0", "UILabel", true },
105         UxLabelInfo {
106         10,
107         "Reboot to normal system",
108         "center",
109         "#ffffffff",
110         "#ffffffff",
111         "normal"
112     } };
113     EXPECT_EQ(pageInfo.viewInfos[0], expectedLabel);
114 }
115 
116 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_progress_parser, TestSize.Level0)
117 {
118     UxPageInfo pageInfo;
119     LayoutParser::GetInstance().LoadLayout("/data/updater/ui/boxprogress.json", pageInfo);
120     ASSERT_EQ(pageInfo.viewInfos.size(), 1UL);
121     EXPECT_EQ(pageInfo.id, "menu"s);
122 
123     UxViewInfo expectedProgress { UxViewCommonInfo { 0, 0, 100, 100, "box_progress_0", "UIBoxProgress", true },
124         UxBoxProgressInfo { 10, "#ffffffff", "#ffffffff" } };
125     EXPECT_EQ(pageInfo.viewInfos[0], expectedProgress);
126 }
127 
128 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_image_view_parser, TestSize.Level0)
129 {
130     UxPageInfo pageInfo;
131     LayoutParser::GetInstance().LoadLayout("/data/updater/ui/imageview.json", pageInfo);
132     ASSERT_EQ(pageInfo.viewInfos.size(), 1UL);
133     EXPECT_EQ(pageInfo.id, "menu"s);
134 
135     UxViewInfo expectedImage { UxViewCommonInfo { 0, 0, 100, 100, "image_view", "UIImageView", true },
136         UxImageInfo { "/res/images", "", 100, 1 } };
137     EXPECT_EQ(pageInfo.viewInfos[0], expectedImage);
138 }
139 
140 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_all, TestSize.Level1)
141 {
142     UxPageInfo pageInfo;
143     LayoutParser::GetInstance().LoadLayout("/data/updater/ui/all.json", pageInfo);
144     ASSERT_EQ(pageInfo.viewInfos.size(), 3UL);
145     EXPECT_EQ(pageInfo.id, "menu"s);
146 
147     UxViewInfo expectedLabel { UxViewCommonInfo { 0, 0, 100, 100, "label_id_0", "UILabel", true },
148         UxLabelInfo {
149         10,
150         "Reboot to normal system",
151         "center",
152         "#ffffffff",
153         "#ffffffff",
154         "normal"
155     } };
156     EXPECT_EQ(pageInfo.viewInfos[0], expectedLabel);
157 
158     UxViewInfo expectedImage { UxViewCommonInfo { 0, 0, 100, 100, "image_view", "UIImageView", true },
159         UxImageInfo { "/res/images", "", 100, 1 } };
160     EXPECT_EQ(pageInfo.viewInfos[1], expectedImage);
161 
162     UxViewInfo expectedProgress { UxViewCommonInfo { 0, 0, 100, 100, "box_progress_0", "UIBoxProgress",
163         true },
164         UxBoxProgressInfo { 10, "#ffffffff", "#ffffffff", "", false } };
165     EXPECT_EQ(pageInfo.viewInfos[2], expectedProgress);
166 }
167 
168 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_all_default, TestSize.Level0)
169 {
170     UxPageInfo pageInfo;
171     LayoutParser::GetInstance().LoadLayout("/data/updater/ui/menu.json", pageInfo);
172 
173     ASSERT_EQ(pageInfo.viewInfos.size(), 8UL);
174     EXPECT_EQ(pageInfo.id, "menu"s);
175 
176     UxViewInfo expected { UxViewCommonInfo { 1280, 0, 800, 200, "Label_RebootToNormalSystem", "UILabel", true },
177         UxLabelInfo {
178         60,
179         "Reboot to normal system",
180         "center",
181         "#ffffffff",
182         "#000000ff",
183         "normal"
184     } };
185     expected.commonInfo.visible = false;
186     EXPECT_EQ(expected.commonInfo, pageInfo.viewInfos[0].commonInfo);
187     EXPECT_EQ(expected.specificInfo, pageInfo.viewInfos[0].specificInfo);
188     EXPECT_EQ(expected, pageInfo.viewInfos[0]);
189 
190     expected.commonInfo = { 1280, 200, 800, 200, "Label_UserdataReset", "UILabel", true };
191     std::get<UxLabelInfo>(expected.specificInfo).text = "Userdata reset";
192     EXPECT_EQ(expected, pageInfo.viewInfos[1]);
193 
194     expected.commonInfo = { 1280, 400, 800, 200, "Label_UpdateFromSDCard", "UILabel", true };
195     std::get<UxLabelInfo>(expected.specificInfo).text = "Update from SD Card";
196     EXPECT_EQ(expected, pageInfo.viewInfos[2]);
197 
198     expected.commonInfo = { 1280, 600, 800, 200, "Label_MenuDialogTitle", "UILabel", true };
199     std::get<UxLabelInfo>(expected.specificInfo).text = "Tip";
200     std::get<UxLabelInfo>(expected.specificInfo).fontSize = 40;
201     EXPECT_EQ(expected, pageInfo.viewInfos[3]);
202 
203     expected.commonInfo = { 1280, 800, 800, 200, "Label_MenuDialogNote", "UILabel", true };
204     std::get<UxLabelInfo>(expected.specificInfo).text = "Delete user date now...";
205     EXPECT_EQ(expected, pageInfo.viewInfos[4]);
206 
207     expected.commonInfo = { 1280, 1000, 800, 200, "Label_MenuDialogNext", "UILabel", true };
208     std::get<UxLabelInfo>(expected.specificInfo).text = "Do you want to continue?";
209     EXPECT_EQ(expected, pageInfo.viewInfos[5]);
210 
211     expected.commonInfo = { 1280, 1200, 800, 200, "Label_MenuDialogOK", "UILabel", true };
212     std::get<UxLabelInfo>(expected.specificInfo).text = "Continue";
213     EXPECT_EQ(expected, pageInfo.viewInfos[6]);
214 
215     expected.commonInfo = { 1680, 1200, 800, 200, "Label_MenuDialogCancel", "UILabel", true };
216     std::get<UxLabelInfo>(expected.specificInfo).text = "Cancel";
217     EXPECT_EQ(expected, pageInfo.viewInfos[7]);
218 }
219 
220 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_load_multiple_page_info, TestSize.Level0)
221 {
222     std::vector<std::string> layoutFiles { "/data/updater/ui/imageview.json", "/data/updater/ui/boxprogress.json" };
223     std::vector<UxPageInfo> pageInfos {};
224     LayoutParser::GetInstance().LoadLayout(layoutFiles, pageInfos);
225 
226     ASSERT_EQ(pageInfos.size(), 2ul);
227     UxViewInfo expectedImage { UxViewCommonInfo { 0, 0, 100, 100, "image_view", "UIImageView", true },
228         UxImageInfo { "/res/images", "", 100, 1 } };
229     EXPECT_EQ(pageInfos[0].id, "menu");
230     ASSERT_EQ(pageInfos[0].viewInfos.size(), 1ul);
231     EXPECT_EQ(pageInfos[0].viewInfos[0], expectedImage);
232 
233     UxViewInfo expectedProgress { UxViewCommonInfo { 0, 0, 100, 100, "box_progress_0", "UIBoxProgress", true },
234         UxBoxProgressInfo { 10, "#ffffffff", "#ffffffff" } };
235     EXPECT_EQ(pageInfos[1].id, "menu");
236     ASSERT_EQ(pageInfos[1].viewInfos.size(), 1ul);
237     EXPECT_EQ(pageInfos[1].viewInfos[0].commonInfo, expectedProgress.commonInfo);
238 }
239 
240 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_load_sub_page_info, TestSize.Level0)
241 {
242     std::vector<std::string> layoutFiles { "/data/updater/ui/subpage.json" };
243     std::vector<UxPageInfo> pageInfos {};
244     LayoutParser::GetInstance().LoadLayout(layoutFiles, pageInfos);
245 
246     ASSERT_EQ(pageInfos.size(), 1ul);
247     auto &subPages = pageInfos[0].subpages;
248     ASSERT_EQ(subPages.size(), 1UL);
249     EXPECT_EQ(subPages[0].id, "subpage1");
250     EXPECT_EQ(subPages[0].coms.size(), 3UL);
251     EXPECT_EQ(subPages[0].coms[0], "a");
252     EXPECT_EQ(subPages[0].coms[1], "b");
253     EXPECT_EQ(subPages[0].coms[2], "c");
254 }
255 
256 HWTEST_F(UpdaterUiLayoutParserUnitTest, test_invalid_cases, TestSize.Level0)
257 {
258     constexpr std::array files { "/data/updater/ui/noPageInfo.json", "/data/updater/ui/noComs.json",
259         "/data/updater/ui/comsNoType.json", "/data/updater/ui/commonInvalid.json",
260         "/data/updater/ui/typeInvalid.json", "/data/updater/ui/incompleteComInfo.json"};
261     for (auto file : files) {
262         std::vector<std::string> layoutFiles { file };
263         std::vector<UxPageInfo> pageInfos {};
264         EXPECT_EQ(true, OHOS::FileExists(file)) << file;
265         EXPECT_EQ(false, LayoutParser::GetInstance().LoadLayout(layoutFiles, pageInfos));
266     }
267 }
268 } // namespace
269