From a13f43ca414aa130eebdebf1248570e9b24c7022 Mon Sep 17 00:00:00 2001 From: sunxuhui Date: Fri, 23 Aug 2024 16:34:03 +0800 Subject: [PATCH 01/10] add ohos_packing_tool tdd Signed-off-by: sunxuhui --- OAT.xml | 2 + .../unittest/fast_app_packager_test/BUILD.gn | 76 +++++++++ .../hap/entry/module.json | 1 + .../hap/entry/pack.json | 1 + .../resources/base/profile/main_pages.json | 1 + .../fast_app_packager_file/pack.json | 73 +++++++++ .../fast_app_packager_test.cpp | 88 ++++++++++ .../hspTestFile/AppScope/app.json | 10 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2041 bytes .../hspTestFile/BUILD.gn | 41 +++++ .../hspTestFile/com.test.packingtooldemo.p7b | Bin 0 -> 3428 bytes .../library/src/main/ets/Index.ets | 16 ++ .../library/src/main/ets/pages/Index.ets | 32 ++++ .../library/src/main/ets/utils/Calc.ts | 18 +++ .../hspTestFile/library/src/main/module.json | 14 ++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 8 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../main/resources/base/media/setting.jpeg | Bin 0 -> 11320 bytes .../resources/base/profile/main_pages.json | 5 + .../test/unittest/hap_packager_test/BUILD.gn | 69 ++++++++ .../default/js/MainAbility/app.js | 37 +++++ .../default/js/MainAbility/app.js.map | 1 + .../default/js/MainAbility/manifest.json | 1 + .../default/js/MainAbility/pages/index.js | 88 ++++++++++ .../default/js/MainAbility/pages/index.js.map | 1 + .../hap_packager_file/fa/config.json | 96 +++++++++++ .../hap_packager_file/fa/pack.json | 1 + .../stage/ets/sourceMaps.map | 20 +++ .../hap_packager_file/stage/module.json | 50 ++++++ .../hap_packager_file/stage/pack.json | 1 + .../resources/base/profile/main_pages.json | 5 + .../hap_packager_test/hap_packager_test.cpp | 153 ++++++++++++++++++ .../test/unittest/hsp_packager_test/BUILD.gn | 68 ++++++++ .../hsp_packager_file/module.json | 27 ++++ .../hsp_packager_file/pack.json | 1 + .../resources/base/profile/main_pages.json | 5 + .../hsp_packager_test/hsp_packager_test.cpp | 94 +++++++++++ .../test/unittest/ohos_test/BUILD.gn | 21 +++ .../test/unittest/ohos_test/ohos_test.xml | 86 ++++++++++ .../test/unittest/packager_test/BUILD.gn | 57 +++++++ .../unittest/packager_test/packager_test.cpp | 140 ++++++++++++++++ 43 files changed, 1424 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/module.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/pack.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/pack.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/app.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/com.test.packingtooldemo.p7b create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/pages/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/utils/Calc.ts create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/module.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/color.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/media/setting.jpeg create mode 100644 packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/app.js create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/app.js.map create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/manifest.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/config.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/pack.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/ets/sourceMaps.map create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/module.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/pack.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/module.json create mode 100644 packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/pack.json create mode 100644 packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/ohos_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml create mode 100644 packing_tool/frameworks/test/unittest/packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/packager_test/packager_test.cpp diff --git a/OAT.xml b/OAT.xml index bea7f063..447da4d3 100644 --- a/OAT.xml +++ b/OAT.xml @@ -64,6 +64,8 @@ Note:If the text contains special characters, please escape them according to th + + diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn new file mode 100644 index 00000000..c37b44df --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn @@ -0,0 +1,76 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("fast_app_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} +module_output_path = "developtools/packing_tool" + +ohos_unittest("fast_app_packager_test") { + module_out_path = module_output_path + public_configs = [ ":fast_app_packager_test_config" ] + sources = [ + "../../../src/fast_app_packager.cpp", + "../../../src/json/distro_filter.cpp", + "../../../src/json/hap_verify_info.cpp", + "../../../src/json/hap_verify_utils.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/module_json_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "fast_app_packager_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + "./hspTestFile:fastAppPackagerHspTest", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":fast_app_packager_test" ] +} + +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./fast_app_packager_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/fast_app_packager_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/module.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/module.json new file mode 100644 index 00000000..39936d49 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/module.json @@ -0,0 +1 @@ +{"app":{"iconId":16777217,"labelId":16777216,"vendor":"example","icon":"$media:app_icon","bundleName":"com.example.packingtooldemo","label":"$string:app_name","versionName":"1.0.0","apiReleaseType":"Release","versionCode":1000000},"module":{"virtualMachine":"ark12.0.6.0","mainElement":"EntryAbility","buildHash":"a06e3167c6700f3fe721b26fdc6c7473c106f0cf2f35dbdd65e50405a51f740d","installationFree":false,"deliveryWithInstall":true,"description":"$string:module_desc","compileMode":"esmodule","type":"entry","dependencies":[],"abilities":[{"exported":true,"iconId":16777222,"startWindowIconId":16777222,"icon":"$media:icon","startWindowIcon":"$media:icon","startWindowBackgroundId":16777221,"description":"$string:EntryAbility_desc","label":"$string:EntryAbility_label","skills":[{"entities":["entity.system.home"],"actions":["action.system.home"]}],"srcEntry":"./ets/entryability/EntryAbility.ts","descriptionId":16777218,"labelId":16777219,"startWindowBackground":"$color:start_window_background","name":"EntryAbility"}],"deviceTypes":["default","tablet"],"pages":"$profile:main_pages","descriptionId":16777220,"name":"entry"}} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/pack.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/pack.json new file mode 100644 index 00000000..b221fd94 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtooldemo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"mainAbility":"EntryAbility","deviceType":["default","tablet"],"abilities":[{"name":"EntryAbility","label":"$string:EntryAbility_label"}],"distro":{"moduleType":"entry","installationFree":false,"deliveryWithInstall":true,"moduleName":"entry"},"apiVersion":{"compatible":12,"releaseType":"Canary2","target":12}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"entry","deliveryWithInstall":true,"name":"entry-default"}]} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/resources/base/profile/main_pages.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/resources/base/profile/main_pages.json new file mode 100644 index 00000000..396cce19 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/hap/entry/resources/base/profile/main_pages.json @@ -0,0 +1 @@ +{"src":["pages/Index"]} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/pack.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/pack.json new file mode 100644 index 00000000..bb355109 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_file/pack.json @@ -0,0 +1,73 @@ +{ + "summary": { + "app": { + "bundleName": "com.example.packingtooldemo", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "modules": [ + { + "mainAbility": "EntryAbility", + "deviceType": [ + "default", + "tablet" + ], + "abilities": [ + { + "name": "EntryAbility", + "label": "$string:EntryAbility_label" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "apiVersion": { + "compatible": 12, + "releaseType": "Canary2", + "target": 12 + } + }, + { + "deviceType": [ + "default", + "tablet" + ], + "distro": { + "moduleType": "shared", + "deliveryWithInstall": true, + "moduleName": "library" + }, + "apiVersion": { + "compatible": 12, + "releaseType": "Canary2", + "target": 12 + } + } + ] + }, + "packages": [ + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "entry", + "deliveryWithInstall": true, + "name": "entry-default" + }, + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "shared", + "deliveryWithInstall": true, + "name": "fastAppPackagerHspTest" + } + ] +} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_test.cpp b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_test.cpp new file mode 100644 index 00000000..23d82edb --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/fast_app_packager_test.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#define private public +#define protected public +#include "fast_app_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test/packingToolDemo-default-unsigned.app" +#define HAP_PATH "/data/test/resource/packingtool/test_file/hap/entry" +#define PACK_INFO_PATH "/data/test/resource/packingtool/test_file/pack.info" +#define HSP_PATH "/data/test/resource/packingtool/test_file/fastAppPackagerHspTest.hsp" + +class FastAppPackagerTest : public testing::Test { +public: + FastAppPackagerTest() {} + virtual ~FastAppPackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void FastAppPackagerTest::SetUpTestCase() {} + +void FastAppPackagerTest::TearDownTestCase() {} + +void FastAppPackagerTest::SetUp() {} + +void FastAppPackagerTest::TearDown() {} + +/* + * @tc.name: fastAppPackager_0100 + * @tc.desc: fastAppPackager. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(FastAppPackagerTest, fastAppPackager_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_HAP_PATH, HAP_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_HSP_PATH, HSP_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::FastAppPackager fastAppackager(parameterMap, resultReceiver); + system("mv /data/test/resource/packingtool/test_file/pack.json " + "/data/test/resource/packingtool/test_file/pack.info"); + system("mv /data/test/resource/packingtool/test_file/hap/entry/pack.json " + "/data/test/resource/packingtool/test_file/hap/entry/pack.info"); + EXPECT_EQ(fastAppackager.InitAllowedParam(), 0); + EXPECT_EQ(fastAppackager.PreProcess(), 0); + EXPECT_EQ(fastAppackager.Process(), 0); + EXPECT_EQ(fastAppackager.PostProcess(), 0); + + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/app.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/app.json new file mode 100644 index 00000000..94824fae --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/app.json @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.packingtooldemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..93e8b7fa --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "packingToolDemo" + } + ] +} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/media/app_icon.png b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd45accb1dfd2fd0da16c732c72faa6e46b26521 GIT binary patch literal 2041 zcmaJ?c~nzZ9u6@;0AXaYAVN(;Kr(@>EJ+}skOWf=BA~*l4us@ELY9{%0m5QX6pnb} z(jZF|S&pLAS}3BZAfeQSvJ_h>F2Q1PYqi?o5`;m_yjZdG$1v}l_wK#F^L^iMz2}uD z#K$>1dON~kFlWvhW+Jp=tuN9J`ZlM-rl4h+ij|^D0y9;4JOuz-EdVnB6i3R-0ulk9 zApi4zAQA>!N9@-o026$1@L`d124`3G5<@_m`0f)Ug_Ie~;HT2q<_a=HH> zDwTdfD^-cW-|_xWVP$f@93UhDN-#&khZ>jZXLTi~$0`7x3REP6pk%&^2|`c>DutjN zMJD4Zs6Z}{FOpd;*mo2zm(GzXRXiCV;4m3zNCYnu3Fy=i5;2An&Lp!#LP;bRD~1&s z%VH6UY+}r6YDgG+p34OJIZ{BTn&%4s=CT&#TBkuOhdeU@g(w#guoa*b^)73=XyI65 z7Swys6)YS}?1EeZ6b!-I+yCnIya^g0>-NLsLWd8t56GZ_S3r|ZGbR+mV2ErEb9J)X zIF!njY-D-7{qtF2(?nlQ$0}!pzt=}hc*m%%)0Jb#N_K4@IC-`Pi5DahPZN7N9rH;ol;Gc*>-Go@gXKTM{eP)iJj6CYTIi}B#zLKZYD@_;m zrXmXXsFq@~ou-z!9bHoM8*(hwl>X(zm)TDcdkF4lZm$1jP*HbnD`o1$g}_R#+bu2D zr%7Y8KdsaC-V*aem5#@*M%r^GPgu%P2e-BnBClhP2yoGFe40>);=}>{NONtkXQ01p z)OX^t2Ojhddot9eg0WTIVSTNBa}7V-^_pO595w|Hx9q?k4dMp@$G7PK*TD=y;ck6J zdGRB!_RAI2nR3%tO1IkdWp*bw*?<=pM_LZb30?!oK)s;En( z!#nnd9=cXJ<}+e{XLdx(q3&ikJISe?eSHHohk+pz+$6Cv{ytvc{QXmMn2XQ9U8rvt zrJdAn(0gpSD@N=yTrI_2^P#*zQg7MTp1)k(lv(*(KtUR6@M|2WB>2wRwC-h=wk6XF zPtSes*_JwI+^d>xW489MJw5R6=t5?{R zc|E8i?RL@p9)A3ZJAQOg`}+F;<_vnWA!KxR#g%jZ@y_1Qu#Uw)kFPw_xmZ?a^e*1{ zM|ImtqA|(CaDQ@Fyvcof`MN66&VI6m6gAyAXx`%cDx6BI{Bj#}V*Rn1(b~;Am)D2u zX7(027IO?Z2VYK^1vXXpoZ@AtH~N?0rYWwtyA15`6vEf6fk&;o-L;7zFt`5nk*iOy z`<918zB+k;EytI$FAXug)jk*e@e};4e9g__w4A5ev!!)H$yC@{?vsRqJ##X1R%xPG z&_R3oDi$MtTkVqfPj)HEUDx_7wd!y{8#1%$U*Dd0sK@=#6+!XlsE-s^1f5E`R9Wo71^b~mbVdU;Fw0LG~mUQg;xsX4QYRo3B@rH_=ry>DE8ef!c2ta8UcI#26# zF|`*4wtMHe@%#eGZw`#Yj|QWuB`eRD)b~)r9mM95p_JVG%-IdcbIX5qG#GpGD+IrS zEqxb1Rg&Dadk5#7t4j68I1f!@A$efp1?I%&d*56)yl!tkz!14<$0Od_&6cGw$WW0r zjSlQA7l*6;vgfhv!cR|RmAD$+w6j`rVf=-?-D@q>kOseUVSb*~jbAS^*1h?ZL)n(9 zDa}`4etXO6`}9;{k5E^N{rcfnV_(LPwsDg``wtyS*V<19c3!PGJ3Kqy9ksvkwbJ%Z z*N(fT0{e*Wji-Ck5!3YE0j|PZ@&z`v=kitWL$bqSt!e4bH!+(|Q)CZ30^nVPfkx{s zX{6of`p=BiPb@u@IyL!tRk>?qgBqCmo-Zlt!636g?z`s~zdfwuB7DXZHvV`Usp+%Z zo*&;Biu@MHE&2j+?j^o`Cr12u<>vOe=a&8a2hlcmFjJiDR>XnD4c4DAhZWCkiAgW{ E51q9-lK=n! literal 0 HcmV?d00001 diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/BUILD.gn b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/BUILD.gn new file mode 100644 index 00000000..1f7a3e62 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_hap("fastAppPackagerHspTest") { + hap_profile = "library/src/main/module.json" + hap_name = "fastAppPackagerHspTest" + final_hap_path = "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/fast_app_packager_file/${hap_name}.hsp" + testonly = true + deps = [ + ":hjs_demo_js_assets", + ":hjs_demo_resources", + ] + certificate_profile = "./com.test.packingtooldemo.p7b" +} + +ohos_app_scope("bmsstagedemoone_app_profile") { + app_profile = "AppScope/app.json" + sources = [ "AppScope/resources" ] +} + +ohos_js_assets("hjs_demo_js_assets") { + source_dir = "library/src/main/ets" +} + +ohos_resources("hjs_demo_resources") { + sources = [ "library/src/main/resources" ] + deps = [ ":bmsstagedemoone_app_profile" ] + hap_profile = "library/src/main/module.json" +} diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/com.test.packingtooldemo.p7b b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/com.test.packingtooldemo.p7b new file mode 100644 index 0000000000000000000000000000000000000000..b4a8d1550d163689f65b5b01180fda3f481782ac GIT binary patch literal 3428 zcmcgvYj6|S6}BF>V~oJWfPwNb!eELK+?DloLSR>K+bem6ELp2K*LxiwID4qtU0pZj~u#0jtuz0Ev4~Io=e>4{HJL55S zKr9hv2T;)(KN%yu5u8Ptk@2|S&EQfXmOGV7LL~JtKN6YLEmBH>LWC;`02NC-9s*LZ z@4f` zM!2l1nk-M)To7GWq?J0uMo)!JqIAuMgEU4OLjIspVO2DMD6U0{ZN)yk$Q9Gql}Z&s zhs-I7Yvc|3DrP4s$Us-BVKUD{u`d_e{rV zHCrP5?*--?CwZ^zEmN3{LEbf~v_qa=|;!*`>RZ@OP z|0F+{8N@Ca)nO_WsnA6NI>H+kYrPb(sY70EBQ3=%rM7S}Fo_NNgnN3xp^fTfiGo+R=`F@teQ+wU1L-~h5nDbtXD8xRA?H}fQQ0CVpac-FZuVVL~$RWKNvClEtG48)L_c}g95 z0*Mk57el=!2>;9^0GQU3MB%fNsEAM=e~`#G_vk0EgWQbF)HZNAz5BuAWb%+SzU?&k z9|t-*ufTN&haLajdaRZ*O8c28?6U88d-D0t{a~^vk9$;qX6YZz${Po;d%&x9JNvigaKQ z8!(u|`H9cxaWfZ#F|0j^Kb$}GB!2zFt&PTWr+>d^>CN;9-`5B@=KeL~`O|=h3#IK` zxjQTAOzhSd3_))GmN?+c=zOs)ht|IG;O54bt}DnY_eIZlm$%-z+?*ks_wd~|W=MNe zpz*7R154nW1#`>O$1gwJvDgGIs=r=7soOm25J$D`dcmGe(wv6v52K5&{dMpjhCgbC zKgWCdGx)M%MgLrY?`M{7GMLm;x^d4cotdIyPmlQsz3r8?ZRe}@uG(GLF`)VM!2Kl$#=f?AinOtM%ZAaS_2-UI{0V-0VQd{26znMY z4K;V?giQ0$&CPe(-vFgE6Y3x0nrq?B^=++pz}h;~>csi2dFP5cPU%K8r87Lj86I8h z<Jjd$w5hF-iEbhxA)_gvS_zVh-U;oXqw)gU+yOy8WT=Tc<@Wev?)lu)< zJ{w!2+Py8~`(3vRN1Z(Xrr?A9^399FRm+Yo`bD_2zT^GR%)qwy!rIBQihW)0eY|c| z>z3QgmgU?&(=vY9y;tY$EgE<4#_`K5e-u@2asj-bI6ajk{|CpODsKHw7@jW;5L^(t z_$$Sdw_>+m{lmQyU(NPovh`OF<{Uepdv&2F$8=3!`PH(;BYjMrC13d z2bliY%ZG&g{O(D^(U2f=P-a@$$^2MGt?PSyQmKJLfnU@aQDx^0h$C z&FA2%+6DV9=N9|V?pQJQOO4|{C%RhSTGu)ttLEbVK&OVAKiT%~;aKOD!=JVN(^b literal 0 HcmV?d00001 diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/Index.ets b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/Index.ets new file mode 100644 index 00000000..3d41603b --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/Index.ets @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { add } from "./utils/Calc" \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/pages/Index.ets b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..aa56579e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/pages/Index.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/utils/Calc.ts b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/utils/Calc.ts new file mode 100644 index 00000000..ea3f8511 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/ets/utils/Calc.ts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export function add(a:number, b:number) { + return a + b; +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/module.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/module.json new file mode 100644 index 00000000..1e65fa59 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/module.json @@ -0,0 +1,14 @@ +{ + "module": { + "name": "library", + "type": "shared", + "description": "$string:shared_desc", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "pages": "$profile:main_pages", + "generateBuildHash": true + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/color.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/color.json new file mode 100644 index 00000000..1bbc9aa9 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "white", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/string.json new file mode 100644 index 00000000..95ba6cba --- /dev/null +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "shared_desc", + "value": "description" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/media/icon.png b/packing_tool/frameworks/test/unittest/fast_app_packager_test/hspTestFile/library/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y6z{wDB z54d>t+=X*zFJ3r*ft>u}B}%3%loS+{*XbFqGTpqv&3*F*7bl;foCqJklmI7}C|FGD zk9!J=3OvH98Y=fSxNKcbdow;&d zP@VcJ`yWpnZrl-)*ZA{oTJguORWox(T9JF2FJ4AW&~V&$Laz}q7>U?_)%_)c_;{M^ z4DlNu74aJh>1h(uQ)mBT@ExB@knGC!Kh&x3JYoNn=7x}l!`tGt6FfjpWN?a#lnRgo z7C!vK`u(~W&*m03fS*a$7Ola1-P{zSs-kN#P}ok6xRz%O)rMN4vYRf3Y@@kmuhvwp z_fx}OAOsw4y)Q+(@M#}-7Hq97!E4GI#kVEkHx}nXp>otwIs4`jJJXtf@PCGmviyBDRk?R0YhRPJyO^!DcBDWAz?Lxju?41p*5wb`2G|6oTHNDKf{<>FTG{ z=sTvp$B0OKYosoO!A9b*%OB%rKM!lhn#J^_ykvPZfYfYZbG~2o=oaljCZX_cMS>Ai zher#{mjGRroeTV7z*wdN{dvj$Q%(Gkm=X z_TfhdJHF4nOWd!V{E|UF%`(9QI*Yg*2O0N1PKmY1_6@$Ed(pAk)8#?W!;j!2lWuOc zCN&A0It|u<>X$MUbhM`eApdvi-=EHmWZiVLnC5K}c(A1KjvR-}U(p|YR@@z@e9J_m z_s|}XeYJ$`V9JJl&0#3uo_*UH4yMU9{9+QSB=2dqeqA^m;?JKEQ7bTeTy>k5-Ze@j zO5jQA%pdS=T3%R!u2v!y1M%tMfj%i$TP~}7_O1dg(rDh#!Z(Vm#v7DuhR9#SCK(dUY#nIgB z)7Fw9U*;R9*0-vv3f*+03e`Kdw^;AeN<<0?)%XG*{w3)jH}3cm-O{|)N7>^Cl3%Vd zypBtrfPLDGNw&!u&4hR-teJjIQ5880(a8e6UQ|q;q zgP6)iPcz23a@qxI^k>LMti9V7-w#EXn_z+!wo(Cr;~zqaFG!~oUKzqUFqj<dYFcX3tuc9fC7%~_QD5khpXq4+`~0ns9NG9Z&n!0#CkuPRB{Vx zlAqg)=u{IuP`NlM8j#pKo3yi>BJ*E|FlqV|(VCviX^PGn%!JWxbmR+zjT#L^5d7JW zOy1No-}`+>_Y^tI2~ct$(3}3n|L-eVouZ(vn_8l-H|s@nZ^!SXX^`^y);$P_fbfBe zirvM{!CA6{jBwkqODg=w^nUNH>z|fGWP=w)TUjG8!S@Zs0g`J!@Xodfrw0sMp}R);ZF>HEZL)UK!HxRM>6{)D7azEG2>|Z@C{1GZHP0m4 z133thqgw}YxRSs+ZYNN-!NO{)$M76rkW^duyu*>SNH%bL001sv67ZYZ#{784-NJb2 zjp73nw^#lChFUIDqqTzxo!$L?=KFCdZ2&OYxcifl*f)ERw%x_9%&0qF+%{@OJvk7q ztodGuP;d*fIO|G+0Xvs@LlJQLuj0f?SHx-AR}Xr}-lnK$S4*ajL7xXhxKTOFp6VUJ zCP8LKWpq~RoAZ1VL#(WY*haT-TO_0xE(adnRr9?t^5(nL^{NU#RL!E++O-ldWR70< z;vs=aTxJl0^wBu@CPY<}-D?>lKJ%HWI(}qW3#I8f>NQL?P2$ns-rl+Xz5dU{(1YYD z(V9ncw@gRihpx`I=J!cLTOAR^Ww+%@4QdC z3Qb3rF`v7N_^vPT1pQMvAypsj50bV}y_`*{ibs_FRh;5WrTJM{#zeMK45=X0AEU~} zoK&AUGB7;&MQ1W9tzM)!VOAvvLi2b+z1lgEBJlq1$>~CPg%eK{0c@Lme@eV2!GqC~Y>f4zd0>5X zMwG1?My6HyCASNAYt)G3>m~<;@V0PUx*K8%k}v=&U7Pm>+Khe;9~n5m71RMzCbNpz zSyOyN-p~$Nox_w{L}7(4g)RJ<3rn|gQ{BZPX&e#S0}cZM+T*C z^dAAIhsS?W=uDQ-PC%+kK-4&5aD#u=y)fY=SBTap~|%N9kmb9GTm$#?mV7uTn? z;#zg@7@BO+e5AhFupyhUA%&Hdc4;=juL7q&{KEU^)xWt&Z}K+b8G$Jd748@@-V!;5 zV0b-fqT_Tiu`w3|7%`^987WLAyUf@w)de zd?bh~DY2ZvmD<85449BtyE=mv0!?5Vc`&ib&54oz_3bw`&z;>}ZHJR1SB~@Vof$fAlQs~x%qA4YSf)@Sh(h%`|FaF$2(sr8o2v5r1cAU3s;KfsI1jhrF-!4su@tX zO^M?y8DyL#z&`pH%I%~m_F=q|9emoiopQ%r$sCRrazTDd>027UKMZw2ATB`r|#}P_HB^j%f`a7V+%X2b)i8JV&VDG{VIBi$;QHd;ya@a znR)1CPUYSGk%%C3^h4s;hC<)$p?R0*dmhi#Fap|#EihG%;>tnpDxnEYv+ZTUq1yw^ z`Ssp>ac3wak~Ckc%5+F~#nXQM)nIujtsrYvGR$Xjw1d^!f#=@Viq zeUCCnw|(t#1%F{}w^k@2qu|Tt+7ffyL%?YK7Xoo#FiPXnUVK5jDzephC_bB1q!icn zY;*o*x0GT*C5}!Biw<}ho9FiVt;me1dy-o)4#fHil|?7ne-%DeCD`w^;#NOu06rt& z&{@p5<%Z;nbsVTYJVZ zJ(&m5Q@-g=7~9;92wKMVTIalw-dIg&6pryLa9(mmX@)1Vndy?}l)>FFuyzp7qj<6XcO%@f~C6hAexxl1Qyy}6v-gks2%S2lm(WSra~n;SpX zEJyK}g!VI${wY#r!OL(<)Vo7YucNn%+ecsr&i9a##>Mr6o>plQcl5!eLaYwaGQwFT z#asE903=*RziI7MecFy>ISqQG^Y@KFLQtcQk)^(`XeXtjiZ;R`*zCk9oGhY~D zR_4GPGU||?D$kvw0lHMTR; zi57meodaYc#JVdYilanj`xag%*r&OFdZBKAi%og8PI+b8gjyx5tE3C+LY0zuu)Pnk z4+4PhW;q1`rQJ&h32Sj}KJo%1daUJzUcSOvD`iz=Bu|PKG_9kmH#m#e410EIyS>D* z$`tSn4i6Y`zVdfPk$f#$7@leJGXaY7!N!HB3~njo+@byTx{k$ew>p zy!QN%#(3ta=%`7oa`^m2K0tcOm-IqpsJKL%SrEMT9Q6cQ zW?ZT$W~MatReqK6+Y`V?BgJOY&9N4nXMZ?bY;XJ!$Da?U5XtS>LaSokiK54U6HT09 z_Fd9yNkdKsg`d=oSqDyl!ZbBe`?gBG(e4Tp7`~#QRH3UzRJgJ>>|uGKZ5TOsr^q!V zORkdeZpNM1%*A*yo=m^kjD;Vp2gTv*Pu5ui#^)PvKXwO)1V0k0g3#vvcy+h%PF$)N82X=xU3)$ z8@4dD4=qgGr>2bq`4t$%tVM1jyS>-%QzojE7th;I9as~0jKs;!1TNUa(A^SXEqS!% zax55)Z-=4b^E})p+GUk7C>I1-z2LMImaSWaQ;!u-7cff;# zKo1m^hcT*ov)5E)6LhWJ;7MVma=^_IU76~Sg(x8ch!C5}k~jP;`EE~jJ>T*nwubZO zENA3)x`R(l7$p8E<^-^HJ%8v!k`^%J6hw0~1|9YuvvTcx!}5$pqm9l|5pXB}CvCA+ z#-tQMn-hSwuuNn__)>_Zdz@d%gpR;y2>3Y?hVv2NS&{5xV~~6O=T^=17<9Fj`uhU- zBN><8+fm%%&``z%de0qC2b%hy0IJ93-x2^CsSiI&klgL&sVNY0+*MK>i2YiZG z>1MZqTzfj-7Tn7Dr+QaV zVOv@E?4E1*XW$yqwELc}JJ%6;uoHR29us+hmEhv`?y*~Sj{((pKMDX0UlBT4yGoua z6gdQrgFl!{dG7ciHdovx0?T?|K z0a`0Ri=35cq}5BtAI_fuo1Gy}N7pl3%*A*^%CMDk@sf@+F5<_=R_oyaZNfcJu6KfPILlA{Mt$Jp-#k2L|P?0HyB}i{C>V zRkx+(!?`6y6Azp2d(yn44;5Zslaf*sa5&e3$eB3`d_OWp*N<3_z0$X7UhENi#X*fY zt&m62Cjj)&hxPkf@azdWRV2f|LTjF(jEl?B@VJcMD}CTsJ7nw6ZXm*Pr*(l7)v8 z{y$6x(sz&Dq!%xi=k(|09^k&by{5g%ztU#Vb^<*0rXZ|<$Y?_|=bbBMvu+g;eF7Ac zrBgadIUQCENZM+OyF_PN#|p~A%1vj~V}h?_vMRp7(7F5)Av+JRj8w9au9|A@+o{N* z!?^_{^iCv6aMfb};maX4Yr^TqI-@3P9ou9tq7n$@_lrgqg0Z<(E;^6Cvn@@>n1J4T&w8|y<*Rqm^v33B*a%qTt6gcSf^;{R?lHHzD~NWvpP8vu})^gHs< zr{$5b>k3o30-5-7p)`3g6f7W&dp7gn%L9SEj#x3`zC)CMV9QI!kLb}zRqZH4G9N&Q z4vlxf8S0<}Yb9Zvsw_G*d_wI~hKs z!sao(W*PHtuz(lmDUw?B@VQb3#+J3R6cx4;YBOePAyl9D$*^zdwz;cbmtpD z1qT4)-iJCWMTu|li-U5xSD;SCLgd^w=yNI5_yiC|&#Zc1scjx)twWY(eRo`8l|{Eh z9Oj6AE8pMvkT`TnN~h2j9u8KzmwU!TBxzX`6ZO7k&V9T&7Sl~P(KR16#xXR>L`F(i zK2s6uZWs{>t6Va@a;#nYX-H=>w80H58IHBxJqYafESHRt{boFNVf8;Y5$9zX2`9kJ zt#y{FLlO7mgTPNyMB`Po#7)TLO6~IJEf4QkaH)G%ib0MRp;!dbqh#`i$dIJa1FEnc zoMFQF)w@@tIE1#AaqBSia!zJ7magag129O5E2SxAxJ743#6{A;DqQ-o@(n1iAVj{v zh0g#fN5Fom+@i_LQx29`FzSwCvmQ9ID1H`8A)3g=aHKv(7zggW`>BVsSX5@?^cE-w zY*%b!f^PGB*1&C{v6mZpY%p9srvJKB{!r2;9=X{Z9wkcgqQ4=fE;6lOw0wts(E_T_ z8k8Z=SY(28Z{iUIb8}!gFi$PDVYbWA($bHt5_`aD!@EQ&7ic5aPk;@YO79K`Bi7Vw z`iVpLuw2q$UYx-BdpeIcKSgMgybV)wSTiTFV(P*C7TIz+d-6S31x>D z_jJA0iRzRG(sr)Od%|pS}(>F@}`;(uzXbjzY{&2tiu!VYpJ~^?H zn=T*cRaqpuW@us&sGZT9;;=j#D!&s`W{FAo@(!T?sfzEp?fA9;WdnEjhBUPHV&O{Z z92Hnli7#T{Ek*i(k8m*|tA^7v6Q9vr>y0KZ$2Haa%xuc68|}WQK;u6_)=^-ZcM}Fl zR+q2nXY`)o5+jhgrQ=*MUmerxR%;-LLSd-oD zM}JElNq_H^&ciJr*!qSo06hIcp5#?TlmU$BVRAY&Yn<5i1DjZdo^5pT+GZht)tw}l zJh1-Nj|*f4ybni5`5|KN{8vBaE=;C zjnO#Ah4GB@0ywG<3@19xvM|D*wBmyAx7%Hgi&5-mB5BG9tdBr_cdwyZm4mpzT%zut z2;K;6-#9?8_Y3f!S2o7>{d?vEz4mjCT8`1}F^$*<4whzOx{;g?{Z+#}yCVrj4c6WM z1}VZG)C8z)`Kv#62MC4L_DoLUP0WAb$YMEvX5 z_`CmV8$(YHkES+vIYZ-2!axsy++`7F1?Fg*3@4g0TMZ-iheAjVt*l&4TcO|%k>V^f zbJwOsO&i)#@$LC{{vRB&CvQ*ZSrA=ud5#g2uag^vm}D+XN4J(Lsv9 zc}`T8ecB0NhMe%CS>)OE=XDEIuGgA#k(Xi*X(W24wg%RA!|$NY4AkK8B#@^JL@FKY z_4G%TvCAclx&xb^_ywSTZM}#(^L%L_U zt6jB?S!22Wvo_RSz($_|Sr4Poh+B&gbH1x%Q;HF=7@@7Bk;xlq2{tllU1>3@mwQl? zTKp!VT~cpL9PNd%`{4xrt{RdImtcJZgkhZ395Qj6opnRmtVAb@xsFCPcz{S*>uK*K z(Xx6Psbo2-WM|{oP#S~l7k{+6B_*xBxKHEpO=I~4XzPQ!^FCG2f^e_T%q(ci3O2PU zzNZh6AXM7TwWY<9zaAD-S}Jh#>-WuR_B1WbMxN5tizxtE+Bnr7oB*+^AyJbFP-JC> zP|A~C)F_((sb*ULd3Z30-ZjEtgmB>m*jn(u+2xI{d|#jU(m4F)>ox8ou{Q(TBFvJ^ z(af1noW*wPM*4xFL;81gSv*i5!_C#}(^}NOdtGU_Xd0ucqB(VJGZhFD(nB7GW|>Ob zi8<<(5H-8UXXo=wf$!Rj_q71FN zk%lFHvd85+c>OQDhR+R#K84C%xyXrkk5X9?P)63%J2c)U@f#EQ8ubjd1db{NA>GbWuxYujf0QR5M>&EGfR?eqM zZ)YzkW4+Sv=RMQz2V?WT<*>cnqm2kw=-#X{O4Yn%^K*|Z#a1;Fr;3;@Yu1oiS&HB^ zRJEm*lOgjL!g9g4%B}U|2`^kowlfb%E#NMW_@bD*VM@ijiCLXZ)eJGj@G(V7J1AbSV9?VW8oHHn)UP`=b#)Qvn>Ju zr(xU0|*m4~LTTf1>w#54~qo-f0rK zDEi@+I~d1Hr8f?o_Wg+joI<^?kmKYwG30+aq`}+asjRfFBwpI>;KAsD7NSOn?D8fg zqh~(EHLtoo(e6u6#6+F|XY1$g#ok}uh!-59sfK?B?)(D#3ljkJgx#2k8%l^@XRQJL zYoGoW+++n|O8j%z4+a$*R^^p1LD=@{#^tQ-Pk@dS;8eu9?R$2+VRoOE4m62JZB48i*Kq zyP0L>mhtgL1(di|{QDrB2zW+>yD6WUE9xDN=%l~eZg(byO*aaegnGX%TTx4171xVo zEV9r3@i`|$1k(YBBvdYzZY&rLQ`3*0m12-A)r>CLs-PrvN!4ttxHj4jIRfPG{-v$| zeWUU?j(O#ME)F8v);nWn^>l3tW9W*LF8X*II!S{7$2Z{xV2hFC!O4;inPlfU={X~m z9p#h7yI=STXPibW*(fnw#SdXGC#o9J;3amh0rfv^m%oLQtYs2=9QqBq{4CGhU3T8e z;c24(o~EIZhwc;WGiI*psboUBFo|r?E{^14&7uL}!U29b^SCwBTI80t^Wq<$VD1)O z&tges6LxRH9M(4ghDU#c|G(}?yF(eH7jm5+&x%#D_rDmYENv~rX%=EZ3v%BY@YlUB ziEMQCO%c*wJUhsXZd|Ztno|Adxa8%R$$9R51hG-J5BD!vy1A`B&SG481Uz~E-{e@E ziNkBJD{GXB7Sh7Z!}Etom~=o)2GX|%vMxCVv|!5SwzR@l^qHMwB2{H_R*Y5tY!tRm zwpq{@fq1_pMhc+?z6T;XH!n2KuI7^B7I4^169`u9><|t?j6|ZQF8!a8NFTa3iUrg307%NSn`AL#TYqnLpI z7L!F%4)r%4-MerF*6l%QSyqO$Zd$t6?Z+5P-J1c?Og)$1#u*kYF9BIEs2lfhT)GKg z%Es4g_=$hCSLXYyI@OaFjC@+2xJz^=EwiLA5u^qQd-lXO1mW?~D1L~a_$Owng$py5 z#zvB!&&@YK{O_2wpIRc>V3%DvRb16k1-`V`yDu>J@TH*Cbx)TX__Gn6sxE`Bjv<|p z{`23Ss&>*Lh^x&^?9~#J$>Z}62$_*tljTDb9e;ey8!#B&gSivUdc0zPR~}=^O>VW# zHj$O~SWn@Vo;!*|f;`XoqD#T1A1l?+>TRRY-mbh|TdmoBtF6ypoJE#0zL;1CoH^7HnS*eSv{ST}cYZHa4;v1jOp!?6*hCZlGirtKx?$^BI-@QvwDc0K_%^2 { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Row.create(); + Row.height('100%'); + if (!isInitialRender) { + Row.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + this.observeComponentCreation((elmtId, isInitialRender) => { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Column.create(); + Column.width('100%'); + if (!isInitialRender) { + Column.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + this.observeComponentCreation((elmtId, isInitialRender) => { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Text.create(this.message); + Text.fontSize(50); + Text.fontWeight(FontWeight.Bold); + if (!isInitialRender) { + Text.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + Text.pop(); + Column.pop(); + Row.pop(); + } + rerender() { + this.updateDirtyElements(); + } +} +ViewStackProcessor.StartGetAccessRecordingFor(ViewStackProcessor.AllocateNewElmetIdForNextComponent()); +loadDocument(new Index(undefined, {})); +ViewStackProcessor.StopGetAccessRecording(); +})() +//# sourceMappingURL=index.js.map diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map new file mode 100644 index 00000000..d77a1f9f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["D:/ArkTsProject/packingToolFaDemo/entry/src/main/ets/MainAbility/pages/index.ets"],"sourcesContent":["@Entry\n@Component\nstruct Index {\n @State message: string = 'Hello World'\n\n build() {\n Row() {\n Column() {\n Text(this.message)\n .fontSize(50)\n .fontWeight(FontWeight.Bold)\n }\n .width('100%')\n }\n .height('100%')\n }\n}"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/config.json b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/config.json new file mode 100644 index 00000000..58e4106a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/config.json @@ -0,0 +1,96 @@ +{ + "app" : + { + "apiVersion" : + { + "compatible" : 9, + "releaseType" : "Release", + "target" : 9 + }, + "bundleName" : "com.example.packingtoolfademo", + "vendor" : "example", + "version" : + { + "code" : 1000000, + "name" : "1.0.0" + } + }, + "deviceConfig" : + { + "default" : + { + "debug" : true + } + }, + "module" : + { + "abilities" : + [ + { + "description" : "$string:MainAbility_desc", + "descriptionId" : 16777216, + "formsEnabled" : false, + "icon" : "$media:icon", + "iconId" : 16777220, + "label" : "$string:MainAbility_label", + "labelId" : 16777217, + "launchType" : "standard", + "name" : ".MainAbility", + "orientation" : "unspecified", + "skills" : + [ + { + "actions" : + [ + "action.system.home" + ], + "entities" : + [ + "entity.system.home" + ] + } + ], + "srcLanguage" : "ets", + "srcPath" : "MainAbility", + "type" : "page", + "visible" : true + } + ], + "deviceType" : + [ + "default", + "tablet" + ], + "distro" : + { + "deliveryWithInstall" : true, + "installationFree" : false, + "moduleName" : "entry", + "moduleType" : "entry", + "virtualMachine" : "ark9.0.0.0" + }, + "js" : + [ + { + "mode" : + { + "syntax" : "ets", + "type" : "pageAbility" + }, + "name" : ".MainAbility", + "pages" : + [ + "pages/index" + ], + "window" : + { + "autoDesignWidth" : false, + "designWidth" : 720 + } + } + ], + "mainAbility" : ".MainAbility", + "name" : ".entry", + "package" : "com.example.packingtoolfademo" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/pack.json b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/pack.json new file mode 100644 index 00000000..04870b2b --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/fa/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtoolfademo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"mainAbility":".MainAbility","deviceType":["default","tablet"],"abilities":[{"name":".MainAbility","label":"$string:MainAbility_label","visible":true}],"distro":{"deliveryWithInstall":true,"moduleName":"entry","moduleType":"entry","installationFree":false},"apiVersion":{"target":9,"compatible":9,"releaseType":"Release"}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"entry","deliveryWithInstall":true,"name":"entry-default"}]} diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/ets/sourceMaps.map b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/ets/sourceMaps.map new file mode 100644 index 00000000..027a0602 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/ets/sourceMaps.map @@ -0,0 +1,20 @@ +{ + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/entryability/EntryAbility.js": { + "version": 3, + "file": "EntryAbility.ts", + "sources": [ + "entry/src/main/ets/entryability/EntryAbility.ts" + ], + "names": [], + "mappings": "AAAA;AACA;AAGA;;;;;;;AASE;;;;;AAMM;;AAED;AACD;AACF;;;;;;;;;;;;;;AAiBH;" + }, + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/pages/Index.js": { + "version": 3, + "file": "Index.ets", + "sources": [ + "entry/src/main/ets/pages/Index.ets" + ], + "names": [], + "mappings": ";;;;;AAAA;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAKE;;;;;;;;;;;;AAGM;;;;;AAOL;;;;;;;;;" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/module.json b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/module.json new file mode 100644 index 00000000..5427967a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/module.json @@ -0,0 +1,50 @@ +{ + "app": { + "bundleName": "com.example.packingtooldemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "targetAPIVersion": 12, + "minAPIVersion": 12, + "apiReleaseType": "Canary2", + "debug": true, + "iconId": 16777217, + "labelId": 16777216 + }, + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": ["default", "tablet"], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [{ + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [{ + "entities": ["entity.system.home"], + "actions": ["action.system.home"] + }], + "descriptionId": 16777218, + "iconId": 16777222, + "labelId": 16777219, + "startWindowIconId": 16777222, + "startWindowBackgroundId": 16777221 + }], + "generateBuildHash": true, + "virtualMachine": "ark12.0.1.0", + "compileMode": "esmodule", + "dependencies": [], + "descriptionId": 16777220 + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/pack.json b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/pack.json new file mode 100644 index 00000000..b221fd94 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtooldemo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"mainAbility":"EntryAbility","deviceType":["default","tablet"],"abilities":[{"name":"EntryAbility","label":"$string:EntryAbility_label"}],"distro":{"moduleType":"entry","installationFree":false,"deliveryWithInstall":true,"moduleName":"entry"},"apiVersion":{"compatible":12,"releaseType":"Canary2","target":12}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"entry","deliveryWithInstall":true,"name":"entry-default"}]} diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/resources/base/profile/main_pages.json b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_file/stage/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_test.cpp b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_test.cpp new file mode 100644 index 00000000..0ca87910 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/hap_packager_test.cpp @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#define private public +#define protected public +#include "hap_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test/entry-default-unsigned.hap" +#define STAGE_INDEX_PATH "/data/test/resource/packingtool/test_file/stage/resources.index" +#define STAGE_PACK_INFO_PATH "/data/test/resource/packingtool/test_file/stage/pack.info" +#define STAGE_ETS_PATH "/data/test/resource/packingtool/test_file/stage/ets" +#define STAGE_RESOURCES_PATH "/data/test/resource/packingtool/test_file/stage/resources" +#define STAGE_JSON_PATH "/data/test/resource/packingtool/test_file/stage/module.json" +#define STAGE_RPCID_PATH "/data/test/resource/packingtool/test_file/stage/rpcid.sc" + +#define FA_INDEX_PATH "/data/test/resource/packingtool/test_file/fa/resources.index" +#define FA_PACK_INFO_PATH "/data/test/resource/packingtool/test_file/fa/pack.info" +#define FA_RESOURCES_PATH "/data/test/resource/packingtool/test_file/fa/resources" +#define FA_JSON_PATH "/data/test/resource/packingtool/test_file/fa/config.json" +#define FA_ASSETS_PATH "/data/test/resource/packingtool/test_file/fa/assets_jsbundle/default" + +class HapPackagerTest : public testing::Test { +public: + HapPackagerTest() {} + virtual ~HapPackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void HapPackagerTest::SetUpTestCase() {} + +void HapPackagerTest::TearDownTestCase() {} + +void HapPackagerTest::SetUp() {} + +void HapPackagerTest::TearDown() {} + +/* + * @tc.name: hapPackager_0100 + * @tc.desc: hapPackager. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HapPackagerTest, hapPackager_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, STAGE_JSON_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, STAGE_ETS_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, STAGE_RESOURCES_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_INDEX_PATH, STAGE_INDEX_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, STAGE_PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::HapPackager hapPackager(parameterMap, resultReceiver); + system("mv /data/test/resource/packingtool/test_file/stage/pack.json " + "/data/test/resource/packingtool/test_file/stage/pack.info"); + system("touch /data/test/resource/packingtool/test_file/stage/resources.index"); + EXPECT_EQ(hapPackager.InitAllowedParam(), 0); + EXPECT_EQ(hapPackager.PreProcess(), 0); + EXPECT_EQ(hapPackager.Process(), 0); + EXPECT_EQ(hapPackager.PostProcess(), 0); + system("rm -f /data/test/resource/packingtool/test_file/stage/resources.index"); + + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: hapPackager_0200 + * @tc.desc: hapPackager. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HapPackagerTest, hapPackager_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, FA_JSON_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_ASSETS_PATH, FA_ASSETS_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, FA_RESOURCES_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_INDEX_PATH, FA_INDEX_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, FA_PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::HapPackager hapPackager(parameterMap, resultReceiver); + system("touch /data/test/resource/packingtool/test_file/fa/resources.index"); + system("mkdir /data/test/resource/packingtool/test_file/fa/resources"); + system("mv /data/test/resource/packingtool/test_file/fa/pack.json " + "/data/test/resource/packingtool/test_file/fa/pack.info"); + EXPECT_EQ(hapPackager.InitAllowedParam(), 0); + EXPECT_EQ(hapPackager.PreProcess(), 0); + EXPECT_EQ(hapPackager.Process(), 0); + EXPECT_EQ(hapPackager.PostProcess(), 0); + system("rm -rf /data/test/resource/packingtool/test_file/fa/resources"); + system("rm -f /data/test/resource/packingtool/test_file/fa/resources.index"); + + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: IsValidRpcid_0300 + * @tc.desc: IsValidRpcid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HapPackagerTest, IsValidRpcid_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_RPCID_PATH, STAGE_RPCID_PATH}, + }; + system("touch /data/test/resource/packingtool/test_file/stage/rpcid.sc"); + OHOS::AppPackingTool::HapPackager hapPackager(parameterMap, resultReceiver); + EXPECT_TRUE(hapPackager.IsValidRpcid()); + system("rm -f /data/test/resource/packingtool/test_file/stage/rpcid.sc"); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn new file mode 100644 index 00000000..99e0e448 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn @@ -0,0 +1,68 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("hsp_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} +module_output_path = "developtools/packing_tool" + +ohos_unittest("hsp_packager_test") { + module_out_path = module_output_path + public_configs = [ ":hsp_packager_test_config" ] + sources = [ + "../../../src/hsp_packager.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/utils.cpp", + "../../../src/zip_wrapper.cpp", + "hsp_packager_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":hsp_packager_test" ] +} + +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./hsp_packager_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/hsp_packager_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/module.json b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/module.json new file mode 100644 index 00000000..453852dc --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/module.json @@ -0,0 +1,27 @@ +{ + "app": { + "bundleName": "com.example.packingtooldemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "targetAPIVersion": 12, + "minAPIVersion": 12, + "apiReleaseType": "Canary2", + "iconId": 33554433, + "labelId": 33554432 + }, + "module": { + "name": "library", + "type": "shared", + "description": "$string:shared_desc", + "deviceTypes": ["default", "tablet"], + "deliveryWithInstall": true, + "pages": "$profile:main_pages", + "virtualMachine": "ark12.0.1.0", + "compileMode": "esmodule", + "dependencies": [], + "descriptionId": 33554434 + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/pack.json b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/pack.json new file mode 100644 index 00000000..e8a818ea --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtooldemo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"deviceType":["default","tablet"],"distro":{"moduleType":"shared","deliveryWithInstall":true,"moduleName":"library"},"apiVersion":{"compatible":12,"releaseType":"Canary2","target":12}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"shared","deliveryWithInstall":true,"name":"library-default"}]} diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/resources/base/profile/main_pages.json b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_file/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_test.cpp b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_test.cpp new file mode 100644 index 00000000..60c0828f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/hsp_packager_test.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#define private public +#define protected public +#include "hsp_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test/library-default-unsigned.hsp" +#define INDEX_PATH "/data/test/resource/packingtool/test_file/resources.index" +#define PACK_INFO_PATH "/data/test/resource/packingtool/test_file/pack.info" +#define ETS_PATH "/data/test/resource/packingtool/test_file/ets" +#define RESOURCES_PATH "/data/test/resource/packingtool/test_file/resources" +#define JSON_PATH "/data/test/resource/packingtool/test_file/module.json" + +class HspPackagerTest : public testing::Test { +public: + HspPackagerTest() {} + virtual ~HspPackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void HspPackagerTest::SetUpTestCase() {} + +void HspPackagerTest::TearDownTestCase() {} + +void HspPackagerTest::SetUp() {} + +void HspPackagerTest::TearDown() {} + +/* + * @tc.name: hspPackager_0100 + * @tc.desc: hspPackager. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HspPackagerTest, hspPackager_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, JSON_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, ETS_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, RESOURCES_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_INDEX_PATH, INDEX_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::HspPackager hspPackager(parameterMap, resultReceiver); + system("touch /data/test/resource/packingtool/test_file/resources.index"); + system("mkdir /data/test/resource/packingtool/test_file/ets"); + system("mv /data/test/resource/packingtool/test_file/pack.json " + "/data/test/resource/packingtool/test_file/pack.info"); + EXPECT_EQ(hspPackager.InitAllowedParam(), 0); + EXPECT_EQ(hspPackager.PreProcess(), 0); + EXPECT_EQ(hspPackager.Process(), 0); + EXPECT_EQ(hspPackager.PostProcess(), 0); + system("rm -rf /data/test/resource/packingtool/test_file/ets"); + system("rm -f /data/test/resource/packingtool/test_file/resources.index"); + + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/ohos_test/BUILD.gn b/packing_tool/frameworks/test/unittest/ohos_test/BUILD.gn new file mode 100644 index 00000000..e081c62b --- /dev/null +++ b/packing_tool/frameworks/test/unittest/ohos_test/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_copy("copy_ohos_test") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./ohos_test.xml" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/resource/ohos_test.xml" ] +} diff --git a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml new file mode 100644 index 00000000..8220b5ba --- /dev/null +++ b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn new file mode 100644 index 00000000..4613771d --- /dev/null +++ b/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} +module_output_path = "developtools/packing_tool" + +ohos_unittest("packager_test") { + module_out_path = module_output_path + public_configs = [ ":packager_test_config" ] + sources = [ + "../../../src/hap_packager.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/utils.cpp", + "../../../src/zip_wrapper.cpp", + "packager_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":packager_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/packager_test/packager_test.cpp b/packing_tool/frameworks/test/unittest/packager_test/packager_test.cpp new file mode 100644 index 00000000..db82aab4 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/packager_test/packager_test.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "constants.h" +#define private public +#define protected public +#include "hap_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test/entry-default-unsigned.hap" +#define SUFFIX ".hap" +#define DIR_PATH "/data/test" + +class PackagerTest : public testing::Test { +public: + PackagerTest() {} + virtual ~PackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PackagerTest::SetUpTestCase() {} + +void PackagerTest::TearDownTestCase() {} + +void PackagerTest::SetUp() {} + +void PackagerTest::TearDown() {} + +/* + * @tc.name: CheckForceFlag_0100 + * @tc.desc: CheckForceFlag. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackagerTest, CheckForceFlag_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + }; + + OHOS::AppPackingTool::HapPackager packager(parameterMap, resultReceiver); + EXPECT_TRUE(packager.CheckForceFlag()); +} + +/* + * @tc.name: IsPathValid_0200 + * @tc.desc: IsPathValid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackagerTest, IsPathValid_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = {}; + + OHOS::AppPackingTool::HapPackager packager(parameterMap, resultReceiver); + system("touch /data/test/entry-default-unsigned.hap"); + EXPECT_TRUE(packager.IsPathValid(OUT_PATH, true, SUFFIX)); + system("rm -f /data/test/entry-default-unsigned.hap"); +} + +/* + * @tc.name: SplitDirList_0300 + * @tc.desc: SplitDirList. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackagerTest, SplitDirList_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = {}; + + OHOS::AppPackingTool::HapPackager packager(parameterMap, resultReceiver); + const std::string dirList; + std::list fileList; + EXPECT_TRUE(packager.SplitDirList(dirList, fileList)); +} + +/* + * @tc.name: CompatibleProcess_0400 + * @tc.desc: CompatibleProcess. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackagerTest, CompatibleProcess_0400, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = {}; + + OHOS::AppPackingTool::HapPackager packager(parameterMap, resultReceiver); + const std::string inPutPath; + std::list fileList; + const std::string suffix; + EXPECT_TRUE(packager.CompatibleProcess(inPutPath, fileList, suffix)); +} + +/* + * @tc.name: IsOutPathValid_0500 + * @tc.desc: IsOutPathValid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackagerTest, IsOutPathValid_0500, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = {}; + + OHOS::AppPackingTool::HapPackager packager(parameterMap, resultReceiver); + EXPECT_TRUE(packager.IsOutPathValid(OUT_PATH, "true", SUFFIX)); +} +} // namespace OHOS \ No newline at end of file -- Gitee From 7242c427167bbc00296b8d8d3c6827c16d40a350 Mon Sep 17 00:00:00 2001 From: 18710539902 Date: Sat, 24 Aug 2024 10:44:20 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0app=E5=92=8C=E5=A4=9A?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E6=89=93=E5=8C=85tdd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 18710539902 Change-Id: I94d0d3a19dc7efb29ca893078dcbe3fa46b3d194 --- .../test/unittest/app_packager_test/BUILD.gn | 77 ++++++++ .../appPackagerHapTest/AppScope/app.json | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../appPackagerHapTest/BUILD.gn | 41 ++++ .../src/main/ets/entryability/EntryAbility.ts | 56 ++++++ .../entry/src/main/ets/pages/Index.ets | 32 ++++ .../entry/src/main/module.json | 37 ++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 ++ .../main/resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../appPackagerHspTest/AppScope/app.json | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../appPackagerHspTest/BUILD.gn | 41 ++++ .../entry/src/main/ets/Index.ets | 16 ++ .../entry/src/main/ets/pages/Index.ets | 32 ++++ .../entry/src/main/ets/utils/Calc.ts | 18 ++ .../entry/src/main/module.json | 13 ++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 8 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../main/resources/base/media/setting.jpeg | Bin 0 -> 11320 bytes .../resources/base/profile/main_pages.json | 5 + .../com.test.apppackagertest.csr | 24 +++ .../com.test.apppackagertest.p7b | Bin 0 -> 3432 bytes .../app_packager_file/pack.info | 179 ++++++++++++++++++ .../app_packager_file/pack.res | 16 ++ .../app_packager_test/app_packager_test.cpp | 95 ++++++++++ .../unittest/multiapp_packager_test/BUILD.gn | 70 +++++++ .../multiappPackagerHapTest/AppScope/app.json | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../multiappPackagerHapTest/BUILD.gn | 41 ++++ .../src/main/ets/entryability/EntryAbility.ts | 56 ++++++ .../entry/src/main/ets/pages/Index.ets | 32 ++++ .../entry/src/main/module.json | 37 ++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 ++ .../main/resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../multiappPackagerHspTest/AppScope/app.json | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../multiappPackagerHspTest/BUILD.gn | 41 ++++ .../entry/src/main/ets/Index.ets | 16 ++ .../entry/src/main/ets/pages/Index.ets | 32 ++++ .../entry/src/main/ets/utils/Calc.ts | 18 ++ .../entry/src/main/module.json | 13 ++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 8 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../main/resources/base/media/setting.jpeg | Bin 0 -> 11320 bytes .../resources/base/profile/main_pages.json | 5 + .../com.test.apppackagertest.p7b | Bin 0 -> 3432 bytes .../multiapp_packager_test.cpp | 87 +++++++++ .../test/unittest/ohos_test/ohos_test.xml | 64 +++++++ 60 files changed, 1356 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/app.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/ets/entryability/EntryAbility.ts create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/ets/pages/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/module.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/color.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/AppScope/app.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/AppScope/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/AppScope/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/ets/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/ets/pages/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/ets/utils/Calc.ts create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/module.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/resources/base/element/color.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/resources/base/media/setting.jpeg create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHspTest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/com.test.apppackagertest.csr create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/com.test.apppackagertest.p7b create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.info create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.res create mode 100644 packing_tool/frameworks/test/unittest/app_packager_test/app_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/app.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/ets/entryability/EntryAbility.ts create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/ets/pages/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/module.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/color.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/AppScope/app.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/AppScope/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/AppScope/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/ets/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/ets/pages/Index.ets create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/ets/utils/Calc.ts create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/module.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/resources/base/element/color.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/resources/base/element/string.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/resources/base/media/setting.jpeg create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHspTest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiapp_packager_file/com.test.apppackagertest.p7b create mode 100644 packing_tool/frameworks/test/unittest/multiapp_packager_test/multiapp_packager_test.cpp diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn new file mode 100644 index 00000000..4a08b7aa --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn @@ -0,0 +1,77 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("app_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("app_packager_test") { + module_out_path = module_output_path + public_configs = [ ":app_packager_test_config" ] + sources = [ + "../../../src/app_packager.cpp", + "../../../src/json/distro_filter.cpp", + "../../../src/json/hap_verify_info.cpp", + "../../../src/json/hap_verify_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/module_json_utils.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "app_packager_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + "./appPackagerHapTest:appPackagerHapTest", + "./appPackagerHspTest:appPackagerHspTest", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":app_packager_test" ] +} + +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./app_packager_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/app_packager_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/app.json b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/app.json new file mode 100644 index 00000000..5470c22e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/app.json @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..1080233f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MyApplication" + } + ] +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/media/app_icon.png b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground() { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground() { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/ets/pages/Index.ets b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..aa56579e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/module.json b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/module.json new file mode 100644 index 00000000..9b07af70 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/color.json b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..f9459551 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/media/app_icon.png b/packing_tool/frameworks/test/unittest/app_packager_test/appPackagerHapTest/entry/src/main/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 VMrf7b;0tRGjg7sJtQ~$J{eSN&Q7`}i literal 0 HcmV?d00001 diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.info b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.info new file mode 100644 index 00000000..fa287952 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.info @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "summary": { + "app": { + "bundleName": "com.example.myapplication", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "modules": [ + { + "mainAbility": "EntryAbility", + "deviceType": [ + "default", + "tablet" + ], + "abilities": [ + { + "name": "EntryAbility", + "label": "$string:EntryAbility_label" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "apiVersion": { + "compatible": 9, + "releaseType": "Release", + "target": 9 + } + }, + { + "deviceType": [ + "default", + "tablet" + ], + "distro": { + "moduleType": "shared", + "deliveryWithInstall": true, + "moduleName": "library1" + }, + "apiVersion": { + "compatible": 9, + "releaseType": "Release", + "target": 9 + } + }, + { + "mainAbility": "ApplicationAbility", + "deviceType": [ + "default", + "tablet" + ], + "abilities": [ + { + "name": "ApplicationAbility", + "label": "$string:ApplicationAbility_label" + } + ], + "distro": { + "moduleType": "feature", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "application" + }, + "apiVersion": { + "compatible": 9, + "releaseType": "Release", + "target": 9 + } + }, + { + "mainAbility": "Application1Ability", + "deviceType": [ + "default", + "tablet" + ], + "abilities": [ + { + "name": "Application1Ability", + "label": "$string:Application1Ability_label" + } + ], + "distro": { + "moduleType": "feature", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "application1" + }, + "apiVersion": { + "compatible": 9, + "releaseType": "Release", + "target": 9 + } + }, + { + "deviceType": [ + "default", + "tablet" + ], + "distro": { + "moduleType": "shared", + "deliveryWithInstall": true, + "moduleName": "library2" + }, + "apiVersion": { + "compatible": 9, + "releaseType": "Release", + "target": 9 + } + } + ] + }, + "packages": [ + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "entry", + "deliveryWithInstall": true, + "name": "entry-default" + }, + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "shared", + "deliveryWithInstall": true, + "name": "library1-default" + }, + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "feature", + "deliveryWithInstall": true, + "name": "application-entry-default" + }, + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "feature", + "deliveryWithInstall": true, + "name": "application1-entry-default" + }, + { + "deviceType": [ + "default", + "tablet" + ], + "moduleType": "shared", + "deliveryWithInstall": true, + "name": "library2-default" + } + ] +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.res b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.res new file mode 100644 index 00000000..7804ec90 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_file/pack.res @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +test \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_test.cpp b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_test.cpp new file mode 100644 index 00000000..64a272fa --- /dev/null +++ b/packing_tool/frameworks/test/unittest/app_packager_test/app_packager_test.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "packager.h" +#include "app_packager.h" +#include "zip_wrapper.h" +#include "log.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test.app" +#define HAP_PATH "/data/test/resource/packingtool/test_file/hap/appPackagerHapTest.hap" +#define HSP_PATH "/data/test/resource/packingtool/test_file/hsp/appPackagerHspTest.hsp" +#define PACK_INFO_PATH "/data/test/resource/packingtool/test_file/packinfo/pack.info" +#define SIGNATURE_PATH "/data/test/resource/packingtool/test_file/signature/com.test.apppackagertest.csr" +#define CERTIFICATE_PATH "/data/test/resource/packingtool/test_file/certificate/com.test.apppackagertest.p7b" +#define PACK_RES_PATH "/data/test/resource/packingtool/test_file/packres/pack.res" + +class AppPackagerTest : public testing::Test { +public: + AppPackagerTest() {} + virtual ~AppPackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void AppPackagerTest::SetUpTestCase() {} + +void AppPackagerTest::TearDownTestCase() {} + +void AppPackagerTest::SetUp() {} + +void AppPackagerTest::TearDown() {} + +/* + * @tc.name: InitAllowedParam_0100 + * @tc.desc: InitAllowedParam. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AppPackagerTest, InitAllowedParam_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_HAP_PATH, HAP_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_HSP_PATH, HSP_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, PACK_INFO_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_SIGNATURE_PATH, SIGNATURE_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_CERTIFICATE_PATH, CERTIFICATE_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_RES_PATH, PACK_RES_PATH}, + }; + + OHOS::AppPackingTool::AppPackager appPackager(parameterMap, resultReceiver); + EXPECT_EQ(appPackager.InitAllowedParam(), 0); + EXPECT_EQ(appPackager.PreProcess(), 0); + EXPECT_EQ(appPackager.Process(), 0); + EXPECT_EQ(appPackager.PostProcess(), 0); + + + std::string cmd = {"rm -f "}; + cmd += OUT_PATH; + system(cmd.c_str()); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn new file mode 100644 index 00000000..1a465b19 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn @@ -0,0 +1,70 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("multiapp_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("multiapp_packager_test") { + module_out_path = module_output_path + public_configs = [ ":multiapp_packager_test_config" ] + sources = [ + "../../../src/json/distro_filter.cpp", + "../../../src/json/hap_verify_info.cpp", + "../../../src/json/hap_verify_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/module_json_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pack_info_utils.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/multiapp_packager.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "multiapp_packager_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + + deps = [ + "./multiappPackagerHapTest:multiappPackagerHapTest", + "./multiappPackagerHspTest:multiappPackagerHspTest", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":multiapp_packager_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/app.json b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/app.json new file mode 100644 index 00000000..5470c22e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/app.json @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..1080233f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MyApplication" + } + ] +} diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/media/app_icon.png b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground() { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground() { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/ets/pages/Index.ets b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..aa56579e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/module.json b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/module.json new file mode 100644 index 00000000..9b07af70 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/color.json b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/string.json b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..f9459551 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/media/app_icon.png b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiappPackagerHapTest/entry/src/main/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 VMrf7b;0tRGjg7sJtQ~$J{eSN&Q7`}i literal 0 HcmV?d00001 diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiapp_packager_test.cpp b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiapp_packager_test.cpp new file mode 100644 index 00000000..8b687fd8 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/multiapp_packager_test.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "packager.h" +#include "multiapp_packager.h" +#include "zip_wrapper.h" +#include "log.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test_1.app" +#define HAP_LIST "/data/test/resource/packingtool/test_file/multiApp/hap/multiappPackagerHapTest.hap" +#define HSP_LIST "/data/test/resource/packingtool/test_file/multiApp/hsp/multiappPackagerHspTest.hsp" + + +class MultiAppPackagerTest : public testing::Test { +public: + MultiAppPackagerTest() {} + virtual ~MultiAppPackagerTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void MultiAppPackagerTest::SetUpTestCase() +{} + +void MultiAppPackagerTest::TearDownTestCase() +{} + +void MultiAppPackagerTest::SetUp() +{} + +void MultiAppPackagerTest::TearDown() +{} + +/* + * @tc.name: MultiAppPackager_0100 + * @tc.desc: InitAllowedParam. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(MultiAppPackagerTest, MultiAppPackager_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_HAP_LIST, HAP_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_HSP_LIST, HSP_LIST}, + }; + + OHOS::AppPackingTool::MultiAppPackager multiAppPackager(parameterMap, resultReceiver); + EXPECT_EQ(multiAppPackager.InitAllowedParam(), 0); + EXPECT_EQ(multiAppPackager.PreProcess(), 0); + EXPECT_EQ(multiAppPackager.Process(), 0); + EXPECT_EQ(multiAppPackager.PostProcess(), 0); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml index 8220b5ba..76c5ce65 100644 --- a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml +++ b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml @@ -14,6 +14,38 @@ * limitations under the License. --> + + + + + + + + + + + + + + + + \ No newline at end of file -- Gitee From 54700976d2d71e6495dd161413e578662a57f1a4 Mon Sep 17 00:00:00 2001 From: 18710539902 Date: Mon, 26 Aug 2024 10:56:03 +0800 Subject: [PATCH 03/10] =?UTF-8?q?app=E5=A4=9A=E5=B7=A5=E7=A8=8B=E6=89=93?= =?UTF-8?q?=E5=8C=85tdd=E6=B7=BB=E5=8A=A0=E7=BC=96=E8=AF=91=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 18710539902 Change-Id: I6a75f2fed889e34576cf27845b2d97f9c4c8d190 -- Gitee From e024d9f39481012df6151cc74b4e1134f5a42a5f Mon Sep 17 00:00:00 2001 From: sunxuhui7 Date: Mon, 26 Aug 2024 21:45:56 +0800 Subject: [PATCH 04/10] add TDD Signed-off-by: sunxuhui7 Change-Id: I0490de85e2c7e8afc17fa1f59fcd3e3aa3c17e32 --- OAT.xml | 1 + packing_tool/frameworks/BUILD.gn | 10 + .../unittest/appqf_packager_test/BUILD.gn | 73 ++++++ .../appqf_packager_test.cpp | 167 +++++++++++++ .../test/unittest/hqf_packager_test/BUILD.gn | 71 ++++++ .../hqfFileExample1/ets/sourceMaps.map | 22 ++ .../hqfFileExample1/patch.json | 18 ++ .../resources/base/media/aa_icon.png | Bin 0 -> 6790 bytes .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 1 + .../hqfFileExample2/ets/sourceMaps.map | 22 ++ .../hqfFileExample2/patch.json | 18 ++ .../resources/base/media/aa_icon.png | Bin 0 -> 6790 bytes .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 1 + .../hqf_packager_test/hqf_packager_test.cpp | 185 ++++++++++++++ .../test/unittest/ohos_test/ohos_test.xml | 133 ++++++++++ .../unittest/package_normalize_test/BUILD.gn | 73 ++++++ .../package_normalize_file/module.json | 27 ++ .../package_normalize_file/pack.json | 1 + .../resources/base/profile/main_pages.json | 5 + .../package_normalize_test.cpp | 193 +++++++++++++++ .../unittest/version_normalize_test/BUILD.gn | 75 ++++++ .../default/js/MainAbility/app.js | 37 +++ .../default/js/MainAbility/app.js.map | 1 + .../default/js/MainAbility/manifest.json | 1 + .../default/js/MainAbility/pages/index.js | 88 +++++++ .../default/js/MainAbility/pages/index.js.map | 1 + .../version_normalize_file/fa/config.json | 96 ++++++++ .../version_normalize_file/fa/pack.json | 1 + .../stage/ets/sourceMaps.map | 20 ++ .../version_normalize_file/stage/module.json | 50 ++++ .../version_normalize_file/stage/pack.json | 1 + .../resources/base/profile/main_pages.json | 5 + .../version_normalize_test.cpp | 231 ++++++++++++++++++ 36 files changed, 1628 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/appqf_packager_test/appqf_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/ets/sourceMaps.map create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/patch.json create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/resources/base/media/aa_icon.png create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/ets/sourceMaps.map create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/patch.json create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/resources/base/media/aa_icon.png create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/resources/base/media/app_icon.png create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/resources/base/media/icon.png create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample2/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/module.json create mode 100644 packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/pack.json create mode 100644 packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js.map create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/manifest.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/config.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/pack.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/ets/sourceMaps.map create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/module.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/pack.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/resources/base/profile/main_pages.json create mode 100644 packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_test.cpp diff --git a/OAT.xml b/OAT.xml index 447da4d3..f9803d17 100644 --- a/OAT.xml +++ b/OAT.xml @@ -66,6 +66,7 @@ Note:If the text contains special characters, please escape them according to th + diff --git a/packing_tool/frameworks/BUILD.gn b/packing_tool/frameworks/BUILD.gn index 0c027908..4f80c020 100644 --- a/packing_tool/frameworks/BUILD.gn +++ b/packing_tool/frameworks/BUILD.gn @@ -82,3 +82,13 @@ ohos_executable("ohos_packing_tool") { subsystem_name = "developtools" part_name = "packing_tool" } + +group("unittest") { + testonly = true + deps = [ + "test/unittest/appqf_packager_test:appqf_packager_test", + "test/unittest/hqf_packager_test:hqf_packager_test", + "test/unittest/package_normalize_test:package_normalize_test", + "test/unittest/version_normalize_test:version_normalize_test", + ] +} diff --git a/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn new file mode 100644 index 00000000..75508af2 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn @@ -0,0 +1,73 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("appqf_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("appqf_packager_test") { + module_out_path = module_output_path + public_configs = [ ":appqf_packager_test_config" ] + sources = [ + "../../../src/appqf_packager.cpp", + "../../../src/hqf_packager.cpp", + "../../../src/hqf_verify.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/normalize_version_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/patch_json.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "appqf_packager_test.cpp", + ] + + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + ] +} + +group("unittest") { + testonly = true + deps = [ ":appqf_packager_test" ] +} +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "../hqf_packager_test/hqf_packager_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/appqf_packager_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/appqf_packager_test/appqf_packager_test.cpp b/packing_tool/frameworks/test/unittest/appqf_packager_test/appqf_packager_test.cpp new file mode 100644 index 00000000..ac8afa35 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/appqf_packager_test/appqf_packager_test.cpp @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "hqf_packager.h" +#include "appqf_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define FILE_PATH "/data/utils_Test" +#define HQF_ETS_PATH_ONE "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample1/ets" +#define HQF_ETS_PATH_TWO "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample2/ets" +#define HQF_LIST "/data/test/testPack/testHqfPack1.hqf,/data/test/testPack/testHqfPack2.hqf" +#define HQF_JSON_PATH_ONE "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample1/patch.json" +#define HQF_JSON_PATH_TWO "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample2/patch.json" +#define HQF_OUT_PATH_ONE "/data/test/testPack/testHqfPack1.hqf" +#define HQF_OUT_PATH_TWO "/data/test/testPack/testHqfPack2.hqf" +#define HQF_RESOURCES_PATH_ONE "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample2/resources" +#define HQF_RESOURCES_PATH_TWO "/data/test/resource/packingtool/test_file/appqf_packager_file/hqfFileExample2/resources" +#define OUT_PATH "/data/test/testAppQFPack/testappqfPack.appqf" +#define TEMP_PATH "/data" +class AppqfPackagetTest : public testing::Test { +public: + AppqfPackagetTest() {} + virtual ~AppqfPackagetTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void AppqfPackagetTest::SetUpTestCase() +{ + std::string resultReceiver; + std::map parameterMap1 = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, HQF_ETS_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, HQF_RESOURCES_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, HQF_OUT_PATH_ONE}, + }; + + std::map parameterMap2 = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_TWO}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, HQF_ETS_PATH_TWO}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, HQF_RESOURCES_PATH_TWO}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, HQF_OUT_PATH_TWO}, + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager1(parameterMap1, resultReceiver); + EXPECT_EQ(hqfPackager1.PreProcess(), 0); + EXPECT_EQ(hqfPackager1.Process(), 0); + OHOS::AppPackingTool::HqfPackager hqfPackager2(parameterMap2, resultReceiver); + EXPECT_EQ(hqfPackager2.PreProcess(), 0); + EXPECT_EQ(hqfPackager2.Process(), 0); +} + +void AppqfPackagetTest::TearDownTestCase() {} + +void AppqfPackagetTest::SetUp() {} + +void AppqfPackagetTest::TearDown() {} + +/* + * @tc.name: AppqfPackage_0100 + * @tc.desc: AppqfPackage + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AppqfPackagetTest, AppqfPackage_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap1 = { + {OHOS::AppPackingTool::Constants::PARAM_HQF_LIST, HQF_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::APPQFPackager appQFPackager(parameterMap1, resultReceiver); + EXPECT_EQ(appQFPackager.PreProcess(), 0); + EXPECT_EQ(appQFPackager.Process(), 0); + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: PreProcess_0100 + * @tc.desc: Output file not end with .apphqf. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AppqfPackagetTest, PreProcess_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap1 = { + {OHOS::AppPackingTool::Constants::PARAM_HQF_LIST, HQF_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, "/data/test/testPack/testAppQFPack"} + }; + OHOS::AppPackingTool::APPQFPackager appQFPackager(parameterMap1, resultReceiver); + EXPECT_EQ(appQFPackager.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0200 + * @tc.desc: Input hqf list is empty. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AppqfPackagetTest, PreProcess_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap1 = { + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + OHOS::AppPackingTool::APPQFPackager appQFPackager(parameterMap1, resultReceiver); + EXPECT_EQ(appQFPackager.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0300 + * @tc.desc: Input hqf list is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AppqfPackagetTest, PreProcess_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap1 = { + {OHOS::AppPackingTool::Constants::PARAM_HQF_LIST, "/data/test/testPack/testHqfPackerr.hqf"}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::APPQFPackager appQFPackager(parameterMap1, resultReceiver); + EXPECT_EQ(appQFPackager.PreProcess(), 1); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn new file mode 100644 index 00000000..7eb4d2b4 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn @@ -0,0 +1,71 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("hqf_packager_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("hqf_packager_test") { + module_out_path = module_output_path + public_configs = [ ":hqf_packager_test_config" ] + sources = [ + "../../../src/hqf_packager.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/normalize_version_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "hqf_packager_test.cpp", + ] + + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":hqf_packager_test" ] +} +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./hqf_packager_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/hqf_packager_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/ets/sourceMaps.map b/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/ets/sourceMaps.map new file mode 100644 index 00000000..c8256e69 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/ets/sourceMaps.map @@ -0,0 +1,22 @@ +{ + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/entryability/EntryAbility.ts": { + "version": 3, + "file": "EntryAbility.ets", + "sourceRoot": "", + "sources": [ + "entry/src/main/ets/entryability/EntryAbility.ets" + ], + "names": [], + "mappings": ";;;;;AAIA,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAS;IACjD,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,GAAG,IAAI;QAClE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,SAAS,IAAI,IAAI;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnE,CAAC;IAED,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI;QACxD,yDAAyD;QACzD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,6BAA6B,CAAC,CAAC;QAE3E,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,IAAI,GAAG,CAAC,IAAI,EAAE;gBACZ,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,+CAA+C,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3G,OAAO;aACR;YACD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,oDAAoD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,IAAI,IAAI;QAC1B,yDAAyD;QACzD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,8BAA8B,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY,IAAI,IAAI;QAClB,oCAAoC;QACpC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;IACtE,CAAC;IAED,YAAY,IAAI,IAAI;QAClB,iCAAiC;QACjC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;IACtE,CAAC;CACF" + }, + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/pages/Index.ts": { + "version": 3, + "file": "Index.ets", + "sourceRoot": "", + "sources": [ + "entry/src/main/ets/pages/Index.ets" + ], + "names": [], + "mappings": ";;;;IAGS,OAAO,GAAE,MAAM;;MADjB,KAAK;IAFZ;;;;;sDAG2B,WAAW;;;KAHtC;;;;;;;;;;;;;;;;IAGE,4CAAgB,MAAM,EAAe;QAA9B,OAAO;;;QAAP,OAAO,WAAE,MAAM;;;IAEtB;;YACE,GAAG;YAAH,GAAG,CAQF,MAAM,CAAC,MAAM;;;YAPZ,MAAM;YAAN,MAAM,CAKL,KAAK,CAAC,MAAM;;;YAJX,IAAI,QAAC,IAAI,CAAC,OAAO;YAAjB,IAAI,CACD,QAAQ,CAAC,EAAE;YADd,IAAI,CAED,UAAU,CAAC,UAAU,CAAC,IAAI;;QAF7B,IAAI;QADN,MAAM;QADR,GAAG;KASJ" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/patch.json b/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/patch.json new file mode 100644 index 00000000..5e2ac2b1 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/patch.json @@ -0,0 +1,18 @@ +{ + "app": { + "bundleName": "com.example.testquickfix", + "versionCode": 1000000, + "versionName": "1.0.0.1", + "patchVersionCode": 1000000, + "patchVersionName": "1.0.0.1" + }, + "module": { + "name": "entry1", + "type": "patch", + "deviceTypes": [ + "default1", + "tablet1" + ], + "originalModuleHash": "c97441c96c84b2ffcb7c85570fb60a0be114ca1f438f8af51b33004081ddb782" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/resources/base/media/aa_icon.png b/packing_tool/frameworks/test/unittest/hqf_packager_test/hqf_packager_file/hqfFileExample1/resources/base/media/aa_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y + +#include +#include "constants.h" +#define private public +#define protected public +#include "hqf_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define FILE_PATH "/data/utils_Test" +#define TEMP_PATH "/data" +#define HQF_ETS_PATH_ONE "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/ets" +#define HQF_JSON_PATH_ONE "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/patch.json" +#define HQF_RESOURCES_PATH_ONE "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/resources" +#define OUT_PATH "/data/test/testPack/testHqfPack.hqf" +class HqfPackagetTest : public testing::Test { +public: + HqfPackagetTest() {} + virtual ~HqfPackagetTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void HqfPackagetTest::SetUpTestCase() {} + +void HqfPackagetTest::TearDownTestCase() {} + +void HqfPackagetTest::SetUp() {} + +void HqfPackagetTest::TearDown() {} + +/* + * @tc.name: HqfPackage_0100 + * @tc.desc: HqfPackage + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HqfPackagetTest, HqfPackage_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, HQF_ETS_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, HQF_RESOURCES_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 0); + EXPECT_EQ(hqfPackager.Process(), 0); + std::string cmd = {"rm -f "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: PreProcess_0100 + * @tc.desc: PreProcess_0100. + * @tc.type: FUNC + * @tc.require: out file not end with .hqf. + */ +HWTEST_F(HqfPackagetTest, PreProcess_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, HQF_ETS_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, HQF_RESOURCES_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, "/data/test/testPack/testHqfPack/testHqfPack.hqfx"} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0200 + * @tc.desc: param json path is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HqfPackagetTest, PreProcess_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, + "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/patcherr.json"}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "false"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0400 + * @tc.desc: libs path is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HqfPackagetTest, PreProcess_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_LIB_PATH, + "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/errlibs"}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "false"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 1); +} +/* + * @tc.name: PreProcess_0500 + * @tc.desc: ets path is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HqfPackagetTest, PreProcess_0400, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, + "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/errets"}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "false"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 1); +} +/* + * @tc.name: PreProcess_0600 + * @tc.desc: resources path is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HqfPackagetTest, PreProcess_0500, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HQF_JSON_PATH_ONE}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, + "/data/test/resource/packingtool/test_file/hqf_packager_file/hqfFileExample1/errresources"}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "false"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + + OHOS::AppPackingTool::HqfPackager hqfPackager(parameterMap, resultReceiver); + EXPECT_EQ(hqfPackager.PreProcess(), 1); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml index 76c5ce65..ea269697 100644 --- a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml +++ b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml @@ -146,5 +146,138 @@ value="../test_file/test_bundle_multiapp/multiappPackagerHspTest.hsp-> /data/test/resource/packingtool/test_file/multiApp/hsp/" src="res" /> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn b/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn new file mode 100644 index 00000000..7742231a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn @@ -0,0 +1,73 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("packager_normalize_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("package_normalize_test") { + module_out_path = module_output_path + public_configs = [ ":packager_normalize_test_config" ] + sources = [ + "../../../src/hsp_packager.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/normalize_version_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/package_normalize.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "package_normalize_test.cpp", + ] + + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + ] +} + +group("unittest") { + testonly = true + deps = [ ":package_normalize_test" ] +} +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./package_normalize_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/package_normalize_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/module.json b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/module.json new file mode 100644 index 00000000..453852dc --- /dev/null +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/module.json @@ -0,0 +1,27 @@ +{ + "app": { + "bundleName": "com.example.packingtooldemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "targetAPIVersion": 12, + "minAPIVersion": 12, + "apiReleaseType": "Canary2", + "iconId": 33554433, + "labelId": 33554432 + }, + "module": { + "name": "library", + "type": "shared", + "description": "$string:shared_desc", + "deviceTypes": ["default", "tablet"], + "deliveryWithInstall": true, + "pages": "$profile:main_pages", + "virtualMachine": "ark12.0.1.0", + "compileMode": "esmodule", + "dependencies": [], + "descriptionId": 33554434 + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/pack.json b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/pack.json new file mode 100644 index 00000000..e8a818ea --- /dev/null +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtooldemo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"deviceType":["default","tablet"],"distro":{"moduleType":"shared","deliveryWithInstall":true,"moduleName":"library"},"apiVersion":{"compatible":12,"releaseType":"Canary2","target":12}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"shared","deliveryWithInstall":true,"name":"library-default"}]} diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/resources/base/profile/main_pages.json b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_file/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_test.cpp b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_test.cpp new file mode 100644 index 00000000..aa944373 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/package_normalize_test.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "package_normalize.h" +#include "hsp_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define BUNDLE_NAME "dd.dd.dd" +#define HSP_LIST "/data/test/hsp_example" +#define OUT_PATH "/data/test/packagenormalize_packing" +#define VERSION_CODE "1000098" +#define HSP_OUT_PATH "/data/test/hsp_example/library-default-unsigned.hsp" +#define HSP_INDEX_PATH "/data/test/resource/packingtool/test_file/resources.index" +#define HSP_PACK_INFO_PATH "/data/test/resource/packingtool/test_file/pack.info" +#define HSP_ETS_PATH "/data/test/resource/packingtool/test_file/ets" +#define HSP_RESOURCES_PATH "/data/test/resource/packingtool/test_file/resources" +#define HSP_JSON_PATH "/data/test/resource/packingtool/test_file/module.json" +class PackageNormalizeTest : public testing::Test { +public: + PackageNormalizeTest() {} + virtual ~PackageNormalizeTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PackageNormalizeTest::SetUpTestCase() +{ + std::string resultReceiver; + system("mkdir /data/test/hsp_example"); + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, HSP_OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, HSP_JSON_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, HSP_ETS_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, HSP_RESOURCES_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_INDEX_PATH, HSP_INDEX_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, HSP_PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::HspPackager hspPackager(parameterMap, resultReceiver); + system("mkdir /data/test/resource/packingtool/test_file/ets"); + system("mv /data/test/resource/packingtool/test_file/pack.json " + "/data/test/resource/packingtool/test_file/pack.info"); + EXPECT_EQ(hspPackager.InitAllowedParam(), 0); + EXPECT_EQ(hspPackager.PreProcess(), 0); + EXPECT_EQ(hspPackager.Process(), 0); + EXPECT_EQ(hspPackager.PostProcess(), 0); +} + +void PackageNormalizeTest::TearDownTestCase() +{ + std::string cmd = {"rm -f /data/test/packagenormalize_packing/*"}; + system(cmd.c_str()); +} + +void PackageNormalizeTest::SetUp() {} + +void PackageNormalizeTest::TearDown() {} + +/* + * @tc.name: PackageNormalize_0100 + * @tc.desc: PackageNormalize. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackageNormalizeTest, PackageNormalize_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_HSP_LIST, HSP_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_BUNDLE_NAME, BUNDLE_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH} + }; + OHOS::AppPackingTool::PackageNormalize packageNormalize(parameterMap, resultReceiver); + EXPECT_EQ(packageNormalize.PreProcess(), 0); + EXPECT_EQ(packageNormalize.Process(), 0); + std::string cmd = {"rm -rf "}; + cmd +=OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: PreProcess_0100 + * @tc.desc: hsp-list is empty. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackageNormalizeTest, PreProcess_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_BUNDLE_NAME, BUNDLE_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::PackageNormalize packageNormalize(parameterMap, resultReceiver); + EXPECT_EQ(packageNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0200 + * @tc.desc: hsp-list is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackageNormalizeTest, PreProcess_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_HSP_LIST, + "/data/test/pnerr.hsp."}, + {OHOS::AppPackingTool::Constants::PARAM_BUNDLE_NAME, BUNDLE_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::PackageNormalize packageNormalize(parameterMap, resultReceiver); + EXPECT_EQ(packageNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0300 + * @tc.desc: bundle-name is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackageNormalizeTest, PreProcess_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_HSP_LIST, HSP_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_BUNDLE_NAME, "123456"}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::PackageNormalize packageNormalize(parameterMap, resultReceiver); + EXPECT_EQ(packageNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0400 + * @tc.desc: version-code is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackageNormalizeTest, PreProcess_0400, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_HSP_LIST, + "/data/test/package_normalize_test"}, + {OHOS::AppPackingTool::Constants::PARAM_BUNDLE_NAME, BUNDLE_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, "-12345"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::PackageNormalize packageNormalize(parameterMap, resultReceiver); + EXPECT_EQ(packageNormalize.PreProcess(), 1); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/BUILD.gn b/packing_tool/frameworks/test/unittest/version_normalize_test/BUILD.gn new file mode 100644 index 00000000..03ea9739 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/BUILD.gn @@ -0,0 +1,75 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("version_normalize_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("version_normalize_test") { + module_out_path = module_output_path + public_configs = [ ":version_normalize_test_config" ] + sources = [ + "../../../src/hap_packager.cpp", + "../../../src/hsp_packager.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/normalize_version_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/packager.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/version_normalize.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "version_normalize_test.cpp", + ] + + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] + deps = [ + ":copy_test_file", + "../ohos_test:copy_ohos_test", + ] +} + +group("unittest") { + testonly = true + deps = [ ":version_normalize_test" ] +} + +ohos_copy("copy_test_file") { + subsystem_name = "developtools" + part_name = "packing_tool" + sources = [ "./version_normalize_file" ] + outputs = [ "$root_out_dir/tests/unittest/developtools/packing_tool/test_file/version_normalize_file/" ] +} diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js new file mode 100644 index 00000000..6615ccb8 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function () { +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var hilog = globalThis.requireNapi('hilog'); +var app = { + onCreate() { + hilog.info(0x0000, 'testTag', '%{public}s', 'Application onCreate'); + }, + onDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'Application onDestroy'); + }, +}; + +exports.default = app; +globalThis['app.js_8e74c152fb289caceeb880912823241e9d4b2806ecc0022940f4429f6d749b02'] + = globalThis['app.js_8e74c152fb289caceeb880912823241e9d4b2806ecc0022940f4429f6d749b02'] || { + default: app +} +})() +//# sourceMappingURL=app.js.map diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js.map b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js.map new file mode 100644 index 00000000..4166a633 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/app.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.js","sources":["D:/ArkTsProject/packingToolFaDemo/entry/src/main/ets/MainAbility/app.ets"],"sourcesContent":["import hilog from '@ohos.hilog';\n\nexport default {\n onCreate() {\n hilog.info(0x0000, 'testTag', '%{public}s', 'Application onCreate');\n },\n onDestroy() {\n hilog.info(0x0000, 'testTag', '%{public}s', 'Application onDestroy');\n },\n}"],"names":[],"mappings":";;;;;AAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAK,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEhC,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACb,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA;QACN,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACD,SAAS,CAAA,CAAA,CAAA,CAAA,CAAA;QACP,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACtE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACH,CAAA;;"} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/manifest.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/manifest.json new file mode 100644 index 00000000..a4bfd1e2 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/manifest.json @@ -0,0 +1 @@ +{"appID":"com.example.packingtoolfademo","versionName":"1.0.0","versionCode":1000000,"minPlatformVersion":9,"appName":".MainAbility","deviceType":["default","tablet"],"window":{"designWidth":720,"autoDesignWidth":false},"pages":["pages/index"],"mode":{"syntax":"ets","type":"pageAbility"}} diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js new file mode 100644 index 00000000..1ee1ad99 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function () { +'use strict'; + +"use strict"; +class Index extends ViewPU { + constructor(parent, params, __localStorage, elmtId = -1) { + super(parent, __localStorage, elmtId); + this.__message = new ObservedPropertySimplePU('Hello World', this, "message"); + this.setInitiallyProvidedValue(params); + } + setInitiallyProvidedValue(params) { + if (params.message !== undefined) { + this.message = params.message; + } + } + updateStateVars(params) { + } + purgeVariableDependenciesOnElmtId(rmElmtId) { + this.__message.purgeDependencyOnElmtId(rmElmtId); + } + aboutToBeDeleted() { + this.__message.aboutToBeDeleted(); + SubscriberManager.Get().delete(this.id__()); + this.aboutToBeDeletedInternal(); + } + get message() { + return this.__message.get(); + } + set message(newValue) { + this.__message.set(newValue); + } + initialRender() { + this.observeComponentCreation((elmtId, isInitialRender) => { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Row.create(); + Row.height('100%'); + if (!isInitialRender) { + Row.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + this.observeComponentCreation((elmtId, isInitialRender) => { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Column.create(); + Column.width('100%'); + if (!isInitialRender) { + Column.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + this.observeComponentCreation((elmtId, isInitialRender) => { + ViewStackProcessor.StartGetAccessRecordingFor(elmtId); + Text.create(this.message); + Text.fontSize(50); + Text.fontWeight(FontWeight.Bold); + if (!isInitialRender) { + Text.pop(); + } + ViewStackProcessor.StopGetAccessRecording(); + }); + Text.pop(); + Column.pop(); + Row.pop(); + } + rerender() { + this.updateDirtyElements(); + } +} +ViewStackProcessor.StartGetAccessRecordingFor(ViewStackProcessor.AllocateNewElmetIdForNextComponent()); +loadDocument(new Index(undefined, {})); +ViewStackProcessor.StopGetAccessRecording(); +})() +//# sourceMappingURL=index.js.map diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map new file mode 100644 index 00000000..d77a1f9f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/assets_jsbundle/default/js/MainAbility/pages/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["D:/ArkTsProject/packingToolFaDemo/entry/src/main/ets/MainAbility/pages/index.ets"],"sourcesContent":["@Entry\n@Component\nstruct Index {\n @State message: string = 'Hello World'\n\n build() {\n Row() {\n Column() {\n Text(this.message)\n .fontSize(50)\n .fontWeight(FontWeight.Bold)\n }\n .width('100%')\n }\n .height('100%')\n }\n}"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/config.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/config.json new file mode 100644 index 00000000..58e4106a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/config.json @@ -0,0 +1,96 @@ +{ + "app" : + { + "apiVersion" : + { + "compatible" : 9, + "releaseType" : "Release", + "target" : 9 + }, + "bundleName" : "com.example.packingtoolfademo", + "vendor" : "example", + "version" : + { + "code" : 1000000, + "name" : "1.0.0" + } + }, + "deviceConfig" : + { + "default" : + { + "debug" : true + } + }, + "module" : + { + "abilities" : + [ + { + "description" : "$string:MainAbility_desc", + "descriptionId" : 16777216, + "formsEnabled" : false, + "icon" : "$media:icon", + "iconId" : 16777220, + "label" : "$string:MainAbility_label", + "labelId" : 16777217, + "launchType" : "standard", + "name" : ".MainAbility", + "orientation" : "unspecified", + "skills" : + [ + { + "actions" : + [ + "action.system.home" + ], + "entities" : + [ + "entity.system.home" + ] + } + ], + "srcLanguage" : "ets", + "srcPath" : "MainAbility", + "type" : "page", + "visible" : true + } + ], + "deviceType" : + [ + "default", + "tablet" + ], + "distro" : + { + "deliveryWithInstall" : true, + "installationFree" : false, + "moduleName" : "entry", + "moduleType" : "entry", + "virtualMachine" : "ark9.0.0.0" + }, + "js" : + [ + { + "mode" : + { + "syntax" : "ets", + "type" : "pageAbility" + }, + "name" : ".MainAbility", + "pages" : + [ + "pages/index" + ], + "window" : + { + "autoDesignWidth" : false, + "designWidth" : 720 + } + } + ], + "mainAbility" : ".MainAbility", + "name" : ".entry", + "package" : "com.example.packingtoolfademo" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/pack.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/pack.json new file mode 100644 index 00000000..04870b2b --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/fa/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtoolfademo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"mainAbility":".MainAbility","deviceType":["default","tablet"],"abilities":[{"name":".MainAbility","label":"$string:MainAbility_label","visible":true}],"distro":{"deliveryWithInstall":true,"moduleName":"entry","moduleType":"entry","installationFree":false},"apiVersion":{"target":9,"compatible":9,"releaseType":"Release"}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"entry","deliveryWithInstall":true,"name":"entry-default"}]} diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/ets/sourceMaps.map b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/ets/sourceMaps.map new file mode 100644 index 00000000..027a0602 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/ets/sourceMaps.map @@ -0,0 +1,20 @@ +{ + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/entryability/EntryAbility.js": { + "version": 3, + "file": "EntryAbility.ts", + "sources": [ + "entry/src/main/ets/entryability/EntryAbility.ts" + ], + "names": [], + "mappings": "AAAA;AACA;AAGA;;;;;;;AASE;;;;;AAMM;;AAED;AACD;AACF;;;;;;;;;;;;;;AAiBH;" + }, + "entry/build/default/cache/default/default@CompileArkTS/esmodule/debug/entry/src/main/ets/pages/Index.js": { + "version": 3, + "file": "Index.ets", + "sources": [ + "entry/src/main/ets/pages/Index.ets" + ], + "names": [], + "mappings": ";;;;;AAAA;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAKE;;;;;;;;;;;;AAGM;;;;;AAOL;;;;;;;;;" + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/module.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/module.json new file mode 100644 index 00000000..5427967a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/module.json @@ -0,0 +1,50 @@ +{ + "app": { + "bundleName": "com.example.packingtooldemo", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "targetAPIVersion": 12, + "minAPIVersion": 12, + "apiReleaseType": "Canary2", + "debug": true, + "iconId": 16777217, + "labelId": 16777216 + }, + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": ["default", "tablet"], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [{ + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [{ + "entities": ["entity.system.home"], + "actions": ["action.system.home"] + }], + "descriptionId": 16777218, + "iconId": 16777222, + "labelId": 16777219, + "startWindowIconId": 16777222, + "startWindowBackgroundId": 16777221 + }], + "generateBuildHash": true, + "virtualMachine": "ark12.0.1.0", + "compileMode": "esmodule", + "dependencies": [], + "descriptionId": 16777220 + } +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/pack.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/pack.json new file mode 100644 index 00000000..b221fd94 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/pack.json @@ -0,0 +1 @@ +{"summary":{"app":{"bundleName":"com.example.packingtooldemo","version":{"code":1000000,"name":"1.0.0"}},"modules":[{"mainAbility":"EntryAbility","deviceType":["default","tablet"],"abilities":[{"name":"EntryAbility","label":"$string:EntryAbility_label"}],"distro":{"moduleType":"entry","installationFree":false,"deliveryWithInstall":true,"moduleName":"entry"},"apiVersion":{"compatible":12,"releaseType":"Canary2","target":12}}]},"packages":[{"deviceType":["default","tablet"],"moduleType":"entry","deliveryWithInstall":true,"name":"entry-default"}]} diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/resources/base/profile/main_pages.json b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_file/stage/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_test.cpp b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_test.cpp new file mode 100644 index 00000000..9c0d5ade --- /dev/null +++ b/packing_tool/frameworks/test/unittest/version_normalize_test/version_normalize_test.cpp @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "version_normalize.h" +#include "hap_packager.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define HAP_OUT_PATH "/data/test/entry-default-unsigned.hap" +#define INPUT_LIST "/data/test/entry-default-unsigned.hap" +#define VERSION_CODE "9999999" +#define VERSION_NAME "30.11.22" +#define OUT_PATH "/data/test/packagenormalize_packing" +#define STAGE_INDEX_PATH "/data/test/resource/packingtool/test_file/stage/resources.index" +#define STAGE_PACK_INFO_PATH "/data/test/resource/packingtool/test_file/stage/pack.info" +#define STAGE_ETS_PATH "/data/test/resource/packingtool/test_file/stage/ets" +#define STAGE_RESOURCES_PATH "/data/test/resource/packingtool/test_file/stage/resources" +#define STAGE_JSON_PATH "/data/test/resource/packingtool/test_file/stage/module.json" +#define STAGE_RPCID_PATH "/data/test/resource/packingtool/test_file/stage/rpcid.sc" +class VersionNormalizeTest : public testing::Test { +public: + VersionNormalizeTest() {} + virtual ~VersionNormalizeTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void VersionNormalizeTest::SetUpTestCase() +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, HAP_OUT_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_FORCE, "true"}, + {OHOS::AppPackingTool::Constants::PARAM_JSON_PATH, STAGE_JSON_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_ETS_PATH, STAGE_ETS_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH, STAGE_RESOURCES_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_INDEX_PATH, STAGE_INDEX_PATH}, + {OHOS::AppPackingTool::Constants::PARAM_PACK_INFO_PATH, STAGE_PACK_INFO_PATH}, + }; + + OHOS::AppPackingTool::HapPackager hapPackager(parameterMap, resultReceiver); + system("mv /data/test/resource/packingtool/test_file/stage/pack.json " + "/data/test/resource/packingtool/test_file/stage/pack.info"); + system("mkdir /data/test/resource/packingtool/test_file/stage/ets"); + system("touch /data/test/resource/packingtool/test_file/stage/resources.index"); + EXPECT_EQ(hapPackager.InitAllowedParam(), 0); + EXPECT_EQ(hapPackager.PreProcess(), 0); + EXPECT_EQ(hapPackager.Process(), 0); + EXPECT_EQ(hapPackager.PostProcess(), 0); + system("rm -rf /data/test/resource/packingtool/test_file/stage/ets"); + system("rm -f /data/test/resource/packingtool/test_file/stage/resources.index"); +} + +void VersionNormalizeTest::TearDownTestCase() +{ + std::string cmd = {"rm -f /data/test/packagenormalize_packing/*"}; + system(cmd.c_str()); +} + +void VersionNormalizeTest::SetUp() {} + +void VersionNormalizeTest::TearDown() {} + +/* + * @tc.name: VersionNormalize_0100 + * @tc.desc: VersionNormalize_0100. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, VersionNormalize_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, INPUT_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, VERSION_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 0); + EXPECT_EQ(versionNormalize.Process(), 0); +} + +/* + * @tc.name: PreProcess_0100 + * @tc.desc: input-list is empty. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0100, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, VERSION_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0200 + * @tc.desc: input-list is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0200, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, + "/data/test/resource/packingtool/test_file/thumbnailTest2err.hap"}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, VERSION_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} + + +/* + * @tc.name: PreProcess_0300 + * @tc.desc: version-name is empty. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0300, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, INPUT_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0400 + * @tc.desc: version-name is not valid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0400, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, INPUT_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, VERSION_CODE}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, "aabbc"}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} + + +/* + * @tc.name: PreProcess_0500 + * @tc.desc: version-code is empty. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0500, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, INPUT_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, VERSION_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} + +/* + * @tc.name: PreProcess_0600 + * @tc.desc: version-code is invalid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(VersionNormalizeTest, PreProcess_0600, Function | MediumTest | Level1) +{ + std::string resultReceiver; + std::map parameterMap = { + {OHOS::AppPackingTool::Constants::PARAM_INPUT_LIST, INPUT_LIST}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_CODE, "-123456"}, + {OHOS::AppPackingTool::Constants::PARAM_VERSION_NAME, VERSION_NAME}, + {OHOS::AppPackingTool::Constants::PARAM_OUT_PATH, OUT_PATH}, + }; + + OHOS::AppPackingTool::VersionNormalize versionNormalize(parameterMap, resultReceiver); + EXPECT_EQ(versionNormalize.PreProcess(), 1); +} +} // namespace OHOS \ No newline at end of file -- Gitee From c36b85e54265b5c6730e4ac2958603123f2ee61b Mon Sep 17 00:00:00 2001 From: sunxuhui7 Date: Tue, 27 Aug 2024 09:24:09 +0800 Subject: [PATCH 05/10] code check Signed-off-by: sunxuhui7 Change-Id: I780589ae7378c85b28dfb83931b7366e95982101 --- OAT.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/OAT.xml b/OAT.xml index f9803d17..447da4d3 100644 --- a/OAT.xml +++ b/OAT.xml @@ -66,7 +66,6 @@ Note:If the text contains special characters, please escape them according to th - -- Gitee From 6ddc9311135bdad2f8622eb45e9de1b222b6b543 Mon Sep 17 00:00:00 2001 From: sunxuhui Date: Mon, 26 Aug 2024 10:29:24 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0module=20json=20tdd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: sunxuhui Change-Id: Ib441901e2a7505fd1eadded892ad3a61bfe2b9f9 --- packing_tool/frameworks/BUILD.gn | 8 + .../unittest/json/module_json_test/BUILD.gn | 50 + .../module_json_test/module_json_test.cpp | 1638 +++++++++++++++++ 3 files changed, 1696 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/module_json_test/module_json_test.cpp diff --git a/packing_tool/frameworks/BUILD.gn b/packing_tool/frameworks/BUILD.gn index 4f80c020..caa67c63 100644 --- a/packing_tool/frameworks/BUILD.gn +++ b/packing_tool/frameworks/BUILD.gn @@ -86,9 +86,17 @@ ohos_executable("ohos_packing_tool") { group("unittest") { testonly = true deps = [ + "test/unittest/app_packager_test:app_packager_test", "test/unittest/appqf_packager_test:appqf_packager_test", + "test/unittest/fastapp_packager_test:fastapp_packager_test", + "test/unittest/hap_packager_test:hap_packager_test", "test/unittest/hqf_packager_test:hqf_packager_test", + "test/unittest/hsp_packager_test:hsp_packager_test", + "test/unittest/json/module_json_test:module_json_test", + "test/unittest/multiapp_packager_test:multiapp_packager_test", + "test/unittest/ohos_test:copy_ohos_test", "test/unittest/package_normalize_test:package_normalize_test", + "test/unittest/packager_test:packager_test", "test/unittest/version_normalize_test:version_normalize_test", ] } diff --git a/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn new file mode 100644 index 00000000..4514bd43 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("module_json_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("module_json_test") { + module_out_path = module_output_path + public_configs = [ ":module_json_test_config" ] + sources = [ + "../../../../src/json/distro_filter.cpp", + "../../../../src/json/hap_verify_info.cpp", + "../../../../src/json/module_json.cpp", + "../../../../src/json/module_json_fa.cpp", + "../../../../src/json/module_json_stage.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "module_json_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/module_json_test/module_json_test.cpp b/packing_tool/frameworks/test/unittest/json/module_json_test/module_json_test.cpp new file mode 100644 index 00000000..a83cdcd1 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/module_json_test/module_json_test.cpp @@ -0,0 +1,1638 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#define private public +#define protected public +#include "module_json.h" +#include "pt_json.h" +#include "log.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; +using namespace std; +using namespace OHOS::AppPackingTool; + +namespace OHOS { + +string jsonString = "{" + "\"app\": {" + "\"bundleName\": \"test_bundle_name\"," + "\"bundleType\": \"atomicService\"," + "\"vendor\": \"\"," + "\"versionCode\": 1000000," + "\"versionName\": \"test_version_name\"," + "\"icon\": \"media:app_icon\"," + "\"label\": \"string:app_name\"," + "\"apiReleaseType\": \"Canary\"," + "\"compileSdkVersion\": \"test_compileSdkVersion\"," + "\"targetAPIVersion\": 10," + "\"minAPIVersion\": 10," + "\"compileSdkType\": \"OpenHarmony\"," + "\"debug\": true," + "\"iconId\": 16777217," + "\"labelId\": 16777216," + "\"version\": {" + "\"code\": 666," + "\"name\": \"test_version\"," + "\"minCompatibleVersionCode\": 555" + "}," + "\"apiVersion\": {" + "\"compileSdkType\": \"OpenHarmony\"," + "\"compileSdkVersion\": \"test_apiVersion_compileSdkVersion\"," + "\"releaseType\": \"test_apiVersion_release\"," + "\"compatible\": 7," + "\"target\": 10" + "}," + "\"targetBundleName\": \"test_app_targetBundleName\"," + "\"multiAppMode\": {" + "\"multiAppModeType\": \"test_multiAppMode\"," + "\"maxCount\": 9" + "}," + "\"generateBuildHash\": true," + "\"minCompatibleVersionCode\": 99," + "\"asanEnabled\": true," + "\"tsanEnabled\": false," + "\"compressNativeLibs\": true," + "\"targetPriority\": 5" + "}," + "\"module\": {" + "\"name\": \"entry\"," + "\"type\": \"entry\"," + "\"description\": \"string:module_desc\"," + "\"mainElement\": \"EntryAbility\"," + "\"deviceTypes\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"deliveryWithInstall\": true," + "\"installationFree\": true," + "\"pages\": \"profile:main_pages\"," + "\"abilities\": [" + "{" + "\"name\": \"EntryAbility\"," + "\"moduleName\": \"test_module_name\"," + "\"srcEntry\": \"./ets/entryability/EntryAbility.ts\"," + "\"description\": \"string:EntryAbility_desc\"," + "\"icon\": \"media:icon\"," + "\"label\": \"string:EntryAbility_label\"," + "\"startWindowIcon\": \"media:icon\"," + "\"startWindowBackground\": \"color:start_window_background\"," + "\"exported\": true," + "\"skills\": [" + "{" + "\"entities\": [\"entity.system.home\"]," + "\"actions\": [\"action.system.home\"]" + "}" + "]," + "\"descriptionId\": 16777218," + "\"iconId\": 16777222," + "\"labelId\": 16777219," + "\"startWindowIconId\": 16777222," + "\"startWindowBackgroundId\": 16777221," + "\"continueType\":[]" + "}" + "]," + "\"virtualMachine\": \"test_virtualMachine\"," + "\"compileMode\": \"esmodule\"," + "\"dependencies\": [" + "{" + "\"bundleName\": \"test_modules_dependency_1\"," + "\"moduleName\": \"entry_1\"" + "}," + "{" + "\"bundleName\": \"test_modules_dependency_2\"," + "\"moduleName\": \"entry_1\"" + "}" + "]," + "\"descriptionId\": 16777220," + "\"distro\": {" + "\"installationFree\": false," + "\"moduleType\": \"entry\"," + "\"moduleName\": \"test_module_name\"" + "}," + "\"preloads\": [" + "{" + "\"name\": \"test_name_1\"," + "\"moduleName\": \"test_module_name_1\"" + "}" + "]," + "\"package\": \"test_package\"," + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"targetModuleName\": \"test_module_targetBundleName\"," + "\"targetPriority\": 6," + "\"proxyDatas\": [" + "{" + "\"uri\": \"test_uri1\"" + "}," + "{" + "\"uri\": \"test_uri2\"" + "}" + "]," + "\"atomicService\": {" + "\"preloads\": [" + "{" + "\"atomicServiceObj\": \"test_atomicService\"" + "}" + "]" + + "}," + "\"metadata\": [" + "{" + "\"name\": \"test_metadata\"," + "\"value\": \"test_value\"" + "}" + "]," + "\"extensionAbilities\": [" + "{" + "\"name\": \"test_extension_abilities\"" + "}" + "]" + "}," + "\"deviceConfig\": {" + "\"default\": true" + "}" +"}"; + +string jsonStr = "{" + "\"app\": {" + "\"apiVersion\": {" + + "}" + "}," + "\"module\": {" + "\"requestPermissions\": true," + "\"proxyData\": [" + "{" + "\"uri\": \"test_uri1\"" + "}," + "{" + "\"uri\": \"test_uri2\"" + "}" + "]," + "\"generateBuildHash\": true" + "}" +"}"; + +class ModuleJsonTest : public testing::Test { +public: + ModuleJsonTest() {} + virtual ~ModuleJsonTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void ModuleJsonTest::SetUpTestCase() {} + +void ModuleJsonTest::TearDownTestCase() {} + +void ModuleJsonTest::SetUp() {} + +void ModuleJsonTest::TearDown() {} + + /* + * @tc.name: ParseFromString_0100 + * @tc.desc: test parse from string + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, ParseFromString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); +} + + /* + * @tc.name: ParseFromFile_0100 + * @tc.desc: test parse from file + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, ParseFromFile_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + std::string test("test_module.json"); + FILE *fp = fopen(test.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) + { + fwrite(jsonString.c_str(), jsonString.size(), 1, fp); + fclose(fp); + EXPECT_TRUE(moduleJson.ParseFromFile(test)); + system("rm -f test_module.json"); + } +} + + /* + * @tc.name: ToString + * @tc.desc: test parse from string + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, ToString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string str =moduleJson.ToString(); + EXPECT_TRUE(!str.empty()); +} + + /* + * @tc.name: Release + * @tc.desc: test release + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, Release_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + + moduleJson.Release(); + EXPECT_TRUE(moduleJson.root_ == nullptr); +} + + /* + * @tc.name: IsValid + * @tc.desc: test is valid + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, IsValid_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + + EXPECT_TRUE(moduleJson.IsValid()); +} + + /* + * @tc.name: GetApiVersionObject + * @tc.desc: test get api version object + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetApiVersionObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + std::unique_ptr apiVersion; + EXPECT_TRUE(moduleJson.GetApiVersionObject(apiVersion)); + EXPECT_NE(apiVersion, nullptr); +} + + /* + * @tc.name: GetVersionObject + * @tc.desc: test get version object + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetVersionObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + std::unique_ptr versionObj; + EXPECT_TRUE(moduleJson.GetVersionObject(versionObj)); + EXPECT_NE(versionObj, nullptr); +} + + /* + * @tc.name: GetFaHapVerifyInfo + * @tc.desc: test get fa hap verify info + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaHapVerifyInfo_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + HapVerifyInfo hapVerifyInfo; + EXPECT_TRUE(moduleJson.GetFaHapVerifyInfo(hapVerifyInfo)); +} + + /* + * @tc.name: GetFaBundleType + * @tc.desc: test get fa bundle type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaBundleType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string bundleType = ""; + EXPECT_TRUE(moduleJson.GetFaBundleType(bundleType)); + EXPECT_STREQ(bundleType.c_str(), "app"); +} + + /* + * @tc.name: GetDistroObject + * @tc.desc: test get distro object + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetDistroObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + unique_ptr distroObj; + EXPECT_TRUE(moduleJson.GetDistroObject(distroObj)); + EXPECT_NE(distroObj, nullptr); +} + + /* + * @tc.name: GetFaInstallationFree + * @tc.desc: test get fa installation free + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaInstallationFree_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool installationFree = true; + EXPECT_TRUE(moduleJson.GetFaInstallationFree(installationFree)); + EXPECT_EQ(installationFree, false); +} + + /* + * @tc.name: GetStageVersion + * @tc.desc: test get normalize version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + Version version; + EXPECT_TRUE(moduleJson.GetStageVersion(version)); + EXPECT_EQ(version.versionCode, 1000000); + EXPECT_STREQ(version.versionName.c_str(), "test_version_name"); + EXPECT_EQ(version.minCompatibleVersionCode, 99); +} + + /* + * @tc.name: SetStageVersionCode + * @tc.desc: test set stage version code + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetStageVersionCode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int versionCode = 99; + EXPECT_TRUE(moduleJson.SetStageVersionCode(versionCode)); + Version version; + EXPECT_TRUE(moduleJson.GetStageVersion(version)); + EXPECT_EQ(version.versionCode, 99); +} + + /* + * @tc.name: SetStageVersionName + * @tc.desc: test set stage version name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetStageVersionName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string versionName = "2.2.2"; + EXPECT_TRUE(moduleJson.SetStageVersionName(versionName)); + Version version; + EXPECT_TRUE(moduleJson.GetStageVersion(version)); + EXPECT_STREQ(version.versionName.c_str(), "2.2.2"); +} + + /* + * @tc.name: GetStageModuleApiVersion + * @tc.desc: test get stage module api version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageModuleApiVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + ModuleApiVersion moduleApiVersion; + EXPECT_TRUE(moduleJson.GetStageModuleApiVersion(moduleApiVersion)); + EXPECT_EQ(moduleApiVersion.compatibleApiVersion, 10); + EXPECT_EQ(moduleApiVersion.targetApiVersion, 10); + EXPECT_STREQ(moduleApiVersion.releaseType.c_str(), "Canary"); +} + + /* + * @tc.name: GetStageModuleName + * @tc.desc: test get stage module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageModuleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string stageModuleName = ""; + EXPECT_TRUE(moduleJson.GetStageModuleName(stageModuleName)); + EXPECT_STREQ(stageModuleName.c_str(), "entry"); +} + + /* + * @tc.name: GetStageEntry + * @tc.desc: test get stage entry + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageEntry_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list deviceTypes; + EXPECT_TRUE(moduleJson.GetStageEntry(deviceTypes)); + EXPECT_NE(deviceTypes.size(), 0); +} + + /* + * @tc.name: GetStageDeviceTypes + * @tc.desc: test get stage device types + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageDeviceTypes_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list deviceTypes; + EXPECT_TRUE(moduleJson.GetStageDeviceTypes(deviceTypes)); + EXPECT_NE(deviceTypes.size(), 0); +} + + /* + * @tc.name: GetStageHapVerifyInfo + * @tc.desc: test get stage hap verify info + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageHapVerifyInfo_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + HapVerifyInfo hapVerifyInfo; + EXPECT_TRUE(moduleJson.GetStageHapVerifyInfo(hapVerifyInfo)); +} + + /*lq + * @tc.name: GetStageDistroFilter + * @tc.desc: test get stage distro filter + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageDistroFilter_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + DistroFilter distroFilter; + EXPECT_TRUE(moduleJson.GetStageDistroFilter(distroFilter)); +} + + /* + * @tc.name: GetStageInstallationFree + * @tc.desc: test get stage installation free + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageInstallationFree_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool installationFree = false; + EXPECT_TRUE(moduleJson.GetStageInstallationFree(installationFree)); + EXPECT_EQ(installationFree, true); +} + + /* + * @tc.name: GetStageCompileSdkType + * @tc.desc: test get stage compilation + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageCompileSdkType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string compileSdkType = ""; + EXPECT_TRUE(moduleJson.GetStageCompileSdkType(compileSdkType)); + EXPECT_STREQ(compileSdkType.c_str(), "OpenHarmony"); +} + + /* + * @tc.name: GetStageCompileSdkVersion + * @tc.desc: test get stage compile sdk version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageCompileSdkVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string compileSdkVersion = ""; + EXPECT_TRUE(moduleJson.GetStageCompileSdkVersion(compileSdkVersion)); + EXPECT_STREQ(compileSdkVersion.c_str(), "test_compileSdkVersion"); +} + + /* + * @tc.name: GetStageModuleType + * @tc.desc: test get stage module type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageModuleType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string moduleType = ""; + EXPECT_TRUE(moduleJson.GetStageModuleType(moduleType)); + EXPECT_STREQ(moduleType.c_str(), "entry"); +} + + /* + * @tc.name: GetStageDebug + * @tc.desc: test get stage debug + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageDebug_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool debug = false; + EXPECT_TRUE(moduleJson.GetStageDebug(debug)); + EXPECT_EQ(debug, true); +} + + /* + * @tc.name: GetStageAsanEnabled + * @tc.desc: test get stage asan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageAsanEnabled_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool asanEnabled = false; + EXPECT_TRUE(moduleJson.GetStageAsanEnabled(asanEnabled)); + EXPECT_EQ(asanEnabled, true); +} + + /* + * @tc.name: GetStageAsanEnabled + * @tc.desc: test get stage asan enabled + * @tc.type: FUNC + * @tc.require: + */ + +HWTEST_F(ModuleJsonTest, GetStageAsanEnabled_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + bool asanEnabled = true; + EXPECT_TRUE(moduleJson.GetStageAsanEnabled(asanEnabled)); + EXPECT_EQ(asanEnabled, false); +} + + /* + * @tc.name: GetStageTsanEnabled + * @tc.desc: test get stage tsan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageTsanEnabled_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool tsanEnabled = true; + EXPECT_TRUE(moduleJson.GetStageTsanEnabled(tsanEnabled)); + EXPECT_EQ(tsanEnabled, false); +} + + /* + * @tc.name: GetStageTsanEnabled + * @tc.desc: test get stage tsan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageTsanEnabled_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + bool tsanEnabled = true; + EXPECT_TRUE(moduleJson.GetStageTsanEnabled(tsanEnabled)); + EXPECT_EQ(tsanEnabled, false); +} + + /* + * @tc.name: GetStageApiReleaseType + * @tc.desc: test get stage api release type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageApiReleaseType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string apiReleaseType = ""; + EXPECT_TRUE(moduleJson.GetStageApiReleaseType(apiReleaseType)); + EXPECT_STREQ(apiReleaseType.c_str(), "Canary"); +} + + /* + * @tc.name: GetStageApiReleaseType + * @tc.desc: test get stage api release type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageApiReleaseType_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + string apiReleaseType = "test"; + EXPECT_TRUE(moduleJson.GetStageApiReleaseType(apiReleaseType)); + EXPECT_STREQ(apiReleaseType.c_str(), ""); +} + + /* + * @tc.name: GetStageCompressNativeLibs + * @tc.desc: test get stage compress native libs + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageCompressNativeLibs_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool compressNativeLibs = false; + EXPECT_TRUE(moduleJson.GetStageCompressNativeLibs(compressNativeLibs)); + EXPECT_EQ(compressNativeLibs, true); +} + + /* + * @tc.name: GetStageCompressNativeLibs + * @tc.desc: test get stage compress native libs + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageCompressNativeLibs_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + bool compressNativeLibs = true; + EXPECT_TRUE(moduleJson.GetStageCompressNativeLibs(compressNativeLibs)); + EXPECT_EQ(compressNativeLibs, false); +} + + /* + * @tc.name: GetAbilityContinueTypeMap + * @tc.desc: test get ability continue type map + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetAbilityContinueTypeMap_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + map> abilityContinueTypeMap; + EXPECT_TRUE(moduleJson.GetAbilityContinueTypeMap(abilityContinueTypeMap)); + EXPECT_NE(abilityContinueTypeMap.size(), 0); +} + + /* + * @tc.name: GetExtensionAbilityNames + * @tc.desc: test get extension ability names + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetExtensionAbilityNames_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list extensionAbilityNames; + EXPECT_TRUE(moduleJson.GetExtensionAbilityNames(extensionAbilityNames)); + EXPECT_NE(extensionAbilityNames.size(), 0); +} + + /* + * @tc.name: IsExistedStageRequestPermissions + * @tc.desc: test is existed stage request permissions + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, IsExistedStageRequestPermissions_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_FALSE(moduleJson.IsExistedStageRequestPermissions()); +} + + /* + * @tc.name: IsExistedStageModuleTargetPriority + * @tc.desc: test is existed stage app target priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, IsExistedStageModuleTargetPriority_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.IsExistedStageModuleTargetPriority()); +} + + /* + * @tc.name: IsExistedStageAppTargetPriority + * @tc.desc: test is existed stage app target priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, IsExistedStageAppTargetPriority_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.IsExistedStageAppTargetPriority()); +} + + /* + * @tc.name: GetFaVersion + * @tc.desc: test get fa version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + Version version; + EXPECT_TRUE(moduleJson.GetFaVersion(version)); + EXPECT_EQ(version.versionCode, 666); + EXPECT_STREQ(version.versionName.c_str(), "test_version"); + EXPECT_EQ(version.minCompatibleVersionCode, 555); +} + + /* + * @tc.name: SetFaVersionCode + * @tc.desc: test set fa version code + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetFaVersionCode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int versionCode = 9; + EXPECT_TRUE(moduleJson.SetFaVersionCode(versionCode)); + Version version; + EXPECT_TRUE(moduleJson.GetFaVersion(version)); + EXPECT_EQ(version.versionCode, 9); +} + + /* + * @tc.name: SetFaVersionName + * @tc.desc: test set fa version name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetFaVersionName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string versionName = "1.1.1"; + EXPECT_TRUE(moduleJson.SetFaVersionName(versionName)); + Version version; + EXPECT_TRUE(moduleJson.GetFaVersion(version)); + EXPECT_STREQ(version.versionName.c_str(), "1.1.1"); +} + + /* + * @tc.name: GetFaModuleApiVersion + * @tc.desc: test get fa module api version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaModuleApiVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + ModuleApiVersion moduleApiVersion; + EXPECT_TRUE(moduleJson.GetFaModuleApiVersion(moduleApiVersion)); + EXPECT_EQ(moduleApiVersion.compatibleApiVersion, 7); + EXPECT_EQ(moduleApiVersion.targetApiVersion, 10); + EXPECT_STREQ(moduleApiVersion.releaseType.c_str(), "test_apiVersion_release"); +} + + /* + * @tc.name: GetFaModuleName + * @tc.desc: test get fa module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaModuleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string faModuleName = ""; + EXPECT_TRUE(moduleJson.GetFaModuleName(faModuleName)); + EXPECT_STREQ(faModuleName.c_str(), "test_module_name"); +} + + /* + * @tc.name: GetFaPackageStr + * @tc.desc: test get fa package string + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaPackageStr_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string packageStr = ""; + EXPECT_TRUE(moduleJson.GetFaPackageStr(packageStr)); + EXPECT_STREQ(packageStr.c_str(), "test_package"); +} + + /* + * @tc.name: GetFaEntry + * @tc.desc: test get fa entry + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaEntry_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list deviceTypes; + EXPECT_TRUE(moduleJson.GetFaEntry(deviceTypes)); + EXPECT_NE(deviceTypes.size(), 0); +} + + /* + * @tc.name: GetFaDeviceTypes + * @tc.desc: test fa deviceTypes + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaDeviceTypes_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list deviceTypes; + EXPECT_TRUE(moduleJson.GetFaDeviceTypes(deviceTypes)); + EXPECT_NE(deviceTypes.size(), 0); +} + + /*lq + * @tc.name: GetFaDistroFilter + * @tc.desc: test get fa distro filter + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaDistroFilter_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + DistroFilter distroFilter; + EXPECT_TRUE(moduleJson.GetFaDistroFilter(distroFilter)); +} + + /* + * @tc.name: GetFaCompileSdkType + * @tc.desc: test get fa compile sdk type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaCompileSdkType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string compileSdkType = ""; + EXPECT_TRUE(moduleJson.GetFaCompileSdkType(compileSdkType)); + EXPECT_STREQ(compileSdkType.c_str(), "OpenHarmony"); +} + + /* + * @tc.name: GetFaCompileSdkType + * @tc.desc: test get fa compile sdk type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaCompileSdkType_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + string compileSdkType = "test"; + EXPECT_TRUE(moduleJson.GetFaCompileSdkType(compileSdkType)); + EXPECT_STREQ(compileSdkType.c_str(), ""); +} + + /* + * @tc.name: GetFaCompileSdkVersion + * @tc.desc: test get fa compile sdk version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaCompileSdkVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string compileSdkVersion = ""; + EXPECT_TRUE(moduleJson.GetFaCompileSdkVersion(compileSdkVersion)); + EXPECT_STREQ(compileSdkVersion.c_str(), "test_apiVersion_compileSdkVersion"); +} + + /* + * @tc.name: GetFaCompileSdkVersion + * @tc.desc: test get fa compile sdk version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaCompileSdkVersion_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + string compileSdkVersion = "test"; + EXPECT_TRUE(moduleJson.GetFaCompileSdkVersion(compileSdkVersion)); + EXPECT_STREQ(compileSdkVersion.c_str(), ""); +} + + /* + * @tc.name: GetFaModuleType + * @tc.desc: test get fa module type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaModuleType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string moduleType = ""; + EXPECT_TRUE(moduleJson.GetFaModuleType(moduleType)); + EXPECT_STREQ(moduleType.c_str(), "entry"); +} + + /* + * @tc.name: GetFaDebug + * @tc.desc: test get fa debug + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaDebug_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool debug = false; + EXPECT_TRUE(moduleJson.GetFaDebug(debug)); + EXPECT_EQ(debug, true); +} + + /* + * @tc.name: GetFaAsanEnabled + * @tc.desc: test get fa asan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaAsanEnabled_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool asanEnabled = false; + EXPECT_TRUE(moduleJson.GetFaAsanEnabled(asanEnabled)); + EXPECT_EQ(asanEnabled, true); +} + + /* + * @tc.name: GetFaAsanEnabled + * @tc.desc: test get fa asan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaAsanEnabled_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + bool asanEnabled = true; + EXPECT_TRUE(moduleJson.GetFaAsanEnabled(asanEnabled)); + EXPECT_EQ(asanEnabled, false); +} + + /* + * @tc.name: GetFaReleaseType + * @tc.desc: test get fa release type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetFaReleaseType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string releaseType = ""; + EXPECT_TRUE(moduleJson.GetFaReleaseType(releaseType)); + EXPECT_STREQ(releaseType.c_str(), "test_apiVersion_release"); +} + + /* + * @tc.name: GetBundleName + * @tc.desc: test get bundle name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetBundleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string bundleName = ""; + EXPECT_TRUE(moduleJson.GetBundleName(bundleName)); + EXPECT_STREQ(bundleName.c_str(), "test_bundle_name"); +} + + /* + * @tc.name: SetBundleName + * @tc.desc: test set bundle name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetBundleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string setBundleName = "com.example.test"; + string getBundleName = ""; + EXPECT_TRUE(moduleJson.SetBundleName(setBundleName)); + moduleJson.GetBundleName(getBundleName); + EXPECT_STREQ(getBundleName.c_str(), setBundleName.c_str()); +} + + /* + * @tc.name: GetModuleName + * @tc.desc: test get module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetModuleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string moduleName = ""; + EXPECT_TRUE(moduleJson.GetModuleName(moduleName)); + EXPECT_STREQ(moduleName.c_str(), "entry"); +} + + /* + * @tc.name: GetVendor + * @tc.desc: test get vendor + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetVendor_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string vendor = "test"; + EXPECT_TRUE(moduleJson.GetVendor(vendor)); + EXPECT_STREQ(vendor.c_str(), ""); +} + + /* + * @tc.name: GetTargetBundleName + * @tc.desc: test get target bundle name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetBundleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string targetBundleName = ""; + EXPECT_TRUE(moduleJson.GetTargetBundleName(targetBundleName)); + EXPECT_STREQ(targetBundleName.c_str(), "test_app_targetBundleName"); +} + + /* + * @tc.name: GetTargetBundleName + * @tc.desc: test get target bundle name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetBundleName_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + string targetBundleName = "test"; + EXPECT_TRUE(moduleJson.GetTargetBundleName(targetBundleName)); + EXPECT_STREQ(targetBundleName.c_str(), ""); +} + + /* + * @tc.name: GetTargetModuleName + * @tc.desc: test get target module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetModuleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string targetModuleName = ""; + EXPECT_TRUE(moduleJson.GetTargetModuleName(targetModuleName)); + EXPECT_STREQ(targetModuleName.c_str(), "test_module_targetBundleName"); +} + + /* + * @tc.name: GetTargetModuleName + * @tc.desc: test get target module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetModuleName_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + string targetModuleName = "test"; + EXPECT_TRUE(moduleJson.GetTargetModuleName(targetModuleName)); + EXPECT_STREQ(targetModuleName.c_str(), ""); +} + + /* + * @tc.name: GetTargetPriority + * @tc.desc: test get target priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetPriority_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int32_t targetPriority = -1; + EXPECT_TRUE(moduleJson.GetTargetPriority(targetPriority)); + EXPECT_EQ(targetPriority, 5); +} + + /* + * @tc.name: GetTargetPriority + * @tc.desc: test get target priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetPriority_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + int32_t targetPriority = -1; + EXPECT_TRUE(moduleJson.GetTargetPriority(targetPriority)); + EXPECT_EQ(targetPriority, 0); +} + + /* + * @tc.name: GetTargetModulePriority + * @tc.desc: test target module priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetModulePriority_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int32_t targetModulePriority = -1; + EXPECT_TRUE(moduleJson.GetTargetModulePriority(targetModulePriority)); + EXPECT_EQ(targetModulePriority, 6); +} + + /* + * @tc.name: GetTargetModulePriority + * @tc.desc: test target module priority + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetTargetModulePriority_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + int32_t targetModulePriority = -1; + EXPECT_TRUE(moduleJson.GetTargetModulePriority(targetModulePriority)); + EXPECT_EQ(targetModulePriority, 0); +} + + /* + * @tc.name: GetAbilityNames + * @tc.desc: test get ability names + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetAbilityNames_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list abilityNames; + EXPECT_TRUE(moduleJson.GetAbilityNames(abilityNames)); + EXPECT_NE(abilityNames.size(), 0); +} + + /* + * @tc.name: GetDependencyItems + * @tc.desc: test get dependency items + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetDependencyItems_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list dependencyItems; + string defaultBundleName = "defaultBundleName"; + EXPECT_TRUE(moduleJson.GetDependencyItems(dependencyItems, defaultBundleName)); + EXPECT_NE(dependencyItems.size(), 0); +} + + /* + * @tc.name: GetAtomicServicePreloads + * @tc.desc: test get atomics service preloads + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetAtomicServicePreloads_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list preloadItems; + EXPECT_TRUE(moduleJson.GetAtomicServicePreloads(preloadItems)); + EXPECT_NE(preloadItems.size(), 0); +} + + /* + * @tc.name: GetProxyDataUris + * @tc.desc: test get proxy data uris + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetProxyDataUris_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list proxyDataUris; + EXPECT_TRUE(moduleJson.GetProxyDataUris(proxyDataUris)); + EXPECT_NE(proxyDataUris.size(), 0); +} + + /* + * @tc.name: GetProxyDataUris + * @tc.desc: test get proxy data uris + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetProxyDataUris_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + list proxyDataUris; + EXPECT_TRUE(moduleJson.GetProxyDataUris(proxyDataUris)); + EXPECT_NE(proxyDataUris.size(), 0); +} + + /* + * @tc.name: GetMultiAppMode + * @tc.desc: test get multi app mode + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetMultiAppMode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + MultiAppMode multiAppMode; + EXPECT_TRUE(moduleJson.GetMultiAppMode(multiAppMode)); + EXPECT_STREQ(multiAppMode.multiAppModeType.c_str(), "test_multiAppMode"); + EXPECT_EQ(multiAppMode.maxCount, 9); +} + + /* + * @tc.name: IsModuleAtomicServiceValid + * @tc.desc: test is module atomic service valid + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, IsModuleAtomicServiceValid_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.IsModuleAtomicServiceValid()); +} + + /* + * @tc.name: CheckEntryInAtomicService + * @tc.desc: test check entry in atomic service + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, CheckEntryInAtomicService_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.CheckEntryInAtomicService()); +} + + /* + * @tc.name: CheckAtomicServiceInstallationFree + * @tc.desc: test check atomic service installation free + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, CheckAtomicServiceInstallationFree_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.CheckAtomicServiceInstallationFree()); +} + + /* + * @tc.name: GetGenerateBuildHash + * @tc.desc: test get generate build hash + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetGenerateBuildHash_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + bool generateBuildHash = false; + EXPECT_TRUE(moduleJson.GetGenerateBuildHash(generateBuildHash)); + EXPECT_EQ(generateBuildHash, true); +} + + /* + * @tc.name: GetGenerateBuildHash + * @tc.desc: test get generate build hash + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetGenerateBuildHash_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonStr)); + bool generateBuildHash = false; + EXPECT_TRUE(moduleJson.GetGenerateBuildHash(generateBuildHash)); + EXPECT_EQ(generateBuildHash, true); +} + + /* + * @tc.name: RemoveGenerateBuildHash + * @tc.desc: test remove generate build hash + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, RemoveGenerateBuildHash_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.RemoveGenerateBuildHash()); +} + + /* + * @tc.name: RemoveGenerateBuildHashFromAppObj + * @tc.desc: test remove generate build hash from app object + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, RemoveGenerateBuildHashFromAppObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.RemoveGenerateBuildHashFromAppObj()); +} + + /* + * @tc.name: RemoveGenerateBuildHashFromModuleObj + * @tc.desc: test remove generate build hash from module object + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, RemoveGenerateBuildHashFromModuleObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.RemoveGenerateBuildHashFromModuleObj()); +} + + /* + * @tc.name: GetNormalizeVersion + * @tc.desc: test get normalize version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetNormalizeVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + NormalizeVersion normalizeVersion; + bool isStage = false; + EXPECT_TRUE(moduleJson.GetNormalizeVersion(normalizeVersion, isStage)); + EXPECT_EQ(normalizeVersion.originVersionCode, 666); + EXPECT_STREQ(normalizeVersion.originVersionName.c_str(), "test_version"); + EXPECT_STREQ(normalizeVersion.moduleName.c_str(), "entry"); +} + + /* + * @tc.name: GetNormalizeVersion + * @tc.desc: test get normalize version + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetNormalizeVersion_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + NormalizeVersion normalizeVersion; + bool isStage = true; + EXPECT_TRUE(moduleJson.GetNormalizeVersion(normalizeVersion, isStage)); + EXPECT_EQ(normalizeVersion.originVersionCode, 1000000); + EXPECT_STREQ(normalizeVersion.originVersionName.c_str(), "test_version_name"); + EXPECT_STREQ(normalizeVersion.moduleName.c_str(), "entry"); +} + + /* + * @tc.name: SetVersionCodeAndName + * @tc.desc: test set version code and name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetVersionCodeAndName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int versionCode = 10; + string versionName = "1.1.1"; + bool isStage = true; + EXPECT_TRUE(moduleJson.SetVersionCodeAndName(versionCode, versionName, isStage)); + Version version; + EXPECT_TRUE(moduleJson.GetStageVersion(version)); + EXPECT_EQ(version.versionCode, 10); + EXPECT_STREQ(version.versionName.c_str(), "1.1.1"); +} + + /* + * @tc.name: SetVersionCodeAndName + * @tc.desc: test set version code and name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetVersionCodeAndName_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + int versionCode = 8; + string versionName = "2.2.2"; + bool isStage = false; + EXPECT_TRUE(moduleJson.SetVersionCodeAndName(versionCode, versionName, isStage)); + Version version; + EXPECT_TRUE(moduleJson.GetFaVersion(version)); + EXPECT_EQ(version.versionCode, 8); + EXPECT_STREQ(version.versionName.c_str(), "2.2.2"); +} + + /* + * @tc.name: SetBuildHash + * @tc.desc: test set build hash + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetBuildHash_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string buildHash = "00000000000000000000000000000000"; + EXPECT_TRUE(moduleJson.SetBuildHash(buildHash)); +} + + /* + * @tc.name: GetPatchModuleName + * @tc.desc: test get patch module name + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetPatchModuleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string patchModuleName = ""; + EXPECT_TRUE(moduleJson.GetPatchModuleName(patchModuleName)); + EXPECT_STREQ(patchModuleName.c_str(), "entry"); +} + + /* + * @tc.name: GetStageBundleType + * @tc.desc: test get stage bundle type + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetStageBundleType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + string bundleType = ""; + EXPECT_TRUE(moduleJson.GetStageBundleType(bundleType)); + EXPECT_STREQ(bundleType.c_str(), "atomicService"); +} + + /* + * @tc.name: CheckStageAsanTsanEnabledValid + * @tc.desc: test check stage asan tsan enabled + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, CheckStageAsanTsanEnabledValid_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.CheckStageAsanTsanEnabledValid()); +} + + /* + * @tc.name: CheckStageAtomicService + * @tc.desc: test check stage atomic service + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, CheckStageAtomicService_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.CheckStageAtomicService()); +} + + /* + * @tc.name: CheckStageOverlayCfg + * @tc.desc: test check stage overlay config + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, CheckStageOverlayCfg_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + EXPECT_TRUE(moduleJson.CheckStageOverlayCfg()); +} + + /* + * @tc.name: GetModuleMetadatas + * @tc.desc: test get module meta datas + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, GetModuleMetadatas_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + list moduleMetadataInfos; + EXPECT_TRUE(moduleJson.GetModuleMetadatas(moduleMetadataInfos)); + EXPECT_NE(moduleMetadataInfos.size(), 0); +} + + /* + * @tc.name: SetStageHapVerifyInfoExtByModuleObj + * @tc.desc: test set stage hap verify info ext by module obj + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonTest, SetStageHapVerifyInfoExtByModuleObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ModuleJson moduleJson; + EXPECT_TRUE(moduleJson.ParseFromString(jsonString)); + std::unique_ptr moduleObj; + EXPECT_TRUE(moduleJson.GetModuleObject(moduleObj)); + HapVerifyInfo hapVerifyInfo; + EXPECT_TRUE(moduleJson.SetStageHapVerifyInfoExtByModuleObj(moduleObj, hapVerifyInfo)); +} + +} \ No newline at end of file -- Gitee From 7560ade99373b6b36d0fd12ffe25de32686108a4 Mon Sep 17 00:00:00 2001 From: sunxuhui Date: Mon, 26 Aug 2024 10:39:26 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=89=93=E5=8C=85=E5=B7=A5=E5=85=B7tdd?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: sunxuhui Change-Id: I404c292fd7f9fae83badc50707c27c8485b498d4 --- packing_tool/frameworks/BUILD.gn | 7 + .../json/module_json_utils_test/BUILD.gn | 54 +++ .../module_json_utils_test.cpp | 355 ++++++++++++++++++ .../json/pack_info_utils_test/BUILD.gn | 47 +++ .../pack_info_utils_test.cpp | 188 ++++++++++ .../unittest/json/patch_json_test/BUILD.gn | 51 +++ .../json/patch_json_test/patch_json_test.cpp | 344 +++++++++++++++++ .../json/patch_json_utils_test/BUILD.gn | 53 +++ .../patch_json_utils_test.cpp | 109 ++++++ .../test/unittest/unzip_wrapper_test/BUILD.gn | 51 +++ .../unzip_wrapper_test/unzip_wrapper_test.cpp | 120 ++++++ .../test/unittest/zip_utils_test/BUILD.gn | 53 +++ .../zip_utils_test/zip_utils_test.cpp | 241 ++++++++++++ .../test/unittest/zip_wrapper_test/BUILD.gn | 50 +++ .../zip_wrapper_test/zip_wrapper_test.cpp | 172 +++++++++ 15 files changed, 1895 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/module_json_utils_test/module_json_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/pack_info_utils_test/pack_info_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/patch_json_test/patch_json_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/patch_json_utils_test/patch_json_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/unzip_wrapper_test/unzip_wrapper_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/zip_wrapper_test/zip_wrapper_test.cpp diff --git a/packing_tool/frameworks/BUILD.gn b/packing_tool/frameworks/BUILD.gn index caa67c63..ea13243b 100644 --- a/packing_tool/frameworks/BUILD.gn +++ b/packing_tool/frameworks/BUILD.gn @@ -93,10 +93,17 @@ group("unittest") { "test/unittest/hqf_packager_test:hqf_packager_test", "test/unittest/hsp_packager_test:hsp_packager_test", "test/unittest/json/module_json_test:module_json_test", + "test/unittest/json/module_json_utils_test:module_json_utils_test", + "test/unittest/json/pack_info_utils_test:pack_info_utils_test", + "test/unittest/json/patch_json_utils_test:patch_json_utils_test", + "test/unittest/json/patch_json_test:patch_json_test", "test/unittest/multiapp_packager_test:multiapp_packager_test", "test/unittest/ohos_test:copy_ohos_test", "test/unittest/package_normalize_test:package_normalize_test", "test/unittest/packager_test:packager_test", "test/unittest/version_normalize_test:version_normalize_test", + "test/unittest/unzip_wrapper_test:unzip_wrapper_test", + "test/unittest/zip_utils_test:zip_utils_test", + "test/unittest/zip_wrapper_test:zip_wrapper_test", ] } diff --git a/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn new file mode 100644 index 00000000..6d18afe4 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn @@ -0,0 +1,54 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("module_json_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("module_json_utils_test") { + module_out_path = module_output_path + public_configs = [ ":module_json_utils_test_config" ] + sources = [ + "../../../../src/json/distro_filter.cpp", + "../../../../src/json/hap_verify_info.cpp", + "../../../../src/json/hap_verify_utils.cpp", + "../../../../src/json/module_json.cpp", + "../../../../src/json/module_json_fa.cpp", + "../../../../src/json/module_json_stage.cpp", + "../../../../src/json/module_json_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "../../../../src/zip_utils.cpp", + "../../../../src/zip_wrapper.cpp", + "module_json_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/module_json_utils_test/module_json_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/module_json_utils_test.cpp new file mode 100644 index 00000000..6735583d --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/module_json_utils_test.cpp @@ -0,0 +1,355 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "module_json_utils.h" +#include "constants.h" +#include "pt_json.h" +#include "log.h" +#include "zip_wrapper.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; +using namespace OHOS::AppPackingTool; +using namespace std; + +namespace OHOS { + +#define HAP_FILE_PATH_FA "/data/test.hap" +#define HAP_FILE_PATH_TEST "/data/demo.hap" +#define MODULE_JSON_FILE "/data/module.json" +#define CONFIG_JSON_FILE "/data/config.json" + +string str = "{" + "\"app\": {" + "\"iconId\":16777217," + "\"debug\":true," + "\"minAPIVersion\":9," + "\"icon\":\"media:app_icon\"," + "\"label\":\"string:app_name\"," + "\"versionName\":\"1.0.0\"," + "\"versionCode\":1000000," + "\"compileSdkType\":\"OpenHarmony\"," + "\"labelId\":16777216," + "\"compileSdkVersion\":\"test_compileSdkVersion\"," + "\"targetAPIVersion\":9," + "\"vendor\":\"\"," + "\"bundleName\":\"com.example.demo\"," + "\"distributedNotificationEnabled\":true," + "\"apiReleaseType\":\"Release\"" + "}," + "\"module\":{" + "\"virtualMachine\":\"test_virtualMachine\"," + "\"mainElement\":\"EntryAbility\"," + "\"installationFree\":false," + "\"deliveryWithInstall\":true," + "\"description\":\"string:module_desc\"," + "\"compileMode\":\"esmodule\"," + "\"type\":\"entry\"," + "\"dependencies\":[]," + "\"abilities\":[" + "{" + "\"iconId\":16777222," + "\"startWindowIconId\":16777222," + "\"visible\":true," + "\"icon\":\"media:icon\"," + "\"startWindowBackgroundId\":16777221," + "\"startWindowIcon\":\"media:icon\"," + "\"description\":\"string:EntryAbility_desc\"," + "\"label\":\"string:EntryAbility_label\"," + "\"skills\":[{\"entities\":[\"entity.system.home\"]," + "\"actions\":[\"action.system.home\"]}]," + "\"descriptionId\":16777218," + "\"labelId\":16777219," + "\"startWindowBackground\":\"color:start_window_background\"," + "\"srcEntrance\":\"./ets/entryability/EntryAbility.ts\"," + "\"name\":\"EntryAbility\"" + "}" + "]," + "\"descriptionId\":16777220," + "\"deviceTypes\":[\"default\",\"tablet\"]," + "\"pages\":\"$profile:main_pages\"," + "\"name\":\"entry\"" + "}" +"}"; + +string str1 = "{" + "\"app\" :{" + "\"apiVersion\" :{" + "\"compatible\" : 9," + "\"releaseType\" : \"Release\"," + "\"target\" : 9" + "}," + "\"bundleName\" : \"test_bundl_name\"," + "\"vendor\" : \"\"," + "\"version\" :{" + "\"code\" : 1000000," + "\"name\" : \"test_name\"" + "}" + "}," + "\"deviceConfig\": {" + "\"default\": true" + "}," + "\"module\" :{" + "\"abilities\" :[" + "{" + "\"description\" : \"string:MainAbility_desc\"," + "\"descriptionId\" : 16777216," + "\"formsEnabled\" : false," + "\"icon\" : \"media:icon\"," + "\"iconId\" : 16777220," + "\"label\" : \"string:MainAbility_label\"," + "\"labelId\" : 16777217," + "\"launchType\" : \"standard\"," + "\"name\" : \".MainAbility\"," + "\"orientation\" : \"unspecified\"," + "\"skills\" :[" + "{" + "\"actions\" :[" + "\"action.system.home\"" + "]," + "\"entities\" :[" + "\"entity.system.home\"" + "]" + "}" + "]," + "\"srcLanguage\" : \"ets\"," + "\"srcPath\" : \"MainAbility\"," + "\"type\" : \"page\"," + "\"visible\" : true" + "}" + "]," + "\"deviceType\" :[" + "\"phone\"," + "\"tablet\"" + "]," + "\"distro\" :{" + "\"deliveryWithInstall\" : true," + "\"installationFree\" : false," + "\"moduleName\" : \"entry\"," + "\"moduleType\" : \"entry\"," + "\"virtualMachine\" : \"test_virtualMachine\"" + "}," + "\"js\" :[" + "{" + "\"mode\" :{" + "\"syntax\" : \"ets\"," + "\"type\" : \"pageAbility\"" + "}," + "\"name\" : \".MainAbility\"," + "\"pages\" :[" + "\"pages/index\"" + "]," + "\"window\" :{" + "\"autoDesignWidth\" : false," + "\"designWidth\" : 720" + "}" + "}" + "]," + "\"mainAbility\" : \".MainAbility\"," + "\"name\" : \".entry\"," + "\"package\" : \"test_package\"" + "}" +"}"; +class ModuleJsonUtilsTest : public testing::Test { +public: + ModuleJsonUtilsTest() {} + virtual ~ModuleJsonUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void ModuleJsonUtilsTest::SetUpTestCase() {} + +void ModuleJsonUtilsTest::TearDownTestCase() {} + +void ModuleJsonUtilsTest::SetUp() {} + +void ModuleJsonUtilsTest::TearDown() {} + +bool CreateModuleJsonFile(std::string filename) +{ + std::string module_test(filename); + FILE *fp = fopen(module_test.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) { + fwrite(str.c_str(), str.size(), 1, fp); + fclose(fp); + } else { + return false; + } + return true; +} + +bool CreateModuleJsonHap(string hapFilePath, string filename) +{ + EXPECT_TRUE(CreateModuleJsonFile(filename)); + ZipWrapper zipWrapper(hapFilePath); + zipWrapper.Open(APPEND_STATUS_CREATE); + std::string filepath(filename); + std::string zippath(OHOS::AppPackingTool::Constants::MODULE_JSON); + zipWrapper.AddFileOrDirectoryToZip(filepath, zippath); + zipWrapper.Close(); + return true; +} + +bool CreateConfigJsonFile(std::string filename) +{ + std::string config_test(filename); + FILE *fp = fopen(config_test.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) { + fwrite(str1.c_str(), str1.size(), 1, fp); + fclose(fp); + } else { + return false; + } + return true; +} + +bool CreateConfigJsonHap(string hapFilePath, string filename) +{ + EXPECT_TRUE(CreateConfigJsonFile(filename)); + ZipWrapper zipWrapper(hapFilePath); + zipWrapper.Open(APPEND_STATUS_CREATE); + std::string filepath(filename); + std::string zippath(OHOS::AppPackingTool::Constants::CONFIG_JSON); + zipWrapper.AddFileOrDirectoryToZip(filepath, zippath); + zipWrapper.Close(); + return true; +} + + /* + * @tc.name: GetStageHapVerifyInfo_0100 + * @tc.desc: GetStageHapVerifyInfo + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonUtilsTest, GetStageHapVerifyInfo_0100, Function | MediumTest | Level1) +{ + std::string hapFilePath(HAP_FILE_PATH_TEST); + EXPECT_TRUE(CreateModuleJsonHap(hapFilePath, MODULE_JSON_FILE)); + HapVerifyInfo hapVerifyInfo; + EXPECT_TRUE(ModuleJsonUtils::GetStageHapVerifyInfo(hapFilePath, hapVerifyInfo)); + + std::string cmd = {"rm -f "}; + cmd += HAP_FILE_PATH_TEST; + cmd += " "; + cmd += MODULE_JSON_FILE; + system(cmd.c_str()); +} + + /* + * @tc.name: GetFaHapVerifyInfo_0100 + * @tc.desc: GetFaHapVerifyInfo + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonUtilsTest, GetFaHapVerifyInfo_0100, Function | MediumTest | Level1) +{ + std::string hapFilePath(HAP_FILE_PATH_FA); + EXPECT_TRUE(CreateConfigJsonHap(hapFilePath, CONFIG_JSON_FILE)); + HapVerifyInfo hapVerifyInfo; + EXPECT_TRUE(ModuleJsonUtils::GetFaHapVerifyInfo(hapFilePath, hapVerifyInfo)); + + std::string cmd = {"rm -f "}; + cmd += HAP_FILE_PATH_FA; + cmd += " "; + cmd += CONFIG_JSON_FILE; + system(cmd.c_str()); +} + + /* + * @tc.name: CheckSharedAppIsValid_0100 + * @tc.desc: CheckSharedAppIsValid + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonUtilsTest, CheckSharedAppIsValid_0100, Function | MediumTest | Level1) +{ + std::list hapVerifyInfos; + HapVerifyInfo hapVerifyInfo; + hapVerifyInfo.SetTargetBundleName("test1_target_bundle_name"); + hapVerifyInfo.SetModuleName("test1_module_name"); + + std::list dependencyItemList; + DependencyItem dependencyItem; + dependencyItem.bundleName = "test1_bundle_name"; + dependencyItem.moduleName = "test1_module_name"; + dependencyItem.versionCode = 5; + dependencyItemList.emplace_back(dependencyItem); + + hapVerifyInfo.SetDependencyItemList(dependencyItemList); + hapVerifyInfo.SetModuleType("test1_module_type"); + hapVerifyInfos.emplace_back(hapVerifyInfo); + + bool isOverlay = false; + EXPECT_TRUE(ModuleJsonUtils::CheckSharedAppIsValid(hapVerifyInfos, isOverlay)); +} + + /* + * @tc.name: CheckHapsIsValid_0100 + * @tc.desc: CheckHapsIsValid + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonUtilsTest, CheckHapsIsValid_0100, Function | MediumTest | Level1) +{ + std::string hapFilePath(HAP_FILE_PATH_TEST); + EXPECT_TRUE(CreateModuleJsonHap(hapFilePath, MODULE_JSON_FILE)); + + std::list fileList; + fileList.emplace_back(hapFilePath); + bool isSharedApp = false; + EXPECT_TRUE(ModuleJsonUtils::CheckHapsIsValid(fileList, isSharedApp)); + + std::string cmd = {"rm -f "}; + cmd += HAP_FILE_PATH_TEST; + cmd += " "; + cmd += MODULE_JSON_FILE; + system(cmd.c_str()); +} + + /* + * @tc.name: IsModuleHap_0100 + * @tc.desc: IsModuleHap + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ModuleJsonUtilsTest, IsModuleHap_0100, Function | MediumTest | Level1) +{ + std::string hapFilePath(HAP_FILE_PATH_TEST); + EXPECT_TRUE(CreateModuleJsonHap(hapFilePath, MODULE_JSON_FILE)); + EXPECT_TRUE(ModuleJsonUtils::IsModuleHap(hapFilePath)); + + std::string cmd = {"rm -f "}; + cmd += HAP_FILE_PATH_TEST; + cmd += " "; + cmd += MODULE_JSON_FILE; + system(cmd.c_str()); +} +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn new file mode 100644 index 00000000..621f8068 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn @@ -0,0 +1,47 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("pack_info_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("pack_info_utils_test") { + module_out_path = module_output_path + public_configs = [ ":pack_info_utils_test_config" ] + sources = [ + "../../../../src/json/pack_info.cpp", + "../../../../src/json/pack_info_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "pack_info_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/pack_info_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/pack_info_utils_test.cpp new file mode 100644 index 00000000..4704f26a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/pack_info_utils_test.cpp @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "pack_info_utils.h" +#include "pt_json.h" +#include "utils.h" +#include "log.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; +using namespace std; + +namespace OHOS { + +string content1 = "{" + "\"summary\": {" + "\"app\": {" + "\"bundleName\": \"com.example.myapplication\"," + "\"bundleType\": \"bundleApp\"," + "\"version\": {" + "\"code\": 1000000," + "\"name\": \"1.0.0\"" + "}" + "}," + "\"modules\": [" + "{" + "\"mainAbility\": \"EntryAbility\"," + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"abilities\": [" + "{" + "\"name\": \"EntryAbility\"," + "\"label\": \"$string:EntryAbility_label\"" + "}" + "]," + "\"distro\": {" + "\"moduleType\": \"entry\"," + "\"installationFree\": false," + "\"deliveryWithInstall\": true," + "\"moduleName\": \"entry\"" + "}," + "\"extensionAbilities\": [" + "]," + "\"apiVersion\": {" + "\"compatible\": 12," + "\"releaseType\": \"Canary2\"," + "\"target\": 12" + "}" + "}" + "]" + "}," + "\"packages\":[" + "{" + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"moduleType\": \"entry\"," + "\"deliveryWithInstall\": true," + "\"name\": \"entry-default\"" + "}" + "]" +"}"; + +string content2 = "{" + "\"summary\": {" + "\"app\": {" + "\"bundleName\": \"com.example.myapplication\"," + "\"bundleType\": \"bundleApp\"," + "\"version\": {" + "\"code\": 1000000," + "\"name\": \"1.0.0\"" + "}" + "}," + "\"modules\": [" + "{" + "\"mainAbility\": \"EntryAbility\"," + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"abilities\": [" + "{" + "\"name\": \"EntryAbility\"," + "\"label\": \"$string:EntryAbility_label\"" + "}" + "]," + "\"distro\": {" + "\"moduleType\": \"entry\"," + "\"installationFree\": false," + "\"deliveryWithInstall\": true," + "\"moduleName\": \"entry\"" + "}," + "\"extensionAbilities\": [" + "]," + "\"apiVersion\": {" + "\"compatible\": 12," + "\"releaseType\": \"Canary2\"," + "\"target\": 12" + "}" + "}" + "]" + "}," + "\"packages\":[" + "{" + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"moduleType\": \"entry\"," + "\"deliveryWithInstall\": true," + "\"name\": \"entry-default\"" + "}" + "]" +"}"; + +class PackInfoUtilsTest : public testing::Test { +public: + PackInfoUtilsTest() {} + virtual ~PackInfoUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PackInfoUtilsTest::SetUpTestCase() {} + +void PackInfoUtilsTest::TearDownTestCase() {} + +void PackInfoUtilsTest::SetUp() {} + +void PackInfoUtilsTest::TearDown() {} + +/* + * @tc.name: MergeTwoPackInfos_0100 + * @tc.desc: MergeTwoPackInfos. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoUtilsTest, MergeTwoPackInfos_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfoUtils packInfoUtils; + std::string dstPackInfoJsonStr; + EXPECT_TRUE(packInfoUtils.MergeTwoPackInfos(content1, content2, dstPackInfoJsonStr)); +} + +/* + * @tc.name: MergeTwoPackInfosByPackagePair_0100 + * @tc.desc: MergeTwoPackInfosByPackagePair. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoUtilsTest, MergeTwoPackInfosByPackagePair_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfoUtils packInfoUtils; + std::map packagesMap; + std::string dstPackInfoJsonStr = ""; + packagesMap.insert((make_pair("entry-default", "entry"))); + + EXPECT_TRUE(packInfoUtils.MergeTwoPackInfosByPackagePair(content1, content2, packagesMap, dstPackInfoJsonStr)); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn new file mode 100644 index 00000000..1e574777 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn @@ -0,0 +1,51 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("patch_json_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("patch_json_test") { + module_out_path = module_output_path + public_configs = [ ":patch_json_test_config" ] + sources = [ + "../../../../src/json/patch_json.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "patch_json_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":patch_json_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_test/patch_json_test.cpp b/packing_tool/frameworks/test/unittest/json/patch_json_test/patch_json_test.cpp new file mode 100644 index 00000000..be7ffff9 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/patch_json_test/patch_json_test.cpp @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "patch_json.h" +#include "pt_json.h" +#include "log.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +std::string content = "{" + "\"name\": \"Json.CN\"," + "\"app\": {" + "\"bundleName\": \"bundleNametest\"," + "\"versionCode\": 100," + "\"versionName\": \"versionNametest\"," + "\"patchVersionCode\": 200," + "\"patchVersionName\": \"patchVersionNametest\"" + "}," + "\"module\": {" + "\"name\": \"nametest\"," + "\"type\": \"typetest\"," + "\"originalModuleHash\": \"originalModuleHashtest\"," + "\"deviceTypes\": [" + "\"aaaaaaaaaaa\"," + "\"bbbbbbbbbbb\"," + "\"ccccccccccc\"" + "]" + "}" +"}"; + +class PatchJsonTest : public testing::Test { +public: + PatchJsonTest() {} + virtual ~PatchJsonTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PatchJsonTest::SetUpTestCase() {} + +void PatchJsonTest::TearDownTestCase() {} + +void PatchJsonTest::SetUp() {} + +void PatchJsonTest::TearDown() {} + +/* + * @tc.name: ParseFromString_0100 + * @tc.desc: ParseFromString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, ParseFromString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); +} + +/* + * @tc.name: ParseFromFile_0100 + * @tc.desc: ParseFromFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, ParseFromFile_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string test("test.json"); + FILE *fp = fopen(test.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) + { + fwrite(content.c_str(), content.size(), 1, fp); + fclose(fp); + EXPECT_TRUE(patchJson.ParseFromFile(test)); + system("rm -f test.json"); + } +} + +/* + * @tc.name: Release_0100 + * @tc.desc: Release. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, Release_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + patchJson.Release(); + EXPECT_TRUE(patchJson.root_ == nullptr); +} + +/* + * @tc.name: IsValid_0100 + * @tc.desc: IsValid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, IsValid_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + EXPECT_TRUE(patchJson.IsValid()); +} + +/* + * @tc.name: ToString_0100 + * @tc.desc: ToString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, ToString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string contents = patchJson.ToString(); + EXPECT_TRUE(!contents.empty()); + EXPECT_TRUE(patchJson.IsValid()); +} + +/* + * @tc.name: GetAppObject_0100 + * @tc.desc: GetAppObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetAppObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::unique_ptr appObj; + EXPECT_TRUE(patchJson.GetAppObject(appObj)); +} + +/* + * @tc.name: GetModuleObject_0100 + * @tc.desc: GetModuleObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetModuleObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::unique_ptr appObj; + EXPECT_TRUE(patchJson.GetModuleObject(appObj)); +} + +/* + * @tc.name: GetBundleName_0100 + * @tc.desc: GetBundleName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetBundleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string bundleName; + EXPECT_TRUE(patchJson.GetBundleName(bundleName)); + EXPECT_STREQ(bundleName.c_str(), "bundleNametest"); +} + +/* + * @tc.name: GetVersionCode_0100 + * @tc.desc: GetVersionCode. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetVersionCode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + int32_t versionCode; + EXPECT_TRUE(patchJson.GetVersionCode(versionCode)); + EXPECT_EQ(versionCode, 100); +} + +/* + * @tc.name: GetVersionName_0100 + * @tc.desc: GetVersionName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetVersionName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string versionName; + EXPECT_TRUE(patchJson.GetVersionName(versionName)); + EXPECT_STREQ(versionName.c_str(), "versionNametest");; +} + +/* + * @tc.name: GetPatchVersionCode_0100 + * @tc.desc: GetPatchVersionCode. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetPatchVersionCode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + int32_t patchVersionCode; + EXPECT_TRUE(patchJson.GetPatchVersionCode(patchVersionCode)); + EXPECT_EQ(patchVersionCode, 200); +} + +/* + * @tc.name: GetPatchVersionName_0100 + * @tc.desc: GetPatchVersionName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetPatchVersionName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string patchVersionName; + EXPECT_TRUE(patchJson.GetPatchVersionName(patchVersionName)); + EXPECT_STREQ(patchVersionName.c_str(), "patchVersionNametest"); +} + +/* + * @tc.name: GetName_0100 + * @tc.desc: GetName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string name; + EXPECT_TRUE(patchJson.GetName(name)); + EXPECT_STREQ(name.c_str(), "nametest"); +} + +/* + * @tc.name: GetType_0100 + * @tc.desc: GetType. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string type; + EXPECT_TRUE(patchJson.GetType(type)); + EXPECT_STREQ(type.c_str(), "typetest"); +} + +/* + * @tc.name: GetDeviceTypes_0100 + * @tc.desc: GetDeviceTypes. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetDeviceTypes_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::list deviceTypes; + EXPECT_TRUE(patchJson.GetDeviceTypes(deviceTypes)); + EXPECT_STREQ(deviceTypes.front().c_str(), "aaaaaaaaaaa"); +} + +/* + * @tc.name: GetOriginalModuleHash_0100 + * @tc.desc: GetOriginalModuleHash. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetOriginalModuleHash_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + std::string originalModuleHash; + EXPECT_TRUE(patchJson.GetOriginalModuleHash(originalModuleHash)); + EXPECT_STREQ(originalModuleHash.c_str(), "originalModuleHashtest"); +} + +/* + * @tc.name: GetHqfInfo_0100 + * @tc.desc: GetHqfInfo. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonTest, GetHqfInfo_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PatchJson patchJson; + EXPECT_TRUE(patchJson.ParseFromString(content)); + + OHOS::AppPackingTool::HqfInfo hqfInfo; + EXPECT_TRUE(patchJson.GetHqfInfo(hqfInfo)); + EXPECT_STREQ(hqfInfo.GetBundleName().c_str(), "bundleNametest"); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn new file mode 100644 index 00000000..3ce1efb0 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("patch_json_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("patch_json_utils_test") { + module_out_path = module_output_path + public_configs = [ ":patch_json_utils_test_config" ] + sources = [ + "../../../../src/json/patch_json.cpp", + "../../../../src/json/patch_json_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "patch_json_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":patch_json_utils_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/patch_json_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/patch_json_utils_test.cpp new file mode 100644 index 00000000..9f6c0f21 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/patch_json_utils_test.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "patch_json_utils.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; +using namespace std; + +namespace OHOS { + +std::string content = "{" + "\"name\": \"Json.CN\"," + "\"app\": {" + "\"bundleName\": \"bundleNametest\"," + "\"versionCode\": 100," + "\"versionName\": \"versionNametest\"," + "\"patchVersionCode\": 200," + "\"patchVersionName\": \"patchVersionNametest\"" + "}," + "\"module\": {" + "\"name\": \"nametest\"," + "\"type\": \"typetest\"," + "\"originalModuleHash\": \"originalModuleHashtest\"," + "\"deviceTypes\": [" + "\"aaaaaaaaaaa\"," + "\"bbbbbbbbbbb\"," + "\"ccccccccccc\"" + "]" + "}" +"}"; + +class PatchJsonUtilsTest : public testing::Test { +public: + PatchJsonUtilsTest() {} + virtual ~PatchJsonUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PatchJsonUtilsTest::SetUpTestCase() {} + +void PatchJsonUtilsTest::TearDownTestCase() {} + +void PatchJsonUtilsTest::SetUp() {} + +void PatchJsonUtilsTest::TearDown() {} + + /* + * @@tc.name: ParsePatchByJsonFilePath_0100 + * @tc.desc: test parse patch by json file path + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonUtilsTest, ParsePatchByJsonFilePath_0100, Function | MediumTest | Level1) +{ + std::string patchJsonFilePath("test.json"); + OHOS::AppPackingTool::HqfInfo hqfInfo; + + FILE *fp = fopen(patchJsonFilePath.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) + { + fwrite(content.c_str(), content.size(), 1, fp); + fclose(fp); + } + EXPECT_TRUE(OHOS::AppPackingTool::PatchJsonUtils::ParsePatchByJsonFilePath(patchJsonFilePath, hqfInfo)); + + system("rm -rf test.json"); +} + + /* + * @@tc.name: ParsePatchByJsonStr_0100 + * @tc.desc: test parse patch by json string + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PatchJsonUtilsTest, ParsePatchByJsonStr_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::HqfInfo hqfInfo; + EXPECT_TRUE(OHOS::AppPackingTool::PatchJsonUtils::ParsePatchByJsonStr(content, hqfInfo)); +} + +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn new file mode 100644 index 00000000..593d0dd1 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn @@ -0,0 +1,51 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("unzip_wrapper_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("unzip_wrapper_test") { + module_out_path = module_output_path + public_configs = [ ":unzip_wrapper_test_config" ] + sources = [ + "../../../src/log.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/zip_wrapper.cpp", + "unzip_wrapper_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":unzip_wrapper_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/unzip_wrapper_test/unzip_wrapper_test.cpp b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/unzip_wrapper_test.cpp new file mode 100644 index 00000000..a9476d18 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/unzip_wrapper_test.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "zip_wrapper.h" +#include "unzip_wrapper.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test_1.hqf" +#define FILE_PATH "/data/unzip_wrapper_test" +#define TEMP_PATH "/data/temp" + +class UnzipWrapperTest : public testing::Test { +public: + UnzipWrapperTest() {} + virtual ~UnzipWrapperTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void UnzipWrapperTest::SetUpTestCase() {} + +void UnzipWrapperTest::TearDownTestCase() {} + +void UnzipWrapperTest::SetUp() {} + +void UnzipWrapperTest::TearDown() {} + +/* + * @tc.name: Open_0100 + * @tc.desc: Open. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UnzipWrapperTest, Open_0100, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + std::string filepath(FILE_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper(path); + + zipWrapper.Open(APPEND_STATUS_CREATE); + int ret = zipWrapper.AddFileOrDirectoryToZip(filepath, OHOS::AppPackingTool::Constants::PARAM_ETS_PATH); + EXPECT_EQ(ret, 0); + zipWrapper.Close(); + + OHOS::AppPackingTool::UnzipWrapper unzipWrapper; + unzipWrapper.Open(path); + EXPECT_TRUE(unzipWrapper.IsOpen()); + + unzipWrapper.Close(); +} + +/* + * @tc.name: Open_0200 + * @tc.desc: Open. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UnzipWrapperTest, Open_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::UnzipWrapper unzipWrapper(OUT_PATH); + unzipWrapper.Open(); + EXPECT_TRUE(unzipWrapper.IsOpen()); + + unzipWrapper.Close(); +} + +/* + * @tc.name: UnzipFile_0300 + * @tc.desc: UnzipFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UnzipWrapperTest, UnzipFile_0300, Function | MediumTest | Level1) +{ + std::string filepath(TEMP_PATH); + OHOS::AppPackingTool::UnzipWrapper unzipWrapper(OUT_PATH); + unzipWrapper.Open(); + int ret = unzipWrapper.UnzipFile(TEMP_PATH); + EXPECT_EQ(ret, 0); + + unzipWrapper.Close(); + + std::string cmd("rm -rf "); + cmd += TEMP_PATH; + system(cmd.c_str()); + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn new file mode 100644 index 00000000..ad62e51e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("zip_utils_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("zip_utils_test") { + module_out_path = module_output_path + public_configs = [ ":zip_utils_test_config" ] + sources = [ + "../../../src/log.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "zip_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":zip_utils_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp b/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp new file mode 100644 index 00000000..9bf040d2 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#include "zip_constants.h" +#define private public +#define protected public +#include "utils.h" +#include "unzip_wrapper.h" +#include "zip_wrapper.h" +#include "zip_utils.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test_1.hqf" +#define FILE_PATH "/data/zip_utils_test" +#define TEMP_PATH "/data/temp" + +class ZipUtilsTest : public testing::Test { +public: + ZipUtilsTest() {} + virtual ~ZipUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void ZipUtilsTest::SetUpTestCase() {} + +void ZipUtilsTest::TearDownTestCase() {} + +void ZipUtilsTest::SetUp() {} + +void ZipUtilsTest::TearDown() {} + +/* + * @tc.name: Zip_0100 + * @tc.desc: zip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, Zip_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + + int ret = zipUtils.Zip(filepath, zippath, OHOS::AppPackingTool::Constants::LIB_PATH); + EXPECT_EQ(ret, 0); +} + +/* + * @tc.name: Unzip_0200 + * @tc.desc: Unzip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, Unzip_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(TEMP_PATH); + std::string zippath(OUT_PATH); + int ret = zipUtils.Unzip(zippath, filepath); + EXPECT_EQ(ret, 0); + + std::string cmd("rm -rf "); + cmd += TEMP_PATH; + system(cmd.c_str()); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: IsFileExistsInZip_0300 + * @tc.desc: IsFileExistsInZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, IsFileExistsInZip_0300, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + + auto exist = zipUtils.IsFileExistsInZip(zippath, std::string("zip_utils_test")); + EXPECT_TRUE(exist); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: IsFileNameExistsInZip_0400 + * @tc.desc: IsFileNameExistsInZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, IsFileNameExistsInZip_0400, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + + auto exist = zipUtils.IsFileNameExistsInZip(zippath, std::string("zip_utils_test")); + EXPECT_TRUE(exist); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: GetFileContentFromZip_0500 + * @tc.desc: GetFileContentFromZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, GetFileContentFromZip_0500, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + std::string fileContent; + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + + EXPECT_TRUE(zipUtils.GetFileContentFromZip(zippath, std::string("zip_utils_test"), fileContent)); + EXPECT_TRUE(!fileContent.empty()); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: GetUnzipCurrentFileContent_0600 + * @tc.desc: GetUnzipCurrentFileContent. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, GetUnzipCurrentFileContent_0600, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + std::string fileContent; + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + + unzFile unzipFile = unzOpen64(zippath.c_str()); + EXPECT_TRUE(zipUtils.GetUnzipCurrentFileContent(unzipFile, fileContent)); + EXPECT_TRUE(!fileContent.empty()); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: GetResourceMapFromZip_0700 + * @tc.desc: GetResourceMapFromZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, GetResourceMapFromZip_0700, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + std::map resourceMap; + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + + EXPECT_TRUE(zipUtils.GetResourceMapFromZip(zippath, resourceMap)); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} + +/* + * @tc.name: AddToResourceMap_0800 + * @tc.desc: AddToResourceMap. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipUtilsTest, AddToResourceMap_0800, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::ZipUtils zipUtils; + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + std::string filePathInZip("zip_utils_test"); + std::map resourceMap; + + int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + EXPECT_EQ(ret, 0); + unzFile unzipFile = unzOpen64(zippath.c_str()); + EXPECT_TRUE(zipUtils.AddToResourceMap(unzipFile, filePathInZip, resourceMap)); + + std::string cmd2("rm -rf "); + cmd2 += OUT_PATH; + system(cmd2.c_str()); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn b/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn new file mode 100644 index 00000000..75a9440d --- /dev/null +++ b/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("zip_wrapper_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("zip_wrapper_test") { + module_out_path = module_output_path + public_configs = [ ":zip_wrapper_test_config" ] + sources = [ + "../../../src/log.cpp", + "../../../src/zip_wrapper.cpp", + "zip_wrapper_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":zip_wrapper_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/zip_wrapper_test/zip_wrapper_test.cpp b/packing_tool/frameworks/test/unittest/zip_wrapper_test/zip_wrapper_test.cpp new file mode 100644 index 00000000..de1dc4fe --- /dev/null +++ b/packing_tool/frameworks/test/unittest/zip_wrapper_test/zip_wrapper_test.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#include "zip_constants.h" +#define private public +#define protected public +#include "zip_wrapper.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define OUT_PATH "/data/test_1.hqf" +#define FILE_PATH "/data/packager_test" + +std::string content = "{" + "\"name\": \"xxx.CN\"," + "\"url\": \"http://www.xxx.cn\"," + "\"page\": 88," + "\"isNonProfit\": true" +"}"; + +class ZipWrapperTest : public testing::Test { +public: + ZipWrapperTest() {} + virtual ~ZipWrapperTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void ZipWrapperTest::SetUpTestCase() {} + +void ZipWrapperTest::TearDownTestCase() {} + +void ZipWrapperTest::SetUp() {} + +void ZipWrapperTest::TearDown() {} + +/* + * @tc.name: Open_0100 + * @tc.desc: Open. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipWrapperTest, Open_0100, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper; + zipWrapper.Open(path); + EXPECT_TRUE(zipWrapper.IsOpen()); + + zipWrapper.Close(); + EXPECT_FALSE(zipWrapper.IsOpen()); +} + +/* + * @tc.name: Open_0200 + * @tc.desc: Open. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipWrapperTest, Open_0200, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper(path); + zipWrapper.Open(APPEND_STATUS_CREATE); + EXPECT_TRUE(zipWrapper.IsOpen()); + + zipWrapper.Close(); + EXPECT_FALSE(zipWrapper.IsOpen()); +} + +/* + * @tc.name: AddFileOrDirectoryToZip_0400 + * @tc.desc: AddFileOrDirectoryToZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipWrapperTest, AddFileOrDirectoryToZip_0400, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper(path); + + zipWrapper.Open(APPEND_STATUS_CREATE); + std::string filepath(FILE_PATH); + std::string zippath(OUT_PATH); + int ret = zipWrapper.AddFileOrDirectoryToZip(filepath, zippath); + EXPECT_EQ(ret, 0); + + zipWrapper.Close(); +} + +/* + * @tc.name: WriteStringToZip_0500 + * @tc.desc: WriteStringToZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipWrapperTest, WriteStringToZip_0500, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper(path); + + zipWrapper.Open(APPEND_STATUS_CREATE); + int ret = zipWrapper.WriteStringToZip(content, OHOS::AppPackingTool::Constants::PARAM_JSON_PATH); + EXPECT_EQ(ret, 0); + + std::string filepath(FILE_PATH); + ret = zipWrapper.AddFileOrDirectoryToZip(filepath, OHOS::AppPackingTool::Constants::PARAM_LIB_PATH); + EXPECT_EQ(ret, 0); + + ret = zipWrapper.AddFileOrDirectoryToZip(filepath, OHOS::AppPackingTool::Constants::PARAM_RESOURCES_PATH); + EXPECT_EQ(ret, 0); + + ret = zipWrapper.AddFileOrDirectoryToZip(filepath, OHOS::AppPackingTool::Constants::PARAM_ETS_PATH); + EXPECT_EQ(ret, 0); + + zipWrapper.Close(); + + std::string cmd = {"rm -f "}; + cmd += OUT_PATH; + system(cmd.c_str()); +} + +/* + * @tc.name: AddEmptyDirToZip_0600 + * @tc.desc: AddEmptyDirToZip. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ZipWrapperTest, AddEmptyDirToZip_0600, Function | MediumTest | Level1) +{ + std::string path(OUT_PATH); + OHOS::AppPackingTool::ZipWrapper zipWrapper(path); + fs::create_directories("temp"); + std::string emptypath("./temp"); + zipWrapper.Open(APPEND_STATUS_CREATE); + int ret = zipWrapper.AddEmptyDirToZip(emptypath); + EXPECT_EQ(ret, ZIP_OK); + + zipWrapper.Close(); + + std::string cmd = {"rm -f "}; + cmd += OUT_PATH; + system(cmd.c_str()); +} +} // namespace OHOS \ No newline at end of file -- Gitee From 1a322ac4bb93af6b07466a863cd2ac1345cb20c4 Mon Sep 17 00:00:00 2001 From: 18710539902 Date: Mon, 26 Aug 2024 15:34:05 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 18710539902 --- .../test/unittest/shell_command_test/BUILD.gn | 80 ++++ .../shell_command_test/shell_command_test.cpp | 228 ++++++++++ .../test/unittest/utils_Test/BUILD.gn | 50 +++ .../test/unittest/utils_Test/utils_test.cpp | 412 ++++++++++++++++++ 4 files changed, 770 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/shell_command_test/shell_command_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp diff --git a/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn b/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn new file mode 100644 index 00000000..be86f3ee --- /dev/null +++ b/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn @@ -0,0 +1,80 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("shell_command_test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + "../../../../../../../third_party/json/include", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("shell_command_test") { + module_out_path = module_output_path + public_configs = [ ":shell_command_test_config" ] + sources = [ + "../../../src/app_packager.cpp", + "../../../src/appqf_packager.cpp", + "../../../src/fast_app_packager.cpp", + "../../../src/hap_packager.cpp", + "../../../src/hqf_packager.cpp", + "../../../src/hqf_verify.cpp", + "../../../src/hsp_packager.cpp", + "../../../src/json/distro_filter.cpp", + "../../../src/json/hap_verify_info.cpp", + "../../../src/json/hap_verify_utils.cpp", + "../../../src/json/json_utils.cpp", + "../../../src/json/module_json.cpp", + "../../../src/json/module_json_fa.cpp", + "../../../src/json/module_json_stage.cpp", + "../../../src/json/module_json_utils.cpp", + "../../../src/json/normalize_version_utils.cpp", + "../../../src/json/pack_info.cpp", + "../../../src/json/pack_info_utils.cpp", + "../../../src/json/patch_json.cpp", + "../../../src/json/patch_json_utils.cpp", + "../../../src/json/pt_json.cpp", + "../../../src/log.cpp", + "../../../src/multiapp_packager.cpp", + "../../../src/package_normalize.cpp", + "../../../src/packager.cpp", + "../../../src/shell_command.cpp", + "../../../src/unzip_wrapper.cpp", + "../../../src/utils.cpp", + "../../../src/version_normalize.cpp", + "../../../src/zip_utils.cpp", + "../../../src/zip_wrapper.cpp", + "shell_command_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":shell_command_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/shell_command_test/shell_command_test.cpp b/packing_tool/frameworks/test/unittest/shell_command_test/shell_command_test.cpp new file mode 100644 index 00000000..710d4f1c --- /dev/null +++ b/packing_tool/frameworks/test/unittest/shell_command_test/shell_command_test.cpp @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#include "zip_constants.h" +#define private public +#define protected public +#include "packager.h" +#include "shell_command.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +class ShellCommandTest : public testing::Test { +public: + ShellCommandTest() {} + virtual ~ShellCommandTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void ShellCommandTest::SetUpTestCase() {} + +void ShellCommandTest::TearDownTestCase() {} + +void ShellCommandTest::SetUp() {} + +void ShellCommandTest::TearDown() {} + +/* + * @tc.name: CreateCommandMap_0100 + * @tc.desc: CreateCommandMap. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, CreateCommandMap_0100, Function | MediumTest | Level1) +{ + int argc = 2; + const char *argv[] = { + "ohos_packing_tool", + "pack", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + int ret = shellcmd.CreateCommandMap(); + EXPECT_EQ(ret, 0); +} + +/* + * @tc.name: getPackager_0200 + * @tc.desc: getPackager. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, getPackager_0200, Function | MediumTest | Level1) +{ + int argc = 16; + const char *argv[] = { + "ohos_packing_tool", + "pack", + "--mode", + "hap", + "--json-path", + "/data/testunpack/test_hqf_unpacking/patch.json", + "--lib-path", + "/data/testunpack/test_hqf_unpacking/libs", + "--resources-path", + "/data/testunpack/test_hqf_unpacking/resources", + "--ets-pat", + "/data/testunpack/test_hqf_unpacking/ets", + "--out-path", + "/data/hqfpacking/test_1.hqf", + "--force", + "true", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + int ret = shellcmd.ParseParam(); + EXPECT_EQ(ret, 0); + std::unique_ptr packager = shellcmd.getPackager(); + EXPECT_TRUE(packager != nullptr); + shellcmd.parameterMap_[OHOS::AppPackingTool::Constants::PARAM_MODE] = "hsp"; + std::unique_ptr packager2 = shellcmd.getPackager(); + EXPECT_TRUE(packager2 != nullptr); + shellcmd.parameterMap_[OHOS::AppPackingTool::Constants::PARAM_MODE] = ""; + std::unique_ptr packager3 = shellcmd.getPackager(); + EXPECT_TRUE(packager3 == nullptr); +} + +/* + * @tc.name: OnCommand_0300 + * @tc.desc: OnCommand. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, OnCommand_0300, Function | MediumTest | Level1) +{ + int argc = 2; + const char *argv[] = { + "ohos_packing_tool", + "help", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + int ret = shellcmd.CreateCommandMap(); + EXPECT_EQ(ret, 0); + ret = shellcmd.OnCommand(); + EXPECT_EQ(ret, 0); +} + +/* + * @tc.name: ExecCommand_0400 + * @tc.desc: ExecCommand. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, ExecCommand_0400, Function | MediumTest | Level1) +{ + int argc = 16; + const char *argv[] = { + "ohos_packing_tool", + "pack", + "--mode", + "hqf", + "--json-path", + "/data/testunpack/test_hqf_unpacking/patch.json", + "--lib-path", + "/data/testunpack/test_hqf_unpacking/libs", + "--resources-path", + "/data/testunpack/test_hqf_unpacking/resources", + "--ets-pat", + "/data/testunpack/test_hqf_unpacking/ets", + "--out-path", + "/data/hqfpacking/test_1.hqf", + "--force", + "true", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + std::string resultReceiver = shellcmd.ExecCommand(); + EXPECT_FALSE(resultReceiver.empty()); +} + +/* + * @tc.name: RunAsHelpCommand_0500 + * @tc.desc: RunAsHelpCommand. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, RunAsHelpCommand_0500, Function | MediumTest | Level1) +{ + int argc = 4; + const char *argv[] = { + "ohos_packing_tool", + "pack", + "--mode", + "hqf", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + EXPECT_EQ(shellcmd.RunAsHelpCommand(), 0); +} + +/* + * @tc.name: RunAsPackCommand_0600 + * @tc.desc: RunAsPackCommand. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, RunAsPackCommand_0600, Function | MediumTest | Level1) +{ + int argc = 4; + const char *argv[] = { + "ohos_packing_tool", + "pack", + "--mode", + "hqf", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + EXPECT_EQ(shellcmd.RunAsPackCommand(), 0); +} + +/* + * @tc.name: RunAsUnpackCommand_0700 + * @tc.desc: RunAsUnpackCommand. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ShellCommandTest, RunAsUnpackCommand_0700, Function | MediumTest | Level1) +{ + int argc = 4; + const char *argv[] = { + "ohos_packing_tool", + "pack", + "--mode", + "hqf", + }; + + OHOS::AppPackingTool::ShellCommand shellcmd(argc, const_cast(argv), OHOS::AppPackingTool::TOOL_NAME); + EXPECT_EQ(shellcmd.RunAsUnpackCommand(), 0); +} +} // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn b/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn new file mode 100644 index 00000000..eda74089 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("utils_Test_config") { + include_dirs = [ + "../../../include", + "../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("utils_Test") { + module_out_path = module_output_path + public_configs = [ ":utils_Test_config" ] + sources = [ + "../../../src/log.cpp", + "../../../src/utils.cpp", + "utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":utils_Test" ] +} diff --git a/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp b/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp new file mode 100644 index 00000000..c1c7ee4a --- /dev/null +++ b/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp @@ -0,0 +1,412 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include "constants.h" +#define private public +#define protected public +#include "utils.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +#define FILE_PATH "/data/utils_Test" +#define TEMP_PATH "/data" + +class UtilsTest : public testing::Test { +public: + UtilsTest() {} + virtual ~UtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void UtilsTest::SetUpTestCase() {} + +void UtilsTest::TearDownTestCase() {} + +void UtilsTest::SetUp() {} + +void UtilsTest::TearDown() {} + +/* + * @tc.name: GetFileContent_0100 + * @tc.desc: GetFileContent. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetFileContent_0100, Function | MediumTest | Level1) +{ + std::string content = OHOS::AppPackingTool::Utils::GetFileContent(FILE_PATH); + EXPECT_TRUE(!content.empty()); +} + +/* + * @tc.name: ListToString_0100 + * @tc.desc: ListToString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, ListToString_0100, Function | MediumTest | Level1) +{ + std::list lst = { + "aaaaaaa", + "bbbbbbb", + "ccccccc" + }; + + std::string str = OHOS::AppPackingTool::Utils::ListToString(lst); + EXPECT_TRUE(!str.empty()); +} + +/* + * @tc.name: ReplaceAll_0200 + * @tc.desc: ReplaceAll. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, ReplaceAll_0200, Function | MediumTest | Level1) +{ + std::string str = {"1234567890"}; + std::string from = {"456"}; + std::string to = {"AAA"}; + str = OHOS::AppPackingTool::Utils::ReplaceAll(str, from, to); + EXPECT_NE(str.find(to), 0); +} + +/* + * @tc.name: GetFileLength_0300 + * @tc.desc: GetFileLength. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetFileLength_0300, Function | MediumTest | Level1) +{ + int64_t len = OHOS::AppPackingTool::Utils::GetFileLength(FILE_PATH); + EXPECT_NE(len, 0); +} + +/* + * @tc.name: EndsWith_0400 + * @tc.desc: EndsWith. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, EndsWith_0400, Function | MediumTest | Level1) +{ + std::string str = {"test.txt"}; + std::string suffix = {".txt"}; + EXPECT_TRUE(OHOS::AppPackingTool::Utils::EndsWith(str, suffix)); +} + +/* + * @tc.name: CheckDisjoint_0500 + * @tc.desc: CheckDisjoint. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CheckDisjoint_0500, Function | MediumTest | Level1) +{ + std::list list1 = {"111111", "2222222"}; + std::list list2 = {"3333333", "4444444"}; + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckDisjoint(list1, list2)); +} + +/* + * @tc.name: CheckContainsAll_0600 + * @tc.desc: CheckContainsAll. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CheckContainsAll_0600, Function | MediumTest | Level1) +{ + std::list list1 = {"111111", "2222222", "3333333", "4444444"}; + std::list list2 = {"111111", "2222222"}; + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckContainsAll(list1, list2)); +} + +/* + * @tc.name: GetSha256Str_0700 + * @tc.desc: GetSha256Str. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetSha256Str_0700, Function | MediumTest | Level1) +{ + std::string str = {"1111112222222"}; + EXPECT_TRUE(!OHOS::AppPackingTool::Utils::GetSha256Str(str).empty()); +} + +/* + * @tc.name: GetSha256File_0800 + * @tc.desc: GetSha256File. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetSha256File_0800, Function | MediumTest | Level1) +{ + EXPECT_TRUE(!OHOS::AppPackingTool::Utils::GetSha256File(FILE_PATH).empty()); +} + +/* + * @tc.name: IsFileExists_0900 + * @tc.desc: IsFileExists. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, IsFileExists_0900, Function | MediumTest | Level1) +{ + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFileExists(FILE_PATH)); +} + +/* + * @tc.name: IsFile_1000 + * @tc.desc: IsFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, IsFile_1000, Function | MediumTest | Level1) +{ + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFile(FILE_PATH)); +} + +/* + * @tc.name: IsDirectory_1100 + * @tc.desc: IsDirectory. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, IsDirectory_1100, Function | MediumTest | Level1) +{ + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsDirectory(TEMP_PATH)); +} + +/* + * @tc.name: RemoveFile_1200 + * @tc.desc: RemoveFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, RemoveFile_1200, Function | MediumTest | Level1) +{ + system("touch patch.json"); + std::string file("patch.json"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::RemoveFile(file)); +} + +/* + * @tc.name: RemoveDirectory_1300 + * @tc.desc: RemoveDirectory. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, RemoveDirectory_1300, Function | MediumTest | Level1) +{ + system("mkdir tempdir"); + std::string path("tempdir"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::RemoveDirectory(path)); +} + +/* + * @tc.name: GetFilePathByDir_1400 + * @tc.desc: GetFilePathByDir. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetFilePathByDir_1400, Function | MediumTest | Level1) +{ + std::string path("tempdir"); + std::string file("testfile"); + std::string filePath("tempdir/testfile"); + std::string temp = OHOS::AppPackingTool::Utils::GetFilePathByDir(path, file); + EXPECT_EQ(temp.compare(filePath), 0); +} + +/* + * @tc.name: ForceCreateDirectory_1500 + * @tc.desc: ForceCreateDirectory. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, ForceCreateDirectory_1500, Function | MediumTest | Level1) +{ + std::string path("tempdir"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::ForceCreateDirectory(path)); +} + +/* + * @tc.name: ForceRemoveDirectory_1600 + * @tc.desc: ForceRemoveDirectory. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, ForceRemoveDirectory_1600, Function | MediumTest | Level1) +{ + std::string path("tempdir"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::ForceCreateDirectory(path)); + + EXPECT_TRUE(OHOS::AppPackingTool::Utils::ForceRemoveDirectory(path)); +} + +/* + * @tc.name: CopyListToSet_1700 + * @tc.desc: CopyListToSet. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CopyListToSet_1700, Function | MediumTest | Level1) +{ + std::list lst; + lst.push_front("test"); + std::set st; + OHOS::AppPackingTool::Utils::CopyListToSet(lst, st); + auto it = st.find("test"); + EXPECT_TRUE(it != st.end()); +} + +/* + * @tc.name: CheckListContain_1800 + * @tc.desc: CheckListContain. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CheckListContain_1800, Function | MediumTest | Level1) +{ + std::string value("test"); + std::list lst; + lst.push_front(value.c_str()); + + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckListContain(lst, std::string(value))); +} + +/* + * @tc.name: GetListDistinctCount_1900 + * @tc.desc: GetListDistinctCount. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetListDistinctCount_1900, Function | MediumTest | Level1) +{ + std::string value("test"); + std::list lst; + lst.push_front(value.c_str()); + + EXPECT_EQ(OHOS::AppPackingTool::Utils::GetListDistinctCount(lst), 1); +} + +/* + * @tc.name: GetCeilFileSize_2000 + * @tc.desc: GetCeilFileSize. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetCeilFileSize_2000, Function | MediumTest | Level1) +{ + long fileSize = 12 * 1024 * 1014L; + int sizeLimit = 12; + + EXPECT_TRUE(OHOS::AppPackingTool::Utils::GetCeilFileSize(fileSize, sizeLimit) < 12); +} + +/* + * @tc.name: IsPositiveInteger_2100 + * @tc.desc: IsPositiveInteger. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, IsPositiveInteger_2100, Function | MediumTest | Level1) +{ + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsPositiveInteger(std::string("123"), 0, 200)); +} + +/* + * @tc.name: CheckFileName_2200 + * @tc.desc: CheckFileName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CheckFileName_2200, Function | MediumTest | Level1) +{ + std::string filePath(FILE_PATH); + std::string fileName("utils_Test"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckFileName(filePath, fileName)); +} + +/* + * @tc.name: CheckFileSuffix_2300 + * @tc.desc: CheckFileSuffix. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CheckFileSuffix_2300, Function | MediumTest | Level1) +{ + std::string filePath("aaaa.hsp"); + std::string suffix(".hsp"); + system("touch aaaa.hsp"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckFileSuffix(filePath, suffix)); + system("rm aaaa.hsp"); +} + +/* + * @tc.name: GenerateUUID_2400 + * @tc.desc: GenerateUUID. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GenerateUUID_2400, Function | MediumTest | Level1) +{ + std::string id = OHOS::AppPackingTool::Utils::GenerateUUID(); + EXPECT_TRUE(!id.empty()); +} + +/* + * @tc.name: CopyFile_2500 + * @tc.desc: CopyFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, CopyFile_2500, Function | MediumTest | Level1) +{ + std::string srcPath(FILE_PATH); + std::string dstPath("aaaaa"); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CopyFile(srcPath, dstPath)); + system("rm aaaaa"); +} + +/* + * @tc.name: GetFormattedPath_2600 + * @tc.desc: GetFormattedPath. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(UtilsTest, GetFormattedPath_2600, Function | MediumTest | Level1) +{ + std::string path(FILE_PATH); + std::string formattedPath; + EXPECT_TRUE(OHOS::AppPackingTool::Utils::GetFormattedPath(path, formattedPath)); +} +} // namespace OHOS -- Gitee From a2a70098913edbd163c70dd34a709231ab772696 Mon Sep 17 00:00:00 2001 From: 18710539902 Date: Mon, 26 Aug 2024 15:28:55 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 18710539902 --- .../unittest/json/distro_filter_test/BUILD.gn | 46 ++ .../distro_filter_test/distro_filter_test.cpp | 165 ++++++ .../json/hap_verify_utils_test/BUILD.gn | 48 ++ .../hap_verify_utils_test.cpp | 198 +++++++ .../unittest/json/json_utils_test/BUILD.gn | 46 ++ .../json/json_utils_test/json_utils_test.cpp | 146 +++++ .../normalize_version_utils_test/BUILD.gn | 46 ++ .../normalize_version_utils_test.cpp | 98 ++++ .../unittest/json/pack_info_test/BUILD.gn | 46 ++ .../json/pack_info_test/pack_info_test.cpp | 351 ++++++++++++ .../test/unittest/json/pt_json_test/BUILD.gn | 50 ++ .../json/pt_json_test/pt_json_test.cpp | 498 ++++++++++++++++++ 12 files changed, 1738 insertions(+) create mode 100644 packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/distro_filter_test/distro_filter_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/hap_verify_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/normalize_version_utils_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/pack_info_test/pack_info_test.cpp create mode 100644 packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn create mode 100644 packing_tool/frameworks/test/unittest/json/pt_json_test/pt_json_test.cpp diff --git a/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn new file mode 100644 index 00000000..96a54f01 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn @@ -0,0 +1,46 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("distro_filter_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("distro_filter_test") { + module_out_path = module_output_path + public_configs = [ ":distro_filter_test_config" ] + sources = [ + "../../../../src/json/distro_filter.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "distro_filter_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/distro_filter_test/distro_filter_test.cpp b/packing_tool/frameworks/test/unittest/json/distro_filter_test/distro_filter_test.cpp new file mode 100644 index 00000000..dde26177 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/distro_filter_test/distro_filter_test.cpp @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "distro_filter.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +std::string policyValueJsonString = "{" + "\"policy\": \"\"," + "\"value\": [" + "\"xxx\"" + "]" +"}"; + +std::string policyValueString = "{" + "\\\"policy\\\": \\\"\\\"," + "\\\"value\\\": [" + "\\\"xxx\\\"" + "]" +"}"; + +std::string distroFilterJsonString = "{" + "\"apiVersion\": \"" + policyValueString + "\"," + "\"screenShape\": \"" + policyValueString + "\"," + "\"screenDensity\": \"" + policyValueString + "\"," + "\"screenWindow\": \"" + policyValueString + "\"," + "\"countryCode\": \"" + policyValueString + "\"" +"}"; + +std::string policyValueJsonString2 = "{" + "\"policy\": \"xxx\"," + "\"value\": [" + "\"xxx\"" + "]" +"}"; + +std::string policyValueString2 = "{" + "\\\"policy\\\": \\\"xxx\\\"," + "\\\"value\\\": [" + "\\\"xxx\\\"" + "]" +"}"; + +std::string distroFilterJsonString2 = "{" + "\"apiVersion\": \"" + policyValueString2 + "\"," + "\"screenShape\": \"" + policyValueString2 + "\"," + "\"screenDensity\": \"" + policyValueString2 + "\"," + "\"screenWindow\": \"" + policyValueString2 + "\"," + "\"countryCode\": \"" + policyValueString2 + "\"" +"}"; + +class DistroFilterTest : public testing::Test { +public: + DistroFilterTest() {} + virtual ~DistroFilterTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void DistroFilterTest::SetUpTestCase() {} + +void DistroFilterTest::TearDownTestCase() {} + +void DistroFilterTest::SetUp() {} + +void DistroFilterTest::TearDown() {} + +/* + * @tc.name: PolicyValue_ParseFromString_0100 + * @tc.desc: PolicyValue Function Test. + * ParseFromString/IsEmpty + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(DistroFilterTest, PolicyValue_ParseFromString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PolicyValue policyValue; + EXPECT_TRUE(policyValue.ParseFromString(policyValueJsonString)); + EXPECT_TRUE(policyValue.IsEmpty()); +} + +/* + * @tc.name: PolicyValue_ParseFromString_0200 + * @tc.desc: PolicyValue Function Test. + * ParseFromString/IsEmpty + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(DistroFilterTest, PolicyValue_ParseFromString_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PolicyValue policyValue; + EXPECT_TRUE(policyValue.ParseFromString(policyValueJsonString2)); + EXPECT_FALSE(policyValue.IsEmpty()); +} + +/* + * @tc.name: DistroFilter_ParseFromString_0100 + * @tc.desc: DistroFilter Function Test. + * ParseFromString/ParseApiVersion/ParseScreenShape/ParseScreenDensity/ParseScreenWindow/ParseCountryCode + * /IsEmpty/Dump + * PolicyValue Function Test. + * ParseFromString/IsEmpty + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(DistroFilterTest, DistroFilter_ParseFromString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::DistroFilter distroFilter; + EXPECT_TRUE(distroFilter.ParseFromString(distroFilterJsonString)); + EXPECT_TRUE(distroFilter.IsEmpty()); + EXPECT_EQ(distroFilter.Dump(), ""); +} + +/* + * @tc.name: DistroFilter_ParseFromString_0200 + * @tc.desc: DistroFilter Function Test. + * ParseFromString/ParseApiVersion/ParseScreenShape/ParseScreenDensity/ParseScreenWindow/ParseCountryCode + * /IsEmpty/Dump + * PolicyValue Function Test. + * ParseFromString/IsEmpty + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(DistroFilterTest, DistroFilter_ParseFromString_0200, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::DistroFilter distroFilter; + EXPECT_TRUE(distroFilter.ParseFromString(distroFilterJsonString2)); + EXPECT_FALSE(distroFilter.IsEmpty()); + EXPECT_EQ(distroFilter.Dump(), + "distroFilter: apiVersion: policy is xxx, " + "value is xxx screenShape: policy is xxx, " + "value is xxx screenDensity: policy is xxx, " + "value is xxx screenWindow: policy is xxx, " + "value is xxx countryCode: policy is xxx, " + "value is xxx"); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn new file mode 100644 index 00000000..53b8a174 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn @@ -0,0 +1,48 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("hap_verify_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("hap_verify_utils_test") { + module_out_path = module_output_path + public_configs = [ ":hap_verify_utils_test_config" ] + sources = [ + "../../../../src/json/distro_filter.cpp", + "../../../../src/json/hap_verify_info.cpp", + "../../../../src/json/hap_verify_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "hap_verify_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/hap_verify_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/hap_verify_utils_test.cpp new file mode 100644 index 00000000..aa6db906 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/hap_verify_utils_test.cpp @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "hap_verify_utils.h" +#include "hap_verify_info.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +class HapVerifyUtilsTest : public testing::Test { +public: + HapVerifyUtilsTest() {} + virtual ~HapVerifyUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void HapVerifyUtilsTest::SetUpTestCase() {} + +void HapVerifyUtilsTest::TearDownTestCase() {} + +void HapVerifyUtilsTest::SetUp() {} + +void HapVerifyUtilsTest::TearDown() {} + +namespace { + OHOS::AppPackingTool::HapVerifyInfo hapVerifyInfo1; + OHOS::AppPackingTool::HapVerifyInfo hapVerifyInfo2; +} + +void InitHapVerifyInfo1() +{ + // hapVerifyInfo1 + hapVerifyInfo1.SetBundleName("test"); + hapVerifyInfo1.SetBundleType("hap"); + hapVerifyInfo1.SetVendor("vendor"); + + OHOS::AppPackingTool::Version version1; + version1.versionCode = 1; + version1.versionName = "1.0.0"; + version1.minCompatibleVersionCode = 1; + hapVerifyInfo1.SetVersion(version1); + + OHOS::AppPackingTool::ModuleApiVersion moduleApiVersion1; + moduleApiVersion1.compatibleApiVersion = 1; + moduleApiVersion1.targetApiVersion = 1; + moduleApiVersion1.releaseType = "release"; + hapVerifyInfo1.SetApiVersion(moduleApiVersion1); + + hapVerifyInfo1.SetTargetBundleName("test"); + hapVerifyInfo1.SetTargetPriority(1); + hapVerifyInfo1.SetDebug(false); + hapVerifyInfo1.SetModuleName("test"); + hapVerifyInfo1.SetModuleType("entry"); + + OHOS::AppPackingTool::MultiAppMode multiAppMode1; + multiAppMode1.multiAppModeType = "standard"; + multiAppMode1.maxCount = 1; + hapVerifyInfo1.SetMultiAppMode(multiAppMode1); + + const std::list deviceTypes1 = {"phone", "watch"}; + hapVerifyInfo1.SetDeviceTypes(deviceTypes1); + + OHOS::AppPackingTool::ApiVersion apiVersion1; + apiVersion1.policy = "include"; + + OHOS::AppPackingTool::ScreenShape screenShape1; + screenShape1.policy = "include"; + + OHOS::AppPackingTool::ScreenDensity screenDensity1; + screenDensity1.policy = "include"; + + OHOS::AppPackingTool::ScreenWindow screenWindow1; + screenWindow1.policy = "include"; + + OHOS::AppPackingTool::CountryCode countryCode1; + countryCode1.policy = "include"; + + OHOS::AppPackingTool::DistroFilter distroFilter1; + distroFilter1.apiVersion = apiVersion1; + distroFilter1.screenShape = screenShape1; + distroFilter1.screenDensity = screenDensity1; + distroFilter1.screenWindow = screenWindow1; + distroFilter1.countryCode = countryCode1; + + hapVerifyInfo1.SetDistroFilter(distroFilter1); +} + +void InitHapVerifyInfo2() +{ + // hapVerifyInfo2 + hapVerifyInfo2.SetBundleName("test"); + hapVerifyInfo2.SetBundleType("hap"); + hapVerifyInfo2.SetVendor("vendor"); + + OHOS::AppPackingTool::Version version2; + version2.versionCode = 1; + version2.versionName = "1.0.0"; + version2.minCompatibleVersionCode = 1; + hapVerifyInfo2.SetVersion(version2); + + OHOS::AppPackingTool::ModuleApiVersion moduleApiVersion2; + moduleApiVersion2.compatibleApiVersion = 1; + moduleApiVersion2.targetApiVersion = 1; + moduleApiVersion2.releaseType = "release"; + hapVerifyInfo2.SetApiVersion(moduleApiVersion2); + + hapVerifyInfo2.SetTargetBundleName("test"); + hapVerifyInfo2.SetTargetPriority(1); + hapVerifyInfo2.SetDebug(false); + hapVerifyInfo2.SetModuleName("test2"); + hapVerifyInfo2.SetModuleType("entry"); + + OHOS::AppPackingTool::MultiAppMode multiAppMode2; + multiAppMode2.multiAppModeType = "standard"; + multiAppMode2.maxCount = 1; + hapVerifyInfo2.SetMultiAppMode(multiAppMode2); + + const std::list deviceTypes2 = {"computer", "ipad"}; + hapVerifyInfo2.SetDeviceTypes(deviceTypes2); + + OHOS::AppPackingTool::ApiVersion apiVersion2; + apiVersion2.policy = "exclude"; + apiVersion2.value = {"c", "d"}; + + OHOS::AppPackingTool::ScreenShape screenShape2; + screenShape2.policy = "exclude"; + screenShape2.value = {"c", "d"}; + + OHOS::AppPackingTool::ScreenDensity screenDensity2; + screenDensity2.policy = "exclude"; + screenDensity2.value = {"c", "d"}; + + OHOS::AppPackingTool::ScreenWindow screenWindow2; + screenWindow2.policy = "exclude"; + screenWindow2.value = {"c", "d"}; + + OHOS::AppPackingTool::CountryCode countryCode2; + countryCode2.policy = "exclude"; + countryCode2.value = {"c", "d"}; + + OHOS::AppPackingTool::DistroFilter distroFilter2; + distroFilter2.apiVersion = apiVersion2; + distroFilter2.screenShape = screenShape2; + distroFilter2.screenDensity = screenDensity2; + distroFilter2.screenWindow = screenWindow2; + distroFilter2.countryCode = countryCode2; + + hapVerifyInfo2.SetDistroFilter(distroFilter2); +} + +/* + * @tc.name: CheckHapIsValid_0100 + * @tc.desc: CheckHapIsValid + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(HapVerifyUtilsTest, CheckHapIsValid_0100, Function | MediumTest | Level1) +{ + InitHapVerifyInfo1(); + InitHapVerifyInfo2(); + + // hapVerifyInfos + std::list hapVerifyInfos; + hapVerifyInfos.push_back(hapVerifyInfo1); + hapVerifyInfos.push_back(hapVerifyInfo2); + + OHOS::AppPackingTool::HapVerifyUtils utils; + EXPECT_TRUE(utils.CheckHapIsValid(hapVerifyInfos)); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn new file mode 100644 index 00000000..0d8657e0 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn @@ -0,0 +1,46 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("json_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("json_utils_test") { + module_out_path = module_output_path + public_configs = [ ":json_utils_test_config" ] + sources = [ + "../../../../src/json/json_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "json_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp new file mode 100644 index 00000000..835ce42e --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "json_utils.h" +#include "pt_json.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +const std::string MODULE_JSON_PATH = "/data/module.json"; +const std::string CONFIG_JSON_PATH = "/data/config.json"; +const std::string PATCH_JSON_PATH = "/data/patch.json"; + +const std::string jsonString = "{" + "\"name\": \"Json.CN\"," + "\"app\": \"apptest\"," + "\"module\": {" + "\"name\": \"nametest\"," + "\"type\": \"typetest\"," + "\"deviceTypes\": [" + "\"aaaaaaaaaaa\"," + "\"bbbbbbbbbbb\"," + "\"ccccccccccc\"" + "]" + "}" +"}"; + +class JsonUtilsTest : public testing::Test { +public: + JsonUtilsTest() {} + virtual ~JsonUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void JsonUtilsTest::SetUpTestCase() {} + +void JsonUtilsTest::TearDownTestCase() {} + +void JsonUtilsTest::SetUp() {} + +void JsonUtilsTest::TearDown() {} + +/* + * @tc.name: IsModuleJson_0100 + * @tc.desc: IsModuleJson/CheckFileName + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(JsonUtilsTest, IsModuleJson_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::JsonUtils jsonUtils; + system("touch data/module.json"); + EXPECT_TRUE(jsonUtils.IsModuleJson(MODULE_JSON_PATH)); + system("rm -f data/module.json"); +} + +/* + * @tc.name: IsConfigJson_0100 + * @tc.desc: IsConfigJson/CheckFileName + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(JsonUtilsTest, IsConfigJson_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::JsonUtils jsonUtils; + system("touch data/config.json"); + EXPECT_TRUE(jsonUtils.IsConfigJson(CONFIG_JSON_PATH)); + system("rm -f data/config.json"); +} + +/* + * @tc.name: IsPatchJson_0100 + * @tc.desc: IsPatchJson/CheckFileName + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(JsonUtilsTest, IsPatchJson_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::JsonUtils jsonUtils; + system("touch data/patch.json"); + EXPECT_TRUE(jsonUtils.IsPatchJson(PATCH_JSON_PATH)); + system("rm -f data/patch.json"); +} + +/* + * @tc.name: JsonFromFile_0100 + * @tc.desc: JsonFromFile. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(JsonUtilsTest, JsonFromFile_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::JsonUtils jsonUtils; + std::string test("data/test.json"); + FILE *fp = fopen(test.c_str(), "w"); + EXPECT_TRUE(fp != nullptr); + if (fp != nullptr) { + fwrite(jsonString.c_str(), jsonString.size(), 1, fp); + fclose(fp); + EXPECT_NE(jsonUtils.JsonFromFile(test), nullptr); + } + system("rm -f data/test.json"); +} + +/* + * @tc.name: JsonToFile_0100 + * @tc.desc: JsonToFile/StrToFile + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(JsonUtilsTest, JsonToFile_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::JsonUtils jsonUtils; + system("touch data/test.json"); + EXPECT_TRUE(jsonUtils.JsonToFile(OHOS::AppPackingTool::PtJson::Parse(jsonString), "data/test.json")); + system("rm -f data/test.json"); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn new file mode 100644 index 00000000..4df3f8a8 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn @@ -0,0 +1,46 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("normalize_version_utils_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("normalize_version_utils_test") { + module_out_path = module_output_path + public_configs = [ ":normalize_version_utils_test_config" ] + sources = [ + "../../../../src/json/normalize_version_utils.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "normalize_version_utils_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/normalize_version_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/normalize_version_utils_test.cpp new file mode 100644 index 00000000..bb964cad --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/normalize_version_utils_test.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#define private public +#define protected public +#include "normalize_version_utils.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +class NormalizeVersionUtilsTest : public testing::Test { +public: + NormalizeVersionUtilsTest() {} + virtual ~NormalizeVersionUtilsTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void NormalizeVersionUtilsTest::SetUpTestCase() {} + +void NormalizeVersionUtilsTest::TearDownTestCase() {} + +void NormalizeVersionUtilsTest::SetUp() {} + +void NormalizeVersionUtilsTest::TearDown() {} + +/* + * @tc.name: ToString_0100 + * @tc.desc: ToString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(NormalizeVersionUtilsTest, ToString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::NormalizeVersion normalizeVersion; + normalizeVersion.originVersionCode = 100; + normalizeVersion.originVersionName = "versionNameTest"; + normalizeVersion.moduleName = "nameTest"; + + OHOS::AppPackingTool::NormalizeVersionUtils utils; + EXPECT_EQ(utils.ToString(normalizeVersion), "{\"moduleName\":\"nameTest\",\"originVersionCode\":100," + "\"originVersionName\":\"versionNameTest\"}"); +} + +/* + * @tc.name: ArrayToString_0100 + * @tc.desc: ArrayToString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(NormalizeVersionUtilsTest, ArrayToString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::NormalizeVersion normalizeVersion1; + normalizeVersion1.originVersionCode = 100; + normalizeVersion1.originVersionName = "versionNameTest"; + normalizeVersion1.moduleName = "nameTest"; + + OHOS::AppPackingTool::NormalizeVersion normalizeVersion2; + normalizeVersion2.originVersionCode = 200; + normalizeVersion2.originVersionName = "versionNameTest2"; + normalizeVersion2.moduleName = "nameTest2"; + + std::list normalizeVersions; + normalizeVersions.push_back(normalizeVersion1); + normalizeVersions.push_back(normalizeVersion2); + + OHOS::AppPackingTool::NormalizeVersionUtils utils; + EXPECT_EQ(utils.ArrayToString(normalizeVersions), "[{\"moduleName\":\"nameTest\",\"originVersionCode\":100," + "\"originVersionName\":\"versionNameTest\"},{\"moduleName\":\"nameTest2\",\"originVersionCode\":200," + "\"originVersionName\":\"versionNameTest2\"}]"); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn new file mode 100644 index 00000000..9d69b186 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn @@ -0,0 +1,46 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("pack_info_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("pack_info_test") { + module_out_path = module_output_path + public_configs = [ ":pack_info_test_config" ] + sources = [ + "../../../../src/json/pack_info.cpp", + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "../../../../src/utils.cpp", + "pack_info_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_test/pack_info_test.cpp b/packing_tool/frameworks/test/unittest/json/pack_info_test/pack_info_test.cpp new file mode 100644 index 00000000..2cba5ab2 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pack_info_test/pack_info_test.cpp @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "pack_info.h" +#include "pt_json.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; +using namespace std; + +namespace OHOS { + +const std::string jsonString = "{" + "\"summary\": {" + "\"app\": {" + "\"bundleName\": \"com.example.myapplication\"," + "\"bundleType\": \"bundleApp\"," + "\"version\": {" + "\"code\": 1000000," + "\"name\": \"1.0.0\"" + "}" + "}," + "\"modules\": [" + "{" + "\"mainAbility\": \"EntryAbility\"," + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"abilities\": [" + "{" + "\"name\": \"EntryAbility\"," + "\"label\": \"$string:EntryAbility_label\"" + "}" + "]," + "\"distro\": {" + "\"moduleType\": \"entry\"," + "\"installationFree\": false," + "\"deliveryWithInstall\": true," + "\"moduleName\": \"entry\"" + "}," + "\"extensionAbilities\": [" + "]," + "\"apiVersion\": {" + "\"compatible\": 12," + "\"releaseType\": \"Canary2\"," + "\"target\": 12" + "}" + "}" + "]" + "}," + "\"packages\":[" + "{" + "\"deviceType\": [" + "\"default\"," + "\"tablet\"" + "]," + "\"moduleType\": \"entry\"," + "\"deliveryWithInstall\": true," + "\"name\": \"entry-default\"" + "}" + "]" +"}"; + +class PackInfoTest : public testing::Test { +public: + PackInfoTest() {} + virtual ~PackInfoTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PackInfoTest::SetUpTestCase() {} + +void PackInfoTest::TearDownTestCase() {} + +void PackInfoTest::SetUp() {} + +void PackInfoTest::TearDown() {} + +/* + * @tc.name: ParseFromString_0100 + * @tc.desc: ParseFromString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, ParseFromString_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + EXPECT_TRUE(packInfo.ParseFromString(jsonString)); +} + +/* + * @tc.name: GetSummaryObject_0100 + * @tc.desc: GetSummaryObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetSummaryObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::unique_ptr summaryObj; + EXPECT_TRUE(packInfo.GetSummaryObject(summaryObj)); + EXPECT_NE(summaryObj, nullptr); +} + +/* + * @tc.name: GetAppObject_0100 + * @tc.desc: GetAppObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetAppObject_0100, Function | MediumTest | Level1) +{ + std::unique_ptr appObj; + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + EXPECT_TRUE(packInfo.GetAppObject(appObj)); + EXPECT_NE(appObj, nullptr); +} + +/* + * @tc.name: GetBundleName_0100 + * @tc.desc: GetBundleName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetBundleName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::string bundleName = ""; + EXPECT_TRUE(packInfo.GetBundleName(bundleName)); + EXPECT_NE(bundleName, ""); +} + +/* + * @tc.name: SetBundleName_0100 + * @tc.desc: SetBundleName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, SetBundleName_0100, Function | MediumTest | Level1) +{ + std::string bundleName = "com.example.myapplication"; + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + EXPECT_TRUE(packInfo.SetBundleName(bundleName)); +} + +/* + * @tc.name: GetBundleType_0100 + * @tc.desc: GetBundleType. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetBundleType_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::string bundleType = ""; + std::string defaultBundleType = "app"; + EXPECT_TRUE(packInfo.GetBundleType(bundleType, defaultBundleType)); + EXPECT_EQ(bundleType, "bundleApp"); +} + +/* + * @tc.name: GetVersionObject_0100 + * @tc.desc: GetVersionObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetVersionObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::unique_ptr versionObj; + EXPECT_TRUE(packInfo.GetVersionObject(versionObj)); + EXPECT_NE(versionObj, nullptr); +} + +/* + * @tc.name: GetDistroObject_0100 + * @tc.desc: GetDistroObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetDistroObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + int32_t moduleIndex = 0; + std::unique_ptr distroObj; + EXPECT_TRUE(packInfo.GetDistroObject(moduleIndex, distroObj)); + EXPECT_NE(distroObj, nullptr); +} + +/* + * @tc.name: GetExtensionAbilitiesObj_0100 + * @tc.desc: GetExtensionAbilitiesObj. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetExtensionAbilitiesObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + int32_t moduleIndex = 0; + std::unique_ptr extensionAbilitiesObj; + EXPECT_TRUE(packInfo.GetExtensionAbilitiesObj(moduleIndex, extensionAbilitiesObj)); + EXPECT_NE(extensionAbilitiesObj, nullptr); +} + +/* + * @tc.name: GetExtensionAbilitiesObjByModulesObj_0100 + * @tc.desc: GetExtensionAbilitiesObjByModulesObj. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetExtensionAbilitiesObjByModulesObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::unique_ptr modulesObj; + packInfo.GetModulesObject(modulesObj); + int32_t moduleIndex = 0; + std::unique_ptr extensionAbilitiesObj; + EXPECT_TRUE(packInfo.GetExtensionAbilitiesObjByModulesObj(modulesObj, moduleIndex, extensionAbilitiesObj)); + EXPECT_NE(extensionAbilitiesObj, nullptr); +} + +/* + * @tc.name: GetPackageObject_0100 + * @tc.desc: GetPackageObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetPackageObject_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + int32_t packageIndex = 0; + std::unique_ptr packageObj; + EXPECT_TRUE(packInfo.GetPackageObject(packageIndex, packageObj)); + EXPECT_NE(packageObj, nullptr); +} + +/* + * @tc.name: GetVersion_0100 + * @tc.desc: GetVersion. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetVersion_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfoVersion version; + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + EXPECT_TRUE(packInfo.GetVersion(version)); + EXPECT_EQ(version.code, 1000000); + EXPECT_EQ(version.name, "1.0.0"); +} + +/* + * @tc.name: SetVersionCode_0100 + * @tc.desc: SetVersionCode. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, SetVersionCode_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + int versionCode = 1; + EXPECT_TRUE(packInfo.SetVersionCode(versionCode)); +} + +/* + * @tc.name: SetVersionName_0100 + * @tc.desc: SetVersionName. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, SetVersionName_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::string versionName = "2.0.0"; + EXPECT_TRUE(packInfo.SetVersionName(versionName)); +} + +/* + * @tc.name: GetNameByPackageObj_0100 + * @tc.desc: GetNameByPackageObj. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetNameByPackageObj_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + int32_t packageIndex = 0; + std::unique_ptr packageObj; + packInfo.GetPackageObject(packageIndex, packageObj); + EXPECT_NE(packageObj, nullptr); + std::string name = ""; + EXPECT_TRUE(packInfo.GetNameByPackageObj(packageObj, name)); + EXPECT_EQ(name, "entry-default"); +} + +/* + * @tc.name: GetFormNames_0100 + * @tc.desc: GetFormNames. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PackInfoTest, GetFormNames_0100, Function | MediumTest | Level1) +{ + OHOS::AppPackingTool::PackInfo packInfo; + packInfo.ParseFromString(jsonString); + std::list formNames; + std::list formFullNames; + EXPECT_TRUE(packInfo.GetFormNames(formNames, formFullNames)); +} +} diff --git a/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn new file mode 100644 index 00000000..a8ae5e43 --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +config("pt_json_test_config") { + include_dirs = [ + "../../../../include", + "../../../../include/json", + ] + + cflags_cc = [ "-fexceptions" ] + cflags_objcc = cflags_cc +} + +module_output_path = "developtools/packing_tool" + +ohos_unittest("pt_json_test") { + module_out_path = module_output_path + public_configs = [ ":pt_json_test_config" ] + sources = [ + "../../../../src/json/pt_json.cpp", + "../../../../src/log.cpp", + "pt_json_test.cpp", + ] + external_deps = [ + "bounds_checking_function:libsec_static", + "cJSON:cjson_static", + "hilog:libhilog", + "openssl:libcrypto_shared", + "zlib:libz", + ] +} + +group("unittest") { + testonly = true + + deps = [ ":pt_json_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/pt_json_test/pt_json_test.cpp b/packing_tool/frameworks/test/unittest/json/pt_json_test/pt_json_test.cpp new file mode 100644 index 00000000..3b8793ec --- /dev/null +++ b/packing_tool/frameworks/test/unittest/json/pt_json_test/pt_json_test.cpp @@ -0,0 +1,498 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#define private public +#define protected public +#include "pt_json.h" +#undef private +#undef protected + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +std::string content = "{" + "\"name\": \"Json.CN\"," + "\"app\": \"apptest\"," + "\"module\": {" + "\"name\": \"nametest\"," + "\"type\": \"typetest\"," + "\"deviceTypes\": [" + "\"aaaaaaaaaaa\"," + "\"bbbbbbbbbbb\"," + "\"ccccccccccc\"" + "]" + "}," + "\"bundleName\": \"bundleNametest\"," + "\"versionCode\": 100," + "\"versionName\": \"versionNametest\"," + "\"patchVersionCode\": 200," + "\"patchVersionName\": \"patchVersionNametest\"," + "\"originalModuleHash\": \"originalModuleHashtest\"" +"}"; + +class PtJsonTest : public testing::Test { +public: + PtJsonTest() {} + virtual ~PtJsonTest() {} + + static void SetUpTestCase(); + + static void TearDownTestCase(); + + void SetUp(); + + void TearDown(); +}; + +void PtJsonTest::SetUpTestCase() {} + +void PtJsonTest::TearDownTestCase() {} + +void PtJsonTest::SetUp() {} + +void PtJsonTest::TearDown() {} + +/* + * @tc.name: CreateObject_0100 + * @tc.desc: CreateObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, CreateObject_0100, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonObject = ptJson.CreateObject(); + EXPECT_TRUE(ptjsonObject != NULL); +} + +/* + * @tc.name: CreateArray_0200 + * @tc.desc: CreateArray. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, CreateArray_0200, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonArray = ptJson.CreateArray(); + EXPECT_TRUE(ptjsonArray != NULL); +} + +/* + * @tc.name: ReleaseRoot_0300 + * @tc.desc: ReleaseRoot. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, ReleaseRoot_0300, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + ptJson.ReleaseRoot(); + EXPECT_TRUE(ptJson.object_ == NULL); +} + +/* + * @tc.name: Parse_0400 + * @tc.desc: Parse. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Parse_0400, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjson = ptJson.Parse(content); + EXPECT_TRUE(ptjson != NULL); +} + +/* + * @tc.name: Stringify_0500 + * @tc.desc: Stringify. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Stringify_0500, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjson = ptJson.Parse(content); + EXPECT_TRUE(ptjson != NULL); + EXPECT_TRUE(!ptjson->Stringify().empty()); +} + +/* + * @tc.name: Add_0600 + * @tc.desc: Add. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Add_0600, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonObject = ptJson.CreateObject(); + EXPECT_TRUE(ptjsonObject != NULL); + + EXPECT_TRUE(ptJson.Add("AAA", true)); + EXPECT_TRUE(ptJson.Add("BBB", 123)); + EXPECT_TRUE(ptJson.Add("CCC", 123.5)); + EXPECT_TRUE(ptJson.Add("DDD", "ABC")); + EXPECT_TRUE(ptJson.Add("EEE", ptjsonObject)); +} + +/* + * @tc.name: Push_0700 + * @tc.desc: Push. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Push_0700, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonObject = ptJson.CreateObject(); + EXPECT_TRUE(ptjsonObject != NULL); + + std::unique_ptr ptjsonArray = ptJson.CreateArray(); + EXPECT_TRUE(ptjsonArray != NULL); + + EXPECT_TRUE(ptJson.Add("AAA", true)); + EXPECT_TRUE(ptJson.Add("BBB", 123)); + EXPECT_TRUE(ptJson.Add("CCC", 123.5)); + EXPECT_TRUE(ptJson.Add("DDD", "ABC")); + EXPECT_TRUE(ptJson.Add("EEE", ptjsonObject)); + + EXPECT_TRUE(ptJson.Push(true)); + EXPECT_TRUE(ptJson.Push(123)); + EXPECT_TRUE(ptJson.Push(123.5)); + EXPECT_TRUE(ptJson.Push("ABC")); + EXPECT_TRUE(ptJson.Push(ptjsonArray)); +} + +/* + * @tc.name: Contains_0800 + * @tc.desc: Contains. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Contains_0800, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + EXPECT_TRUE(ptJson.Add("AAA", true)); + EXPECT_TRUE(ptJson.Remove("AAA")); +} + +/* + * @tc.name: Contains_0900 + * @tc.desc: Contains. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, Contains_0900, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + EXPECT_TRUE(ptJson.Add("AAA", true)); + EXPECT_TRUE(ptJson.Contains("AAA")); +} + +/* + * @tc.name: GetKey_1000 + * @tc.desc: GetKey. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, GetKey_1000, Function | MediumTest | Level1) +{ + char a[] = "{\"firstName\":\"Brett\"}"; + cJSON*root = cJSON_Parse(a); + cJSON*item = cJSON_GetObjectItem(root, "firstName"); + OHOS::AppPackingTool::PtJson ptJson(item); + EXPECT_TRUE(!ptJson.GetKey().empty()); + EXPECT_TRUE(!ptJson.Stringify().empty()); +} + +/* + * @tc.name: GetJson_1100 + * @tc.desc: GetJson. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, GetJson_1100, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + EXPECT_TRUE(ptJson.GetJson() != nullptr); +} + +/* + * @tc.name: IsBool_1200 + * @tc.desc: IsBool. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsBool_1200, Function | MediumTest | Level1) +{ + cJSON *node = cJSON_CreateBool(true); + OHOS::AppPackingTool::PtJson ptJsonBool(node); + + EXPECT_TRUE(ptJsonBool.IsBool()); + EXPECT_TRUE(ptJsonBool.GetBool(true)); +} + +/* + * @tc.name: IsNumber_1300 + * @tc.desc: IsNumber. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsNumber_1300, Function | MediumTest | Level1) +{ + cJSON *node = cJSON_CreateNumber(12345); + OHOS::AppPackingTool::PtJson ptJsonNumber(node); + + EXPECT_TRUE(ptJsonNumber.IsNumber()); + EXPECT_EQ(ptJsonNumber.GetInt(12345), 12345); + EXPECT_EQ(ptJsonNumber.GetInt64(12345), 12345); + EXPECT_EQ(ptJsonNumber.GetUInt(12345), 12345); + EXPECT_EQ(ptJsonNumber.GetUInt64(12345), 12345); + EXPECT_EQ(ptJsonNumber.GetDouble(12345.5), 12345); +} + +/* + * @tc.name: IsString_1400 + * @tc.desc: IsString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsString_1400, Function | MediumTest | Level1) +{ + cJSON *node = cJSON_CreateString("abcd"); + OHOS::AppPackingTool::PtJson ptJsonString(node); + + EXPECT_TRUE(ptJsonString.IsString()); + EXPECT_STREQ(ptJsonString.GetString().c_str(), "abcd"); +} + +/* + * @tc.name: IsObject_1500 + * @tc.desc: IsObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsObject_1500, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonObject = ptJson.CreateObject(); + EXPECT_TRUE(ptjsonObject != NULL); + EXPECT_TRUE(ptjsonObject->IsObject()); +} + +/* + * @tc.name: IsArray_1600 + * @tc.desc: IsArray. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsArray_1600, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonArray = ptJson.CreateArray(); + EXPECT_TRUE(ptjsonArray != NULL); + EXPECT_TRUE(ptjsonArray->IsArray()); + ptjsonArray->Push("11111"); + ptjsonArray->Push("22222"); + EXPECT_STREQ(ptjsonArray->Get(1)->GetString().c_str(), "22222"); + EXPECT_TRUE(ptjsonArray->GetSize() > 0); +} + +/* + * @tc.name: IsNull_1700 + * @tc.desc: IsNull. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, IsNull_1700, Function | MediumTest | Level1) +{ + cJSON *cjson = cJSON_CreateNull(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + EXPECT_TRUE(ptJson.IsNull()); +} + +/* + * @tc.name: SetBool_1800 + * @tc.desc: SetBool. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, SetBool_1800, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + bool flag = false; + ptJson.Add("AAA", true); + EXPECT_EQ(ptJson.SetBool("AAA", flag), OHOS::AppPackingTool::Result::SUCCESS); + ptJson.GetBool("AAA", &flag); + EXPECT_FALSE(flag); +} + +/* + * @tc.name: SetInt_1900 + * @tc.desc: SetInt. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, SetInt_1900, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + EXPECT_TRUE(ptJson.Add("BBB", 123)); + int number = 0; + EXPECT_EQ(ptJson.SetInt("BBB", 321), OHOS::AppPackingTool::Result::SUCCESS); + ptJson.GetInt("BBB", &number); + EXPECT_EQ(number, 321); +} + +/* + * @tc.name: SetInt64_2000 + * @tc.desc: SetInt64. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, SetInt64_2000, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + EXPECT_TRUE(ptJson.Add("BBB", 123)); + EXPECT_TRUE(ptJson.Add("CCC", 123.5)); + + int64_t value64 = 11111; + EXPECT_EQ(ptJson.SetInt64("BBB", value64), OHOS::AppPackingTool::Result::SUCCESS); + int64_t value642; + EXPECT_EQ(ptJson.GetInt64("BBB", &value642), OHOS::AppPackingTool::Result::SUCCESS); + EXPECT_EQ(value642, 11111); + + uint32_t value32 = 2222; + EXPECT_EQ(ptJson.SetUInt("BBB", value32), OHOS::AppPackingTool::Result::SUCCESS); + uint32_t value322; + EXPECT_EQ(ptJson.GetUInt("BBB", &value322), OHOS::AppPackingTool::Result::SUCCESS); + EXPECT_EQ(value322, 2222); + + uint64_t valueInt64 = 3333; + EXPECT_EQ(ptJson.SetUInt64("BBB", valueInt64), OHOS::AppPackingTool::Result::SUCCESS); + uint64_t valueInt642; + EXPECT_EQ(ptJson.GetUInt64("BBB", &valueInt642), OHOS::AppPackingTool::Result::SUCCESS); + EXPECT_EQ(valueInt642, 3333); + + double valueDouble = 4444; + EXPECT_EQ(ptJson.SetDouble("CCC", valueDouble), OHOS::AppPackingTool::Result::SUCCESS); + double valueDouble2; + EXPECT_EQ(ptJson.GetDouble("CCC", &valueDouble2), OHOS::AppPackingTool::Result::SUCCESS); + EXPECT_EQ(valueDouble2, 4444); +} + +/* + * @tc.name: SetString_2100 + * @tc.desc: SetString. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, SetString_2100, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + EXPECT_TRUE(ptJson.Add("DDD", "ABC")); + std::string str("1234567890"); + EXPECT_EQ(ptJson.SetString("DDD", str), OHOS::AppPackingTool::Result::SUCCESS); + std::string str2; + EXPECT_EQ(ptJson.GetString("DDD", &str2), OHOS::AppPackingTool::Result::SUCCESS); + EXPECT_STREQ(str2.c_str(), str.c_str()); +} + +/* + * @tc.name: GetObject_2200 + * @tc.desc: GetObject. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, GetObject_2200, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + std::unique_ptr ptjsonObject = ptJson.CreateObject(); + EXPECT_TRUE(ptjsonObject != NULL); + EXPECT_TRUE(ptJson.Add("EEE", ptjsonObject)); + std::unique_ptr Object; + EXPECT_EQ(ptJson.GetObject("EEE", &Object), OHOS::AppPackingTool::Result::SUCCESS); +} + +/* + * @tc.name: GetArray_2300 + * @tc.desc: GetArray. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, GetArray_2300, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + ptJson.Add("FFF", ptJson.CreateArray()); + std::unique_ptr Array; + EXPECT_EQ(ptJson.GetArray("FFF", &Array), OHOS::AppPackingTool::Result::SUCCESS); +} + +/* + * @tc.name: GetAny_2400 + * @tc.desc: GetAny. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PtJsonTest, GetAny_2400, Function | MediumTest | Level1) +{ + cJSON *cjson = new cJSON(); + OHOS::AppPackingTool::PtJson ptJson(cjson); + + ptJson.Add("FFF", ptJson.CreateArray()); + std::unique_ptr Object; + EXPECT_EQ(ptJson.GetAny("FFF", &Object), OHOS::AppPackingTool::Result::SUCCESS); +} +} // namespace OHOS \ No newline at end of file -- Gitee From 32f086da47d992e36a2fae4961ec051b8b67a520 Mon Sep 17 00:00:00 2001 From: 18710539902 Date: Tue, 27 Aug 2024 10:01:03 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E6=89=93=E5=8C=85=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E9=B8=BF=E8=92=99=E5=8C=96-tdd-=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 18710539902 Change-Id: I929a9b31e03da2ffe0297c449aec3f8c52263d07 --- bundle.json | 3 + packing_tool/frameworks/BUILD.gn | 25 -- .../frameworks/test/unittest/BUILD.gn | 47 +++ .../test/unittest/app_packager_test/BUILD.gn | 2 - .../unittest/appqf_packager_test/BUILD.gn | 2 +- .../unittest/fast_app_packager_test/BUILD.gn | 1 - .../test/unittest/hap_packager_test/BUILD.gn | 3 +- .../test/unittest/hqf_packager_test/BUILD.gn | 3 +- .../test/unittest/hsp_packager_test/BUILD.gn | 1 - .../unittest/json/distro_filter_test/BUILD.gn | 5 + .../json/hap_verify_utils_test/BUILD.gn | 5 + .../unittest/json/json_utils_test/BUILD.gn | 5 + .../json/json_utils_test/json_utils_test.cpp | 115 +++++-- .../unittest/json/module_json_test/BUILD.gn | 5 + .../json/module_json_utils_test/BUILD.gn | 5 + .../normalize_version_utils_test/BUILD.gn | 5 + .../unittest/json/pack_info_test/BUILD.gn | 5 + .../json/pack_info_utils_test/BUILD.gn | 5 + .../unittest/json/patch_json_test/BUILD.gn | 1 - .../json/patch_json_utils_test/BUILD.gn | 1 - .../test/unittest/json/pt_json_test/BUILD.gn | 1 - .../unittest/multiapp_packager_test/BUILD.gn | 2 - .../test/unittest/ohos_test/ohos_test.xml | 301 ++++-------------- .../unittest/package_normalize_test/BUILD.gn | 1 + .../test/unittest/packager_test/BUILD.gn | 1 - .../test/unittest/shell_command_test/BUILD.gn | 1 - .../test/unittest/unzip_wrapper_test/BUILD.gn | 1 - .../test/unittest/utils_Test/BUILD.gn | 1 - .../test/unittest/utils_Test/utils_test.cpp | 91 +++++- .../test/unittest/zip_utils_test/BUILD.gn | 1 - .../zip_utils_test/zip_utils_test.cpp | 167 ++++++---- .../test/unittest/zip_wrapper_test/BUILD.gn | 1 - 32 files changed, 430 insertions(+), 383 deletions(-) create mode 100644 packing_tool/frameworks/test/unittest/BUILD.gn diff --git a/bundle.json b/bundle.json index 3946e385..323cff70 100755 --- a/bundle.json +++ b/bundle.json @@ -28,6 +28,9 @@ "sub_component": [ "//developtools/packing_tool:packing_tool", "//developtools/packing_tool:ohos_packing_tool" + ], + "test": [ + "//developtools/packing_tool/packing_tool/frameworks/test/unittest:unittest" ] } } diff --git a/packing_tool/frameworks/BUILD.gn b/packing_tool/frameworks/BUILD.gn index ea13243b..0c027908 100644 --- a/packing_tool/frameworks/BUILD.gn +++ b/packing_tool/frameworks/BUILD.gn @@ -82,28 +82,3 @@ ohos_executable("ohos_packing_tool") { subsystem_name = "developtools" part_name = "packing_tool" } - -group("unittest") { - testonly = true - deps = [ - "test/unittest/app_packager_test:app_packager_test", - "test/unittest/appqf_packager_test:appqf_packager_test", - "test/unittest/fastapp_packager_test:fastapp_packager_test", - "test/unittest/hap_packager_test:hap_packager_test", - "test/unittest/hqf_packager_test:hqf_packager_test", - "test/unittest/hsp_packager_test:hsp_packager_test", - "test/unittest/json/module_json_test:module_json_test", - "test/unittest/json/module_json_utils_test:module_json_utils_test", - "test/unittest/json/pack_info_utils_test:pack_info_utils_test", - "test/unittest/json/patch_json_utils_test:patch_json_utils_test", - "test/unittest/json/patch_json_test:patch_json_test", - "test/unittest/multiapp_packager_test:multiapp_packager_test", - "test/unittest/ohos_test:copy_ohos_test", - "test/unittest/package_normalize_test:package_normalize_test", - "test/unittest/packager_test:packager_test", - "test/unittest/version_normalize_test:version_normalize_test", - "test/unittest/unzip_wrapper_test:unzip_wrapper_test", - "test/unittest/zip_utils_test:zip_utils_test", - "test/unittest/zip_wrapper_test:zip_wrapper_test", - ] -} diff --git a/packing_tool/frameworks/test/unittest/BUILD.gn b/packing_tool/frameworks/test/unittest/BUILD.gn new file mode 100644 index 00000000..9e15625d --- /dev/null +++ b/packing_tool/frameworks/test/unittest/BUILD.gn @@ -0,0 +1,47 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [ + "app_packager_test:unittest", + "appqf_packager_test:unittest", + "fast_app_packager_test:unittest", + "hap_packager_test:unittest", + "hqf_packager_test:unittest", + "hsp_packager_test:unittest", + "json/distro_filter_test:unittest", + "json/hap_verify_utils_test:unittest", + "json/json_utils_test:unittest", + "json/module_json_test:unittest", + "json/module_json_utils_test:unittest", + "json/normalize_version_utils_test:unittest", + "json/pack_info_test:unittest", + "json/pack_info_utils_test:unittest", + "json/patch_json_test:unittest", + "json/patch_json_utils_test:unittest", + "json/pt_json_test:unittest", + "multiapp_packager_test:unittest", + "package_normalize_test:unittest", + "packager_test:unittest", + "shell_command_test:unittest", + "unzip_wrapper_test:unittest", + "utils_Test:unittest", + "version_normalize_test:unittest", + "zip_utils_test:unittest", + "zip_wrapper_test:unittest", + ] +} diff --git a/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn index 4a08b7aa..b8ba6848 100644 --- a/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/app_packager_test/BUILD.gn @@ -54,7 +54,6 @@ ohos_unittest("app_packager_test") { "openssl:libcrypto_shared", "zlib:libz", ] - deps = [ ":copy_test_file", "../ohos_test:copy_ohos_test", @@ -65,7 +64,6 @@ ohos_unittest("app_packager_test") { group("unittest") { testonly = true - deps = [ ":app_packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn index 75508af2..31119582 100644 --- a/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/appqf_packager_test/BUILD.gn @@ -47,7 +47,6 @@ ohos_unittest("appqf_packager_test") { "../../../src/zip_wrapper.cpp", "appqf_packager_test.cpp", ] - external_deps = [ "bounds_checking_function:libsec_static", "cJSON:cjson_static", @@ -65,6 +64,7 @@ group("unittest") { testonly = true deps = [ ":appqf_packager_test" ] } + ohos_copy("copy_test_file") { subsystem_name = "developtools" part_name = "packing_tool" diff --git a/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn index c37b44df..e51577d5 100644 --- a/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/fast_app_packager_test/BUILD.gn @@ -64,7 +64,6 @@ ohos_unittest("fast_app_packager_test") { group("unittest") { testonly = true - deps = [ ":fast_app_packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/hap_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/hap_packager_test/BUILD.gn index 68a2fdf8..7983d211 100644 --- a/packing_tool/frameworks/test/unittest/hap_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/hap_packager_test/BUILD.gn @@ -23,6 +23,7 @@ config("hap_packager_test_config") { cflags_cc = [ "-fexceptions" ] cflags_objcc = cflags_cc } + module_output_path = "developtools/packing_tool" ohos_unittest("hap_packager_test") { @@ -48,7 +49,6 @@ ohos_unittest("hap_packager_test") { "openssl:libcrypto_shared", "zlib:libz", ] - deps = [ ":copy_test_file", "../ohos_test:copy_ohos_test", @@ -57,7 +57,6 @@ ohos_unittest("hap_packager_test") { group("unittest") { testonly = true - deps = [ ":hap_packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn index 7eb4d2b4..8617c9a8 100644 --- a/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/hqf_packager_test/BUILD.gn @@ -44,7 +44,6 @@ ohos_unittest("hqf_packager_test") { "../../../src/zip_wrapper.cpp", "hqf_packager_test.cpp", ] - external_deps = [ "bounds_checking_function:libsec_static", "cJSON:cjson_static", @@ -60,9 +59,9 @@ ohos_unittest("hqf_packager_test") { group("unittest") { testonly = true - deps = [ ":hqf_packager_test" ] } + ohos_copy("copy_test_file") { subsystem_name = "developtools" part_name = "packing_tool" diff --git a/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn index 99e0e448..a1bf3f97 100644 --- a/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/hsp_packager_test/BUILD.gn @@ -56,7 +56,6 @@ ohos_unittest("hsp_packager_test") { group("unittest") { testonly = true - deps = [ ":hsp_packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn index 96a54f01..a78d58f6 100644 --- a/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/distro_filter_test/BUILD.gn @@ -44,3 +44,8 @@ ohos_unittest("distro_filter_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":distro_filter_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn index 53b8a174..00e4c20c 100644 --- a/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/hap_verify_utils_test/BUILD.gn @@ -46,3 +46,8 @@ ohos_unittest("hap_verify_utils_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":hap_verify_utils_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn index 0d8657e0..e97df751 100644 --- a/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/json_utils_test/BUILD.gn @@ -44,3 +44,8 @@ ohos_unittest("json_utils_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":json_utils_test" ] +} diff --git a/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp b/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp index 835ce42e..4ac38d28 100644 --- a/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp +++ b/packing_tool/frameworks/test/unittest/json/json_utils_test/json_utils_test.cpp @@ -19,6 +19,7 @@ #define private public #define protected public #include "json_utils.h" +#include "utils.h" #include "pt_json.h" #undef private #undef protected @@ -28,11 +29,13 @@ using namespace testing::ext; namespace OHOS { -const std::string MODULE_JSON_PATH = "/data/module.json"; -const std::string CONFIG_JSON_PATH = "/data/config.json"; -const std::string PATCH_JSON_PATH = "/data/patch.json"; +#define FILE_PATH "/data/test/resource/packingtool/json_utils_test/" +const std::string MODULE_JSON_NAME = "module.json"; +const std::string CONFIG_JSON_NAME = "config.json"; +const std::string PATCH_JSON_NAME = "patch.json"; +const std::string TEST_JSON_NAME = "test.json"; -const std::string jsonString = "{" +const std::string JSON_STRING = "{" "\"name\": \"Json.CN\"," "\"app\": \"apptest\"," "\"module\": {" @@ -58,16 +61,80 @@ public: void SetUp(); void TearDown(); + + bool CheckFilePath(const std::string& filePath); + + void CreateFilePath(const std::string& filePath); + + void CreateFile(const std::string& filePath); + + void DeleteFilePath(const std::string& filePath); }; void JsonUtilsTest::SetUpTestCase() {} void JsonUtilsTest::TearDownTestCase() {} -void JsonUtilsTest::SetUp() {} +void JsonUtilsTest::SetUp() +{ + CreateFilePath(FILE_PATH); + + std::string moduleJsonPath = std::string(FILE_PATH) + MODULE_JSON_NAME; + CreateFile(moduleJsonPath); + std::string configJsonPath = std::string(FILE_PATH) + CONFIG_JSON_NAME; + CreateFile(configJsonPath); + std::string patchJsonPath = std::string(FILE_PATH) + PATCH_JSON_NAME; + CreateFile(patchJsonPath); +} void JsonUtilsTest::TearDown() {} + +bool JsonUtilsTest::CheckFilePath(const std::string& filePath) +{ + std::string prefix = "/data/test/"; + if (filePath.empty()) { + return false; + } + if (filePath.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), filePath.begin())) { + return true; + } + return false; +} + +void JsonUtilsTest::CreateFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("mkdir -p ") + filePath; + system(cmdStr.c_str()); +} + +void JsonUtilsTest::CreateFile(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("touch ") + filePath; + system(cmdStr.c_str()); + FILE *fp = fopen(filePath.c_str(), "w"); + if (fp != nullptr) { + fwrite(JSON_STRING.c_str(), JSON_STRING.size(), 1, fp); + fclose(fp); + fp = nullptr; + } +} + +void JsonUtilsTest::DeleteFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("rm -rf ") + filePath; + system(cmdStr.c_str()); +} + /* * @tc.name: IsModuleJson_0100 * @tc.desc: IsModuleJson/CheckFileName @@ -77,9 +144,8 @@ void JsonUtilsTest::TearDown() {} HWTEST_F(JsonUtilsTest, IsModuleJson_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::JsonUtils jsonUtils; - system("touch data/module.json"); - EXPECT_TRUE(jsonUtils.IsModuleJson(MODULE_JSON_PATH)); - system("rm -f data/module.json"); + std::string moduleJsonPath = std::string(FILE_PATH) + MODULE_JSON_NAME; + EXPECT_TRUE(jsonUtils.IsModuleJson(moduleJsonPath)); } /* @@ -91,9 +157,8 @@ HWTEST_F(JsonUtilsTest, IsModuleJson_0100, Function | MediumTest | Level1) HWTEST_F(JsonUtilsTest, IsConfigJson_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::JsonUtils jsonUtils; - system("touch data/config.json"); - EXPECT_TRUE(jsonUtils.IsConfigJson(CONFIG_JSON_PATH)); - system("rm -f data/config.json"); + std::string configJsonPath = std::string(FILE_PATH) + CONFIG_JSON_NAME; + EXPECT_TRUE(jsonUtils.IsConfigJson(configJsonPath)); } /* @@ -105,9 +170,8 @@ HWTEST_F(JsonUtilsTest, IsConfigJson_0100, Function | MediumTest | Level1) HWTEST_F(JsonUtilsTest, IsPatchJson_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::JsonUtils jsonUtils; - system("touch data/patch.json"); - EXPECT_TRUE(jsonUtils.IsPatchJson(PATCH_JSON_PATH)); - system("rm -f data/patch.json"); + std::string patchJsonPath = std::string(FILE_PATH) + PATCH_JSON_NAME; + EXPECT_TRUE(jsonUtils.IsPatchJson(patchJsonPath)); } /* @@ -119,15 +183,11 @@ HWTEST_F(JsonUtilsTest, IsPatchJson_0100, Function | MediumTest | Level1) HWTEST_F(JsonUtilsTest, JsonFromFile_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::JsonUtils jsonUtils; - std::string test("data/test.json"); - FILE *fp = fopen(test.c_str(), "w"); - EXPECT_TRUE(fp != nullptr); - if (fp != nullptr) { - fwrite(jsonString.c_str(), jsonString.size(), 1, fp); - fclose(fp); - EXPECT_NE(jsonUtils.JsonFromFile(test), nullptr); - } - system("rm -f data/test.json"); + std::string testJsonPath = std::string(FILE_PATH) + TEST_JSON_NAME; + CreateFile(testJsonPath); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFileExists(testJsonPath)); + EXPECT_NE(jsonUtils.JsonFromFile(testJsonPath), nullptr); + DeleteFilePath(testJsonPath); } /* @@ -139,8 +199,9 @@ HWTEST_F(JsonUtilsTest, JsonFromFile_0100, Function | MediumTest | Level1) HWTEST_F(JsonUtilsTest, JsonToFile_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::JsonUtils jsonUtils; - system("touch data/test.json"); - EXPECT_TRUE(jsonUtils.JsonToFile(OHOS::AppPackingTool::PtJson::Parse(jsonString), "data/test.json")); - system("rm -f data/test.json"); -} + std::string testJsonPath = std::string(FILE_PATH) + TEST_JSON_NAME; + CreateFile(testJsonPath); + EXPECT_TRUE(jsonUtils.JsonToFile(OHOS::AppPackingTool::PtJson::Parse(JSON_STRING), testJsonPath)); + DeleteFilePath(testJsonPath); } +}ls - diff --git a/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn index 4514bd43..389bcae5 100644 --- a/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/module_json_test/BUILD.gn @@ -48,3 +48,8 @@ ohos_unittest("module_json_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":module_json_test" ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn index 6d18afe4..3fad8619 100644 --- a/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/module_json_utils_test/BUILD.gn @@ -52,3 +52,8 @@ ohos_unittest("module_json_utils_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":module_json_utils_test" ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn index 4df3f8a8..d9a46bb6 100644 --- a/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/normalize_version_utils_test/BUILD.gn @@ -44,3 +44,8 @@ ohos_unittest("normalize_version_utils_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":normalize_version_utils_test" ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn index 9d69b186..48142d2a 100644 --- a/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/pack_info_test/BUILD.gn @@ -44,3 +44,8 @@ ohos_unittest("pack_info_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":pack_info_test" ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn index 621f8068..f9d50f10 100644 --- a/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/pack_info_utils_test/BUILD.gn @@ -45,3 +45,8 @@ ohos_unittest("pack_info_utils_test") { "zlib:libz", ] } + +group("unittest") { + testonly = true + deps = [ ":pack_info_utils_test" ] +} \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn index 1e574777..95b60cc1 100644 --- a/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/patch_json_test/BUILD.gn @@ -46,6 +46,5 @@ ohos_unittest("patch_json_test") { group("unittest") { testonly = true - deps = [ ":patch_json_test" ] } diff --git a/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn index 3ce1efb0..aec158e6 100644 --- a/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/patch_json_utils_test/BUILD.gn @@ -48,6 +48,5 @@ ohos_unittest("patch_json_utils_test") { group("unittest") { testonly = true - deps = [ ":patch_json_utils_test" ] } diff --git a/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn b/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn index a8ae5e43..47b16156 100644 --- a/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/json/pt_json_test/BUILD.gn @@ -45,6 +45,5 @@ ohos_unittest("pt_json_test") { group("unittest") { testonly = true - deps = [ ":pt_json_test" ] } diff --git a/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn index 1a465b19..1f167f60 100644 --- a/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/multiapp_packager_test/BUILD.gn @@ -56,7 +56,6 @@ ohos_unittest("multiapp_packager_test") { "openssl:libcrypto_shared", "zlib:libz", ] - deps = [ "./multiappPackagerHapTest:multiappPackagerHapTest", "./multiappPackagerHspTest:multiappPackagerHspTest", @@ -65,6 +64,5 @@ ohos_unittest("multiapp_packager_test") { group("unittest") { testonly = true - deps = [ ":multiapp_packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml index ea269697..d419e31d 100644 --- a/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml +++ b/packing_tool/frameworks/test/unittest/ohos_test/ohos_test.xml @@ -16,268 +16,103 @@ - + - + - - - - - - - - - - - - - - + - \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn b/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn index 7742231a..e1b798d8 100644 --- a/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/package_normalize_test/BUILD.gn @@ -65,6 +65,7 @@ group("unittest") { testonly = true deps = [ ":package_normalize_test" ] } + ohos_copy("copy_test_file") { subsystem_name = "developtools" part_name = "packing_tool" diff --git a/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn b/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn index 4613771d..71aaf3b1 100644 --- a/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/packager_test/BUILD.gn @@ -52,6 +52,5 @@ ohos_unittest("packager_test") { group("unittest") { testonly = true - deps = [ ":packager_test" ] } diff --git a/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn b/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn index be86f3ee..3a1683fb 100644 --- a/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/shell_command_test/BUILD.gn @@ -75,6 +75,5 @@ ohos_unittest("shell_command_test") { group("unittest") { testonly = true - deps = [ ":shell_command_test" ] } diff --git a/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn index 593d0dd1..df158da1 100644 --- a/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/unzip_wrapper_test/BUILD.gn @@ -46,6 +46,5 @@ ohos_unittest("unzip_wrapper_test") { group("unittest") { testonly = true - deps = [ ":unzip_wrapper_test" ] } diff --git a/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn b/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn index eda74089..364a98d7 100644 --- a/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/utils_Test/BUILD.gn @@ -45,6 +45,5 @@ ohos_unittest("utils_Test") { group("unittest") { testonly = true - deps = [ ":utils_Test" ] } diff --git a/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp b/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp index c1c7ee4a..22b9f672 100644 --- a/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp +++ b/packing_tool/frameworks/test/unittest/utils_Test/utils_test.cpp @@ -28,8 +28,9 @@ using namespace testing::ext; namespace OHOS { -#define FILE_PATH "/data/utils_Test" -#define TEMP_PATH "/data" +#define FILE_PATH "/data/test/resource/packingtool/utils_Test/" +#define FILE_NAME "module.json" +#define TEMP_PATH "/data/test/resource/packingtool/utils_Test/temp/" class UtilsTest : public testing::Test { public: @@ -43,16 +44,71 @@ public: void SetUp(); void TearDown(); + + bool CheckFilePath(const std::string& filePath); + + void CreateFilePath(const std::string& filePath); + + void CreateFile(const std::string& filePath); + + void DeleteFilePath(const std::string& filePath); }; void UtilsTest::SetUpTestCase() {} void UtilsTest::TearDownTestCase() {} -void UtilsTest::SetUp() {} +void UtilsTest::SetUp() +{ + CreateFilePath(TEMP_PATH); + + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + CreateFile(filePath); +} void UtilsTest::TearDown() {} +bool UtilsTest::CheckFilePath(const std::string& filePath) +{ + std::string prefix = "/data/test/"; + if (filePath.empty()) { + return false; + } + if (filePath.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), filePath.begin())) { + return true; + } + return false; +} + +void UtilsTest::CreateFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("mkdir -p ") + filePath; + system(cmdStr.c_str()); +} + +void UtilsTest::CreateFile(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("touch ") + filePath; + system(cmdStr.c_str()); + cmdStr = std::string("echo \"{\\\"name\\\": \\\"packing_tool\\\"}\" > ") + filePath; + system(cmdStr.c_str()); +} + +void UtilsTest::DeleteFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("rm -rf ") + filePath; + system(cmdStr.c_str()); +} + /* * @tc.name: GetFileContent_0100 * @tc.desc: GetFileContent. @@ -61,7 +117,8 @@ void UtilsTest::TearDown() {} */ HWTEST_F(UtilsTest, GetFileContent_0100, Function | MediumTest | Level1) { - std::string content = OHOS::AppPackingTool::Utils::GetFileContent(FILE_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string content = OHOS::AppPackingTool::Utils::GetFileContent(filePath); EXPECT_TRUE(!content.empty()); } @@ -169,7 +226,8 @@ HWTEST_F(UtilsTest, GetSha256Str_0700, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, GetSha256File_0800, Function | MediumTest | Level1) { - EXPECT_TRUE(!OHOS::AppPackingTool::Utils::GetSha256File(FILE_PATH).empty()); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + EXPECT_TRUE(!OHOS::AppPackingTool::Utils::GetSha256File(filePath).empty()); } /* @@ -180,7 +238,8 @@ HWTEST_F(UtilsTest, GetSha256File_0800, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, IsFileExists_0900, Function | MediumTest | Level1) { - EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFileExists(FILE_PATH)); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFileExists(filePath)); } /* @@ -191,7 +250,8 @@ HWTEST_F(UtilsTest, IsFileExists_0900, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, IsFile_1000, Function | MediumTest | Level1) { - EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFile(FILE_PATH)); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::IsFile(filePath)); } /* @@ -351,9 +411,8 @@ HWTEST_F(UtilsTest, IsPositiveInteger_2100, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, CheckFileName_2200, Function | MediumTest | Level1) { - std::string filePath(FILE_PATH); - std::string fileName("utils_Test"); - EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckFileName(filePath, fileName)); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckFileName(filePath, FILE_NAME)); } /* @@ -364,11 +423,9 @@ HWTEST_F(UtilsTest, CheckFileName_2200, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, CheckFileSuffix_2300, Function | MediumTest | Level1) { - std::string filePath("aaaa.hsp"); - std::string suffix(".hsp"); - system("touch aaaa.hsp"); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string suffix("json"); EXPECT_TRUE(OHOS::AppPackingTool::Utils::CheckFileSuffix(filePath, suffix)); - system("rm aaaa.hsp"); } /* @@ -391,10 +448,10 @@ HWTEST_F(UtilsTest, GenerateUUID_2400, Function | MediumTest | Level1) */ HWTEST_F(UtilsTest, CopyFile_2500, Function | MediumTest | Level1) { - std::string srcPath(FILE_PATH); - std::string dstPath("aaaaa"); + std::string srcPath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string dstPath = std::string(FILE_PATH) + std::string("dstFile"); EXPECT_TRUE(OHOS::AppPackingTool::Utils::CopyFile(srcPath, dstPath)); - system("rm aaaaa"); + DeleteFilePath(dstPath); } /* diff --git a/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn b/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn index ad62e51e..eb81608c 100644 --- a/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/zip_utils_test/BUILD.gn @@ -48,6 +48,5 @@ ohos_unittest("zip_utils_test") { group("unittest") { testonly = true - deps = [ ":zip_utils_test" ] } diff --git a/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp b/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp index 9bf040d2..3f52c4a7 100644 --- a/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp +++ b/packing_tool/frameworks/test/unittest/zip_utils_test/zip_utils_test.cpp @@ -32,9 +32,10 @@ using namespace testing::ext; namespace OHOS { -#define OUT_PATH "/data/test_1.hqf" -#define FILE_PATH "/data/zip_utils_test" -#define TEMP_PATH "/data/temp" +#define OUT_PATH "/data/test/zip_utils_test.hqf" +#define FILE_PATH "/data/test/resource/packingtool/zip_utils_test/" +#define FILE_NAME "module.json" +#define TEMP_PATH "/data/test/resource/packingtool/" class ZipUtilsTest : public testing::Test { public: @@ -48,16 +49,71 @@ public: void SetUp(); void TearDown(); + + bool CheckFilePath(const std::string& filePath); + + void CreateFilePath(const std::string& filePath); + + void CreateFile(const std::string& filePath); + + void DeleteFilePath(const std::string& filePath); }; void ZipUtilsTest::SetUpTestCase() {} void ZipUtilsTest::TearDownTestCase() {} -void ZipUtilsTest::SetUp() {} +void ZipUtilsTest::SetUp() +{ + CreateFilePath(FILE_PATH); + + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + CreateFile(filePath); +} void ZipUtilsTest::TearDown() {} +bool ZipUtilsTest::CheckFilePath(const std::string& filePath) +{ + std::string prefix = "/data/test/"; + if (filePath.empty()) { + return false; + } + if (filePath.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), filePath.begin())) { + return true; + } + return false; +} + +void ZipUtilsTest::CreateFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("mkdir -p ") + filePath; + system(cmdStr.c_str()); +} + +void ZipUtilsTest::CreateFile(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("touch ") + filePath; + system(cmdStr.c_str()); + cmdStr = std::string("echo \"{\\\"name\\\": \\\"packing_tool\\\"}\" > ") + filePath; + system(cmdStr.c_str()); +} + +void ZipUtilsTest::DeleteFilePath(const std::string& filePath) +{ + if (!CheckFilePath(filePath)) { + return; + } + std::string cmdStr = std::string("rm -rf ") + filePath; + system(cmdStr.c_str()); +} + /* * @tc.name: Zip_0100 * @tc.desc: zip. @@ -67,11 +123,13 @@ void ZipUtilsTest::TearDown() {} HWTEST_F(ZipUtilsTest, Zip_0100, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); - - int ret = zipUtils.Zip(filepath, zippath, OHOS::AppPackingTool::Constants::LIB_PATH); + std::string filePath(FILE_PATH); + std::string zipPath(OUT_PATH); + + int ret = zipUtils.Zip(filePath, zipPath, OHOS::AppPackingTool::Constants::LIB_PATH); EXPECT_EQ(ret, 0); + + DeleteFilePath(OUT_PATH); } /* @@ -83,18 +141,17 @@ HWTEST_F(ZipUtilsTest, Zip_0100, Function | MediumTest | Level1) HWTEST_F(ZipUtilsTest, Unzip_0200, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(TEMP_PATH); - std::string zippath(OUT_PATH); - int ret = zipUtils.Unzip(zippath, filepath); - EXPECT_EQ(ret, 0); + std::string filePath(FILE_PATH); + std::string tempPath(TEMP_PATH); + std::string zipPath(OUT_PATH); + + int ret = zipUtils.Zip(filePath, zipPath, OHOS::AppPackingTool::Constants::LIB_PATH); - std::string cmd("rm -rf "); - cmd += TEMP_PATH; - system(cmd.c_str()); + ret = zipUtils.Unzip(zipPath, tempPath); + EXPECT_EQ(ret, 0); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(TEMP_PATH); + DeleteFilePath(OUT_PATH); } /* @@ -106,18 +163,16 @@ HWTEST_F(ZipUtilsTest, Unzip_0200, Function | MediumTest | Level1) HWTEST_F(ZipUtilsTest, IsFileExistsInZip_0300, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string zipPath(OUT_PATH); - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - auto exist = zipUtils.IsFileExistsInZip(zippath, std::string("zip_utils_test")); + bool exist = zipUtils.IsFileExistsInZip(zipPath, FILE_NAME); EXPECT_TRUE(exist); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } /* @@ -129,18 +184,16 @@ HWTEST_F(ZipUtilsTest, IsFileExistsInZip_0300, Function | MediumTest | Level1) HWTEST_F(ZipUtilsTest, IsFileNameExistsInZip_0400, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string zipPath(OUT_PATH); - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - auto exist = zipUtils.IsFileNameExistsInZip(zippath, std::string("zip_utils_test")); + auto exist = zipUtils.IsFileNameExistsInZip(zipPath, FILE_NAME); EXPECT_TRUE(exist); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } /* @@ -152,19 +205,17 @@ HWTEST_F(ZipUtilsTest, IsFileNameExistsInZip_0400, Function | MediumTest | Level HWTEST_F(ZipUtilsTest, GetFileContentFromZip_0500, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string zipPath(OUT_PATH); std::string fileContent; - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - EXPECT_TRUE(zipUtils.GetFileContentFromZip(zippath, std::string("zip_utils_test"), fileContent)); + EXPECT_TRUE(zipUtils.GetFileContentFromZip(zipPath, FILE_NAME, fileContent)); EXPECT_TRUE(!fileContent.empty()); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } /* @@ -176,20 +227,18 @@ HWTEST_F(ZipUtilsTest, GetFileContentFromZip_0500, Function | MediumTest | Level HWTEST_F(ZipUtilsTest, GetUnzipCurrentFileContent_0600, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string zipPath(OUT_PATH); std::string fileContent; - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - unzFile unzipFile = unzOpen64(zippath.c_str()); + unzFile unzipFile = unzOpen64(zipPath.c_str()); EXPECT_TRUE(zipUtils.GetUnzipCurrentFileContent(unzipFile, fileContent)); EXPECT_TRUE(!fileContent.empty()); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } /* @@ -201,18 +250,16 @@ HWTEST_F(ZipUtilsTest, GetUnzipCurrentFileContent_0600, Function | MediumTest | HWTEST_F(ZipUtilsTest, GetResourceMapFromZip_0700, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); + std::string filePath = std::string(FILE_PATH) + std::string(FILE_NAME); + std::string zipPath(OUT_PATH); std::map resourceMap; - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - EXPECT_TRUE(zipUtils.GetResourceMapFromZip(zippath, resourceMap)); + EXPECT_TRUE(zipUtils.GetResourceMapFromZip(zipPath, resourceMap)); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } /* @@ -224,18 +271,16 @@ HWTEST_F(ZipUtilsTest, GetResourceMapFromZip_0700, Function | MediumTest | Level HWTEST_F(ZipUtilsTest, AddToResourceMap_0800, Function | MediumTest | Level1) { OHOS::AppPackingTool::ZipUtils zipUtils; - std::string filepath(FILE_PATH); - std::string zippath(OUT_PATH); - std::string filePathInZip("zip_utils_test"); + std::string filePath(FILE_PATH); + std::string zipPath(OUT_PATH); + std::string filePathInZip(FILE_NAME); std::map resourceMap; - int ret = zipUtils.Zip(filepath, zippath, "zip_utils_test"); + int ret = zipUtils.Zip(filePath, zipPath, FILE_NAME); EXPECT_EQ(ret, 0); - unzFile unzipFile = unzOpen64(zippath.c_str()); + unzFile unzipFile = unzOpen64(zipPath.c_str()); EXPECT_TRUE(zipUtils.AddToResourceMap(unzipFile, filePathInZip, resourceMap)); - std::string cmd2("rm -rf "); - cmd2 += OUT_PATH; - system(cmd2.c_str()); + DeleteFilePath(OUT_PATH); } } // namespace OHOS \ No newline at end of file diff --git a/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn b/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn index 75a9440d..edce0ce6 100644 --- a/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn +++ b/packing_tool/frameworks/test/unittest/zip_wrapper_test/BUILD.gn @@ -45,6 +45,5 @@ ohos_unittest("zip_wrapper_test") { group("unittest") { testonly = true - deps = [ ":zip_wrapper_test" ] } -- Gitee