From 5371fdbae3379f196f36ddc774977ae883c44c93 Mon Sep 17 00:00:00 2001 From: hekun Date: Mon, 24 Apr 2023 15:10:00 +0800 Subject: [PATCH] change to stage model Signed-off-by: hekun --- .../ace_ets_component_five/AppScope/app.json | 21 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 15458 bytes arkui/ace_ets_component_five/BUILD.gn | 20 +- arkui/ace_ets_component_five/Test.json | 9 +- .../entry/src/main/config.json | 118 ----- .../src/main/ets/Application/AbilityStage.ts | 9 + .../src/main/ets/MainAbility/MainAbility.ts | 37 ++ .../entry/src/main/ets/MainAbility/app.ets | 33 -- .../main/ets/MainAbility/pages/checkbox.ets | 3 +- .../ets/MainAbility/pages/index/index.ets | 56 +++ .../ets/MainAbility/pages/positionSetting.ets | 30 +- .../ets/MainAbility/pages/second/second.ets | 43 ++ .../src/main/ets/TestAbility/TestAbility.ts | 50 +++ .../entry/src/main/ets/TestAbility/app.ets | 33 -- .../src/main/ets/TestAbility/pages/index.ets | 8 +- .../ets/TestRunner/OpenHarmonyTestRunner.ts | 32 +- .../BackgroundAndSizeSettingJsunit.test.ets | 4 +- .../src/main/ets/test/BorderJsunit.test.ets | 4 +- .../ets/test/CheckboxGroupJsunit.test.ets | 7 +- .../src/main/ets/test/CheckboxJsunit.test.ets | 9 +- .../ets/test/ColorGradientJsunit.test.ets | 4 +- .../main/ets/test/EdgeEffectJsunit.test.ets | 4 +- .../ets/test/EnmusFlexAlignJsunit.test.ets | 4 +- .../test/EnmusHorizontalAlignJsunit.test.ets | 4 +- .../main/ets/test/EnmusImageJsunit.test.ets | 4 +- .../test/EnmusVerticalAlignJsunit.test.ets | 4 +- .../src/main/ets/test/FillModeJsunit.test.ets | 4 +- .../main/ets/test/OhosMatrix4Jsunit.test.ets | 4 +- .../ets/test/PositionSettingJsunit.test.ets | 10 +- .../src/main/ets/test/SelectJsunit.test.ets | 4 +- .../ets/test/ShapeClippingJsunit.test.ets | 4 +- .../src/main/ets/test/SliderJsunit.test.ets | 4 +- .../main/ets/test/TransFormJsunit.test.ets | 4 +- .../main/ets/test/VisibilityJsunit.test.ets | 4 +- .../entry/src/main/module.json | 35 ++ .../main/resources/base/element/string.json | 29 ++ .../resources/base/profile/main_pages.json | 24 + .../ace_ets_component_three/AppScope/app.json | 21 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 15458 bytes arkui/ace_ets_component_three/BUILD.gn | 24 +- arkui/ace_ets_component_three/Test.json | 7 +- .../entry/src/main/config.json | 131 ------ .../src/main/ets/Application/AbilityStage.ts | 9 + .../src/main/ets/MainAbility/MainAbility.ts | 37 ++ .../entry/src/main/ets/MainAbility/app.ets | 33 -- .../src/main/ets/MainAbility/images/test.png | Bin 0 -> 104831 bytes .../main/ets/MainAbility/pages/animate.ets | 276 ++++++++---- .../src/main/ets/MainAbility/pages/badge.ets | 1 - .../ets/MainAbility/pages/index/index.ets | 56 +++ .../ets/MainAbility/pages/second/second.ets | 43 ++ .../src/main/ets/MainAbility/pages/text.ets | 1 - .../src/main/ets/MainAbility/utils/Common.ets | 51 +++ .../ets/MainAbility/utils/MessageManager.ets | 54 +++ .../src/main/ets/TestAbility/TestAbility.ts | 50 +++ .../entry/src/main/ets/TestAbility/app.ets | 33 -- .../ets/TestRunner/OpenHarmonyTestRunner.ts | 32 +- .../ets/test/AboutToDisappearJsunit.test.ets | 4 +- .../src/main/ets/test/AnimateJsunit.test.ets | 415 +++++++----------- .../main/ets/test/BackgroundJsunit.test.ets | 4 +- .../src/main/ets/test/BadgeJsunit.test.ets | 35 +- .../src/main/ets/test/BlankJsunit.test.ets | 4 +- .../src/main/ets/test/ButtonJsunit.test.ets | 17 +- .../src/main/ets/test/Canvas2Jsunit.test.ets | 4 +- .../src/main/ets/test/CanvasJsunit.test.ets | 4 +- .../src/main/ets/test/CircleJsunit.test.ets | 4 +- .../src/main/ets/test/CommonJsunit.test.ets | 2 +- .../src/main/ets/test/GridJsunit.test.ets | 4 +- .../src/main/ets/test/LineJsunit.test.ets | 4 +- .../entry/src/main/ets/test/List.test.ets | 2 +- .../main/ets/test/LongPressGesture.test.ets | 4 +- .../main/ets/test/MotionPathJsunit.test.ets | 4 +- .../main/ets/test/PanGestureJsunit.test.ets | 4 +- .../ets/test/ParallelGestureJsunit.test.ets | 4 +- .../ets/test/PriorityGestureJsunit.test.ets | 4 +- .../src/main/ets/test/ProgressJsunit.test.ets | 4 +- .../src/main/ets/test/QrCodeJsunit.test.ets | 4 +- .../src/main/ets/test/RatingJsunit.test.ets | 4 +- .../ets/test/ResponseRegionJsunit.test.ets | 4 +- .../main/ets/test/ScrollCodeJsunit.test.ets | 4 +- .../src/main/ets/test/ShapeJsunit.test.ets | 61 +-- .../ets/test/SharedTransitionJsunit.test.ets | 17 +- .../src/main/ets/test/SpanJsunit.test.ets | 10 +- .../src/main/ets/test/TabsJsunit.test.ets | 4 +- .../src/main/ets/test/TapGesture.test.ets | 4 +- .../src/main/ets/test/TextJsunit.test.ets | 16 +- .../main/ets/test/TimeStampJsunit.test.ets | 4 +- .../src/main/ets/test/ToggleJsunit.test.ets | 4 +- .../main/ets/test/TransitionJsunit.test.ets | 4 +- .../entry/src/main/module.json | 35 ++ .../main/resources/base/element/string.json | 30 +- .../resources/base/profile/main_pages.json | 38 ++ arkui/ace_ets_dev/AppScope/app.json | 21 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 15458 bytes arkui/ace_ets_dev/BUILD.gn | 29 +- arkui/ace_ets_dev/Test.json | 4 +- arkui/ace_ets_dev/entry/src/main/config.json | 101 ----- .../src/main/ets/Application/AbilityStage.ts | 9 + .../src/main/ets/MainAbility/MainAbility.ts | 37 ++ .../entry/src/main/ets/MainAbility/app.ets | 33 -- .../ets/MainAbility/pages/index/index.ets | 56 +++ .../ets/MainAbility/pages/second/second.ets | 43 ++ .../src/main/ets/MainAbility/utils/Common.ets | 51 +++ .../ets/MainAbility/utils/MessageManager.ets | 54 +++ .../src/main/ets/TestAbility/TestAbility.ts | 50 +++ .../entry/src/main/ets/TestAbility/app.ets | 33 -- .../ets/TestRunner/OpenHarmonyTestRunner.ts | 34 +- .../src/main/ets/test/CurveJsunit.test.ets | 6 +- arkui/ace_ets_dev/entry/src/main/module.json | 35 ++ .../main/resources/base/element/string.json | 28 ++ .../resources/base/profile/main_pages.json | 8 + 113 files changed, 1773 insertions(+), 1188 deletions(-) create mode 100644 arkui/ace_ets_component_five/AppScope/app.json create mode 100644 arkui/ace_ets_component_five/AppScope/resources/base/element/string.json create mode 100644 arkui/ace_ets_component_five/AppScope/resources/base/media/app_icon.png delete mode 100644 arkui/ace_ets_component_five/entry/src/main/config.json create mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/MainAbility.ts delete mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/app.ets create mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/index/index.ets create mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/second/second.ets create mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/TestAbility.ts delete mode 100644 arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/app.ets create mode 100644 arkui/ace_ets_component_five/entry/src/main/module.json create mode 100644 arkui/ace_ets_component_five/entry/src/main/resources/base/profile/main_pages.json create mode 100644 arkui/ace_ets_component_three/AppScope/app.json create mode 100644 arkui/ace_ets_component_three/AppScope/resources/base/element/string.json create mode 100644 arkui/ace_ets_component_three/AppScope/resources/base/media/app_icon.png delete mode 100644 arkui/ace_ets_component_three/entry/src/main/config.json create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/MainAbility.ts delete mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/app.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/images/test.png create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/index/index.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/second/second.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/Common.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/MessageManager.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/TestAbility.ts delete mode 100644 arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/app.ets create mode 100644 arkui/ace_ets_component_three/entry/src/main/module.json create mode 100644 arkui/ace_ets_component_three/entry/src/main/resources/base/profile/main_pages.json create mode 100644 arkui/ace_ets_dev/AppScope/app.json create mode 100644 arkui/ace_ets_dev/AppScope/resources/base/element/string.json create mode 100644 arkui/ace_ets_dev/AppScope/resources/base/media/app_icon.png delete mode 100644 arkui/ace_ets_dev/entry/src/main/config.json create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/MainAbility.ts delete mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/app.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/index/index.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/second/second.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/Common.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/MessageManager.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/ets/TestAbility/TestAbility.ts delete mode 100644 arkui/ace_ets_dev/entry/src/main/ets/TestAbility/app.ets create mode 100644 arkui/ace_ets_dev/entry/src/main/module.json create mode 100644 arkui/ace_ets_dev/entry/src/main/resources/base/profile/main_pages.json diff --git a/arkui/ace_ets_component_five/AppScope/app.json b/arkui/ace_ets_component_five/AppScope/app.json new file mode 100644 index 000000000..5f2ad72d5 --- /dev/null +++ b/arkui/ace_ets_component_five/AppScope/app.json @@ -0,0 +1,21 @@ +{ + "app": { + "bundleName": "com.open.harmony.acetestfive", + "vendor": "huawei", + "versionCode": 1000000, + "versionName": "1.0.0", + "debug": false, + "icon": "$media:icon", + "label": "$string:app_name", + "description": "$string:description_application", + "distributedNotificationEnabled": true, + "keepAlive": true, + "singleUser": true, + "minAPIVersion": 10, + "targetAPIVersion": 10, + "car": { + "apiCompatibleVersion": 10, + "singleUser": false + } + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/AppScope/resources/base/element/string.json b/arkui/ace_ets_component_five/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..ee69f9a86 --- /dev/null +++ b/arkui/ace_ets_component_five/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string":[ + { + "name":"app_name", + "value":"ohosProject" + } + ] +} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/AppScope/resources/base/media/app_icon.png b/arkui/ace_ets_component_five/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..474a55588fd7216113dd42073aadf254d4dba023 GIT binary patch literal 15458 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 Y0jIQKqpXab7ytkO07*qoM6N<$f;yQ2zW@LL literal 0 HcmV?d00001 diff --git a/arkui/ace_ets_component_five/BUILD.gn b/arkui/ace_ets_component_five/BUILD.gn index 7ad7049dc..d7a778f0e 100644 --- a/arkui/ace_ets_component_five/BUILD.gn +++ b/arkui/ace_ets_component_five/BUILD.gn @@ -14,25 +14,33 @@ import("//test/xts/tools/build/suite.gni") ohos_js_hap_suite("ActsAceEtsComponentFiveTest") { - hap_profile = "./entry/src/main/config.json" + hap_profile = "entry/src/main/module.json" + js_build_mode = "debug" deps = [ - ":ace_ets_component_assets", + ":ace_ets_component_resources", ":ace_ets_component_test_assets", ] ets2abc = true - certificate_profile = "./signature/openharmony_sx.p7b" + certificate_profile = "signature/openharmony_sx.p7b" hap_name = "ActsAceEtsComponentFiveTest" subsystem_name = "arkui" part_name = "ace_engine" } + +ohos_app_scope("ace_ets_component_app_profile") { + app_profile = "AppScope/app.json" + sources = [ "AppScope/resources" ] +} + ohos_js_assets("ace_ets_component_assets") { source_dir = "./entry/src/main/ets/MainAbility" } ohos_js_assets("ace_ets_component_test_assets") { - source_dir = "./entry/src/main/ets/TestAbility" + source_dir = "entry/src/main/ets" } ohos_resources("ace_ets_component_resources") { - sources = [ "./entry/src/main/resources" ] - hap_profile = "./entry/src/main/config.json" + sources = [ "entry/src/main/resources" ] + deps = [ ":ace_ets_component_app_profile" ] + hap_profile = "entry/src/main/module.json" } diff --git a/arkui/ace_ets_component_five/Test.json b/arkui/ace_ets_component_five/Test.json index ceb7856dc..12692c4d7 100644 --- a/arkui/ace_ets_component_five/Test.json +++ b/arkui/ace_ets_component_five/Test.json @@ -1,11 +1,12 @@ { - "description": "Configuration for aceceshi Tests", + "description": "Configuration for hjunit demo Tests", "driver": { "type": "OHJSUnitTest", "test-timeout": "700000", - "bundle-name": "com.open.harmony.acetestfive", - "package-name": "com.open.harmony.acetestfive", - "shell-timeout": "700000" + "bundle-name": "com.open.harmony.acetestfive", + "module-name": "phone", + "shell-timeout": "700000", + "testcase-timeout": "180000" }, "kits": [ { diff --git a/arkui/ace_ets_component_five/entry/src/main/config.json b/arkui/ace_ets_component_five/entry/src/main/config.json deleted file mode 100644 index 9fde6227d..000000000 --- a/arkui/ace_ets_component_five/entry/src/main/config.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "app": { - "bundleName": "com.open.harmony.acetestfive", - "vendor": "open", - "version": { - "code": 1000000, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 7, - "releaseType": "Release", - "target": 8 - } - }, - "deviceConfig": {}, - "module": { - "package": "com.open.harmony.acetestfive", - "name": ".MyApplication", - "mainAbility": "com.open.harmony.acetestfive.MainAbility", - "deviceType": [ - "tablet", - "default", - "phone" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": false - }, - "abilities": [ - { - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "orientation": "unspecified", - "visible": true, - "srcPath": "MainAbility", - "name": ".MainAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:description_mainability", - "formsEnabled": false, - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard" - }, - { - "orientation": "unspecified", - "visible": true, - "srcPath": "TestAbility", - "name": ".TestAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:TestAbility_desc", - "formsEnabled": false, - "label": "$string:TestAbility_label", - "type": "page", - "launchType": "standard" - } - ], - "js": [ - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index", - "pages/checkbox", - "pages/enumsImage", - "pages/fillMode", - "pages/ohosMatrix4", - "pages/select", - "pages/colorGradient", - "pages/checkboxGroup", - "pages/edgeEffect", - "pages/slider", - "pages/backgroundAndSizeSetting", - "pages/border", - "pages/positionSetting", - "pages/shapeClipping", - "pages/transForm", - "pages/visibility", - "pages/enumsFlexAlign", - "pages/enumsVerticalAlign", - "pages/enumsHorizontalAlign" - ], - "name": ".MainAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - }, - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index" - ], - "name": ".TestAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - } - ] - } -} diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/Application/AbilityStage.ts b/arkui/ace_ets_component_five/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b0e0206ea --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,9 @@ +import AbilityStage from "@ohos.app.ability.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + globalThis.stageOnCreateRun = 1; + globalThis.stageContext = this.context; + } +} diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/MainAbility.ts b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..4d66065e8 --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,37 @@ +import Ability from '@ohos.app.ability.UIAbility' + +export default class MainAbility extends Ability { + onCreate(want,launchParam){ + // Ability is creating, initialize resources for this ability + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + // Ability is destroying, release resources for this ability + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate windowStage="+ windowStage) + globalThis.windowStage = windowStage + globalThis.abilityContext = this.context + windowStage.setUIContent(this.context, "MainAbility/pages/index/index", null) + } + + onWindowStageDestroy() { + //Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/app.ets b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/checkbox.ets b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/checkbox.ets index 56a99cac7..12ec901d5 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/checkbox.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/checkbox.ets @@ -1,4 +1,4 @@ -// @ts-nocheck + /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,6 +44,7 @@ struct CheckboxExample { Checkbox({name: 'checkbox1', group: 'checkboxGroup'}) .select(true) .key('Checkbox1') + .selectedColor(0xed6f21) .onChange((value: boolean) => { console.info('Checkbox1 change is'+ value) diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/index/index.ets b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/index/index.ets new file mode 100644 index 000000000..97504e244 --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/index/index.ets @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 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 router from '@ohos.router'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../../../test/List.test' + + +@Entry +@Component +struct Index { + + aboutToAppear(){ + console.info("start run testcase!!!!") + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + + build() { + Flex({ direction:FlexDirection.Column, alignItems:ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/positionSetting.ets b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/positionSetting.ets index 8706480b6..b6d20a58e 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/positionSetting.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/positionSetting.ets @@ -1,4 +1,4 @@ -// @ts-nocheck + /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,20 +18,20 @@ import events_emitter from '@ohos.events.emitter'; @Entry @Component struct PositionSetting { - @State align: Alignment = Alignment.TopStart; - @State direction: Direction = Direction.Rtl; - @State position1: {x: string, y: string} = {x: 25, y: 15}; + @State alignT: Alignment = Alignment.TopStart; + @State directionT: Direction = Direction.Rtl; + @State position1: {x: number, y: number} = {x: 25, y: 15}; @State position2: {x: string, y: string} = {x: '50%', y: '70%'}; - @State anchor: {x: string, y: string} = {x: 25, y: 25}; - @State offset: {x: string, y: string} = {x: 10, y: 15}; - @State opacityValue: string = 1; + @State anchor: {x: number, y: number} = {x: 25, y: 25}; + @State offsetT: {x: number, y: number} = {x: 10, y: 15}; + @State opacityValue: number = 1; build() { Column() { Column({space: 10}) { - Text('opacity(1)').fontSize(20).fontColor(Color.Black).width('90%').opacity(`${this.opacityValue}`).key("opacity") + Text('opacity(1)').fontSize(20).fontColor(Color.Black).width('90%').opacity(this.opacityValue).key("opacity") Text('top start') - .align(this.align) + .align(this.alignT) .height(50) .width('90%') .fontSize(20) @@ -46,7 +46,7 @@ struct PositionSetting { Text('4').height(50).width('25%').fontSize(20).backgroundColor(0xD2B48C) } .width('90%') - .direction(this.direction) + .direction(this.directionT) .key('rowDirection') Text('position').fontSize(20).fontColor(Color.Black).width('90%') @@ -92,10 +92,10 @@ struct PositionSetting { Text('offset').fontSize(20).fontColor(Color.Black).width('90%') Row() { Text('1').size({ width: '15%', height: '100' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(20) - Text(`2\noffset(${this.offset.x}, ${this.offset.y})`) + Text(`2\noffset(${this.offsetT.x}, ${this.offsetT.y})`) .size({ width: 170, height: '50' }).backgroundColor(0xbbb2cb).border({ width: 1 }) .fontSize(20).align(Alignment.Start) - .offset({ x: this.offset.x, y: this.offset.y }) + .offset({ x: this.offsetT.x, y: this.offsetT.y }) .key('offset') Text('3').size({ width: '15%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(20) Text('4\noffset(-10%, 20%)') @@ -141,16 +141,16 @@ struct PositionSetting { console.info("position page stateChangCallBack" + JSON.stringify(eventData)); if (eventData) { if (eventData.data.textAlign) { - this.align = Alignment.BottomEnd; + this.alignT = Alignment.BottomEnd; } else if (eventData.data.direction) { - this.direction = eventData.data.direction; + this.directionT = eventData.data.direction; } else if (eventData.data.position1) { this.position1 = JSON.parse(eventData.data.position1); this.position2 = JSON.parse(eventData.data.position2); } else if (eventData.data.markAnchor) { this.anchor = JSON.parse(eventData.data.markAnchor); } else if (eventData.data.offset) { - this.offset = JSON.parse(eventData.data.offset); + this.offsetT = JSON.parse(eventData.data.offset); } else if (eventData.data.opacityValue) { this.opacityValue = eventData.data.opacityValue; } diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/second/second.ets b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/second/second.ets new file mode 100644 index 000000000..1c1c727ff --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/ets/MainAbility/pages/second/second.ets @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 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 router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column,alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/TestAbility.ts b/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/TestAbility.ts new file mode 100644 index 000000000..8028a70f8 --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/TestAbility.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 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 Ability from '@ohos.app.ability.UIAbility' + +export default class TestAbility extends Ability { + onCreate(want, launchParam) { + console.log('TestAbility onCreate') + } + + onDestroy() { + console.log('TestAbility onDestroy') + } + + onWindowStageCreate(windowStage) { + console.log('TestAbility onWindowStageCreate') + windowStage.loadContent("TestAbility/pages/index", (err, data) => { + if (err.code) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)) + }); + + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + console.log('TestAbility onWindowStageDestroy') + } + + onForeground() { + console.log('TestAbility onForeground') + } + + onBackground() { + console.log('TestAbility onBackground') + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/app.ets b/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/pages/index.ets b/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/pages/index.ets index f87ca6e18..e29d33fb1 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/pages/index.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/TestAbility/pages/index.ets @@ -1,6 +1,5 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. +/* + * Copyright (c) 2022 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 @@ -13,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import router from '@system.router'; +import router from '@ohos.router'; @Entry @Component @@ -21,7 +20,6 @@ struct Index { aboutToAppear() { console.info('TestAbility index aboutToAppear') } - @State message: string = 'Hello World' build() { Row() { diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/arkui/ace_ets_component_five/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts index dfbf1f268..62b493a11 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts +++ b/arkui/ace_ets_component_five/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -1,6 +1,5 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. +/* + * Copyright (c) 2022 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 @@ -21,25 +20,25 @@ var abilityDelegatorArguments = undefined function translateParamsToString(parameters) { const keySet = new Set([ - '-s class', '-s notClass', '-s suite', '-s itName', + '-s class', '-s notClass', '-s suite', '-s it', '-s level', '-s testType', '-s size', '-s timeout', - '-s package' + '-s dryRun' ]) let targetParams = ''; for (const key in parameters) { if (keySet.has(key)) { - targetParams += ' ' + key + ' ' + parameters[key] + targetParams = `${targetParams} ${key} ${parameters[key]}` } } return targetParams.trim() } async function onAbilityCreateCallback() { - console.log('onAbilityCreateCallback'); + console.log("onAbilityCreateCallback"); } async function addAbilityMonitorCallback(err: any) { - console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) } export default class OpenHarmonyTestRunner implements TestRunner { @@ -47,22 +46,26 @@ export default class OpenHarmonyTestRunner implements TestRunner { } onPrepare() { - console.info('OpenHarmonyTestRunner OnPrepare') + console.info("OpenHarmonyTestRunner OnPrepare ") } - onRun() { + async onRun() { console.log('OpenHarmonyTestRunner onRun run') abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' let lMonitor = { abilityName: testAbilityName, onAbilityCreate: onAbilityCreateCallback, }; - var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) - var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + var cmd = 'aa start -d 0 -a com.open.harmony.acetestfive.MainAbility' + ' -b ' + abilityDelegatorArguments.bundleName cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters["-D"] + if (debug == 'true') + { + cmd += ' -D' + } console.info('cmd : '+cmd) abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { @@ -70,9 +73,6 @@ export default class OpenHarmonyTestRunner implements TestRunner { console.info('executeShellCommand : data : ' + d.stdResult); console.info('executeShellCommand : data : ' + d.exitCode); }) - console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') - var context = abilityDelegator.getAppContext() - console.info('getAppContext : ' + JSON.stringify(context)) console.info('OpenHarmonyTestRunner onRun end') } }; \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/BackgroundAndSizeSettingJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/BackgroundAndSizeSettingJsunit.test.ets index 48a239657..452b65aa0 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/BackgroundAndSizeSettingJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/BackgroundAndSizeSettingJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function backgroundAndSizeSettingJsunit() { beforeEach(async function (done) { console.info("backgroundAndSizeSetting beforeEach start"); let options = { - uri: 'pages/backgroundAndSizeSetting', + uri: 'MainAbility/pages/backgroundAndSizeSetting', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/BorderJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/BorderJsunit.test.ets index a9e6eed89..85fb9135b 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/BorderJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/BorderJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function borderJsunit() { beforeEach(async function (done) { console.info("border beforeEach start"); let options = { - uri: 'pages/border', + uri: 'MainAbility/pages/border', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxGroupJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxGroupJsunit.test.ets index 0633c3a47..dbb765932 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxGroupJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxGroupJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import Utils from './Utils'; @@ -21,7 +21,7 @@ export default function checkboxGroupJsunit() { describe('checkboxGroupTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/checkboxGroup', + uri: 'MainAbility/pages/checkboxGroup', } try { router.clear(); @@ -83,7 +83,8 @@ export default function checkboxGroupJsunit() { let strJson = getInspectorByKey('CheckboxGroup'); let obj = JSON.parse(strJson); console.info("testCheckboxGroup_400 component obj is: " + JSON.stringify(obj)); - expect(obj.$attrs.borderRadius).assertEqual("0.0vp"); + let assertObjet = obj.$attrs.borderRadius; + expect(assertObjet instanceof Object).assertTrue(); console.info('testCheckboxGroup_400 END'); done(); }); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxJsunit.test.ets index 54656eb41..8d2372211 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/CheckboxJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; @@ -21,7 +21,7 @@ export default function checkboxJsunit() { describe('checkboxTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/checkbox', + uri: 'MainAbility/pages/checkbox', } try { router.clear(); @@ -71,8 +71,9 @@ export default function checkboxJsunit() { await Utils.sleep(1000); let strJson = getInspectorByKey('Checkbox1'); let obj = JSON.parse(strJson); - console.info("testCheckbox_300 component obj is: " + JSON.stringify(obj)); - expect(obj.$attrs.borderRadius).assertEqual("0.0vp"); + console.info("testCheckbox_300 component obj is: " + JSON.stringify(obj.$attrs.borderRadius)); + let assertObjet = obj.$attrs.borderRadius; + expect(assertObjet instanceof Object).assertTrue(); console.info('testCheckbox_300 END'); done(); }); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/ColorGradientJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/ColorGradientJsunit.test.ets index 9337994ce..8b5557791 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/ColorGradientJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/ColorGradientJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function colorGradientJsunit() { beforeEach(async function (done) { console.info("colorGradient beforeEach start"); let options = { - uri: 'pages/colorGradient', + uri: 'MainAbility/pages/colorGradient', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/EdgeEffectJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/EdgeEffectJsunit.test.ets index 839cb5196..96146fea7 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/EdgeEffectJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/EdgeEffectJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function edgeEffectJsunit(){ describe('edgeEffectTest', function (){ beforeEach(async function (done) { let options = { - uri: 'pages/edgeEffect', + uri: 'MainAbility/pages/edgeEffect', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusFlexAlignJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusFlexAlignJsunit.test.ets index 5c257ebe2..8911b1ef2 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusFlexAlignJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusFlexAlignJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function enumsFlexItemJsunit() { beforeEach(async function (done) { console.info('beforeEach ===================enumsFlexItem test beforeEach called==================='); let options = { - uri: 'pages/enumsFlexAlign', + uri: 'MainAbility/pages/enumsFlexAlign', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusHorizontalAlignJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusHorizontalAlignJsunit.test.ets index f5ac9555a..39db4c9ba 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusHorizontalAlignJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusHorizontalAlignJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function enumsVerticalAlignJsunit() { beforeEach(async function (done) { console.info('beforeEach ===================enumsHorizontalAlign test beforeEach called==================='); let options = { - uri: 'pages/enumsHorizontalAlign', + uri: 'MainAbility/pages/enumsHorizontalAlign', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusImageJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusImageJsunit.test.ets index 6ff56af0b..7bc1d8d6e 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusImageJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusImageJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function enumsImageJsunit() { beforeEach(async function (done) { console.info('beforeEach ===================enumsImage test beforeEach called==================='); let options = { - uri: 'pages/enumsImage', + uri: 'MainAbility/pages/enumsImage', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusVerticalAlignJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusVerticalAlignJsunit.test.ets index 4c8f60670..8b8774dee 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusVerticalAlignJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/EnmusVerticalAlignJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function enumsVerticalAlignJsunit() { beforeEach(async function (done) { console.info('beforeEach ===================enumsFlexItem test beforeEach called==================='); let options = { - uri: 'pages/enumsVerticalAlign', + uri: 'MainAbility/pages/enumsVerticalAlign', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/FillModeJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/FillModeJsunit.test.ets index e534c4837..5af80926b 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/FillModeJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/FillModeJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function fillModeJsunit(){ beforeEach(async function (done) { console.info('fillModeTest beforeEach called'); let options = { - uri: 'pages/fillMode', + uri: 'MainAbility/pages/fillMode', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/OhosMatrix4Jsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/OhosMatrix4Jsunit.test.ets index 3456a5b93..3f7f7e563 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/OhosMatrix4Jsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/OhosMatrix4Jsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function ohosMatrix4Jsunit() { beforeEach(async function (done) { console.info("ohosMatrix4 beforeEach start"); let options = { - uri: 'pages/ohosMatrix4', + uri: 'MainAbility/pages/ohosMatrix4', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/PositionSettingJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/PositionSettingJsunit.test.ets index ed5780a2e..2e9d50105 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/PositionSettingJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/PositionSettingJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function positionSettingJsunit() { beforeEach(async function (done) { console.info("positionSetting beforeEach start"); let options = { - uri: 'pages/positionSetting', + uri: 'MainAbility/pages/positionSetting', } try { router.clear(); @@ -52,8 +52,8 @@ export default function positionSettingJsunit() { let strJson = getInspectorByKey('textAlign'); console.info("[testPositionSetting001] component strJson:" + strJson); let obj = JSON.parse(strJson); - console.info("[testPositionSetting001] textAlign: " + obj.$attrs.textAlign); - expect(obj.$attrs.textAlign).assertEqual('TextAlign.Left'); + console.info("[testPositionSetting001] textAlign: " + obj.$attrs.textAlign + "_" + obj.$attrs.align); + expect(obj.$attrs.textAlign).assertEqual('TextAlign.Start'); console.info('[testPositionSetting001] END'); done(); }); @@ -92,7 +92,7 @@ export default function positionSettingJsunit() { console.info("[testPositionSetting003] component strJson:" + strJson); let obj = JSON.parse(strJson); console.info("[testPositionSetting003] textAlign: " + obj.$attrs.textAlign); - expect(obj.$attrs.textAlign).assertEqual("TextAlign.Right"); + expect(obj.$attrs.textAlign).assertEqual("TextAlign.Start"); console.info('[testPositionSetting003] END'); done(); }); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/SelectJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/SelectJsunit.test.ets index 6264c9286..7f4f6a81e 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/SelectJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/SelectJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function selectJsunit() { describe('appInfoTest_five_2', function () { beforeEach(async function (done) { let options = { - uri: 'pages/select', + uri: 'MainAbility/pages/select', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/ShapeClippingJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/ShapeClippingJsunit.test.ets index eb1dbfc7e..dff02f9a4 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/ShapeClippingJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/ShapeClippingJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function shapeClippingJsunit() { beforeEach(async function (done) { console.info("shapeClipping beforeEach start"); let options = { - uri: 'pages/shapeClipping', + uri: 'MainAbility/pages/shapeClipping', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/SliderJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/SliderJsunit.test.ets index ec6ae032b..f8b950d69 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/SliderJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/SliderJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function sliderJsunit() { describe('appInfoTest_five_3', function () { beforeEach(async function (done) { let options = { - uri: 'pages/slider', + uri: 'MainAbility/pages/slider', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/TransFormJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/TransFormJsunit.test.ets index da15397e9..6811c23b7 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/TransFormJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/TransFormJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function transFormJsunit() { beforeEach(async function (done) { console.info("transForm beforeEach start"); let options = { - uri: 'pages/transForm', + uri: 'MainAbility/pages/transForm', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/ets/test/VisibilityJsunit.test.ets b/arkui/ace_ets_component_five/entry/src/main/ets/test/VisibilityJsunit.test.ets index fa2141f0a..daf796125 100644 --- a/arkui/ace_ets_component_five/entry/src/main/ets/test/VisibilityJsunit.test.ets +++ b/arkui/ace_ets_component_five/entry/src/main/ets/test/VisibilityJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function visibilityJsunit() { beforeEach(async function (done) { console.info("visibility beforeEach start"); let options = { - uri: 'pages/visibility', + uri: 'MainAbility/pages/visibility', } try { router.clear(); diff --git a/arkui/ace_ets_component_five/entry/src/main/module.json b/arkui/ace_ets_component_five/entry/src/main/module.json new file mode 100644 index 000000000..0aa73fb39 --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/module.json @@ -0,0 +1,35 @@ +{ + "module": { + "name": "phone", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:phone_entry_dsc", + "mainElement": "MainAbility", + "deviceTypes": [ + "tablet", + "default", + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "uiSyntax": "ets", + "pages": "$profile:main_pages", + "abilities": [{ + "name": "com.open.harmony.acetestfive.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:phone_entry_main", + "icon": "$media:icon", + "label": "$string:entry_label", + "visible": true, + "orientation": "portrait", + "skills": [{ + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + }] + }] + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/resources/base/element/string.json b/arkui/ace_ets_component_five/entry/src/main/resources/base/element/string.json index f6488bb9c..508ea4715 100644 --- a/arkui/ace_ets_component_five/entry/src/main/resources/base/element/string.json +++ b/arkui/ace_ets_component_five/entry/src/main/resources/base/element/string.json @@ -28,5 +28,34 @@ "name":"message_arrive", "value":"We will arrive at %s." } + , + { + "name": "phone_entry_dsc", + "value": "i am an entry for phone" + }, + { + "name": "phone_entry_main", + "value": "the phone entry ability" + }, + { + "name": "entry_label", + "value": "ActsContextTest" + }, + { + "name": "form_description", + "value": "my form" + }, + { + "name": "serviceability_description", + "value": "my whether" + }, + { + "name": "description_application", + "value": "demo for test" + }, + { + "name": "app_name", + "value": "Demo" + } ] } \ No newline at end of file diff --git a/arkui/ace_ets_component_five/entry/src/main/resources/base/profile/main_pages.json b/arkui/ace_ets_component_five/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..740a01a72 --- /dev/null +++ b/arkui/ace_ets_component_five/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,24 @@ +{ + "src": [ + "MainAbility/pages/index", + "MainAbility/pages/checkbox", + "MainAbility/pages/enumsImage", + "MainAbility/pages/fillMode", + "MainAbility/pages/index/index", + "MainAbility/pages/ohosMatrix4", + "MainAbility/pages/select", + "MainAbility/pages/colorGradient", + "MainAbility/pages/checkboxGroup", + "MainAbility/pages/edgeEffect", + "MainAbility/pages/slider", + "MainAbility/pages/backgroundAndSizeSetting", + "MainAbility/pages/border", + "MainAbility/pages/positionSetting", + "MainAbility/pages/shapeClipping", + "MainAbility/pages/transForm", + "MainAbility/pages/visibility", + "MainAbility/pages/enumsFlexAlign", + "MainAbility/pages/enumsVerticalAlign", + "MainAbility/pages/enumsHorizontalAlign" + ] +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/AppScope/app.json b/arkui/ace_ets_component_three/AppScope/app.json new file mode 100644 index 000000000..4bc3f0117 --- /dev/null +++ b/arkui/ace_ets_component_three/AppScope/app.json @@ -0,0 +1,21 @@ +{ + "app": { + "bundleName": "com.open.harmony.acetestthree", + "vendor": "huawei", + "versionCode": 1000000, + "versionName": "1.0.0", + "debug": false, + "icon": "$media:icon", + "label": "$string:app_name", + "description": "$string:description_application", + "distributedNotificationEnabled": true, + "keepAlive": true, + "singleUser": true, + "minAPIVersion": 10, + "targetAPIVersion": 10, + "car": { + "apiCompatibleVersion": 10, + "singleUser": false + } + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/AppScope/resources/base/element/string.json b/arkui/ace_ets_component_three/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..ee69f9a86 --- /dev/null +++ b/arkui/ace_ets_component_three/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string":[ + { + "name":"app_name", + "value":"ohosProject" + } + ] +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/AppScope/resources/base/media/app_icon.png b/arkui/ace_ets_component_three/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..474a55588fd7216113dd42073aadf254d4dba023 GIT binary patch literal 15458 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 Y0jIQKqpXab7ytkO07*qoM6N<$f;yQ2zW@LL literal 0 HcmV?d00001 diff --git a/arkui/ace_ets_component_three/BUILD.gn b/arkui/ace_ets_component_three/BUILD.gn index c354e24d6..6083915a5 100644 --- a/arkui/ace_ets_component_three/BUILD.gn +++ b/arkui/ace_ets_component_three/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2022 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 @@ -14,25 +14,29 @@ import("//test/xts/tools/build/suite.gni") ohos_js_hap_suite("ActsAceEtsComponentThreeTest") { - hap_profile = "./entry/src/main/config.json" + hap_profile = "entry/src/main/module.json" + js_build_mode = "debug" deps = [ ":ace_ets_component_assets", ":ace_ets_component_resources", - ":ace_ets_component_test_assets", ] ets2abc = true - certificate_profile = "./signature/openharmony_sx.p7b" + certificate_profile = "signature/openharmony_sx.p7b" hap_name = "ActsAceEtsComponentThreeTest" subsystem_name = "arkui" part_name = "ace_engine" } -ohos_js_assets("ace_ets_component_assets") { - source_dir = "./entry/src/main/ets/MainAbility" + +ohos_app_scope("ace_ets_component_app_profile") { + app_profile = "AppScope/app.json" + sources = [ "AppScope/resources" ] } -ohos_js_assets("ace_ets_component_test_assets") { - source_dir = "./entry/src/main/ets/TestAbility" + +ohos_js_assets("ace_ets_component_assets") { + source_dir = "entry/src/main/ets" } ohos_resources("ace_ets_component_resources") { - sources = [ "./entry/src/main/resources" ] - hap_profile = "./entry/src/main/config.json" + sources = [ "entry/src/main/resources" ] + deps = [ ":ace_ets_component_app_profile" ] + hap_profile = "entry/src/main/module.json" } diff --git a/arkui/ace_ets_component_three/Test.json b/arkui/ace_ets_component_three/Test.json index dcf5f9347..17a831db4 100644 --- a/arkui/ace_ets_component_three/Test.json +++ b/arkui/ace_ets_component_three/Test.json @@ -1,10 +1,11 @@ { - "description": "Configuration for aceceshi Tests", + "description": "Configuration for hjunit demo Tests", "driver": { "type": "OHJSUnitTest", "test-timeout": "1200000", - "bundle-name": "com.open.harmony.acetestthree", - "package-name": "com.open.harmony.acetestthree", + "bundle-name": "com.open.harmony.acetestthree", + + "module-name": "phone", "shell-timeout": "1200000" }, "kits": [ diff --git a/arkui/ace_ets_component_three/entry/src/main/config.json b/arkui/ace_ets_component_three/entry/src/main/config.json deleted file mode 100644 index 04eddf6e9..000000000 --- a/arkui/ace_ets_component_three/entry/src/main/config.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "app": { - "bundleName": "com.open.harmony.acetestthree", - "vendor": "open", - "version": { - "code": 1000000, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 7, - "releaseType": "Release", - "target": 8 - } - }, - "deviceConfig": {}, - "module": { - "package": "com.open.harmony.acetestthree", - "name": ".MyApplication", - "mainAbility": "com.open.harmony.acetestthree.MainAbility", - "deviceType": [ - "tablet", - "default", - "phone" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": false - }, - "abilities": [ - { - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "orientation": "unspecified", - "visible": true, - "srcPath": "MainAbility", - "name": ".MainAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:description_mainability", - "formsEnabled": false, - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard" - }, - { - "orientation": "unspecified", - "visible": true, - "srcPath": "TestAbility", - "name": ".TestAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:TestAbility_desc", - "formsEnabled": false, - "label": "$string:TestAbility_label", - "type": "page", - "launchType": "standard" - } - ], - "js": [ - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index", - "pages/toggle", - "pages/gridPage", - "pages/span", - "pages/text", - "pages/badge", - "pages/canvas", - "pages/longPressGesture", - "pages/button", - "pages/ResponseRegion", - "pages/PanGesture", - "pages/background", - "pages/QrCode", - "pages/tabs", - "pages/tapGesture", - "pages/progress", - "pages/animate", - "pages/rating", - "pages/canvas2", - "pages/shape", - "pages/motionPath", - "pages/scrollCode", - "pages/transition", - "pages/priorityGesture", - "pages/parallelGesture", - "pages/blank", - "pages/sharedTransition", - "pages/sharedTransition2", - "pages/line", - "pages/circle", - "pages/aboutToDisappear", - "pages/timeStamp" - ], - "name": ".MainAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - }, - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index" - ], - "name": ".TestAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - } - ] - } -} diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/Application/AbilityStage.ts b/arkui/ace_ets_component_three/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b0e0206ea --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,9 @@ +import AbilityStage from "@ohos.app.ability.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + globalThis.stageOnCreateRun = 1; + globalThis.stageContext = this.context; + } +} diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/MainAbility.ts b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..4d66065e8 --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,37 @@ +import Ability from '@ohos.app.ability.UIAbility' + +export default class MainAbility extends Ability { + onCreate(want,launchParam){ + // Ability is creating, initialize resources for this ability + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + // Ability is destroying, release resources for this ability + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate windowStage="+ windowStage) + globalThis.windowStage = windowStage + globalThis.abilityContext = this.context + windowStage.setUIContent(this.context, "MainAbility/pages/index/index", null) + } + + onWindowStageDestroy() { + //Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/app.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/images/test.png b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/images/test.png new file mode 100644 index 0000000000000000000000000000000000000000..78488bb00baa01614c87a503998fa4129ab110ac GIT binary patch literal 104831 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

@;&vtIyS*`|Ju}730$!)%!#kUzYc$@P7)s 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 { - if (eventData != null) { - console.info("animate page state change called:" + JSON.stringify(eventData)); - if (eventData.data.duration != null) { - this.duration = parseInt(eventData.data.duration); + let callback:Callback = (message:any) => { + console.error('message = ' + message.name + "--" + message.value) + if (message.name == 'duration') { + this.duration = message.value } - if (eventData.data.curve != null) { - this.curve = eventData.data.curve; + if (message.name == 'curve') { + this.curve = message.value } - if (eventData.data.tempo != null) { - this.tempo = parseInt(eventData.data.tempo); + if (message.name == 'iteration') { + this.iteration = message.value } - if (eventData.data.iteration != null) { - this.iteration = parseInt(eventData.data.iteration); + if (message.name == 'tempo') { + this.tempo = message.value } - if (eventData.data.playmode != null) { - this.playmode = eventData.data.playmode; + if (message.name == 'playmode') { + this.playmode = message.value } } + this.messageManager.registerCallback(callback) } + + build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, }) { + Column(){ Button(this.show) + .backgroundColor(0x317aff) .width(80) .height(30) .backgroundColor(0x317aff) @@ -145,6 +85,64 @@ struct AnimationExample { console.info("button1 duration test animateTo START") }) }) + Button(this.show) + .backgroundColor(0x317aff) + .width(80) + .height(30) + .backgroundColor(0x317aff) + .margin({ bottom: 20 }) + .key('button11') + .onClick(() => { + try { + var backData = { + data: { + "duration": this.duration, + } + } + var backEvent = { + eventId: 151, + priority: events_emitter.EventPriority.LOW + } + console.info("button1 start to emit action state") + events_emitter.emit(backEvent, backData) + } catch (err) { + console.info("button1 emit action state err: " + JSON.stringify(err.message)) + } + console.info("button1 animateTo START") + console.info("button1 duration value is : " + this.duration) + animateTo({ duration: this.duration }, () => { + console.info("button1 duration test animateTo START") + }) + }) + Button(this.show) + .backgroundColor(0x317aff) + .width(80) + .height(30) + .backgroundColor(0x317aff) + .margin({ bottom: 20 }) + .key('button12') + .onClick(() => { + try { + var backData = { + data: { + "curve": this.curve, + } + } + var backEvent = { + eventId: 152, + priority: events_emitter.EventPriority.LOW + } + console.info("button1 start to emit action state") + events_emitter.emit(backEvent, backData) + } catch (err) { + console.info("button1 emit action state err: " + JSON.stringify(err.message)) + } + console.info("button1 animateTo START") + console.info("button1 duration value is : " + this.duration) + animateTo({ duration: this.duration }, () => { + console.info("button1 duration test animateTo START") + }) + }) Button(this.show) .width(80) .height(30) @@ -201,6 +199,34 @@ struct AnimationExample { console.info("button3 iterations test animateTo START") }) }) + Button(this.show) + .width(80) + .height(30) + .backgroundColor(0x317aff) + .margin({ bottom: 20 }) + .key('button13') + .onClick(() => { + try { + var backDataTwo = { + data: { + "iterations": this.iteration, + } + } + var backEventTwo = { + eventId: 153, + priority: events_emitter.EventPriority.LOW + } + console.info("button3 start to emit action state") + events_emitter.emit(backEventTwo, backDataTwo) + } catch (err) { + console.info("button3 emit action state err: " + JSON.stringify(err.message)) + } + console.info("button3 animateTo START") + console.info("button3 iteration value is : " + this.iteration) + animateTo({ iterations: this.iteration }, () => { + console.info("button3 iterations test animateTo START") + }) + }) Button(this.show) .width(80) .height(30) @@ -229,6 +255,34 @@ struct AnimationExample { console.info("button4 tempo test animateTo START") }) }) + Button(this.show) + .width(80) + .height(30) + .backgroundColor(0x317aff) + .margin({ bottom: 20 }) + .key('button14') + .onClick(() => { + try { + var backDataThree = { + data: { + "tempo": this.tempo + } + } + var backEventThree = { + eventId: 154, + priority: events_emitter.EventPriority.LOW + } + console.info("button4 start to emit action state") + events_emitter.emit(backEventThree, backDataThree) + } catch (err) { + console.info("button4 emit action state err: " + JSON.stringify(err.message)) + } + console.info("button4 animateTo START") + console.info("button4 tempo value is : " + this.duration) + animateTo({ tempo: this.tempo }, () => { + console.info("button4 tempo test animateTo START") + }) + }) Button(this.show) .width(80) .height(30) @@ -253,7 +307,35 @@ struct AnimationExample { } console.info("button5 animateTo START") console.info("button5 playmode value is : " + this.playmode) - animateTo({ PlayMode: this.playmode }, () => { + animateTo({playMode:PlayMode.Normal}, () => { + console.info("button5 playMode test animateTo START") + }) + }) + Button(this.show) + .width(80) + .height(30) + .backgroundColor(0x317aff) + .margin({ bottom: 20 }) + .key('button15') + .onClick(() => { + try { + var backDataFour = { + data: { + "playmode": this.playmode, + } + } + var backEventFour = { + eventId: 155, + priority: events_emitter.EventPriority.LOW + } + console.info("button5 start to emit action state") + events_emitter.emit(backEventFour, backDataFour) + } catch (err) { + console.info("button5 emit action state err: " + JSON.stringify(err.message)) + } + console.info("button5 animateTo START") + console.info("button5 playmode value is : " + this.playmode) + animateTo({playMode:PlayMode.Normal}, () => { console.info("button5 playMode test animateTo START") }) }) @@ -323,7 +405,7 @@ struct AnimationExample { try { var backData = { data: { - "duration": this.duration, + "curve": this.curve, } } var backEvent = { @@ -351,7 +433,7 @@ struct AnimationExample { try { var backData = { data: { - "duration": this.duration, + "curve": this.curve, } } var backEvent = { @@ -379,7 +461,7 @@ struct AnimationExample { try { var backData = { data: { - "duration": this.duration, + "iteration": this.iteration, } } var backEvent = { @@ -402,12 +484,12 @@ struct AnimationExample { .height(30) .backgroundColor(0x317aff) .margin({ bottom: 20 }) - .key('button11') + .key('button111') .onClick(() => { try { var backData = { data: { - "duration": this.duration, + "iteration": this.iteration, } } var backEvent = { @@ -430,12 +512,12 @@ struct AnimationExample { .height(30) .backgroundColor(0x317aff) .margin({ bottom: 20 }) - .key('button12') + .key('button121') .onClick(() => { try { var backData = { data: { - "duration": this.duration, + "tempo": this.tempo, } } var backEvent = { @@ -458,12 +540,12 @@ struct AnimationExample { .height(30) .backgroundColor(0x317aff) .margin({ bottom: 20 }) - .key('button13') + .key('button131') .onClick(() => { try { var backData = { data: { - "duration": this.duration, + "tempo": this.tempo, } } var backEvent = { @@ -486,12 +568,12 @@ struct AnimationExample { .height(30) .backgroundColor(0x317aff) .margin({ bottom: 20 }) - .key('button14') + .key('button141') .onClick(() => { try { var backData = { data: { - "duration": this.duration, + "playmode": this.playmode, } } var backEvent = { @@ -514,12 +596,12 @@ struct AnimationExample { .height(30) .backgroundColor(0x317aff) .margin({ bottom: 20 }) - .key('button15') + .key('button151') .onClick(() => { try { var backData = { data: { - "duration": this.duration, + "playmode": this.playmode, } } var backEvent = { @@ -537,6 +619,6 @@ struct AnimationExample { console.info("button15 duration test animateTo START") }) }) - }.height(400).width("100%").padding({ top: 100 }) + }.height("%100").width("100%") } } \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/badge.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/badge.ets index c7ccef703..5439c535d 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/badge.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/badge.ets @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/index/index.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/index/index.ets new file mode 100644 index 000000000..97504e244 --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/index/index.ets @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 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 router from '@ohos.router'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../../../test/List.test' + + +@Entry +@Component +struct Index { + + aboutToAppear(){ + console.info("start run testcase!!!!") + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + + build() { + Flex({ direction:FlexDirection.Column, alignItems:ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/second/second.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/second/second.ets new file mode 100644 index 000000000..1c1c727ff --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/second/second.ets @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 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 router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column,alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/text.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/text.ets index c06c9aaff..aeefdd16a 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/text.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/pages/text.ets @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/Common.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/Common.ets new file mode 100644 index 000000000..16d5ad46f --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/Common.ets @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2022 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 default class CommonFunc { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time){ + return new Promise((resolve,reject)=>{ + setTimeout(()=>{ + resolve("ok") + },time) + }).then(()=>{ + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } +} + + + + diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/MessageManager.ets b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/MessageManager.ets new file mode 100644 index 000000000..70d716b6d --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/MainAbility/utils/MessageManager.ets @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2022 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 interface Callback { + (message:any):void +} + +export class MessageManager { + callback:Callback + callbacks:Map = new Map() + + constructor() { + + } + + registerCallback(callback:Callback , type?:string) { + if (type == undefined) { + console.error('registerCallback callback set') + this.callback = callback + return + } + this.callbacks.set(type,callback) + } + + notify(message:any, type?:string) { + if (type == undefined) { + this.callback(message) + return + } + + let tmpCallback:Callback = this.callbacks.get(type) + if (tmpCallback === undefined) { + console.error('callbacks has no callback for type ' + type) + return + } + tmpCallback(message) + } + + clear() { + this.callbacks.clear() + this.callback = null + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/TestAbility.ts b/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/TestAbility.ts new file mode 100644 index 000000000..8028a70f8 --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/TestAbility.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 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 Ability from '@ohos.app.ability.UIAbility' + +export default class TestAbility extends Ability { + onCreate(want, launchParam) { + console.log('TestAbility onCreate') + } + + onDestroy() { + console.log('TestAbility onDestroy') + } + + onWindowStageCreate(windowStage) { + console.log('TestAbility onWindowStageCreate') + windowStage.loadContent("TestAbility/pages/index", (err, data) => { + if (err.code) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)) + }); + + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + console.log('TestAbility onWindowStageDestroy') + } + + onForeground() { + console.log('TestAbility onForeground') + } + + onBackground() { + console.log('TestAbility onBackground') + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/app.ets b/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_component_three/entry/src/main/ets/TestAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/arkui/ace_ets_component_three/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts index dfbf1f268..5d14ac828 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts +++ b/arkui/ace_ets_component_three/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -1,6 +1,5 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. +/* + * Copyright (c) 2022 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 @@ -21,25 +20,25 @@ var abilityDelegatorArguments = undefined function translateParamsToString(parameters) { const keySet = new Set([ - '-s class', '-s notClass', '-s suite', '-s itName', + '-s class', '-s notClass', '-s suite', '-s it', '-s level', '-s testType', '-s size', '-s timeout', - '-s package' + '-s dryRun' ]) let targetParams = ''; for (const key in parameters) { if (keySet.has(key)) { - targetParams += ' ' + key + ' ' + parameters[key] + targetParams = `${targetParams} ${key} ${parameters[key]}` } } return targetParams.trim() } async function onAbilityCreateCallback() { - console.log('onAbilityCreateCallback'); + console.log("onAbilityCreateCallback"); } async function addAbilityMonitorCallback(err: any) { - console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) } export default class OpenHarmonyTestRunner implements TestRunner { @@ -47,22 +46,26 @@ export default class OpenHarmonyTestRunner implements TestRunner { } onPrepare() { - console.info('OpenHarmonyTestRunner OnPrepare') + console.info("OpenHarmonyTestRunner OnPrepare ") } - onRun() { + async onRun() { console.log('OpenHarmonyTestRunner onRun run') abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' let lMonitor = { abilityName: testAbilityName, onAbilityCreate: onAbilityCreateCallback, }; - var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) - var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + var cmd = 'aa start -d 0 -a com.open.harmony.acetestthree.MainAbility' + ' -b ' + abilityDelegatorArguments.bundleName cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters["-D"] + if (debug == 'true') + { + cmd += ' -D' + } console.info('cmd : '+cmd) abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { @@ -70,9 +73,6 @@ export default class OpenHarmonyTestRunner implements TestRunner { console.info('executeShellCommand : data : ' + d.stdResult); console.info('executeShellCommand : data : ' + d.exitCode); }) - console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') - var context = abilityDelegator.getAppContext() - console.info('getAppContext : ' + JSON.stringify(context)) console.info('OpenHarmonyTestRunner onRun end') } }; \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/AboutToDisappearJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/AboutToDisappearJsunit.test.ets index 6830a9711..6ae7ed432 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/AboutToDisappearJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/AboutToDisappearJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function aboutToDisappearJsunit() { beforeEach(async function (done) { console.info("aboutToDisappear beforeEach start"); let options = { - uri: 'pages/aboutToDisappear', + uri: 'MainAbility/pages/aboutToDisappear', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/AnimateJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/AnimateJsunit.test.ets index f0ec6854e..ee8dc1d30 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/AnimateJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/AnimateJsunit.test.ets @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,17 +12,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils'; +import CommonFunc from '../MainAbility/utils/Common'; +import {MessageManager,Callback} from '../MainAbility/utils/MessageManager'; +const waitUiReadyMs = 1000; export default function animateJsunit() { describe('animateTest', function () { beforeEach(async function (done) { console.info("animate beforeEach start"); let options = { - uri: 'pages/animate', + uri: 'MainAbility/pages/animate', } try { router.clear(); @@ -55,7 +57,11 @@ export default function animateJsunit() { } let callback = (indexEvent) => { console.info("animateTest_0100 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.duration).assertEqual('100') + try { + expect(indexEvent.data.duration == 100).assertTrue(); + } catch (err) { + console.info("animateTest_0100 get state result is errr: " + JSON.stringify(err)); + } } try { events_emitter.on(indexEvent, callback); @@ -99,7 +105,12 @@ export default function animateJsunit() { } let callback = (indexEvent) => { console.info("animateTest_0300 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.iteration).assertEqual('1') + try { + expect(indexEvent.data.iterations == 1).assertTrue(); + } catch (err) { + console.info("animateTest_0300 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); @@ -157,108 +168,82 @@ export default function animateJsunit() { }); it('animateTest_0600', 0, async function (done) { - console.info('animateTest_0500 START'); - try { - let eventData = { - data: { - "duration": '2000' - } - } - let indexEventOne = { - eventId: 50, + await CommonFunc.sleep(1000); + globalThis.value.message.notify({name:'duration', value:2000}); + await CommonFunc.sleep(200); + let indexEvent = { + eventId: 151, priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_0600 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_0600 change component data error: " + err.message); - } - let indexEvent = { - eventId: 51, - priority: events_emitter.EventPriority.LOW - } + } let callback = (indexEvent) => { console.info("animateTest_0600 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.duration).assertEqual(2000) + try { + expect(indexEvent.data.duration == 2000).assertTrue(); + } catch (err) { + console.info("animateTest_0600 get state result err is: " + JSON.stringify(err)); + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_0600 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_0600 click result is: " + JSON.stringify(sendEventByKey('button1', 10, ""))); + console.info("animateTest_0600 click result is: " + JSON.stringify(sendEventByKey('button11', 10, ""))); await Utils.sleep(2000); console.info('animateTest_0600 END'); done(); }); it('animateTest_0700', 0, async function (done) { - console.info('animateTest_0700 START'); - try { - let eventData = { - data: { - "curve": "Linear" - } - } - let indexEventOne = { - eventId: 50, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_0700 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_0700 change component data error: " + err.message); - } + console.info('animateTest_0700 START'); + globalThis.value.message.notify({name:'curve', value:'Linear'}); + await CommonFunc.sleep(200); let indexEvent = { - eventId: 52, + eventId: 152, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_0700 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.curve).assertEqual('Linear') + try { + expect(indexEvent.data.curve).assertEqual('Linear'); + } catch (err) { + console.info("animateTest_0700 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_0700 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_0700 click result is: " + JSON.stringify(sendEventByKey('button2', 10, ""))); + console.info("animateTest_0700 click result is: " + JSON.stringify(sendEventByKey('button12', 10, ""))); await Utils.sleep(2000); console.info('animateTest_0700 END'); done(); }); it('animateTest_0800', 0, async function (done) { - console.info('animateTest_0800 START'); - try { - let eventData = { - data: { - "iteration": "2" - } - } - let indexEventOne = { - eventId: 50, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_0800 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_0800 change component data error: " + err.message); - } - let indexEvent = { - eventId: 53, + console.info('animateTest_0800 START'); + globalThis.value.message.notify({name:'iteration', value:2}); + await CommonFunc.sleep(200); + let indexEvent = { + eventId: 153, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_0800 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.iteration).assertEqual('2') + try { + expect(indexEvent.data.iterations).assertEqual(2) + } catch (err) { + console.info("animateTest_0800 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_0800 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_0800 click result is: " + JSON.stringify(sendEventByKey('button3', 10, ""))); + console.info("animateTest_0800 click result is: " + JSON.stringify(sendEventByKey('button13', 10, ""))); await Utils.sleep(2000); console.info('animateTest_0800 END'); done(); @@ -266,35 +251,27 @@ export default function animateJsunit() { it('animateTest_0900', 0, async function (done) { console.info('animateTest_0900 START'); - try { - let eventData = { - data: { - "tempo": "20000" - } - } - let indexEventOne = { - eventId: 50, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_0900 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_0900 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'tempo', value:"20000"}); + await CommonFunc.sleep(200); let indexEvent = { - eventId: 54, + eventId: 154, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_0900 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.tempo).assertEqual('20000') + try { + expect(indexEvent.data.tempo).assertEqual('20000'); + } catch (err) { + console.info("animateTest_0900 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_0900 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_0900 click result is: " + JSON.stringify(sendEventByKey('button4', 10, ""))); + console.info("animateTest_0900 click result is: " + JSON.stringify(sendEventByKey('button14', 10, ""))); await Utils.sleep(2000); console.info('animateTest_0900 END'); done(); @@ -302,35 +279,26 @@ export default function animateJsunit() { it('animateTest_1000', 0, async function (done) { console.info('animateTest_1000 START'); - try { - let eventData = { - data: { - "playmode": "PlayMode.Alternate" - } - } - let indexEventOne = { - eventId: 50, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1000 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1000 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'playmode', value:PlayMode.Alternate}); + await CommonFunc.sleep(200); let indexEvent = { - eventId: 55, + eventId: 155, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1000 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.playmode).assertEqual('alternate') + try { + expect(indexEvent.data.playmode).assertEqual('alternate'); + } catch (err) { + console.info("animateTest_1000 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_1000 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_1000 click result is: " + JSON.stringify(sendEventByKey('button5', 10, ""))); + console.info("animateTest_1000 click result is: " + JSON.stringify(sendEventByKey('button15', 10, ""))); await Utils.sleep(2000); console.info('animateTest_1000 END'); done(); @@ -338,28 +306,20 @@ export default function animateJsunit() { it('animateTest_1100', 0, async function (done) { console.info('animateTest_1100 START'); - try { - let eventData = { - data: { - "duration": -1000 - } - } - let indexEventOne = { - eventId: 1011, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1100 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1100 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'duration', value:-1000}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1001, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1100 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.duration).assertEqual('-1000') + try { + expect(indexEvent.data.duration).assertEqual(-1000); + } catch (err) { + console.info("animateTest_1100 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); @@ -374,28 +334,19 @@ export default function animateJsunit() { it('animateTest_1200', 0, async function (done) { console.info('animateTest_1200 START'); - try { - let eventData = { - data: { - "duration": 100000000 - } - } - let indexEventOne = { - eventId: 1012, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1200 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1200 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'duration', value:100000000}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1002, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1200 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.duration).assertEqual('100000000') + try { + expect(indexEvent.data.duration).assertEqual(100000000); + } catch (err) { + console.info("animateTest_1200 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); @@ -410,28 +361,20 @@ export default function animateJsunit() { it('animateTest_1300', 0, async function (done) { console.info('animateTest_1300 START'); - try { - let eventData = { - data: { - "curve": 123 - } - } - let indexEventOne = { - eventId: 1013, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1300 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1300 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'curve', value:'123'}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1003, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1300 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.curve).assertEqual('123') + try { + expect(indexEvent.data.curve).assertEqual('123'); + } catch (err) { + console.info("animateTest_1300 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); @@ -446,28 +389,19 @@ export default function animateJsunit() { it('animateTest_1400', 0, async function (done) { console.info('animateTest_1400 START'); - try { - let eventData = { - data: { - "curve": 'abc' - } - } - let indexEventOne = { - eventId: 1014, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1400 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1400 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'curve', value:'abc'}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1004, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1400 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.curve).assertEqual('abc') + try { + expect(indexEvent.data.curve).assertEqual('abc') + } catch (err) { + console.info("animateTest_1400 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); @@ -482,28 +416,19 @@ export default function animateJsunit() { it('animateTest_1500', 0, async function (done) { console.info('animateTest_1500 START'); - try { - let eventData = { - data: { - "iteration": "121212121212" - } - } - let indexEventOne = { - eventId: 1015, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1500 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1500 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'iteration', value:121}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1005, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1500 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.iteration).assertEqual('121212121212') + try { + expect(indexEvent.data.iteration).assertEqual(121); + } catch (err) { + console.info("animateTest_1500 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); @@ -518,35 +443,26 @@ export default function animateJsunit() { it('animateTest_1600', 0, async function (done) { console.info('animateTest_1600 START'); - try { - let eventData = { - data: { - "iteration": "-5" - } - } - let indexEventOne = { - eventId: 1016, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1600 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1600 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'iteration', value:-5}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1006, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1600 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.iteration).assertEqual('-5') + try { + expect(indexEvent.data.iteration).assertEqual(-5); + } catch (err) { + console.info("animateTest_1600 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_1600 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_1600 click result is: " + JSON.stringify(sendEventByKey('button11', 10, ""))); + console.info("animateTest_1600 click result is: " + JSON.stringify(sendEventByKey('button111', 10, ""))); await Utils.sleep(2000); console.info('animateTest_1600 END'); done(); @@ -554,35 +470,27 @@ export default function animateJsunit() { it('animateTest_1700', 0, async function (done) { console.info('animateTest_1700 START'); - try { - let eventData = { - data: { - "tempo": "12121212121212" - } - } - let indexEventOne = { - eventId: 1017, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1700 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1700 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'tempo', value:"12121212121212"}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1007, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1700 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.tempo).assertEqual('12121212121212') + try { + expect(indexEvent.data.tempo).assertEqual('12121212121212'); + } catch (err) { + console.info("animateTest_1700 get state result err is: " + JSON.stringify(err)) + } + } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_1700 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_1700 click result is: " + JSON.stringify(sendEventByKey('button12', 10, ""))); + console.info("animateTest_1700 click result is: " + JSON.stringify(sendEventByKey('button121', 10, ""))); await Utils.sleep(2000); console.info('animateTest_1700 END'); done(); @@ -590,35 +498,26 @@ export default function animateJsunit() { it('animateTest_1800', 0, async function (done) { console.info('animateTest_1800 START'); - try { - let eventData = { - data: { - "tempo": "-5" - } - } - let indexEventOne = { - eventId: 1018, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1800 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1800 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'tempo', value:"-5"}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1008, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1800 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.tempo).assertEqual('-5') + try { + expect(indexEvent.data.tempo).assertEqual('-5') + } catch (err) { + console.info("animateTest_1800 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_1800 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_1800 click result is: " + JSON.stringify(sendEventByKey('button13', 10, ""))); + console.info("animateTest_1800 click result is: " + JSON.stringify(sendEventByKey('button131', 10, ""))); await Utils.sleep(2000); console.info('animateTest_1800 END'); done(); @@ -626,35 +525,26 @@ export default function animateJsunit() { it('animateTest_1900', 0, async function (done) { console.info('animateTest_1900 START'); - try { - let eventData = { - data: { - "playmode": "aaa" - } - } - let indexEventOne = { - eventId: 1019, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_1900 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_1900 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'playmode', value:-6}); + await CommonFunc.sleep(200); let indexEvent = { eventId: 1009, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_1900 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.playmode).assertEqual('aaa') + try { + expect(indexEvent.data.playmode).assertEqual(-6); + } catch (err) { + console.info("animateTest_1900 get state result err is: " + JSON.stringify(err)) + } } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_1900 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_1900 click result is: " + JSON.stringify(sendEventByKey('button14', 10, ""))); + console.info("animateTest_1900 click result is: " + JSON.stringify(sendEventByKey('button141', 10, ""))); await Utils.sleep(2000); console.info('animateTest_1900 END'); done(); @@ -662,35 +552,28 @@ export default function animateJsunit() { it('animateTest_2000', 0, async function (done) { console.info('animateTest_2000 START'); - try { - let eventData = { - data: { - "playmode": "123456" - } - } - let indexEventOne = { - eventId: 1020, - priority: events_emitter.EventPriority.LOW - } - console.info("animateTest_2000 start to publish emit"); - events_emitter.emit(indexEventOne, eventData); - } catch (err) { - console.log("animateTest_2000 change component data error: " + err.message); - } + globalThis.value.message.notify({name:'playmode', value:123456}); + await CommonFunc.sleep(200); + let indexEvent = { eventId: 1010, priority: events_emitter.EventPriority.LOW } let callback = (indexEvent) => { console.info("animateTest_2000 get state result is: " + JSON.stringify(indexEvent)) - expect(indexEvent.data.playmode).assertEqual('123456') + try { + expect(indexEvent.data.playmode).assertEqual(123456); + } catch (err) { + console.info("animateTest_2000 get state result err is: " + JSON.stringify(err)); + } + } try { events_emitter.on(indexEvent, callback); } catch (err) { console.info("animateTest_2000 on events_emitter err : " + JSON.stringify(err)); } - console.info("animateTest_2000 click result is: " + JSON.stringify(sendEventByKey('button15', 10, ""))); + console.info("animateTest_2000 click result is: " + JSON.stringify(sendEventByKey('button151', 10, ""))); await Utils.sleep(2000); console.info('animateTest_2000 END'); done(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/BackgroundJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/BackgroundJsunit.test.ets index f373c86f9..e11a85eaf 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/BackgroundJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/BackgroundJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils.ets'; @@ -23,7 +23,7 @@ export default function backgroundJsunit() { beforeEach(async function (done) { console.info("background beforeEach start"); let options = { - uri: 'pages/general-properties/background', + uri: 'MainAbility/pages/general-properties/background', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/BadgeJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/BadgeJsunit.test.ets index 63110c651..248908b4e 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/BadgeJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/BadgeJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function badgeJsunit() { beforeEach(async function (done) { console.info("badge beforeEach start"); let options = { - uri: 'pages/badge', + uri: 'MainAbility/pages/badge', } let result; try { @@ -52,67 +52,68 @@ export default function badgeJsunit() { await Utils.sleep(1000); let strJson = getInspectorByKey('badge'); let obj = JSON.parse(strJson); - console.info("[testBadge01] component obj is: " + JSON.stringify(obj)); + console.info("[testBadge01] component obj is: " + JSON.stringify(obj.$attrs.style) + "---" + obj.$attrs.style); let style = JSON.parse(obj.$attrs.style); expect(obj.$type).assertEqual('Badge'); expect(style.fontSize).assertEqual('20.00fp'); done(); }); - it('testBadge02', 0, async function (done) { - console.info('[testBadge02] START'); + it('testBadge03', 0, async function (done) { + console.info('[testBadge03] START'); await Utils.sleep(1000); try { var eventData = { data: { - "fontSizeValue": "30", + "fontSizeValue": -1, } } var innerEvent = { eventId: 63, priority: events_emitter.EventPriority.LOW } - console.info("[testBadge02] start to publish emit"); + console.info("[testBadge03] start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("[testBadge02] change component data error: " + err.message); + console.log("[testBadge03] change component data error: " + err.message); } await Utils.sleep(2000); let strJsonNew = getInspectorByKey('badge'); let objNew = JSON.parse(strJsonNew); - console.info("[testBadge02] component objNew is: " + JSON.stringify(objNew)); let style = JSON.parse(objNew.$attrs.style); - expect(style.fontSize).assertEqual('30.00fp'); + console.info("[testBadge03] component objNew is: " + style + "--" + objNew.$attrs.style); + expect(style.fontSize).assertEqual('10.00vp'); done(); }); - it('testBadge03', 0, async function (done) { - console.info('[testBadge03] START'); + it('testBadge02', 0, async function (done) { + console.info('[testBadge02] START'); await Utils.sleep(1000); try { var eventData = { data: { - "fontSizeValue": "-1", + "fontSizeValue": "30", } } var innerEvent = { eventId: 63, priority: events_emitter.EventPriority.LOW } - console.info("[testBadge03] start to publish emit"); + console.info("[testBadge02] start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("[testBadge03] change component data error: " + err.message); + console.log("[testBadge02] change component data error: " + err.message); } await Utils.sleep(2000); let strJsonNew = getInspectorByKey('badge'); let objNew = JSON.parse(strJsonNew); - console.info("[testBadge03] component objNew is: " + JSON.stringify(objNew)); + console.info("[testBadge02] component objNew is: " + JSON.stringify(objNew)); let style = JSON.parse(objNew.$attrs.style); - expect(style.fontSize).assertEqual('-1.00fp'); + expect(style.fontSize).assertEqual('30.00fp'); done(); }); + it('testBadge04', 0, async function (done) { console.info('[testBadge04] START'); await Utils.sleep(1000); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/BlankJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/BlankJsunit.test.ets index b5270f7f3..27d68f77d 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/BlankJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/BlankJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function blankJsunit() { beforeEach(async function (done) { console.info("blank beforeEach start"); let options = { - uri: 'pages/blank', + uri: 'MainAbility/pages/blank', } let result; try { diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ButtonJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ButtonJsunit.test.ets index 1b65225b8..f6cb59abe 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ButtonJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ButtonJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function buttonJsunit() { beforeEach(async function (done) { console.info("button beforeEach start"); let options = { - uri: 'pages/button', + uri: 'MainAbility/pages/button', } let result; try { @@ -306,10 +306,15 @@ export default function buttonJsunit() { let event = JSON.parse(eventData.data.event); console.info("[testButton12] get event state result is: " + Math.trunc(event.screenY)); console.info("[testButton12] get event state result is: " + Math.trunc(event.screenX)); - expect(event.screenX).assertEqual(185) - expect(event.screenY).assertEqual(485) - expect(event.x).assertEqual(100) - expect(event.y).assertEqual(50) + try { + expect(event.screenX).assertEqual(185) + expect(event.screenY).assertEqual(533) + expect(event.x).assertEqual(100) + expect(event.y).assertEqual(50) + } catch (err) { + console.info("[testButton12_] expection err : " + JSON.stringify(err)); + expect().assertFail(); + } done(); } var innerEvent = { diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/Canvas2Jsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/Canvas2Jsunit.test.ets index 79bae445f..ddcd1f286 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/Canvas2Jsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/Canvas2Jsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function canvas2Jsunit() { beforeEach(async function (done) { console.info("canvas beforeEach start"); let options = { - uri: 'pages/canvas2', + uri: 'MainAbility/pages/canvas2', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/CanvasJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/CanvasJsunit.test.ets index a01f82d3a..33b600c22 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/CanvasJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/CanvasJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function canvasJsunit() { beforeEach(async function (done) { console.info("canvas beforeEach start"); let options = { - uri: 'pages/canvas', + uri: 'MainAbility/pages/canvas', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/CircleJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/CircleJsunit.test.ets index f75cc247c..693b15378 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/CircleJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/CircleJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function circleJsunit() { beforeEach(async function (done) { console.info("circle beforeEach start"); let options = { - uri: 'pages/circle', + uri: 'MainAbility/pages/circle', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/CommonJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/CommonJsunit.test.ets index 7459e4b04..3dbc1a34e 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/CommonJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/CommonJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import display from '@ohos.display'; import Utils from './Utils'; diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/GridJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/GridJsunit.test.ets index a486a745b..20d5fb501 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/GridJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/GridJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function gridJsunit() { beforeEach(async function (done) { console.info('beforeEach ===================grid test beforeEach called==================='); let options = { - uri: 'pages/gridPage', + uri: 'MainAbility/pages/gridPage', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/LineJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/LineJsunit.test.ets index 911a4c921..92ad04ee6 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/LineJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/LineJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function LineJsunit() { describe('LineTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/line', + uri: 'MainAbility/pages/line', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/List.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/List.test.ets index ef8346397..8398813ad 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/List.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/List.test.ets @@ -54,7 +54,7 @@ export default function testsuite() { circleJsunit(); gridJsunit(); tapGesture(); - panGestureJsunit(); + panGestureJsunit(); canvasJsunit(); canvas2Jsunit(); longPressGestureJsUnit(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/LongPressGesture.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/LongPressGesture.test.ets index 5cfe47efb..5b001fc88 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/LongPressGesture.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/LongPressGesture.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function longPressGestureJsunit() { beforeEach(async function (done) { console.info("longPressGesture beforeEach start"); let options = { - uri: 'pages/longPressGesture', + uri: 'MainAbility/pages/longPressGesture', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/MotionPathJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/MotionPathJsunit.test.ets index d1f927b86..a94be7c35 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/MotionPathJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/MotionPathJsunit.test.ets @@ -14,7 +14,7 @@ * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -23,7 +23,7 @@ export default function motionPathJsunit() { describe('motionPathTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/motionPath', + uri: 'MainAbility/pages/motionPath', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/PanGestureJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/PanGestureJsunit.test.ets index 0852b7823..7ec059b2d 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/PanGestureJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/PanGestureJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -26,7 +26,7 @@ export default function PanGestureJsunit() { beforeEach(async function (done) { console.info("PanGesture beforeEach start"); let options = { - uri: 'pages/PanGesture', + uri: 'MainAbility/pages/PanGesture', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ParallelGestureJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ParallelGestureJsunit.test.ets index b06c51965..7ef054922 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ParallelGestureJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ParallelGestureJsunit.test.ets @@ -14,7 +14,7 @@ * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -23,7 +23,7 @@ export default function parallelGestureJsunit() { describe('parallelGestureTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/parallelGesture', + uri: 'MainAbility/pages/parallelGesture', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/PriorityGestureJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/PriorityGestureJsunit.test.ets index a123f3eb9..95979eb4f 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/PriorityGestureJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/PriorityGestureJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function priorityGestureJsunit() { describe('priorityGestureTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/priorityGesture', + uri: 'MainAbility/pages/priorityGesture', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ProgressJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ProgressJsunit.test.ets index f9189894c..66bd44595 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ProgressJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ProgressJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function progressJsunit() { describe('progressTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/progress', + uri: 'MainAbility/pages/progress', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/QrCodeJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/QrCodeJsunit.test.ets index 3fbcdadad..99e18960b 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/QrCodeJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/QrCodeJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function qrCodeJsunit() { describe('qrCodeTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/QrCode', + uri: 'MainAbility/pages/QrCode', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/RatingJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/RatingJsunit.test.ets index 9c94b8315..fcb7a7a7a 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/RatingJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/RatingJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function ratingJsunit() { describe('ratingTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/rating', + uri: 'MainAbility/pages/rating', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ResponseRegionJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ResponseRegionJsunit.test.ets index eaf9e26b6..d841ed45f 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ResponseRegionJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ResponseRegionJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -26,7 +26,7 @@ export default function ResponseRegionJsunit() { beforeEach(async function (done) { console.info("ResponseRegion beforeEach start"); let options = { - uri: 'pages/ResponseRegion', + uri: 'MainAbility/pages/ResponseRegion', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ScrollCodeJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ScrollCodeJsunit.test.ets index 113a4f402..4cb1da1a4 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ScrollCodeJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ScrollCodeJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function scrollCodeJsunit() { describe('scrollCodeTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/scrollCode', + uri: 'MainAbility/pages/scrollCode', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ShapeJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ShapeJsunit.test.ets index ffb9c4408..5ec49faff 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ShapeJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ShapeJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function shapeJsunit() { describe('shapeTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/shape', + uri: 'MainAbility/pages/shape', } try { router.clear(); @@ -377,111 +377,112 @@ export default function shapeJsunit() { expect(obj.$attrs.strokeLineJoin).assertEqual('LineJoinStyle.Miter'); done(); }); - - it('shapeTest_1900', 0, async function (done) { - console.info('shapeTest_1900 START'); + + it('shapeTest_2100', 0, async function (done) { + console.info('shapeTest_2100 START'); await Utils.sleep(1000); try { var eventData = { data: { - "strokeMiterLimit": "5", + "strokeMiterLimit": "-0.11111", } } var innerEvent = { eventId: 192, priority: events_emitter.EventPriority.LOW } - console.info("shapeTest_1900 start to publish emit"); + console.info("shapeTest_2100 start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("shapeTest_1900 change component color error: " + err.message); + console.log("shapeTest_2100 change component color error: " + err.message); } await Utils.sleep(2000); var strJson = getInspectorByKey('shape'); var obj = JSON.parse(strJson); - console.info("shapeTest_1900 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); - expect(obj.$attrs.strokeMiterLimit).assertEqual('5.000000'); + console.info("shapeTest_2100 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); + expect(obj.$attrs.strokeMiterLimit).assertEqual('4.000000'); done(); }); - it('shapeTest_2000', 0, async function (done) { - console.info('shapeTest_2000 START'); + it('shapeTest_2200', 0, async function (done) { + console.info('shapeTest_1300 START'); await Utils.sleep(1000); try { var eventData = { data: { - "strokeMiterLimit": "string", + "strokeMiterLimit": 'aaa11111', } } var innerEvent = { eventId: 192, priority: events_emitter.EventPriority.LOW } - console.info("shapeTest_2000 start to publish emit"); + console.info("shapeTest_2200 start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("shapeTest_2000 change component color error: " + err.message); + console.log("shapeTest_2200 change component color error: " + err.message); } await Utils.sleep(2000); var strJson = getInspectorByKey('shape'); var obj = JSON.parse(strJson); - console.info("shapeTest_2000 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); + console.info("shapeTest_2200 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); expect(obj.$attrs.strokeMiterLimit).assertEqual('4.000000'); done(); }); - it('shapeTest_2100', 0, async function (done) { - console.info('shapeTest_2100 START'); + it('shapeTest_1900', 0, async function (done) { + console.info('shapeTest_1900 START'); await Utils.sleep(1000); try { var eventData = { data: { - "strokeMiterLimit": '-0.11111', + "strokeMiterLimit": "5", } } var innerEvent = { eventId: 192, priority: events_emitter.EventPriority.LOW } - console.info("shapeTest_2100 start to publish emit"); + console.info("shapeTest_1900 start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("shapeTest_2100 change component color error: " + err.message); + console.log("shapeTest_1900 change component color error: " + err.message); } await Utils.sleep(2000); var strJson = getInspectorByKey('shape'); var obj = JSON.parse(strJson); - console.info("shapeTest_2100 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); - expect(obj.$attrs.strokeMiterLimit).assertEqual('4.000000'); + console.info("shapeTest_1900 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); + expect(obj.$attrs.strokeMiterLimit).assertEqual('5.000000'); done(); }); - it('shapeTest_2200', 0, async function (done) { - console.info('shapeTest_1300 START'); + it('shapeTest_2000', 0, async function (done) { + console.info('shapeTest_2000 START'); await Utils.sleep(1000); try { var eventData = { data: { - "strokeMiterLimit": 'aaa11111', + "strokeMiterLimit": "string", } } var innerEvent = { eventId: 192, priority: events_emitter.EventPriority.LOW } - console.info("shapeTest_2200 start to publish emit"); + console.info("shapeTest_2000 start to publish emit"); events_emitter.emit(innerEvent, eventData); } catch (err) { - console.log("shapeTest_2200 change component color error: " + err.message); + console.log("shapeTest_2000 change component color error: " + err.message); } await Utils.sleep(2000); var strJson = getInspectorByKey('shape'); var obj = JSON.parse(strJson); - console.info("shapeTest_2200 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); - expect(obj.$attrs.strokeMiterLimit).assertEqual('4.000000'); + console.info("shapeTest_2000 component obj is: " + JSON.stringify(obj.$attrs.strokeMiterLimit)); + expect(obj.$attrs.strokeMiterLimit).assertEqual('5.000000'); done(); }); + it('shapeTest_2300', 0, async function (done) { console.info('shapeTest_2300 START'); await Utils.sleep(1000); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/SharedTransitionJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/SharedTransitionJsunit.test.ets index 49974dcc3..19e50cdaa 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/SharedTransitionJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/SharedTransitionJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter' import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function sharedTransitionJsunit() { beforeEach(async function (done) { console.info("sharedTransition beforeEach start"); let options = { - uri: 'pages/sharedTransition', + uri: 'MainAbility/pages/sharedTransition', } try { router.clear(); @@ -92,16 +92,21 @@ export default function sharedTransitionJsunit() { eventId: 194, priority: events_emitter.EventPriority.LOW } - console.info("sharedTransitionTest_0400 start to publish emit"); events_emitter.emit(indexEvent, eventData); + await Utils.sleep(2500); } catch (err) { console.log("sharedTransitionTest_0400 change component data error: " + err.message); } let callback = (indexEventOne) => { console.info("sharedTransitionTest_0400 get state result is: " + JSON.stringify(indexEventOne)); - expect(indexEventOne.data.duration).assertEqual(2000); - expect(indexEventOne.data.delay).assertEqual(5); - expect(indexEventOne.data.type).assertEqual(SharedTransitionEffectType.Exchange); + try { + expect(indexEventOne.data.duration).assertEqual(2000); + expect(indexEventOne.data.delay).assertEqual(5); + expect(indexEventOne.data.type).assertEqual(SharedTransitionEffectType.Exchange); + } catch(err) { + console.info("sharedTransitionTest_0400 error: " + err.message); + } + } let indexEventOne = { eventId: 193, diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/SpanJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/SpanJsunit.test.ets index 0447b70f2..5adb3ff16 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/SpanJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/SpanJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -22,7 +22,7 @@ export default function spanJsunit() { describe('spanTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/span', + uri: 'MainAbility/pages/span', } try { router.clear(); @@ -179,7 +179,7 @@ export default function spanJsunit() { console.info("[testSpan007] component strJson:" + strJson); let obj = JSON.parse(strJson); console.info("[testSpan007] textCase:" + obj); - expect(obj.$attrs.textCase).assertEqual('TextCase.Normal'); + expect(obj.$attrs.textCase).assertEqual('TextCase.UpperCase'); done(); }); @@ -205,7 +205,7 @@ export default function spanJsunit() { console.info("[testSpan008] component strJson:" + strJson); let obj = JSON.parse(strJson); console.info("[testSpan008] fontColor:" + obj); - expect(obj.$attrs.fontColor).assertEqual('#FF000000'); + expect(obj.$attrs.fontColor).assertEqual('#FF000990'); done(); }); @@ -231,7 +231,7 @@ export default function spanJsunit() { console.info("[testSpan009] component strJson:" + strJson); let obj = JSON.parse(strJson); console.info("[testSpan009] fontColor:" + obj); - expect(obj.$attrs.fontColor).assertEqual('#FF000000'); + expect(obj.$attrs.fontColor).assertEqual('#FF000990'); done(); }); }) diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/TabsJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/TabsJsunit.test.ets index 955edad28..4245164fb 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/TabsJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/TabsJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -23,7 +23,7 @@ export default function tabsJsunit() { beforeEach(async function (done) { console.info("tabs beforeEach start"); let options = { - uri: 'pages/tabs', + uri: 'MainAbility/pages/tabs', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/TapGesture.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/TapGesture.test.ets index b7bbab37d..2358bf7ee 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/TapGesture.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/TapGesture.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function longPressGestureJsunit() { beforeEach(async function (done) { console.info("tapGesture beforeEach start"); let options = { - uri: 'pages/tapGesture', + uri: 'MainAbility/pages/tapGesture', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/TextJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/TextJsunit.test.ets index 62e630cd2..c517427e9 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/TextJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/TextJsunit.test.ets @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +22,7 @@ export default function textJsunit() { beforeEach(async function (done) { console.info("text beforeEach start"); let options = { - uri: 'pages/text', + uri: 'MainAbility/pages/text', } try { router.clear(); @@ -63,13 +62,8 @@ export default function textJsunit() { let strJson = getInspectorByKey('image'); console.info("testText_0200 component strJson:" + strJson); let obj = JSON.parse(strJson); - console.info("testText_0200 component obj is: " + JSON.stringify(obj)); - var res = obj.$attrs.src.indexOf('RAWFILE/test.png'); - console.info("testText_0200 result is: " + res); - var sres = obj.$attrs.src.slice(res, res + 16); - console.info("testText_0200 slice result is: " + sres); - expect(obj.$type).assertEqual('Image'); - expect(obj.$attrs.src.slice(res, res + 16)).assertEqual('RAWFILE/test.png'); + console.info("testText_0200 component strJson:" + obj.$attrs.src); + expect(obj.$attrs.src).assertEqual('resource://rawfile/test.png'); console.info('testText_0200 END'); done(); }); @@ -244,7 +238,7 @@ export default function textJsunit() { let strJsonNew = getInspectorByKey('text'); let objNew = JSON.parse(strJsonNew); console.info("testText_1100 component objNew is: " + JSON.stringify(objNew.$attrs.fontColor)); - expect(objNew.$attrs.fontColor).assertEqual('#FF000000'); + expect(objNew.$attrs.fontColor).assertEqual('#330A59F7'); console.info('testText_1100 END'); done(); }); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/TimeStampJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/TimeStampJsunit.test.ets index 0459ef47a..13bedcf58 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/TimeStampJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/TimeStampJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import router from '@system.router'; import Utils from './Utils'; import events_emitter from '@ohos.events.emitter'; @@ -22,7 +22,7 @@ export default function timeStampJsunit() { describe('timeStampTest', function () { beforeEach(async function (done) { let options = { - uri: 'pages/timeStamp', + uri: 'MainAbility/pages/timeStamp', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/ToggleJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/ToggleJsunit.test.ets index 75a6e87ce..5d2adc696 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/ToggleJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/ToggleJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function ToggleJsunit() { beforeEach(async function (done) { console.info("toggle beforeEach start"); let options = { - uri: 'pages/toggle', + uri: 'MainAbility/pages/toggle', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/ets/test/TransitionJsunit.test.ets b/arkui/ace_ets_component_three/entry/src/main/ets/test/TransitionJsunit.test.ets index 1d55211a5..d363c8434 100644 --- a/arkui/ace_ets_component_three/entry/src/main/ets/test/TransitionJsunit.test.ets +++ b/arkui/ace_ets_component_three/entry/src/main/ets/test/TransitionJsunit.test.ets @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index"; +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium"; import router from '@system.router'; import events_emitter from '@ohos.events.emitter'; import Utils from './Utils'; @@ -23,7 +23,7 @@ export default function transitionJsunit() { beforeEach(async function (done) { console.info("text beforeEach start"); let options = { - uri: 'pages/transition', + uri: 'MainAbility/pages/transition', } try { router.clear(); diff --git a/arkui/ace_ets_component_three/entry/src/main/module.json b/arkui/ace_ets_component_three/entry/src/main/module.json new file mode 100644 index 000000000..32320cccd --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/module.json @@ -0,0 +1,35 @@ +{ + "module": { + "name": "phone", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:phone_entry_dsc", + "mainElement": "MainAbility", + "deviceTypes": [ + "tablet", + "default", + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "uiSyntax": "ets", + "pages": "$profile:main_pages", + "abilities": [{ + "name": "com.open.harmony.acetestthree.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:phone_entry_main", + "icon": "$media:icon", + "label": "$string:entry_label", + "visible": true, + "orientation": "portrait", + "skills": [{ + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + }] + }] + } +} \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/resources/base/element/string.json b/arkui/ace_ets_component_three/entry/src/main/resources/base/element/string.json index f6488bb9c..1f98380da 100644 --- a/arkui/ace_ets_component_three/entry/src/main/resources/base/element/string.json +++ b/arkui/ace_ets_component_three/entry/src/main/resources/base/element/string.json @@ -27,6 +27,34 @@ { "name":"message_arrive", "value":"We will arrive at %s." - } + }, + { + "name": "phone_entry_dsc", + "value": "i am an entry for phone" + }, + { + "name": "phone_entry_main", + "value": "the phone entry ability" + }, + { + "name": "entry_label", + "value": "ActsContextTest" + }, + { + "name": "form_description", + "value": "my form" + }, + { + "name": "serviceability_description", + "value": "my whether" + }, + { + "name": "description_application", + "value": "demo for test" + }, + { + "name": "app_name", + "value": "Demo" + } ] } \ No newline at end of file diff --git a/arkui/ace_ets_component_three/entry/src/main/resources/base/profile/main_pages.json b/arkui/ace_ets_component_three/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..74102b0b5 --- /dev/null +++ b/arkui/ace_ets_component_three/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,38 @@ +{ + "src": [ + "MainAbility/pages/index", + "MainAbility/pages/index/index", + "MainAbility/pages/second/second", + "MainAbility/pages/toggle", + "MainAbility/pages/gridPage", + "MainAbility/pages/span", + "MainAbility/pages/text", + "MainAbility/pages/badge", + "MainAbility/pages/canvas", + "MainAbility/pages/longPressGesture", + "MainAbility/pages/button", + "MainAbility/pages/ResponseRegion", + "MainAbility/pages/PanGesture", + "MainAbility/pages/background", + "MainAbility/pages/QrCode", + "MainAbility/pages/tabs", + "MainAbility/pages/tapGesture", + "MainAbility/pages/progress", + "MainAbility/pages/animate", + "MainAbility/pages/rating", + "MainAbility/pages/canvas2", + "MainAbility/pages/shape", + "MainAbility/pages/motionPath", + "MainAbility/pages/scrollCode", + "MainAbility/pages/transition", + "MainAbility/pages/priorityGesture", + "MainAbility/pages/parallelGesture", + "MainAbility/pages/blank", + "MainAbility/pages/sharedTransition", + "MainAbility/pages/sharedTransition2", + "MainAbility/pages/line", + "MainAbility/pages/circle", + "MainAbility/pages/aboutToDisappear", + "MainAbility/pages/timeStamp" + ] +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/AppScope/app.json b/arkui/ace_ets_dev/AppScope/app.json new file mode 100644 index 000000000..7cd6479a5 --- /dev/null +++ b/arkui/ace_ets_dev/AppScope/app.json @@ -0,0 +1,21 @@ +{ + "app": { + "bundleName": "com.open.harmony.acedevtest", + "vendor": "huawei", + "versionCode": 1000000, + "versionName": "1.0.0", + "debug": false, + "icon": "$media:icon", + "label": "$string:app_name", + "description": "$string:description_application", + "distributedNotificationEnabled": true, + "keepAlive": true, + "singleUser": true, + "minAPIVersion": 10, + "targetAPIVersion": 10, + "car": { + "apiCompatibleVersion": 10, + "singleUser": false + } + } +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/AppScope/resources/base/element/string.json b/arkui/ace_ets_dev/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..ee69f9a86 --- /dev/null +++ b/arkui/ace_ets_dev/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string":[ + { + "name":"app_name", + "value":"ohosProject" + } + ] +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/AppScope/resources/base/media/app_icon.png b/arkui/ace_ets_dev/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..474a55588fd7216113dd42073aadf254d4dba023 GIT binary patch literal 15458 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 Y0jIQKqpXab7ytkO07*qoM6N<$f;yQ2zW@LL literal 0 HcmV?d00001 diff --git a/arkui/ace_ets_dev/BUILD.gn b/arkui/ace_ets_dev/BUILD.gn index 7e5b20c16..2b15461ea 100644 --- a/arkui/ace_ets_dev/BUILD.gn +++ b/arkui/ace_ets_dev/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2023 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 @@ -14,23 +14,30 @@ import("//test/xts/tools/build/suite.gni") ohos_js_hap_suite("ActsAceDevTest") { - hap_profile = "./entry/src/main/config.json" + hap_profile = "entry/src/main/module.json" + js_build_mode = "debug" deps = [ ":ace_ets_dev_assets", - ":ace_ets_dev_resources", - ":ace_ets_dev_test_assets", + ":ace_ets_dev_resources" ] ets2abc = true - certificate_profile = "./signature/openharmony_sx.p7b" + certificate_profile = "signature/openharmony_sx.p7b" hap_name = "ActsAceDevTest" + subsystem_name = "arkui" + part_name = "ace_engine" } -ohos_js_assets("ace_ets_dev_assets") { - source_dir = "./entry/src/main/ets/MainAbility" + +ohos_app_scope("ace_ets_component_dev_app_profile") { + app_profile = "AppScope/app.json" + sources = [ "AppScope/resources" ] } -ohos_js_assets("ace_ets_dev_test_assets") { - source_dir = "./entry/src/main/ets/TestAbility" + +ohos_js_assets("ace_ets_dev_assets") { + source_dir = "entry/src/main/ets" } + ohos_resources("ace_ets_dev_resources") { - sources = [ "./entry/src/main/resources" ] - hap_profile = "./entry/src/main/config.json" + sources = [ "entry/src/main/resources" ] + deps = [ ":ace_ets_component_dev_app_profile" ] + hap_profile = "entry/src/main/module.json" } diff --git a/arkui/ace_ets_dev/Test.json b/arkui/ace_ets_dev/Test.json index 40b6e1ecc..79192d517 100644 --- a/arkui/ace_ets_dev/Test.json +++ b/arkui/ace_ets_dev/Test.json @@ -1,10 +1,10 @@ { - "description": "Configuration for dev Tests", + "description": "Configuration for hjunit demo Tests", "driver": { "type": "OHJSUnitTest", "test-timeout": "600000", "bundle-name": "com.open.harmony.acedevtest", - "package-name": "com.open.harmony.acedevtest", + "module-name": "phone", "shell-timeout": "600000" }, "kits": [ diff --git a/arkui/ace_ets_dev/entry/src/main/config.json b/arkui/ace_ets_dev/entry/src/main/config.json deleted file mode 100644 index 61b99d183..000000000 --- a/arkui/ace_ets_dev/entry/src/main/config.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "app": { - "bundleName": "com.open.harmony.acedevtest", - "vendor": "open", - "version": { - "code": 1000000, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 7, - "releaseType": "Release", - "target": 8 - } - }, - "deviceConfig": {}, - "module": { - "package": "com.open.harmony.acedevtest", - "name": ".MyApplication", - "mainAbility": "com.open.harmony.acedevtest.MainAbility", - "deviceType": [ - "tablet", - "default", - "phone" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": false - }, - "abilities": [ - { - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "orientation": "unspecified", - "visible": true, - "srcPath": "MainAbility", - "name": ".MainAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:description_mainability", - "formsEnabled": false, - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard" - }, - { - "orientation": "unspecified", - "visible": true, - "srcPath": "TestAbility", - "name": ".TestAbility", - "srcLanguage": "ets", - "icon": "$media:icon", - "description": "$string:TestAbility_desc", - "formsEnabled": false, - "label": "$string:TestAbility_label", - "type": "page", - "launchType": "standard" - } - ], - "js": [ - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index", - "pages/curve" - ], - "name": ".MainAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - }, - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/index" - ], - "name": ".TestAbility", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - } - ] - } -} diff --git a/arkui/ace_ets_dev/entry/src/main/ets/Application/AbilityStage.ts b/arkui/ace_ets_dev/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b0e0206ea --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,9 @@ +import AbilityStage from "@ohos.app.ability.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + globalThis.stageOnCreateRun = 1; + globalThis.stageContext = this.context; + } +} diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/MainAbility.ts b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..4d66065e8 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,37 @@ +import Ability from '@ohos.app.ability.UIAbility' + +export default class MainAbility extends Ability { + onCreate(want,launchParam){ + // Ability is creating, initialize resources for this ability + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + // Ability is destroying, release resources for this ability + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate windowStage="+ windowStage) + globalThis.windowStage = windowStage + globalThis.abilityContext = this.context + windowStage.setUIContent(this.context, "MainAbility/pages/index/index", null) + } + + onWindowStageDestroy() { + //Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/app.ets b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/index/index.ets b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/index/index.ets new file mode 100644 index 000000000..97504e244 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/index/index.ets @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 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 router from '@ohos.router'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../../../test/List.test' + + +@Entry +@Component +struct Index { + + aboutToAppear(){ + console.info("start run testcase!!!!") + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + + build() { + Flex({ direction:FlexDirection.Column, alignItems:ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/second/second.ets b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/second/second.ets new file mode 100644 index 000000000..1c1c727ff --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/pages/second/second.ets @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 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 router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column,alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/Common.ets b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/Common.ets new file mode 100644 index 000000000..a67880c93 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/Common.ets @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2023 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 default class CommonFunc { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time){ + return new Promise((resolve,reject)=>{ + setTimeout(()=>{ + resolve("ok") + },time) + }).then(()=>{ + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } +} + + + + diff --git a/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/MessageManager.ets b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/MessageManager.ets new file mode 100644 index 000000000..7ed176cc9 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/MainAbility/utils/MessageManager.ets @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2023 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 interface Callback { + (message:any):void +} + +export class MessageManager { + callback:Callback + callbacks:Map = new Map() + + constructor() { + + } + + registerCallback(callback:Callback , type?:string) { + if (type == undefined) { + console.error('registerCallback callback set') + this.callback = callback + return + } + this.callbacks.set(type,callback) + } + + notify(message:any, type?:string) { + if (type == undefined) { + this.callback(message) + return + } + + let tmpCallback:Callback = this.callbacks.get(type) + if (tmpCallback === undefined) { + console.error('callbacks has no callback for type ' + type) + return + } + tmpCallback(message) + } + + clear() { + this.callbacks.clear() + this.callback = null + } +} \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/TestAbility.ts b/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/TestAbility.ts new file mode 100644 index 000000000..8028a70f8 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/TestAbility.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 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 Ability from '@ohos.app.ability.UIAbility' + +export default class TestAbility extends Ability { + onCreate(want, launchParam) { + console.log('TestAbility onCreate') + } + + onDestroy() { + console.log('TestAbility onDestroy') + } + + onWindowStageCreate(windowStage) { + console.log('TestAbility onWindowStageCreate') + windowStage.loadContent("TestAbility/pages/index", (err, data) => { + if (err.code) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)) + }); + + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + console.log('TestAbility onWindowStageDestroy') + } + + onForeground() { + console.log('TestAbility onForeground') + } + + onBackground() { + console.log('TestAbility onBackground') + } +}; \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/app.ets b/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/app.ets deleted file mode 100644 index b917b80ff..000000000 --- a/arkui/ace_ets_dev/entry/src/main/ets/TestAbility/app.ets +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 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 AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' -import { Hypium } from 'hypium/index' -import testsuite from '../test/List.test' - -export default { - onCreate() { - console.info('Application onCreate') - var abilityDelegator: any - abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any - abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() - console.info('start run testcase!!!') - Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - }, - onDestroy() { - console.info('Application onDestroy') - }, -} \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/arkui/ace_ets_dev/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts index dfbf1f268..34c7ad81e 100644 --- a/arkui/ace_ets_dev/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts +++ b/arkui/ace_ets_dev/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -1,6 +1,5 @@ -// @ts-nocheck -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. +/* + * Copyright (c) 2022 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 @@ -21,25 +20,25 @@ var abilityDelegatorArguments = undefined function translateParamsToString(parameters) { const keySet = new Set([ - '-s class', '-s notClass', '-s suite', '-s itName', + '-s class', '-s notClass', '-s suite', '-s it', '-s level', '-s testType', '-s size', '-s timeout', - '-s package' + '-s dryRun' ]) let targetParams = ''; for (const key in parameters) { if (keySet.has(key)) { - targetParams += ' ' + key + ' ' + parameters[key] + targetParams = `${targetParams} ${key} ${parameters[key]}` } } return targetParams.trim() } async function onAbilityCreateCallback() { - console.log('onAbilityCreateCallback'); + console.log("onAbilityCreateCallback"); } async function addAbilityMonitorCallback(err: any) { - console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) } export default class OpenHarmonyTestRunner implements TestRunner { @@ -47,22 +46,26 @@ export default class OpenHarmonyTestRunner implements TestRunner { } onPrepare() { - console.info('OpenHarmonyTestRunner OnPrepare') + console.info("OpenHarmonyTestRunner OnPrepare ") } - onRun() { + async onRun() { console.log('OpenHarmonyTestRunner onRun run') abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' let lMonitor = { abilityName: testAbilityName, onAbilityCreate: onAbilityCreateCallback, }; - var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) - var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + var cmd = 'aa start -d 0 -a com.open.harmony.acedevtest.MainAbility' + ' -b ' + abilityDelegatorArguments.bundleName cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters["-D"] + if (debug == 'true') + { + cmd += ' -D' + } console.info('cmd : '+cmd) abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { @@ -70,9 +73,6 @@ export default class OpenHarmonyTestRunner implements TestRunner { console.info('executeShellCommand : data : ' + d.stdResult); console.info('executeShellCommand : data : ' + d.exitCode); }) - console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') - var context = abilityDelegator.getAppContext() - console.info('getAppContext : ' + JSON.stringify(context)) console.info('OpenHarmonyTestRunner onRun end') } -}; \ No newline at end of file +}; diff --git a/arkui/ace_ets_dev/entry/src/main/ets/test/CurveJsunit.test.ets b/arkui/ace_ets_dev/entry/src/main/ets/test/CurveJsunit.test.ets index 1c92525e6..7714d300a 100644 --- a/arkui/ace_ets_dev/entry/src/main/ets/test/CurveJsunit.test.ets +++ b/arkui/ace_ets_dev/entry/src/main/ets/test/CurveJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2023 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 @@ -15,7 +15,7 @@ */ import router from '@system.router'; -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "hypium/index" +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from "@ohos/hypium" import Utils from './Utils.ets' export default function CurveJsunit() { @@ -23,7 +23,7 @@ export default function CurveJsunit() { beforeEach(async function (done) { console.info("flex beforeEach start"); let options = { - uri: 'pages/curve', + uri: 'MainAbility/pages/curve', } try { router.clear(); diff --git a/arkui/ace_ets_dev/entry/src/main/module.json b/arkui/ace_ets_dev/entry/src/main/module.json new file mode 100644 index 000000000..015bbe329 --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/module.json @@ -0,0 +1,35 @@ +{ + "module": { + "name": "phone", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:phone_entry_dsc", + "mainElement": "MainAbility", + "deviceTypes": [ + "tablet", + "default", + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "uiSyntax": "ets", + "pages": "$profile:main_pages", + "abilities": [{ + "name": "com.open.harmony.acedevtest.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:phone_entry_main", + "icon": "$media:icon", + "label": "$string:entry_label", + "visible": true, + "orientation": "portrait", + "skills": [{ + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + }] + }] + } +} diff --git a/arkui/ace_ets_dev/entry/src/main/resources/base/element/string.json b/arkui/ace_ets_dev/entry/src/main/resources/base/element/string.json index f6488bb9c..fdffb6bf9 100644 --- a/arkui/ace_ets_dev/entry/src/main/resources/base/element/string.json +++ b/arkui/ace_ets_dev/entry/src/main/resources/base/element/string.json @@ -27,6 +27,34 @@ { "name":"message_arrive", "value":"We will arrive at %s." + }, + { + "name": "phone_entry_dsc", + "value": "i am an entry for phone" + }, + { + "name": "phone_entry_main", + "value": "the phone entry ability" + }, + { + "name": "entry_label", + "value": "ActsContextTest" + }, + { + "name": "form_description", + "value": "my form" + }, + { + "name": "serviceability_description", + "value": "my whether" + }, + { + "name": "description_application", + "value": "demo for test" + }, + { + "name": "app_name", + "value": "Demo" } ] } \ No newline at end of file diff --git a/arkui/ace_ets_dev/entry/src/main/resources/base/profile/main_pages.json b/arkui/ace_ets_dev/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..e502410ef --- /dev/null +++ b/arkui/ace_ets_dev/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,8 @@ +{ + "src": [ + "MainAbility/pages/index/index", + "MainAbility/pages/second/second", + "MainAbility/pages/index", + "MainAbility/pages/curve" + ] +} \ No newline at end of file -- GitLab