From cbac4d1caa226c537bc89f84360aa4104fb11ee3 Mon Sep 17 00:00:00 2001 From: zhaoyuan17 Date: Fri, 24 Sep 2021 01:53:35 +0800 Subject: [PATCH] update xts test Signed-off-by: zhaoyuan17 --- .../actsfeatureabilitytest/entry/package.json | 1 + .../main/js/test/FeatureAbilityJsunit.test.js | 937 +++++++++--------- .../finishwithresultemptytest/package.json | 1 + .../src/main/config.json | 3 +- .../src/main/js/default/pages/index/index.js | 2 +- .../package.json | 1 + .../src/main/config.json | 3 +- .../src/main/js/default/pages/index/index.js | 2 +- .../finishwithresulttest/package.json | 1 + .../finishwithresulttest/src/main/config.json | 3 +- .../src/main/js/default/pages/index/index.js | 2 +- .../getcallingbundletest/package.json | 1 + .../getcallingbundletest/src/main/config.json | 3 +- .../sceneproject/startability/package.json | 1 + .../startabilityforresult/package.json | 1 + .../src/main/config.json | 3 +- .../src/main/js/default/pages/index/index.js | 2 +- .../terminateabilitytest/package.json | 1 + .../terminateabilitytest/src/main/config.json | 3 +- .../src/main/js/default/pages/index/index.js | 8 +- appexecfwk/ams_standard/BUILD.gn | 5 +- .../ams_standard/fwkdataaccessor/BUILD.gn | 31 + .../ams_standard/fwkdataaccessor/Test.json | 18 + .../fwkdataaccessor/entry/package.json | 1 + .../entry/src/main/config.json | 62 ++ .../entry/src/main/js/default/app.js | 22 + .../entry/src/main/js/default/i18n/en-US.json | 6 + .../entry/src/main/js/default/i18n/zh-CN.json | 6 + .../src/main/js/default/pages/index/index.css | 12 + .../src/main/js/default/pages/index/index.hml | 8 + .../src/main/js/default/pages/index/index.js | 44 + .../js/resources/base/element/string.json | 12 + .../src/main/js/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../js/test/DataAbilityHelperJsSt.test.js | 595 +++++++++++ .../entry/src/main/js/test/List.test.js | 15 + .../fwkdataaccessor/hap/amsStDataAbility.hap | Bin 0 -> 111121 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3437 bytes .../actsbundlemanagertest/Test.json | 6 + .../src/main/js/test/ExampleJsunit.test.js | 805 +++++++++------ 39 files changed, 1858 insertions(+), 769 deletions(-) create mode 100755 aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/startability/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/package.json create mode 100644 aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/package.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/BUILD.gn create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/Test.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/package.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/config.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/app.js create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/en-US.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/zh-CN.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.css create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.hml create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.js create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/element/string.json create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/media/icon.png create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/test/DataAbilityHelperJsSt.test.js create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/test/List.test.js create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/hap/amsStDataAbility.hap create mode 100644 appexecfwk/ams_standard/fwkdataaccessor/signature/openharmony_sx.p7b diff --git a/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/package.json b/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/package.json new file mode 100755 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js b/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js index 7f0102d04..6cc7b8012 100644 --- a/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js +++ b/aafwk/aafwk_standard/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js @@ -13,14 +13,21 @@ * limitations under the License. */ import featureAbility from '@ohos.ability.featureAbility' -import wantconstant from '@ohos.ability.wantconstant' +import wantconstant from '@ohos.ability.wantConstant' import bundle from '@ohos.bundle' -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index' import commonEvent from '@ohos.commonevent' const BUNDLES_COUNT = 7; const START_ABILITY_TIMEOUT = 5000; const TERMINATE_ABILITY_TIMEOUT = 6000; +const TIMEOUTINSTALL = 3000; +const TIMEOUTUNINSTALL = 3000; +const TIMEOUTSIX = 6000; +const TIMEOUTTERMINATE = 7000; +const TIMEOUTFORRESULT = 8000; +const TIMEOUT = 1000; + const PATH = '/data/' var subscriberInfo_ACTS_StartAbility_0100 = { events: ["ACTS_StartAbility_0100_CommonEvent"], @@ -86,13 +93,13 @@ describe('ActsFeatureAbilityTest', function () { console.debug('=======before all install========'); bundle.getBundleInstaller().then(data => { data.install([ - PATH + "FinishWithResultEmptyTest.hap", - PATH + "FinishWithResultPromiseParametersTest.hap", - PATH + "FinishWithResultTest.hap", - PATH + "GetCallingBundlePromiseTest.hap", - PATH + "StartAbility.hap", - PATH + "StartAbilityForResult.hap", - PATH + "TerminateAbilityTest.hap"], { + PATH + "FinishWithResultEmptyTest.hap", + PATH + "FinishWithResultPromiseParametersTest.hap", + PATH + "FinishWithResultTest.hap", + PATH + "GetCallingBundlePromiseTest.hap", + PATH + "StartAbility.hap", + PATH + "StartAbilityForResult.hap", + PATH + "TerminateAbilityTest.hap"], { param: { userId: 0, isKeepData: false @@ -107,18 +114,20 @@ describe('ActsFeatureAbilityTest', function () { console.info('========install finish========' + data.statusMessage); done() } + setTimeout(function () { + console.info('====> before all install finish =====>') + }, TIMEOUTINSTALL) }) afterAll((done) => { console.debug('=======after all uninstall========'); uninstall([ - "com.example.finishwithresultemptytest", - "com.example.finishwithresultpromiseparameterstest", - "com.example.finishwithresulttest", - "com.example.getcallingbundlepromisetest", - "com.example.startability", - "com.example.startabilityforresult", - "com.example.terminateabilitytest"]); - + "com.example.finishwithresultemptytest", + "com.example.finishwithresultpromiseparameterstest", + "com.example.finishwithresulttest", + "com.example.getcallingbundlepromisetest", + "com.example.startability", + "com.example.startabilityforresult", + "com.example.terminateabilitytest"]); function uninstall(bundleNames) { var uninstallArray = new Array(); bundle.getBundleInstaller().then(data => { @@ -142,8 +151,12 @@ describe('ActsFeatureAbilityTest', function () { console.debug('======uninstall all finish======='); done(); } + } } + setTimeout(function () { + console.info('====> after all uninstall finish =====>') + }, TIMEOUTUNINSTALL) }) /** @@ -152,79 +165,35 @@ describe('ActsFeatureAbilityTest', function () { * @tc.desc: Check the return type of the interface (by Promise) */ it('ACTS_wantConstant_0100', 0, async function (done) { - expect(wantconstant.Action.ACTION_HOME).assertEqual("action.system.home"); - expect(wantconstant.Action.ACTION_PLAY).assertEqual("action.system.play"); - expect(wantconstant.Action.ACTION_BUNDLE_ADD).assertEqual("action.bundle.add"); - expect(wantconstant.Action.ACTION_BUNDLE_REMOVE).assertEqual("action.bundle.remove"); - expect(wantconstant.Action.ACTION_BUNDLE_UPDATE).assertEqual("action.bundle.update"); - expect(wantconstant.Action.ACTION_ORDER_TAXI).assertEqual("ability.intent.ORDER_TAXI"); - expect(wantconstant.Action.ACTION_QUERY_TRAFFIC_RESTRICTION).assertEqual("ability.intent.QUERY" + - "_TRAFFIC_RESTRICTION"); - expect(wantconstant.Action.ACTION_PLAN_ROUTE).assertEqual("ability.intent.PLAN_ROUTE"); - expect(wantconstant.Action.ACTION_BOOK_FLIGHT).assertEqual("ability.intent.BOOK_FLIGHT"); - expect(wantconstant.Action.ACTION_BOOK_TRAIN_TICKET).assertEqual("ability.intent.BOOK_TRAIN_TICKET"); - expect(wantconstant.Action.ACTION_BOOK_HOTEL).assertEqual("ability.intent.BOOK_HOTEL"); - expect(wantconstant.Action.ACTION_QUERY_TRAVELLING_GUIDELINE).assertEqual("ability.intent.QUERY" + - "_TRAVELLING_GUIDELINE"); - expect(wantconstant.Action.ACTION_QUERY_POI_INFO).assertEqual("ability.intent.QUERY_POI_INFO"); - expect(wantconstant.Action.ACTION_QUERY_CONSTELLATION_FORTUNE).assertEqual("ability.intent.QUERY" + - "_CONSTELLATION_FORTUNE"); - expect(wantconstant.Action.ACTION_QUERY_ALMANC).assertEqual("ability.intent.QUERY_ALMANC"); - expect(wantconstant.Action.ACTION_QUERY_WEATHER).assertEqual("ability.intent.QUERY_WEATHER"); - expect(wantconstant.Action.ACTION_QUERY_ENCYCLOPEDIA).assertEqual("ability.intent.QUERY_ENCYCLOPEDIA"); - expect(wantconstant.Action.ACTION_QUERY_RECIPE).assertEqual("ability.intent.QUERY_RECIPE"); - expect(wantconstant.Action.ACTION_BUY_TAKEOUT).assertEqual("ability.intent.BUY_TAKEOUT"); - expect(wantconstant.Action.ACTION_TRANSLATE_TEXT).assertEqual("ability.intent.TRANSLATE_TEXT"); - expect(wantconstant.Action.ACTION_BUY).assertEqual("ability.intent.BUY"); - expect(wantconstant.Action.ACTION_QUERY_LOGISTICS_INFO).assertEqual("ability.intent.QUERY_LOGISTICS_INFO"); - expect(wantconstant.Action.ACTION_SEND_LOGISTICS).assertEqual("ability.intent.SEND_LOGISTICS"); - expect(wantconstant.Action.ACTION_QUERY_SPORTS_INFO).assertEqual("ability.intent.QUERY_SPORTS_INFO"); - expect(wantconstant.Action.ACTION_QUERY_NEWS).assertEqual("ability.intent.QUERY_NEWS"); - expect(wantconstant.Action.ACTION_QUERY_JOKE).assertEqual("ability.intent.QUERY_JOKE"); - expect(wantconstant.Action.ACTION_WATCH_VIDEO_CLIPS).assertEqual("ability.intent.WATCH_VIDEO_CLIPS"); - expect(wantconstant.Action.ACTION_QUERY_STOCK_INFO).assertEqual("ability.intent.QUERY_STOCK_INFO"); - expect(wantconstant.Action.ACTION_LOCALE_CHANGED).assertEqual("ability.intent.LOCALE_CHANGED"); + expect(wantconstant.Action.ACTION_HOME).assertEqual("ohos.want.action.home"); + expect(wantconstant.Action.ACTION_DIAL).assertEqual("ohos.want.action.dial"); + expect(wantconstant.Action.ACTION_SEARCH).assertEqual("ohos.want.action.search"); + expect(wantconstant.Action.ACTION_WIRELESS_SETTINGS).assertEqual("ohos.settings.wireless"); + expect(wantconstant.Action.ACTION_MANAGE_APPLICATIONS_SETTINGS).assertEqual("ohos.settings.manage.applications"); + expect(wantconstant.Action.ACTION_APPLICATION_DETAILS_SETTINGS).assertEqual("ohos.settings.application.details"); + expect(wantconstant.Action.ACTION_SET_ALARM).assertEqual("ohos.want.action.setAlarm"); + expect(wantconstant.Action.ACTION_SHOW_ALARMS).assertEqual("ohos.want.action.showAlarms"); + expect(wantconstant.Action.ACTION_SNOOZE_ALARM).assertEqual("ohos.want.action.snoozeAlarm"); + expect(wantconstant.Action.ACTION_DISMISS_ALARM).assertEqual("ohos.want.action.dismissAlarm"); + expect(wantconstant.Action.ACTION_DISMISS_TIMER).assertEqual("ohos.want.action.dismissTimer"); + expect(wantconstant.Action.ACTION_SEND_SMS).assertEqual("ohos.want.action.sendSms"); + expect(wantconstant.Action.ACTION_CHOOSE).assertEqual("ohos.want.action.choose"); + expect(wantconstant.Action.ACTION_SELECT).assertEqual("ohos.want.action.select"); + expect(wantconstant.Action.ACTION_SEND_DATA).assertEqual("ohos.want.action.sendData"); + expect(wantconstant.Action.ACTION_SEND_MULTIPLE_DATA).assertEqual("ohos.want.action.sendMultipleData"); + expect(wantconstant.Action.ACTION_SCAN_MEDIA_FILE).assertEqual("ohos.want.action.scanMediaFile"); + expect(wantconstant.Action.ACTION_VIEW_DATA).assertEqual("ohos.want.action.viewData"); + expect(wantconstant.Action.ACTION_EDIT_DATA).assertEqual("ohos.want.action.editData"); + expect(wantconstant.Action.INTENT_PARAMS_INTENT).assertEqual("ability.want.params.INTENT"); + expect(wantconstant.Action.INTENT_PARAMS_TITLE).assertEqual("ability.want.params.TITLE"); + expect(wantconstant.Action.ACTION_FILE_SELECT).assertEqual("ohos.action.fileSelect"); + expect(wantconstant.Action.PARAMS_STREAM).assertEqual("ability.params.stream"); expect(wantconstant.Entity.ENTITY_HOME).assertEqual("entity.system.home"); + expect(wantconstant.Entity.ENTITY_DEFAULT).assertEqual("entity.system.default"); + expect(wantconstant.Entity.ENTITY_VOICE).assertEqual("entity.system.voice"); + expect(wantconstant.Entity.ENTITY_BROWSABLE).assertEqual("entity.system.browsable"); expect(wantconstant.Entity.ENTITY_VIDEO).assertEqual("entity.system.video"); - - console.log("wantConstant.Action.ACTION_HOME: " + wantconstant.Action.ACTION_HOME) - console.log("wantConstant.Action.ACTION_PLAY: " + wantconstant.Action.ACTION_PLAY) - console.log("wantConstant.Action.ACTION_BUNDLE_ADD: " + wantconstant.Action.ACTION_BUNDLE_ADD) - console.log("wantConstant.Action.ACTION_BUNDLE_REMOVE: " + wantconstant.Action.ACTION_BUNDLE_REMOVE) - console.log("wantConstant.Action.ACTION_BUNDLE_UPDATE: " + wantconstant.Action.ACTION_BUNDLE_UPDATE) - console.log("wantConstant.Action.ACTION_ORDER_TAXI: " + wantconstant.Action.ACTION_ORDER_TAXI) - console.log("wantConstant.Action.ACTION_QUERY_TRAFFIC_" + - "RESTRICTION: " + wantconstant.Action.ACTION_QUERY_TRAFFIC_RESTRICTION) - console.log("wantConstant.Action.ACTION_PLAN_ROUTE: " + wantconstant.Action.ACTION_PLAN_ROUTE) - console.log("wantConstant.Action.ACTION_BOOK_FLIGHT: " + wantconstant.Action.ACTION_BOOK_FLIGHT) - console.log("wantConstant.Action.ACTION_BOOK_TRAIN_TICKET: " + wantconstant.Action.ACTION_BOOK_TRAIN_TICKET) - console.log("wantConstant.Action.ACTION_BOOK_HOTEL: " + wantconstant.Action.ACTION_BOOK_HOTEL) - console.log("wantConstant.Action.ACTION_QUERY_TRAVELLING_" + - "GUIDELINE: " + wantconstant.Action.ACTION_QUERY_TRAVELLING_GUIDELINE) - console.log("wantConstant.Action.ACTION_QUERY_POI_INFO: " + wantconstant.Action.ACTION_QUERY_POI_INFO) - console.log("wantConstant.Action.ACTION_QUERY_CONSTELLATION_" + - "FORTUNE: " + wantconstant.Action.ACTION_QUERY_CONSTELLATION_FORTUNE) - console.log("wantConstant.Action.ACTION_QUERY_ALMANC: " + wantconstant.Action.ACTION_QUERY_ALMANC) - console.log("wantConstant.Action.ACTION_QUERY_WEATHER: " + wantconstant.Action.ACTION_QUERY_WEATHER) - console.log("wantConstant.Action.ACTION_QUERY_ENCYCLOPEDIA: " + wantconstant.Action.ACTION_QUERY_ENCYCLOPEDIA) - console.log("wantConstant.Action.ACTION_QUERY_RECIPE: " + wantconstant.Action.ACTION_QUERY_RECIPE) - console.log("wantConstant.Action.ACTION_BUY_TAKEOUT: " + wantconstant.Action.ACTION_BUY_TAKEOUT) - console.log("wantConstant.Action.ACTION_TRANSLATE_TEXT: " + wantconstant.Action.ACTION_TRANSLATE_TEXT) - console.log("wantConstant.Action.ACTION_BUY: " + wantconstant.Action.ACTION_BUY) - console.log("wantConstant.Action.ACTION_QUERY_LOGISTICS_" + - "INFO: " + wantconstant.Action.ACTION_QUERY_LOGISTICS_INFO) - console.log("wantConstant.Action.ACTION_SEND_LOGISTICS: " + wantconstant.Action.ACTION_SEND_LOGISTICS) - console.log("wantConstant.Action.ACTION_QUERY_SPORTS_INFO: " + wantconstant.Action.ACTION_QUERY_SPORTS_INFO) - console.log("wantConstant.Action.ACTION_QUERY_NEWS: " + wantconstant.Action.ACTION_QUERY_NEWS) - console.log("wantConstant.Action.ACTION_QUERY_JOKE: " + wantconstant.Action.ACTION_QUERY_JOKE) - console.log("wantConstant.Action.ACTION_WATCH_VIDEO_CLIPS: " + wantconstant.Action.ACTION_WATCH_VIDEO_CLIPS) - console.log("wantConstant.Action.ACTION_QUERY_STOCK_INFO: " + wantconstant.Action.ACTION_QUERY_STOCK_INFO) - console.log("wantConstant.Action.ACTION_LOCALE_CHANGED: " + wantconstant.Action.ACTION_LOCALE_CHANGED) - - console.log("wantConstant.Entity.ENTITY_HOME: " + wantconstant.Entity.ENTITY_HOME) - console.log("wantConstant.Entity.ENTITY_VIDEO: " + wantconstant.Entity.ENTITY_VIDEO) - done(); }) @@ -239,20 +208,6 @@ describe('ActsFeatureAbilityTest', function () { done(); }) - /** - * @tc.number: ACTS_GetContext_0200 - * @tc.name: GetContext : Obtains the Context object - * @tc.desc: Check the return value of the interface (by AsyncCallback) - */ - it('ACTS_GetContext_0200', 0, async function (done) { - var result = await featureAbility.getContext( - (data) => { - expect(typeof (data)).assertEqual("object"); - done(); - }, - ); - }) - /** * @tc.number: ACTS_HasWindowFocus_0100 * @tc.name: HasWindowFocus : Checks whether the main window of this ability has window focus @@ -264,6 +219,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.hasWindowFocus(); expect(info).assertEqual(true); done(); + setTimeout(function () { + console.info('====> ACTS_HasWindowFocus_0100 =====>') + }, TIMEOUT) }) /** @@ -281,6 +239,9 @@ describe('ActsFeatureAbilityTest', function () { } ); console.info('AceApplication : hasWindowFocus : ' + result); + setTimeout(function () { + console.info('====> ACTS_HasWindowFocus_0300 =====>') + }, TIMEOUT) }) /** @@ -300,7 +261,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0100).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0100).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -327,32 +288,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -363,7 +324,9 @@ describe('ActsFeatureAbilityTest', function () { } ); expect(promise).assertEqual(0); - + setTimeout(function () { + console.info('====> ACTS_StartAbility_0100 =====>') + }, TIMEOUTSIX) }) /** @@ -383,7 +346,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0200).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0200).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -411,32 +374,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -458,8 +421,9 @@ describe('ActsFeatureAbilityTest', function () { } ); expect(promise).assertEqual(0); - console.debug('=======no id======'); - + setTimeout(function () { + console.info('====> ACTS_StartAbility_0200 =====>') + }, TIMEOUTSIX) }) /** @@ -479,7 +443,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0300).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0300).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -506,32 +470,32 @@ describe('ActsFeatureAbilityTest', function () { entities: [""], type: "", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -542,6 +506,9 @@ describe('ActsFeatureAbilityTest', function () { } ); expect(promise).assertEqual(0); + setTimeout(function () { + console.info('====> ACTS_StartAbility_0300 =====>') + }, TIMEOUTSIX) }) /** @@ -561,7 +528,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0400).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0400).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -588,32 +555,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -628,6 +595,9 @@ describe('ActsFeatureAbilityTest', function () { }, ); + setTimeout(function () { + console.info('====> ACTS_StartAbility_0400 =====>') + }, TIMEOUTSIX) }) /** @@ -647,7 +617,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0500).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0500).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -674,32 +644,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -725,6 +695,9 @@ describe('ActsFeatureAbilityTest', function () { }, ); + setTimeout(function () { + console.info('====> ACTS_StartAbility_0500 =====>') + }, TIMEOUTSIX) }) /** @@ -744,7 +717,7 @@ describe('ActsFeatureAbilityTest', function () { done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0600).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbility_0600).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -771,32 +744,32 @@ describe('ActsFeatureAbilityTest', function () { entities: [""], type: "", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -811,7 +784,9 @@ describe('ActsFeatureAbilityTest', function () { }, ); - + setTimeout(function () { + console.info('====> ACTS_StartAbility_0600 =====>') + }, TIMEOUTSIX) }) /** @@ -822,24 +797,21 @@ describe('ActsFeatureAbilityTest', function () { it('ACTS_StartAbilityForResult_0100', 0, async function (done) { var Subscriber; let id; - function SubscribeCallBack(err, data) { clearTimeout(id); expect(data.event).assertEqual("ACTS_StartAbilityForResult_0100_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0100).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0100).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; - await commonEvent.subscribe(Subscriber, SubscribeCallBack); + commonEvent.subscribe(Subscriber, SubscribeCallBack); }) function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -858,49 +830,47 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", bundleName: "com.example.startabilityforresult", abilityName: "com.example.startabilityforresult.MainAbility", uri: "" - }, - requestCode: 2, - }, - (error, result) => { - checkOnAbilityResult(result); - console.log("featureAbilityTest ACTS_StartAbilityForResult_0100 asyncCallback " + - "errCode : " + error + " result: " + result) - done(); - }, + } + } ); - expect(promise).assertEqual(0); + console.info('====> ACTS_StartAbilityForResult_0100 start ability=====>' + JSON.stringify(promise)) + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0100 =====>') + }, TIMEOUTSIX) }) /** @@ -911,16 +881,14 @@ describe('ActsFeatureAbilityTest', function () { it('ACTS_StartAbilityForResult_0200', 0, async function (done) { var Subscriber; let id; - function SubscribeCallBack(err, data) { clearTimeout(id); expect(data.event).assertEqual("ACTS_StartAbilityForResult_0200_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); - commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); + commonEvent.unsubscribe(Subscriber, UnSubscribeCallback); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0200).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0200).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -928,7 +896,6 @@ describe('ActsFeatureAbilityTest', function () { function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -947,32 +914,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -990,17 +957,14 @@ describe('ActsFeatureAbilityTest', function () { mykey6: ["aaaaaa", "bbbbb", "ccccccccccc"], mykey7: true, }, - }, - requestCode: 2, - }, - (error, result) => { - checkOnAbilityResult(result); - console.log('featureAbilityTest ACTS_StartAbilityForResult_0200 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } + } ); - expect(promise).assertEqual(0); + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0200 =====>') + }, TIMEOUTFORRESULT) }) /** @@ -1017,10 +981,9 @@ describe('ActsFeatureAbilityTest', function () { expect(data.event).assertEqual("ACTS_StartAbilityForResult_0300_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0300).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0300).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1028,7 +991,6 @@ describe('ActsFeatureAbilityTest', function () { function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -1047,50 +1009,46 @@ describe('ActsFeatureAbilityTest', function () { entities: [""], type: "", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", bundleName: "com.example.startabilityforresult", abilityName: "com.example.startabilityforresult.MainAbility", uri: "" - }, - requestCode: 2, - }, - (error, result) => { - console.log('featureAbilityTest ACTS_StartAbilityForResult_0300 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - checkOnAbilityResult(result); - done(); - }, + } + } ); - expect(promise).assertEqual(0); - console.debug('=======no id======') + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0300 =====>') + }, TIMEOUTFORRESULT) }) @@ -1110,7 +1068,7 @@ describe('ActsFeatureAbilityTest', function () { commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0400).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0400).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1136,32 +1094,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -1176,14 +1134,11 @@ describe('ActsFeatureAbilityTest', function () { 'errCode : ' + error + " result: " + result) checkOnAbilityResult(result); done(); - }, - (error, result) => { - expect(result).assertEqual(0); - console.log('featureAbilityTest ACTS_StartAbilityForResult_0400 second asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } ); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0400 =====>') + }, TIMEOUTFORRESULT) }) /** @@ -1202,7 +1157,7 @@ describe('ActsFeatureAbilityTest', function () { commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0500).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0500).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1228,32 +1183,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -1271,22 +1226,18 @@ describe('ActsFeatureAbilityTest', function () { mykey6: ["aaaaaa", "bbbbb", "ccccccccccc"], mykey7: true, }, - }, - requestCode: 2, + } }, (error, result) => { checkOnAbilityResult(result); console.log('featureAbilityTest ACTS_StartAbilityForResult_0500 asyncCallback ' + 'errCode : ' + error + " result: " + result) done(); - }, - (error, result) => { - expect(result).assertEqual(0); - console.log('featureAbilityTest ACTS_StartAbilityForResult_0500 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } ); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0500 =====>') + }, TIMEOUTFORRESULT) }) @@ -1306,7 +1257,7 @@ describe('ActsFeatureAbilityTest', function () { commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) } - await commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0600).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_StartAbilityForResult_0600).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1332,32 +1283,32 @@ describe('ActsFeatureAbilityTest', function () { entities: [""], type: "", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -1365,39 +1316,32 @@ describe('ActsFeatureAbilityTest', function () { abilityName: "com.example.startabilityforresult.MainAbility", uri: "" }, - requestCode: 2, }, (error, result) => { checkOnAbilityResult(result); console.log('featureAbilityTest ACTS_StartAbilityForResult_0600 asyncCallback ' + 'errCode : ' + error + " result: " + result) done(); - }, - (error, result) => { - expect(result).assertEqual(0); - console.log('featureAbilityTest ACTS_StartAbilityForResult_0600 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } ); + setTimeout(function () { + console.info('====> ACTS_StartAbilityForResult_0600 =====>') + }, TIMEOUTFORRESULT) }) function checkOnAbilityResult(data) { expect(typeof (data)).assertEqual("object"); - expect(typeof (data.requestCode)).assertEqual("number"); expect(typeof (data.resultCode)).assertEqual("number"); expect(typeof (data.want.action)).assertEqual("string"); expect(Array.isArray(data.want.entities)).assertEqual(true); expect(typeof (data.want.type)).assertEqual("string"); - expect(typeof (data.want.options)).assertEqual("object"); expect(typeof (data.want.deviceId)).assertEqual("string"); expect(typeof (data.want.bundleName)).assertEqual("string"); expect(typeof (data.want.abilityName)).assertEqual("string"); expect(typeof (data.want.uri)).assertEqual("string"); console.info('featureAbilityTest onAbilityResult asyncCallback success : *************'); - console.info('requestCode : ' + data.requestCode); console.info('resultCode : ' + data.resultCode); console.info('want.action : ' + data.want.action); console.info('want.entities.length : ' + data.want.entities.length); @@ -1405,21 +1349,6 @@ describe('ActsFeatureAbilityTest', function () { console.info('want.entities : ' + data.want.entities[j]); } console.info('want.type : ' + data.want.type); - console.info('want.options : ' + data.want.options); - console.info('want.deviceId : ' + data.want.deviceId); - console.info('want.options.authReadUriPermission : ' + data.want.options.authReadUriPermission); - console.info('want.options.authWriteUriPermission : ' + data.want.options.authWriteUriPermission); - console.info('want.options.abilityForwardResult : ' + data.want.options.abilityForwardResult); - console.info('want.options.abilityContinuation : ' + data.want.options.abilityContinuation); - console.info('want.options.notOhosComponent : ' + data.want.options.notOhosComponent); - console.info('want.options.abilityFormEnabled : ' + data.want.options.abilityFormEnabled); - console.info('want.options.authPersistableUriPermission : ' + data.want.options.authPersistableUriPermission); - console.info('want.options.authPrefixUriPermission : ' + data.want.options.authPrefixUriPermission); - console.info('want.options.abilitySliceMultiDevice : ' + data.want.options.abilitySliceMultiDevice); - console.info('want.options.startForegroundAbility : ' + data.want.options.startForegroundAbility); - console.info('want.options.installOnDemand : ' + data.want.options.installOnDemand); - console.info('want.options.abilitySliceForwardResult : ' + data.want.options.abilitySliceForwardResult); - console.info('want.options.installWithBackgroundMode : ' + data.want.options.installWithBackgroundMode); console.info('want.bundleName : ' + data.want.bundleName); console.info('want.abilityName : ' + data.want.abilityName); console.info('want.uri : ' + data.want.uri); @@ -1436,6 +1365,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.hasWindowFocus(); expect(info).assertEqual(false); done(); + setTimeout(function () { + console.info('====> ACTS_HasWindowFocus_0200 =====>') + }, TIMEOUT) }) /** @@ -1452,6 +1384,9 @@ describe('ActsFeatureAbilityTest', function () { done(); } ); + setTimeout(function () { + console.info('====> ACTS_HasWindowFocus_0400 =====>') + }, TIMEOUT) }) /** @@ -1468,9 +1403,14 @@ describe('ActsFeatureAbilityTest', function () { clearTimeout(id); events.set(data.event, 0); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); + if (events.size > 1) { + checkResult(); + } else { + setTimeout(timeout, TERMINATE_ABILITY_TIMEOUT); + } } - await commonEvent.createSubscriber(subscriberInfo_ACTS_TerminateAbility_0100).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_TerminateAbility_0100).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1489,13 +1429,16 @@ describe('ActsFeatureAbilityTest', function () { } function checkResult() { + console.debug('==========ACTS_TerminateAbility_0100==========checkResult'); expect(events.has("ACTS_TerminateAbility_0100_CommonEvent")).assertTrue(); expect(events.has("ACTS_TerminateAbility_0100_Return")).assertTrue(); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) done(); + setTimeout(function () { + console.info('====> ACTS_TerminateAbility_0100 =====>') + }, TIMEOUTTERMINATE) } - setTimeout(checkResult, TERMINATE_ABILITY_TIMEOUT); id = setTimeout(timeout, START_ABILITY_TIMEOUT); var promise = featureAbility.startAbility( { @@ -1505,32 +1448,32 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", @@ -1557,9 +1500,14 @@ describe('ActsFeatureAbilityTest', function () { clearTimeout(id); events.set(data.event, 0); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); + if (events.size > 1) { + checkResult(); + } else { + setTimeout(timeout, TERMINATE_ABILITY_TIMEOUT); + } } - await commonEvent.createSubscriber(subscriberInfo_ACTS_TerminateAbility_0200).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_TerminateAbility_0200).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1582,9 +1530,11 @@ describe('ActsFeatureAbilityTest', function () { expect(events.has("ACTS_TerminateAbility_0200_Return")).assertTrue(); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) done(); + setTimeout(function () { + console.info('====> ACTS_TerminateAbility_0100 =====>') + }, TIMEOUTTERMINATE) } - setTimeout(checkResult, TERMINATE_ABILITY_TIMEOUT); id = setTimeout(timeout, START_ABILITY_TIMEOUT); var promise = featureAbility.startAbility( { @@ -1613,16 +1563,14 @@ describe('ActsFeatureAbilityTest', function () { it('ACTS_FinishWithResult_0100', 0, async function (done) { var Subscriber; let id; - function SubscribeCallBack(err, data) { clearTimeout(id); expect(data.event).assertEqual("ACTS_FinishWithResult_0100_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0100).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0100).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1630,7 +1578,6 @@ describe('ActsFeatureAbilityTest', function () { function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -1649,50 +1596,46 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", bundleName: "com.example.finishwithresultpromiseparameterstest", abilityName: "com.example.finishwithresultpromiseparameterstest.MainAbility", uri: "" - }, - requestCode: 2, - }, - (error, result) => { - checkOnAbilityResult(result); - console.log('featureAbilityTest ACTS_FinishWithResult_0100 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } + } ); - expect(promise).assertEqual(0); - + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_FinishWithResult_0100 =====>') + }, TIMEOUTFORRESULT) }) /** @@ -1704,16 +1647,14 @@ describe('ActsFeatureAbilityTest', function () { it('ACTS_FinishWithResult_0200', 0, async function (done) { var Subscriber; let id; - function SubscribeCallBack(err, data) { clearTimeout(id); expect(data.event).assertEqual("ACTS_FinishWithResult_0200_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0200).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0200).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1721,7 +1662,6 @@ describe('ActsFeatureAbilityTest', function () { function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -1740,50 +1680,46 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", bundleName: "com.example.finishwithresulttest", abilityName: "com.example.finishwithresulttest.MainAbility", uri: "" - }, - requestCode: 2, - }, - (error, result) => { - checkOnAbilityResult(result); - console.log('featureAbilityTest ACTS_FinishWithResult_0200 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } + } ); - expect(promise).assertEqual(0); - + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_FinishWithResult_0200 =====>') + }, TIMEOUTFORRESULT) }) /** @@ -1801,10 +1737,9 @@ describe('ActsFeatureAbilityTest', function () { expect(data.event).assertEqual("ACTS_FinishWithResult_0300_CommonEvent"); console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); commonEvent.unsubscribe(Subscriber, UnSubscribeCallback) - done(); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0300).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_FinishWithResult_0300).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -1812,7 +1747,6 @@ describe('ActsFeatureAbilityTest', function () { function UnSubscribeCallback() { console.debug("====>UnSubscribe CallBack====>"); - done(); } function timeout() { @@ -1831,50 +1765,46 @@ describe('ActsFeatureAbilityTest', function () { entities: ["entity.system.home"], type: "MIMETYPE", options: { - // indicates the grant to perform read operations on the URI + // indicates the grant to perform read operations on the URI authReadUriPermission: true, - // indicates the grant to perform write operations on the URI + // indicates the grant to perform write operations on the URI authWriteUriPermission: true, - // support forward intent result to origin ability + // support forward intent result to origin ability abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation + // used for marking the ability start-up is triggered by continuation abilityContinuation: true, - // specifies whether a component does not belong to ohos + // specifies whether a component does not belong to ohos notOhosComponent: true, - // specifies whether an ability is started + // specifies whether an ability is started abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. + // indicates the grant for possible persisting on the URI. authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices + // support distributed scheduling system start up multiple devices abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. startForegroundAbility: true, - // install the specified ability if it's not installed. + // install the specified ability if it's not installed. installOnDemand: true, - // return result to origin ability slice + // return result to origin ability slice abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. + // install the specified ability with background mode if it's not installed. installWithBackgroundMode: true }, deviceId: "", bundleName: "com.example.finishwithresultemptytest", abilityName: "com.example.finishwithresultemptytest.MainAbility", uri: "" - }, - requestCode: 2, - }, - (error, result) => { - checkOnAbilityResult(result); - console.log('featureAbilityTest ACTS_FinishWithResult_0300 asyncCallback ' + - 'errCode : ' + error + " result: " + result) - done(); - }, + } + } ); - expect(promise).assertEqual(0); - + checkOnAbilityResult(promise); + done(); + setTimeout(function () { + console.info('====> ACTS_FinishWithResult_0300 =====>') + }, TIMEOUTFORRESULT) }) // checkAbilityName @@ -1895,6 +1825,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getAbilityName(); checkAbilityName(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetAbilityName_0100 =====>') + }, TIMEOUT) }) /** @@ -1909,6 +1842,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetAbilityName_0200 =====>') + }, TIMEOUT) }) // checkApplicationInfo @@ -1972,14 +1908,14 @@ describe('ActsFeatureAbilityTest', function () { expect(info.process).assertEqual("processTest"); expect(info.supportedModes).assertEqual(0); expect(info.moduleSourceDirs[0]).assertEqual("/data/accounts/account_0/applications/" + - "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); + "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); expect(info.permissions[0]).assertEqual("ohos.permission.CAMERA"); expect(info.moduleInfos[0].moduleName).assertEqual("entry"); - expect(info.moduleInfos[0].moduleSourceDir).assertEqual("/data/accounts/account_0/applications/" + - "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); + expect(info.moduleInfos[0].moduleSourceDir).assertEqual("/data/accounts/account_0/applications/" + + "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); expect(info.flags).assertEqual(0); - expect(info.entryDir).assertEqual("/data/accounts/account_0/applications/" + - "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); + expect(info.entryDir).assertEqual("/data/accounts/account_0/applications/" + + "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); } /** @@ -1993,6 +1929,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getApplicationInfo(); checkApplicationInfo(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetApplicationInfo_0100 =====>') + }, TIMEOUT) }) /** @@ -2007,6 +1946,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetApplicationInfo_0200 =====>') + }, TIMEOUT) }) // checkProcessInfo @@ -2032,6 +1974,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getProcessInfo(); checkProcessInfo(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetProcessInfo_0100 =====>') + }, TIMEOUT) }) /** @@ -2046,6 +1991,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetProcessInfo_0200 =====>') + }, TIMEOUT) }) // checkElementName @@ -2082,6 +2030,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getElementName(); checkElementName(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetElementName_0100 =====>') + }, TIMEOUT) }) /** @@ -2096,6 +2047,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetElementName_0200 =====>') + }, TIMEOUT) }) // checkAppType @@ -2116,6 +2070,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getAppType(); checkAppType(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetAppType_0100 =====>') + }, TIMEOUT) }) /** @@ -2130,6 +2087,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetAppType_0200 =====>') + }, TIMEOUT) }) // checkAbilityInfo @@ -2256,6 +2216,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getAbilityInfo(); checkAbilityInfo(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetAbilityInfo_0100 =====>') + }, TIMEOUT) }) /** @@ -2270,6 +2233,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetAbilityInfo_0200 =====>') + }, TIMEOUT) }) // checkHapModuleInfo @@ -2346,6 +2312,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getHapModuleInfo(); checkHapModuleInfo(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetHapModuleInfo_0100 =====>') + }, TIMEOUT) }) /** @@ -2360,6 +2329,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetHapModuleInfo_0200 =====>') + }, TIMEOUT) }) // checkProcessName @@ -2380,6 +2352,9 @@ describe('ActsFeatureAbilityTest', function () { var info = await featureAbility.getProcessName(); checkProcessName(info); done(); + setTimeout(function () { + console.info('====> ACTS_GetProcessName_0100 =====>') + }, TIMEOUT) }) /** @@ -2394,6 +2369,9 @@ describe('ActsFeatureAbilityTest', function () { done() } ); + setTimeout(function () { + console.info('====> ACTS_GetProcessName_0200 =====>') + }, TIMEOUT) }) /** @@ -2412,7 +2390,7 @@ describe('ActsFeatureAbilityTest', function () { console.debug("====>Subscribe CallBack data:====>" + JSON.stringify(data)); } - await commonEvent.createSubscriber(subscriberInfo_ACTS_GetCallingBundle_0100).then(async (data) => { + commonEvent.createSubscriber(subscriberInfo_ACTS_GetCallingBundle_0100).then(async (data) => { console.debug("====>Create Subscriber====>"); Subscriber = data; await commonEvent.subscribe(Subscriber, SubscribeCallBack); @@ -2451,5 +2429,8 @@ describe('ActsFeatureAbilityTest', function () { } ); expect(result).assertEqual(0); + setTimeout(function () { + console.info('====> ACTS_GetCallingBundle_0100 =====>') + }, TIMEOUTFORRESULT) }) }) diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/package.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/config.json index 90bb94cfa..90bc366fc 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/js/default/pages/index/index.js b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/js/default/pages/index/index.js index 684eaa4ca..66fb0cc88 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/js/default/pages/index/index.js +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultemptytest/src/main/js/default/pages/index/index.js @@ -45,7 +45,7 @@ export default { }, } ); - featureAbility.terminateAbility( + featureAbility.terminateSelf( (err, data)=>{ console.debug('==========Terminate Ability Success==========') }); diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/package.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/config.json index 383424a58..501077e2c 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/js/default/pages/index/index.js b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/js/default/pages/index/index.js index f2f6c0e91..a7c600650 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/js/default/pages/index/index.js +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresultpromiseparameterstest/src/main/js/default/pages/index/index.js @@ -85,7 +85,7 @@ export default { }, } ) - featureAbility.terminateAbility( + featureAbility.terminateSelf( (err, data)=>{ console.debug('==========Terminate Ability Success=========='); }); diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/package.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/config.json index 35957e36a..5295cdb2b 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/js/default/pages/index/index.js b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/js/default/pages/index/index.js index 73ebb7c14..76c11fa88 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/js/default/pages/index/index.js +++ b/aafwk/aafwk_standard/featureability/sceneproject/finishwithresulttest/src/main/js/default/pages/index/index.js @@ -41,7 +41,7 @@ export default { }, } ); - featureAbility.terminateAbility( + featureAbility.terminateSelf( (err, data)=>{ console.debug('==========Terminate Ability Success=========='); }); diff --git a/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/package.json b/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/src/main/config.json index dd8c9af6a..5cb6ff2fa 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/getcallingbundletest/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/startability/package.json b/aafwk/aafwk_standard/featureability/sceneproject/startability/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/startability/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/package.json b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/config.json index 57ac90b99..0e66f7e0c 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/js/default/pages/index/index.js b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/js/default/pages/index/index.js index 2f21ed8c1..8c3373265 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/js/default/pages/index/index.js +++ b/aafwk/aafwk_standard/featureability/sceneproject/startabilityforresult/src/main/js/default/pages/index/index.js @@ -61,7 +61,7 @@ export default { }, } ); - await featureAbility.terminateAbility(); + await featureAbility.terminateSelf(); }, onReady() { }, diff --git a/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/package.json b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/package.json @@ -0,0 +1 @@ +{} diff --git a/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/config.json b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/config.json index b785531d3..4605c10d0 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/config.json +++ b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/config.json @@ -41,7 +41,8 @@ "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "visible": true } ], "js": [ diff --git a/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/js/default/pages/index/index.js b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/js/default/pages/index/index.js index 15dee84f7..f6534d839 100644 --- a/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/js/default/pages/index/index.js +++ b/aafwk/aafwk_standard/featureability/sceneproject/terminateabilitytest/src/main/js/default/pages/index/index.js @@ -41,11 +41,11 @@ export default { onShow() { commonEvent.publish("ACTS_TerminateAbility_0100_CommonEvent", PublishCallBackOne); commonEvent.publish("ACTS_TerminateAbility_0200_CommonEvent", PublishCallBackTwo); - featureAbility.terminateAbility( - (err, data)=>{ + featureAbility.terminateSelf( + async (err, data)=>{ console.debug('==========Terminate Ability Success=========='); - commonEvent.publish("ACTS_TerminateAbility_0100_Return", PublishCallBackThree); - commonEvent.publish("ACTS_TerminateAbility_0200_Return", PublishCallBackFour); + await commonEvent.publish("ACTS_TerminateAbility_0100_Return", PublishCallBackThree); + await commonEvent.publish("ACTS_TerminateAbility_0200_Return", PublishCallBackFour); } ); }, diff --git a/appexecfwk/ams_standard/BUILD.gn b/appexecfwk/ams_standard/BUILD.gn index 1d70495fb..cf897f1c6 100644 --- a/appexecfwk/ams_standard/BUILD.gn +++ b/appexecfwk/ams_standard/BUILD.gn @@ -16,6 +16,9 @@ import("//build/ohos_var.gni") group("ams_standard") { testonly = true if (is_standard_system) { - deps = [ "amszipfileunzipfilest:amsZipfileUnzipfileST" ] + deps = [ + "amszipfileunzipfilest:amsZipfileUnzipfileST", + "fwkdataaccessor:FWKDataAccessor", + ] } } diff --git a/appexecfwk/ams_standard/fwkdataaccessor/BUILD.gn b/appexecfwk/ams_standard/fwkdataaccessor/BUILD.gn new file mode 100644 index 000000000..8fe06e236 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/BUILD.gn @@ -0,0 +1,31 @@ +# 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("//test/xts/tools/build/suite.gni") + +ohos_js_hap_suite("FWKDataAccessor") { + hap_profile = "./entry/src/main/config.json" + deps = [ + ":hjs_demo_js_assets", + ":hjs_demo_resources", + ] + certificate_profile = "./signature/openharmony_sx.p7b" + hap_name = "FWKDataAccessor" +} +ohos_js_assets("hjs_demo_js_assets") { + source_dir = "./entry/src/main/js/default" +} +ohos_resources("hjs_demo_resources") { + sources = [ "./entry/src/main/js/resources" ] + hap_profile = "./entry/src/main/config.json" +} diff --git a/appexecfwk/ams_standard/fwkdataaccessor/Test.json b/appexecfwk/ams_standard/fwkdataaccessor/Test.json new file mode 100644 index 000000000..07871cd56 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/Test.json @@ -0,0 +1,18 @@ +{ + "description": "Configuration for hjunit demo Tests", + "driver": { + "type": "JSStTest", + "test-timeout": "60000", + "package": "com.amsst.fwkdataaccessor", + "shell-timeout": "60000" + }, + "kits": [ + { + "test-file-name": [ + "FWKDataAccessor.hap" + ], + "type": "AppInstallKit", + "cleanup-apps": true + } + ] +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/package.json b/appexecfwk/ams_standard/fwkdataaccessor/entry/package.json new file mode 100644 index 000000000..69a88e3b6 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/package.json @@ -0,0 +1 @@ +{} diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/config.json b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/config.json new file mode 100644 index 000000000..ba1f60270 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/config.json @@ -0,0 +1,62 @@ +{ + "app": { + "bundleName": "com.amsst.fwkdataaccessor", + "vendor": "amsst", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5, + "releaseType": "Beta1" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.amsst.fwkdataaccessor", + "name": ".MyApplication", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home", + "flag.home.intent.from.system" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "com.amsst.fwkdataaccessor.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:app_name", + "type": "page", + "launchType": "standard", + "visible": true + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/app.js b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/app.js new file mode 100644 index 000000000..3ee099f58 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/app.js @@ -0,0 +1,22 @@ +/* + * 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. + */ +export default { + onCreate() { + console.info('AceApplication onCreate'); + }, + onDestroy() { + console.info('AceApplication onDestroy'); + } +}; diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/en-US.json b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/en-US.json new file mode 100644 index 000000000..e63c70d97 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/en-US.json @@ -0,0 +1,6 @@ +{ + "strings": { + "hello": "Hello", + "world": "World" + } +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/zh-CN.json b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/zh-CN.json new file mode 100644 index 000000000..de6ee5748 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/i18n/zh-CN.json @@ -0,0 +1,6 @@ +{ + "strings": { + "hello": "您好", + "world": "世界" + } +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.css b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.css new file mode 100644 index 000000000..6724ec055 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.css @@ -0,0 +1,12 @@ +.container { + flex-direction: column; + justify-content: center; + align-items: center; +} + +.title { + font-size: 100px; +} +.titleST { + font-size: 32px; +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.hml b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.hml new file mode 100644 index 000000000..4f779dcdf --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.hml @@ -0,0 +1,8 @@ +
+ + {{ $t('strings.hello') }} {{ title }} + + + STDataAbility + +
diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.js b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.js new file mode 100644 index 000000000..4bfa4f7e4 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/default/pages/index/index.js @@ -0,0 +1,44 @@ +/* + * 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 file from '@system.file' +import app from '@system.app' +import {Core, ExpectExtend, ReportExtend} from 'deccjsunit/index' + +export default { + data: { + title: "" + }, + onInit() { + this.title = this.$t('strings.world'); + }, + onShow() { + console.info('====onShow finish====<') + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + const reportExtend = new ReportExtend(file) + core.addService('expect', expectExtend) + core.addService('report', reportExtend) + core.init() + const configService = core.getDefaultService('config') + configService.setConfig(this) + + require('../../../test/List.test') + core.execute() + }, + onReady() { + }, +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/element/string.json b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/element/string.json new file mode 100644 index 000000000..e0fe66e55 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "app_name", + "value": "STDataAbility" + }, + { + "name": "mainability_description", + "value": "JS_Phone_Empty Feature Ability" + } + ] +} \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/media/icon.png b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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" + + (" json data【") + JSON.stringify(data)+ (" 】;")); + //expect(data.abilityInfo.length).assertEqual(1); + done(); + }catch(err) { + console.error('=bms_installAbility_0100 install catch(err)====>:'+err); + expect(false).assertTrue(); + done(); + } + setTimeout(function () { + console.info('=bms_installAbility_0100====> setTimeout'); + }, g_setTimeout) + console.log('bms_installAbility_0100====" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof err).assertEqual('object'); + expect(err.code).assertEqual(0); + expect(typeof data).assertEqual('object'); + expect(data.status).assertEqual(0); + expect(data.statusMessage).assertEqual('SUCCESS'); + } + }catch(err) { + console.error('=bms_installAbility_0100 getBundleInstaller catch(err)====>:'+err); + expect(false).assertTrue(); + } + } + +/* +* @tc.number: ACTS_GetDataAbilityHelper_0100 +* @tc.name: GetDataAbilityHelper : Connects an ability to a Service ability +* @tc.desc: Check the return value of the interface (by Promise) +*/ + it('ACTS_GetDataAbilityHelper_0100',0, async function (done) { + console.log('ACTS_GetDataAbilityHelper_0100====" + + (" json dataAbilityUri 【") + JSON.stringify(dataAbilityUri)+ (" 】; ====>")) + let ret = false; + try{ + var promise = featureAbility.getDataAbilityHelper(dataAbilityUri) + .then(function (data) { + console.debug("=ACTS_GetDataAbilityHelper_0100 then data====>" + + (" json data 【") + JSON.stringify(data)+ (" 】; ====>")+data); + expect(typeof(data)).assertEqual("object"); + console.log('=ACTS_GetDataAbilityHelper_0100 promise JSON.stringify([object])====>:' + JSON.stringify(promise)+","+promise); + ret = true; + done() + }).catch(function (err){ + console.debug("=ACTS_GetDataAbilityHelper_0100 catch err====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ====>")+err); + console.log('=ACTS_GetDataAbilityHelper_0100 promise====>:' + JSON.stringify(promise)) + ret = false; + done(); + }); + }catch(err) { + console.error('=ACTS_GetDataAbilityHelper_0100 getDataAbilityHelper catch(err)====>:'+err); + ret = false; + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_GetDataAbilityHelper_0100====" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(asyncCallback)).assertEqual("object"); + DAHelper = data; + console.log('=ACTS_GetDataAbilityHelper_0200 asyncCallback err data====>:' + JSON.stringify(asyncCallback)) + console.log('=ACTS_GetDataAbilityHelper_0200 DAHelper JSON.stringify([object])====>:' + JSON.stringify(DAHelper)); + ret = true; + done(); + } + ); + }catch(err) { + console.error('=ACTS_GetDataAbilityHelper_0200 getDataAbilityHelper catch(err)====>:'+err); + ret = false; + done(); + } + console.log('=ACTS_GetDataAbilityHelper_0200 asyncCallback ====>:' + JSON.stringify(asyncCallback)) + + + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_GetDataAbilityHelper_0200====: ' + JSON.stringify(DAHelper)+","+ DAHelper) + let valueBucket + try{ + DAHelper.insert(dataAbilityUri,valueBucket) + .then(function (data){ + console.debug("=ACTS_Insert_0100 insert Promise then data====>" + + ("json data 【") + JSON.stringify(data)+ (" 】")); + expect(typeof(data)).assertEqual("number"); + expect(data).assertEqual(1); + ret = true; + done(); + }).catch(function (err){ + console.debug("=ACTS_Insert_0100 insert Promise catch err ====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ")); + ret = false; + done(); + }); + }catch(err) { + console.error('=ACTS_Insert_0100 insert Promise catch(err)====>:'+err); + ret = false; + done(); + } + + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_Insert_0100====: ' + DAHelper) + let valueBucket + try{ + var asyncCallback = await DAHelper.insert(dataAbilityUri,valueBucket, + (err,data)=>{ + console.debug("=ACTS_Insert_0200 insert AsyncCallback err,data====>" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(data)).assertEqual("number"); + expect(data).assertEqual(1); + console.log('=ACTS_Insert_0200 asyncCallback ====>:' + JSON.stringify(asyncCallback)) + ret = true; + done(); + } + ); + }catch(err) { + console.error('=ACTS_Insert_0200 insert AsyncCallback catch(err)====>:'+err); + ret = false; + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_Insert_0200==== { + console.debug("=ACTS_Insert_0300 insert Promise then data====>" + + ("json data 【") + JSON.stringify(data)+ (" 】")); + expect(typeof(data)).assertEqual("number"); + expect(data).assertEqual(1); + ret = true; + done(); + }).catch((err)=>{ + console.debug("=ACTS_Insert_0300 insert Promise catch err ====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ")); + //debugAnsErrorCodePrint(err.code); + ret = false; + done(); + }); + }catch(err) { + console.error('=ACTS_Insert_0300 insert Promise catch(err)====>:'+err); + ret = false; + done(); + } + + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_Insert_0300====: ' + DAHelper) + const valueBucket = { + "name": "ACTS_Insert_0400_rose1", + "age": 221, + "salary": 20.5, + "blobType": "u8", + } + try{ + var asyncCallback = await DAHelper.insert(dataAbilityUri,valueBucket, + (err,data)=>{ + console.debug("=ACTS_Insert_0400 insert AsyncCallback err,data====>" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(data)).assertEqual("number"); + expect(data).assertEqual(1); + ret = true; + done(); + } + ); + }catch(err) { + console.error('=ACTS_Insert_0400 insert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_Insert_0400====: ' + DAHelper) + var valueBucket; + try{ + DAHelper.batchInsert( + dataAbilityUri, + valueBucket + ).then((data) => { + console.debug("=ACTS_BatchInsert_0100 BatchInsert Promise then data====>" + + ("json data 【") + JSON.stringify(data)+ (" 】; ====>")); + expect(typeof(data)).assertEqual("number"); + ret = true; + done(); + }).catch((err)=>{ + console.debug("=ACTS_BatchInsert_0100 BatchInsert Promise catch err ====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ")); + ret = false + done(); + }); + }catch(err) { + console.error('=ACTS_BatchInsert_0100 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0100====: ' + DAHelper) + var valueBucket; + try{ + await DAHelper.batchInsert( + dataAbilityUri, + valueBucket, + (err,data) => { + console.debug("=ACTS_BatchInsert_0200 batchInsert AsyncCallback err,data=======>" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(data)).assertEqual("number"); + ret = true; + done(); + }, + ); + }catch(err) { + console.error('=ACTS_BatchInsert_0200 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0200====: ' + DAHelper) + var valueBucketArray = new Array({},{},{}) + try{ + DAHelper.batchInsert( + dataAbilityUri, + valueBucketArray, + ).then((data) => { + console.debug("=ACTS_BatchInsert_0300 BatchInsert Promise then data====>" + + ("json data 【") + JSON.stringify(data)+ (" 】; ====>")); + expect(typeof(data)).assertEqual("number"); + ret = true; + done(); + }).catch((err)=>{ + console.debug("=ACTS_BatchInsert_0300 BatchInsert Promise catch err ====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ")); + ret = false + done(); + }); + }catch(err) { + console.error('=ACTS_BatchInsert_0300 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0300====: ' + DAHelper) + var valueBucketArray = new Array({},{},{}) + try{ + await DAHelper.batchInsert( + dataAbilityUri, + valueBucketArray, + (err,data) => { + console.debug("=ACTS_BatchInsert_0400 batchInsert AsyncCallback err,data====>" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(data)).assertEqual("number"); + ret = true + done(); + }, + ); + }catch(err) { + console.error('=ACTS_BatchInsert_0400 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0400====: ' + DAHelper) + try{ + const valueBucket = { + "name": "ACTS_BatchInsert_0500_roe1", + "age": 21, + "salary": 20.5, + } + var valueBucketArray = new Array({"name": "BatchInsert_0500_roe11", "age": 21, "salary": 20.5, }, + {"name": "BatchInsert_0500_roe12", "age": 21, "salary": 20.5, }, + {"name": "BatchInsert_0500_roe13", "age": 21, "salary": 20.5, }) + }catch(err) { + console.error('=ACTS_BatchInsert_0500 valueBucketArray catch(err)====>:'+err); + ret = false + done(); + } + try{ + DAHelper.batchInsert( + dataAbilityUri, + valueBucketArray, + ).then((data) => { + console.debug("=ACTS_BatchInsert_0300 BatchInsert Promise then data====>" + + ("json data 【") + JSON.stringify(data)+ (" 】")); + expect(typeof(data)).assertEqual("number"); + ret = true + done(); + }).catch((err)=>{ + console.debug("=ACTS_BatchInsert_0500 BatchInsert Promise catch err ====>" + + ("json err 【") + JSON.stringify(err) + (" 】 ")); + ret = false + done(); + }); + }catch(err) { + console.error('=ACTS_BatchInsert_0500 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0500====: ' + DAHelper) + const valueBucket = { + "name": "BatchInsert_0600_roe1", + "age": 21, + "salary": 20.5, + } + var valueBucketArray = new Array({"name": "BatchInsert_0600_roe11", "age": 21, "salary": 20.5, }, + {"name": "BatchInsert_0600_roe12", "age": 21, "salary": 20.5, }, + {"name": "BatchInsert_0600_roe13", "age": 21, "salary": 20.5, }) + try{ + await DAHelper.batchInsert( + dataAbilityUri, + valueBucketArray, + (err,data) => { + console.debug("=ACTS_BatchInsert_0600 batchInsert AsyncCallback err,data====>" + + ("json err【") + JSON.stringify(err) + (" 】json data【") + JSON.stringify(data)+ (" 】;")); + expect(typeof(data)).assertEqual("number"); + ret = true + done(); + }, + ); + }catch(err) { + console.error('=ACTS_BatchInsert_0600 batchInsert AsyncCallback catch(err)====>:'+err); + ret = false + done(); + } + setTimeout(function(){ + expect(ret).assertTrue(); + }, g_setTimeout); + console.log('ACTS_BatchInsert_0600====:'+err); + expect(false).assertTrue(); + done(); + } + setTimeout(function () { + console.info('bms_uninstallAbility_0100====< setTimeout'); + }, g_setTimeout) + console.info('bms_uninstallAbility_0100====< end'); + }) + async function uninstall(bundleName) + { + try{ + var installer = await bundle.getBundleInstaller(); + installer.uninstall(bundleName, { + param: { + userId: 0, + installFlag: 1, + isKeepData: false + } + }, onReceiveUninstallEvent); + + function onReceiveUninstallEvent(err, data) { + console.info('========uninstall Finish========'); + expect(typeof err).assertEqual('object'); + expect(err.code).assertEqual(0); + expect(typeof data).assertEqual('object'); + expect(data.status).assertEqual(0); + expect(data.statusMessage).assertEqual('SUCCESS'); + } + }catch(err) { + console.error('=bms_uninstallAbility_0100 onReceiveUninstallEvent catch(err)====>:'+err); + expect(false).assertTrue(); + } + } +}) \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/test/List.test.js b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/test/List.test.js new file mode 100644 index 000000000..40e23cd98 --- /dev/null +++ b/appexecfwk/ams_standard/fwkdataaccessor/entry/src/main/js/test/List.test.js @@ -0,0 +1,15 @@ +/* + * 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. + */ +require('./DataAbilityHelperJsSt.test.js') \ No newline at end of file diff --git a/appexecfwk/ams_standard/fwkdataaccessor/hap/amsStDataAbility.hap b/appexecfwk/ams_standard/fwkdataaccessor/hap/amsStDataAbility.hap new file mode 100644 index 0000000000000000000000000000000000000000..8a04fcd944dbbfe18474160e6cf9c2ea938aad50 GIT binary patch literal 111121 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 literal 0 HcmV?d00001 diff --git a/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/Test.json b/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/Test.json index 975f5d639..17091a533 100644 --- a/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/Test.json +++ b/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/Test.json @@ -28,6 +28,12 @@ "bmsJstest9.hap->/data/bmsJstest9.hap" ] + }, + { + "type": "ShellKit", + "run-command": [ + "chmod 644 /data/*.hap" + ] } ] } diff --git a/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/entry/src/main/js/test/ExampleJsunit.test.js b/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/entry/src/main/js/test/ExampleJsunit.test.js index f379cb124..acd803bc2 100644 --- a/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/entry/src/main/js/test/ExampleJsunit.test.js +++ b/appexecfwk/bundle_standard/bundlemanager/actsbundlemanagertest/entry/src/main/js/test/ExampleJsunit.test.js @@ -48,6 +48,7 @@ const SYSTEMDIR1 = "/data/accounts/account_0/applications/com.ohos.launcher/com. const CAMERA = 'com.permission.CAMERA' const MUSIC = 'com.permission.music' const WECHAT = 'com.permission.WeChat' +const TIMEOUT = 1000 describe('ActsBundleManagerTest', function () { /** @@ -56,7 +57,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfo interfaces with one hap. */ it('getBundleInfo_0100', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST1], { param: { userId: 0, @@ -81,7 +82,6 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) expect(datainfo.appInfo.supportedModes).assertEqual(0) - expect(datainfo.appInfo.entryDir).assertEqual(DIR1) for (var j = 0; j < datainfo.appInfo.moduleInfos; j++) { expect(datainfo.appInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.appInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) @@ -89,7 +89,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.enabled).assertEqual(true) done() } - done() + setTimeout(function() { + console.info('====> getBundleInfo_0100 =====>') + },TIMEOUT) }) /** @@ -114,15 +116,16 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) expect(datainfo.appInfo.supportedModes).assertEqual(0) - expect(datainfo.appInfo.entryDir).assertEqual(DIR1) for (var j = 0; j < datainfo.appInfo.moduleInfos; j++) { expect(datainfo.appInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.appInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) } expect(datainfo.appInfo.enabled).assertEqual(true) + done() } - - done() + setTimeout(function() { + console.info('====> getBundleInfo_0600 =====>') + },1000) }) /** @@ -146,9 +149,11 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) expect(datainfo.appInfo.supportedModes).assertEqual(0) - expect(datainfo.appInfo.entryDir).assertEqual(DIR1) expect(datainfo.appInfo.enabled).assertEqual(true) done() + setTimeout(function() { + console.info('====> getBundleInfo_1100 =====>') + },1000) }) /** @@ -174,15 +179,16 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) expect(datainfo.appInfo.supportedModes).assertEqual(0) - expect(datainfo.appInfo.entryDir).assertEqual(DIR1) for (var j = 0; j < datainfo.appInfo.moduleInfos; j++) { expect(datainfo.appInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.appInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) } expect(datainfo.appInfo.enabled).assertEqual(true) + done() } - - done() + setTimeout(function() { + console.info('====> getBundleInfo_1200 =====>') + },1000) }) /** @@ -194,6 +200,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getApplicationInfos(8, 0) checkgetApplicationInfos(datainfo) done() + setTimeout(function() { + console.info('====> getApplicationInfos_0100 =====>') + },1000) }) function checkgetApplicationInfos(datainfo) { console.log("=============datainfo.length===============" + datainfo.length) @@ -203,7 +212,6 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -213,6 +221,7 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + } /** @@ -228,7 +237,6 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -238,8 +246,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }); - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_0600 =====>') + },1000) }) /** @@ -253,7 +265,6 @@ describe('ActsBundleManagerTest', function () { expect(data.length).assertLarger(0) for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -262,6 +273,9 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } done(); + setTimeout(function() { + console.info('====> getBundleInfos_0100 =====>') + },1000) }) /** @@ -276,7 +290,7 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.description.length).assertLarger(0) expect(datainfo.icon.length).assertLarger(0) expect(datainfo.label.length).assertLarger(0) - expect(datainfo.entryDir.length).assertLarger(0) + expect(datainfo.moduleSourceDirs.length).assertLarger(0) expect(datainfo.moduleInfos.length).assertLarger(0) expect(datainfo.name).assertEqual(NAME1) @@ -291,7 +305,6 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.process).assertEqual("") expect(datainfo.enabled).assertEqual(true) expect(datainfo.flags).assertEqual(0) - expect(datainfo.entryDir).assertEqual(DIR1) expect(datainfo.moduleSourceDirs).assertEqual(DIR1) for(var j = 0; j < datainfo.moduleInfos; j++) { expect(datainfo.moduleInfos[j].moduleName).assertEqual("entry") @@ -299,6 +312,9 @@ describe('ActsBundleManagerTest', function () { } done() + setTimeout(function() { + console.info('====> getApplicationInfo_0100 =====>') + },1000) }) /** @@ -307,12 +323,10 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with one hap. */ it('getBundleInfos_0600', 0, async function (done) { - await demo.getBundleInfos(0, (error, data) => { + await demo.getAllBundleInfo(0, (error, data) => { expect(typeof data).assertEqual(OBJECT) - expect(data.length).assertLarger(0) for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -320,8 +334,12 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } + done(); }) - done(); + + setTimeout(function() { + console.info('====> getBundleInfos_0600 =====>') + },1000) }) /** @@ -345,15 +363,18 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.labelId).assertEqual(16777216) expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) - expect(datainfo.entryDir).assertEqual(DIR1) expect(datainfo.enabled).assertEqual(true) for(var j = 0; j < datainfo.moduleInfos; j++) { expect(datainfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) } + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_0600 =====>') + },1000) }) /** @@ -378,6 +399,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) done() + setTimeout(function() { + console.info('====> getApplicationInfo_1100 =====>') + },1000) }) /** @@ -401,8 +425,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.labelId).assertEqual(16777216) expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_1200 =====>') + },1000) }) /** @@ -439,6 +467,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.abilityInfos[j].moduleName).assertEqual("entry") } done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0100 =====>') + },1000) }) /** @@ -466,6 +497,9 @@ describe('ActsBundleManagerTest', function () { }) expect(datainfo.name.length).assertEqual(0) done(); + setTimeout(function() { + console.info('====> queryAbilityByWant_0400 =====>') + },1000) }) /** @@ -493,6 +527,9 @@ describe('ActsBundleManagerTest', function () { }) expect(datainfo.name.length).assertEqual(0) done(); + setTimeout(function() { + console.info('====> queryAbilityByWant_0500 =====>') + },1000) }) /** @@ -508,18 +545,16 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication1", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication1.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }, OnReceiveEvent) + },0,0,OnReceiveEvent) + console.info('====>queryAbilityByWant finish=====>') function OnReceiveEvent(err, datainfo) { - expect(datainfo.name).assertEqual(".MainAbility") + console.info('====>queryAbilityByWantOnReceiveEvent=====>' + JSON.stringify(datainfo)) + console.info('====>queryAbilityByWant_0600 OnReceiveEvent=====>') + expect(datainfo.name).assertEqual("com.example.myapplication1.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -534,14 +569,18 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.applicationInfo.labelId).assertEqual(16777216) expect(datainfo.applicationInfo.systemApp).assertEqual(false) expect(datainfo.applicationInfo.supportedModes).assertEqual(0) - expect(datainfo.applicationInfo.entryDir).assertEqual(DIR1) expect(datainfo.applicationInfo.enabled).assertEqual(true) for (var j = 0; j < datainfo.applicationInfo.moduleInfos; j++) { expect(datainfo.applicationInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.applicationInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) } + console.info('====> queryAbili =====>') done() + } + setTimeout(function() { + console.info('====> queryAbilityByWant_0600 =====>') + },1000) }) /** @@ -560,17 +599,15 @@ describe('ActsBundleManagerTest', function () { abilityName: "", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }, OnReceiveEvent) + },0,0,OnReceiveEvent) function OnReceiveEvent(err, datainfo) { expect(datainfo.name.length).assertEqual(0) done(); } + setTimeout(function() { + console.info('====> queryAbilityByWant_0900 =====>') + },1000) }) /** @@ -609,6 +646,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) done() + setTimeout(function() { + console.info('====> getBundleInfo_0200 =====>') + },1000) }) /** @@ -636,6 +676,9 @@ describe('ActsBundleManagerTest', function () { } done() + setTimeout(function() { + console.info('====> getBundleInfo_0700 =====>') + },1000) }) /** @@ -648,6 +691,9 @@ describe('ActsBundleManagerTest', function () { console.info("==========ActsBmsGetInfosSecondScene is =========="+ JSON.stringify(datainfo)); checkgetApplicationInfos(datainfo) done() + setTimeout(function() { + console.info('====> getApplicationInfos_0200 =====>') + },1000) }) /** @@ -660,6 +706,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.length).assertLarger(0) checkgetApplicationInfos(datainfo) done() + setTimeout(function() { + console.info('====> getApplicationInfos_0400 =====>') + },1000) }) /** @@ -669,13 +718,11 @@ describe('ActsBundleManagerTest', function () { */ it('getApplicationInfos_0700', 0, async function (done) { await demo.getApplicationInfos(8, 0, (error, datainfo) => { - expect(datainfo.length).assertLarger(0) for (var i = 0; i < datainfo.length; i++) { expect(datainfo[i].name.length).assertLarger(0) expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -685,8 +732,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }); - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_0700 =====>') + },1000) }) /** @@ -695,14 +746,13 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getApplicationInfos interfaces with two haps and different param. */ it('getApplicationInfos_0900', 0, async function (done) { + await demo.getApplicationInfos(0, 0, (error, datainfo) => { - expect(datainfo.length).assertLarger(0) for (var i = 0; i < datainfo.length; i++) { expect(datainfo[i].name.length).assertLarger(0) expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -712,8 +762,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }); - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_0900 =====>') + },1000) }) /** @@ -722,20 +776,31 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with two haps. */ it('getBundleInfos_0200', 0, async function (done) { - var data = await demo.getBundleInfos(0) + var data = await demo.getAllBundleInfo(0) expect(typeof data).assertEqual(OBJECT) - expect(data.length).assertLarger(0) + for (var i = 0; i < data.length; i++) { + console.info('====> getBundleInfos_02200 =====>' + JSON.stringify(data[i].name.length)) + console.info('====> getBundleInfos_03300 =====>' + JSON.stringify(data[i].entryModuleName.length)) + console.info('====> getBundleInfos_04400 =====>' + JSON.stringify(data[i].appInfo.name.length)) + console.info('====> getBundleInfos_05500 =====>' + JSON.stringify(data[i].appInfo.description.length)) + console.info('====> getBundleInfos_06600 =====>' + JSON.stringify(data[i].appInfo.icon.length)) + console.info('====> getBundleInfos_07700 =====>' + JSON.stringify(data[i].appInfo.label.length)) + console.info('====> getBundleInfos_08800 =====>' + JSON.stringify(data[i].appInfo.supportedModes)) + console.info('====> getBundleInfos_09900 =====>' + JSON.stringify(data[i].appInfo.moduleInfos.length)) expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) expect(data[i].appInfo.label.length).assertLarger(0) expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) + } done(); + setTimeout(function() { + console.info('====> getBundleInfos_0200 =====>') + },1000) }) /** @@ -744,12 +809,11 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with two haps and different param. */ it('getBundleInfos_0400', 0, async function (done) { - var data = await demo.getBundleInfos(1) + var data = await demo.getAllBundleInfo(1) expect(typeof data).assertEqual(OBJECT) - expect(data.length).assertLarger(0) + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -758,6 +822,9 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } done(); + setTimeout(function() { + console.info('====> getBundleInfos_0400 =====>') + },1000) }) /** @@ -766,12 +833,11 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with two haps. */ it('getBundleInfos_0700', 0, async function (done) { - await demo.getBundleInfos(0, (error, data) => { + await demo.getAllBundleInfo(0, (error, data) => { expect(typeof data).assertEqual(OBJECT) - expect(data.length).assertLarger(0) + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -779,8 +845,12 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } + done() }) - done() + + setTimeout(function() { + console.info('====> getBundleInfos_0700 =====>') + },1000) }) /** @@ -789,12 +859,11 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with two haps and different param. */ it('getBundleInfos_0900', 0, async function (done) { - await demo.getBundleInfos(1, (error, data) => { + await demo.getAllBundleInfo(1, (error, data) => { expect(typeof data).assertEqual(OBJECT) - expect(data.length).assertLarger(0) + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -802,8 +871,12 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } + done() }) - done() + + setTimeout(function() { + console.info('====> getBundleInfos_0900 =====>') + },1000) }) /** @@ -828,6 +901,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) done() + setTimeout(function() { + console.info('====> getApplicationInfo_0200 =====>') + },1000) }) /** @@ -851,8 +927,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.labelId).assertEqual(16777216) expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_0700 =====>') + },1000) }) /** @@ -875,6 +955,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0200 =====>') + },1000) }) /** @@ -901,6 +984,9 @@ describe('ActsBundleManagerTest', function () { } done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0700 =====>') + },1000) }) /** @@ -917,16 +1003,11 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication2", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication1.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }) - expect(datainfo.name).assertEqual(".MainAbility") + },0,0) + expect(datainfo.name).assertEqual("com.example.myapplication1.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -941,13 +1022,15 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.applicationInfo.labelId).assertEqual(16777216) expect(datainfo.applicationInfo.systemApp).assertEqual(false) expect(datainfo.applicationInfo.supportedModes).assertEqual(0) - expect(datainfo.applicationInfo.entryDir).assertEqual(DIR2) expect(datainfo.applicationInfo.enabled).assertEqual(true) for (var j = 0; j < datainfo.applicationInfo.moduleInfos; j++) { expect(datainfo.applicationInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.applicationInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR2) } done(); + setTimeout(function() { + console.info('====> queryAbilityByWant_0200 =====>') + },1000) }) /** @@ -963,18 +1046,13 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication2", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication1.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }, OnReceiveEvent) + },0,0,OnReceiveEvent) function OnReceiveEvent(err, datainfo) { - expect(datainfo.name).assertEqual(".MainAbility") + expect(datainfo.name).assertEqual("com.example.myapplication1.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -989,7 +1067,6 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.applicationInfo.labelId).assertEqual(16777216) expect(datainfo.applicationInfo.systemApp).assertEqual(false) expect(datainfo.applicationInfo.supportedModes).assertEqual(0) - expect(datainfo.applicationInfo.entryDir).assertEqual(DIR2) expect(datainfo.applicationInfo.enabled).assertEqual(true) for (var j = 0; j < datainfo.applicationInfo.moduleInfos; j++) { expect(datainfo.applicationInfo.moduleInfos[j].moduleName).assertEqual("entry") @@ -997,6 +1074,9 @@ describe('ActsBundleManagerTest', function () { } done() } + setTimeout(function() { + console.info('====> queryAbilityByWant_0700 =====>') + },1000) }) /** @@ -1040,6 +1120,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) done() + setTimeout(function() { + console.info('====> getBundleInfo_0300 =====>') + },1000) }) /** @@ -1065,8 +1148,10 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) } - done() + setTimeout(function() { + console.info('====> getBundleInfo_0800 =====>') + },1000) }) /** @@ -1080,6 +1165,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.length).assertLarger(0) checkgetApplicationInfos(datainfo) done() + setTimeout(function() { + console.info('====> getApplicationInfos_0300 =====>') + },1000) }) /** @@ -1088,25 +1176,29 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getApplicationInfos interfaces with three haps and different param. */ it('getApplicationInfos_0500', 0, async function (done) { - await demo.getApplicationInfos(0, 0, (error, datainfo) => { - expect(datainfo.length).assertLarger(0) + await demo.getAllApplicationInfo(0, 0, (error, datainfo) => { + for (var i = 0; i < datainfo.length; i++) { expect(datainfo[i].name.length).assertLarger(0) expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) expect(datainfo[i].flags).assertEqual(0) + for(var j = 0; j < datainfo[i].moduleInfos; j++) { expect(datainfo[i].moduleInfos[j].moduleName.length).assertLarger(0) expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }); - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_0500 =====>') + },1000) }) /** @@ -1115,14 +1207,13 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getApplicationInfos interfaces with three haps. */ it('getApplicationInfos_0800', 0, async function (done) { - await demo.getApplicationInfos(8, 0, (error, datainfo) => { - expect(datainfo.length).assertLarger(0) + await demo.getAllApplicationInfo(8, 0, (error, datainfo) => { + for (var i = 0; i < datainfo.length; i++) { expect(datainfo[i].name.length).assertLarger(0) expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -1132,8 +1223,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_0800 =====>') + },1000) }) /** @@ -1142,14 +1237,13 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getApplicationInfos interfaces with three haps and different param. */ it('getApplicationInfos_1000', 0, async function (done) { - await demo.getApplicationInfos(0, 0, (error, datainfo) => { - expect(datainfo.length).assertLarger(0) + await demo.getAllApplicationInfo(0, 0, (error, datainfo) => { + for (var i = 0; i < datainfo.length; i++) { expect(datainfo[i].name.length).assertLarger(0) expect(datainfo[i].description.length).assertLarger(0) expect(datainfo[i].icon.length).assertLarger(0) expect(datainfo[i].label.length).assertLarger(0) - expect(datainfo[i].entryDir.length).assertLarger(0) expect(datainfo[i].moduleSourceDirs.length).assertLarger(0) expect(datainfo[i].moduleInfos.length).assertLarger(0) expect(datainfo[i].supportedModes).assertEqual(0) @@ -1159,8 +1253,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo[i].moduleInfos[j].moduleSourceDir.length).assertLarger(0) } } + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfos_1000 =====>') + },1000) }) /** @@ -1169,11 +1267,10 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with three haps. */ it('getBundleInfos_0300', 0, async function (done) { - var data = await demo.getBundleInfos(0) - expect(data.length).assertLarger(0) + var data = await demo.getAllBundleInfo(0) + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -1182,6 +1279,9 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } done() + setTimeout(function() { + console.info('====> getBundleInfos_0300 =====>') + },1000) }) /** @@ -1190,19 +1290,22 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with three haps and different param. */ it('getBundleInfos_0500', 0, async function (done) { - var data = await demo.getBundleInfos(1) - expect(data.length).assertLarger(0) + var data = await demo.getAllBundleInfo(1) + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) expect(data[i].appInfo.label.length).assertLarger(0) expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) + } done() + setTimeout(function() { + console.info('====> getBundleInfos_0500 =====>') + },1000) }) /** @@ -1211,11 +1314,10 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with three haps. */ it('getBundleInfos_0800', 0, async function (done) { - await demo.getBundleInfos(0, (error, data) => { - expect(data.length).assertLarger(0) + await demo.getAllBundleInfo(0, (error, data) => { + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -1223,8 +1325,12 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } + done() }) - done() + + setTimeout(function() { + console.info('====> getBundleInfos_0800 =====>') + },1000) }) /** @@ -1233,11 +1339,10 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getBundleInfos interfaces with three haps and different param. */ it('getBundleInfos_1000', 0, async function (done) { - await demo.getBundleInfos(1, (error, data) => { - expect(data.length).assertLarger(0) + await demo.getAllBundleInfo(1, (error, data) => { + for (var i = 0; i < data.length; i++) { expect(data[i].name.length).assertLarger(0) - expect(data[i].entryModuleName.length).assertLarger(0) expect(data[i].appInfo.name.length).assertLarger(0) expect(data[i].appInfo.description.length).assertLarger(0) expect(data[i].appInfo.icon.length).assertLarger(0) @@ -1245,8 +1350,12 @@ describe('ActsBundleManagerTest', function () { expect(data[i].appInfo.supportedModes).assertEqual(0) expect(data[i].appInfo.moduleInfos.length).assertLarger(0) } + done() }) - done() + + setTimeout(function() { + console.info('====> getBundleInfos_1000 =====>') + },1000) }) /** @@ -1270,6 +1379,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) done() + setTimeout(function() { + console.info('====> getApplicationInfo_0300 =====>') + },1000) }) /** @@ -1292,8 +1404,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.labelId).assertEqual(16777216) expect(datainfo.systemApp).assertEqual(false) expect(datainfo.supportedModes).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_0800 =====>') + },1000) }) /** @@ -1316,6 +1432,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0300 =====>') + },1000) }) /** @@ -1339,9 +1458,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.appInfo.label).assertEqual("$string:app_name") expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(false) + done() } - done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0800 =====>') + },1000) }) /** @@ -1358,16 +1480,11 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication4", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }) - expect(datainfo.name).assertEqual(".MainAbility") + },0,0) + expect(datainfo.name).assertEqual("com.example.myapplication.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -1387,6 +1504,9 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.applicationInfo.moduleInfos[j].moduleName).assertEqual("entry") } done(); + setTimeout(function() { + console.info('====> queryAbilityByWant_0300 =====>') + },1000) }) /** @@ -1402,18 +1522,13 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication4", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }, OnReceiveEvent) + },0,0,OnReceiveEvent) function OnReceiveEvent(err, datainfo) { - expect(datainfo.name).assertEqual(".MainAbility") + expect(datainfo.name).assertEqual("com.example.myapplication.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -1434,6 +1549,9 @@ describe('ActsBundleManagerTest', function () { } done() } + setTimeout(function() { + console.info('====> queryAbilityByWant_0800 =====>') + },1000) }) /** @@ -1445,6 +1563,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getBundleInfo('error', 1); expect(datainfo.name.length).assertEqual(0) done(); + setTimeout(function() { + console.info('====> getBundleInfo_0400 =====>') + },1000) }) /** @@ -1460,6 +1581,9 @@ describe('ActsBundleManagerTest', function () { } done() + setTimeout(function() { + console.info('====> getBundleInfo_0900 =====>') + },1000) }) /** @@ -1471,6 +1595,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getApplicationInfo(ERROR, 8, 1) checkgetApplicationInfoe(datainfo) done() + setTimeout(function() { + console.info('====> getApplicationInfo_0400 =====>') + },1000) }) function checkgetApplicationInfoe(datainfo) { expect(datainfo.name.length).assertEqual(0) @@ -1484,8 +1611,12 @@ describe('ActsBundleManagerTest', function () { it('getApplicationInfo_0900', 0, async function (done) { await demo.getApplicationInfo(ERROR, 8, 1, (error, datainfo) => { expect(datainfo.name.length).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_0900 =====>') + },1000) }) /** @@ -1497,6 +1628,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getBundleArchiveInfo(PATH + ERROR, 1) expect(datainfo.name.length).assertEqual(0) done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0400 =====>') + },1000) }) /** @@ -1509,9 +1643,12 @@ describe('ActsBundleManagerTest', function () { function OnReceiveEvent(err, datainfo) { expect(datainfo.name.length).assertEqual(0) + done() } - done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0900 =====>') + },1000) }) /** @@ -1524,9 +1661,13 @@ describe('ActsBundleManagerTest', function () { function OnReceiveEvent(err, datainfo) { expect(datainfo.name.length).assertEqual(0) + done() } - done() + + setTimeout(function() { + console.info('====> getBundleInfo_1000 =====>') + },1000) }) /** @@ -1537,8 +1678,12 @@ describe('ActsBundleManagerTest', function () { it('getApplicationInfo_0500', 0, async function (done) { await demo.getApplicationInfo('', 8, 1, (error, datainfo) => { expect(datainfo.name.length).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_0500 =====>') + },1000) }) /** @@ -1550,6 +1695,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getBundleInfo(' ', 1); expect(datainfo.name.length).assertEqual(0) done(); + setTimeout(function() { + console.info('====> getBundleInfo_0500 =====>') + },1000) }) /** @@ -1560,8 +1708,12 @@ describe('ActsBundleManagerTest', function () { it('getApplicationInfo_1000', 0, async function (done) { await demo.getApplicationInfo('', 8, 1, (error, datainfo) => { expect(datainfo.name.length).assertEqual(0) + done() }) - done() + + setTimeout(function() { + console.info('====> getApplicationInfo_1000 =====>') + },1000) }) /** @@ -1573,6 +1725,9 @@ describe('ActsBundleManagerTest', function () { var datainfo = await demo.getBundleArchiveInfo(' ', 1) expect(datainfo.name.length).assertEqual(0) done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0500 =====>') + },1000) }) /** @@ -1610,9 +1765,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.abilityInfos[j].bundleName).assertEqual(NAME1) expect(datainfo.abilityInfos[j].moduleName).assertEqual("entry") } + done() } - done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_0600 =====>') + },1000) }) /** @@ -1625,9 +1783,13 @@ describe('ActsBundleManagerTest', function () { function OnReceiveEvent(err, datainfo) { expect(datainfo.name.length).assertEqual(0) + done() } - done() + + setTimeout(function() { + console.info('====> getBundleArchiveInfo_1000 =====>') + },1000) }) /** @@ -1665,9 +1827,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.abilityInfos[j].bundleName).assertEqual(NAME1) expect(datainfo.abilityInfos[j].moduleName).assertEqual("entry") } + done() } - done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_1100 =====>') + },1000) }) /** @@ -1705,9 +1870,12 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.abilityInfos[j].bundleName).assertEqual(NAME1) expect(datainfo.abilityInfos[j].moduleName).assertEqual("entry") } + done() } - done() + setTimeout(function() { + console.info('====> getBundleArchiveInfo_1200 =====>') + },1000) }) /** @@ -1724,16 +1892,11 @@ describe('ActsBundleManagerTest', function () { elementName: { deviceId: "0", bundleName: "com.example.myapplication1", - abilityName: ".MainAbility", + abilityName: "com.example.myapplication1.MainAbility", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }) - expect(datainfo.name).assertEqual(".MainAbility") + },0,0) + expect(datainfo.name).assertEqual("com.example.myapplication1.MainAbility") expect(datainfo.label).assertEqual("$string:app_name") expect(datainfo.description).assertEqual("$string:mainability_description") expect(datainfo.icon).assertEqual("$media:icon") @@ -1748,13 +1911,15 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.applicationInfo.labelId).assertEqual(16777216) expect(datainfo.applicationInfo.systemApp).assertEqual(false) expect(datainfo.applicationInfo.supportedModes).assertEqual(0) - expect(datainfo.applicationInfo.entryDir).assertEqual(DIR1) expect(datainfo.applicationInfo.enabled).assertEqual(true) for (var j = 0; j < datainfo.applicationInfo.moduleInfos; j++) { expect(datainfo.applicationInfo.moduleInfos[j].moduleName).assertEqual("entry") expect(datainfo.applicationInfo.moduleInfos[j].moduleSourceDir).assertEqual(DIR1) } done(); + setTimeout(function() { + console.info('====> queryAbilityByWant_0100 =====>') + },1000) }) /** @@ -1768,21 +1933,17 @@ describe('ActsBundleManagerTest', function () { expect(datainfo.vendor).assertEqual("ohos") expect(datainfo.versionCode).assertEqual(1000000) expect(datainfo.versionName).assertEqual('1.0.0') - expect(datainfo.entryModuleName).assertEqual("settings") expect(datainfo.uid).assertLarger(2099) expect(datainfo.appInfo.name).assertEqual(LAUNCHER) expect(datainfo.appInfo.description).assertEqual("$string:mainability_description") - expect(datainfo.appInfo.descriptionId).assertEqual(16777217) - expect(datainfo.appInfo.icon).assertEqual("$media:icon") - expect(datainfo.appInfo.iconId).assertEqual(16777218) - expect(datainfo.appInfo.label).assertEqual("$string:app_name") - expect(datainfo.appInfo.labelId).assertEqual(16777216) expect(datainfo.appInfo.systemApp).assertEqual(true) expect(datainfo.appInfo.supportedModes).assertEqual(0) - expect(datainfo.appInfo.entryDir).assertEqual(SYSTEMDIR1) expect(datainfo.appInfo.moduleInfos.length).assertLarger(0) expect(datainfo.appInfo.enabled).assertEqual(true) done() + setTimeout(function() { + console.info('====> getBundleInfo_1300 =====>') + },1000) }) /** @@ -1801,17 +1962,15 @@ describe('ActsBundleManagerTest', function () { abilityName: "", }, } - }, { - params: { - flags: 8, - userId: "0", - } - }, OnReceiveEvent) + }, 0,0,OnReceiveEvent) function OnReceiveEvent(err, datainfo) { expect(datainfo.name.length).assertEqual(0) done() } + setTimeout(function() { + console.info('====> queryAbilityByWant_1000 =====>') + },1000) }) /** @@ -1820,14 +1979,18 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getPermissionDef interfaces. */ it('getPermissionDef_0100', 0, async function(done){ - await demo.getPermissionDef(CAMERA).then((infos) => { + demo.getPermissionDef(CAMERA).then((infos) => { expect(infos.name).assertEqual("com.permission.CAMERA"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); expect(infos.label).assertEqual("CAMERA permission"); expect(infos.description).assertEqual("CAMERA permission in detail"); + done(); }); - done(); + + setTimeout(function() { + console.info('====> getPermissionDef_0100 =====>') + },1000) }) /** @@ -1836,21 +1999,25 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getPermissionDef interfaces. */ it('getPermissionDef_0200', 0, async function(done){ - await demo.getPermissionDef(CAMERA).then((infos) => { + demo.getPermissionDef(CAMERA).then((infos) => { expect(infos.name).assertEqual("com.permission.CAMERA"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); expect(infos.label).assertEqual("CAMERA permission"); expect(infos.description).assertEqual("CAMERA permission in detail"); }); - await demo.getPermissionDef(MUSIC).then((infos) => { + demo.getPermissionDef(MUSIC).then((infos) => { expect(infos.name).assertEqual("com.permission.music"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); expect(infos.label).assertEqual("music permission"); expect(infos.description).assertEqual("music permission in detail"); + done(); }); - done(); + + setTimeout(function() { + console.info('====> getPermissionDef_0200 =====>') + },1000) }) /** @@ -1859,7 +2026,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getPermissionDef interfaces. */ it('getPermissionDef_0300', 0, async function(done){ - await demo.getPermissionDef(CAMERA).then((infos) => { + demo.getPermissionDef(CAMERA).then((infos) => { expect(infos.name).assertEqual("com.permission.CAMERA"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); @@ -1867,7 +2034,7 @@ describe('ActsBundleManagerTest', function () { expect(infos.description).assertEqual("CAMERA permission in detail"); }); - await demo.getPermissionDef(MUSIC).then((infos) => { + demo.getPermissionDef(MUSIC).then((infos) => { expect(infos.name).assertEqual("com.permission.music"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); @@ -1875,15 +2042,19 @@ describe('ActsBundleManagerTest', function () { expect(infos.description).assertEqual("music permission in detail"); }); - await demo.getPermissionDef(WECHAT).then((infos) => { + demo.getPermissionDef(WECHAT).then((infos) => { expect(infos.name).assertEqual("com.permission.WeChat"); expect(infos.grantMode).assertEqual(1); expect(infos.availableScope).assertEqual(2); expect(infos.label).assertEqual("WeChat permission"); expect(infos.description).assertEqual("WeChat permission in detail"); + done(); }); - done(); + + setTimeout(function() { + console.info('====> getPermissionDef_0300 =====>') + },1000) }) @@ -1893,14 +2064,17 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test getPermissionDef interfaces. */ it('getPermissionDef_0400', 0, async function(done){ - await demo.getPermissionDef('').then((infos) => { + demo.getPermissionDef('').then((infos) => { expect(infos.name).assertEqual(""); expect(infos.grantMode).assertEqual(""); expect(infos.availableScope).assertEqual(0); expect(infos.label).assertEqual(""); expect(infos.description).assertEqual(""); + done(); }); - done(); + setTimeout(function() { + console.info('====> getPermissionDef_0400 =====>') + },1000) }) /** @@ -1916,9 +2090,12 @@ describe('ActsBundleManagerTest', function () { expect(infos.availableScope).assertEqual(0); expect(infos.label).assertEqual(""); expect(infos.description).assertEqual(""); + done(); }); - done(); + setTimeout(function() { + console.info('====> getPermissionDef_0500 =====>') + },1000) }) /** @@ -1935,8 +2112,12 @@ describe('ActsBundleManagerTest', function () { expect(data.availableScope).assertEqual(2); expect(data.label).assertEqual("CAMERA permission"); expect(data.description).assertEqual("CAMERA permission in detail"); + done(); } - done(); + + setTimeout(function() { + console.info('====> getPermissionDef_0600 =====>') + },1000) }) /** @@ -1963,9 +2144,12 @@ describe('ActsBundleManagerTest', function () { expect(data.availableScope).assertEqual(2); expect(data.label).assertEqual("music permission"); expect(data.description).assertEqual("music permission in detail"); + done(); } - done(); + setTimeout(function() { + console.info('====> getPermissionDef_0700 =====>') + },1000) }) /** @@ -2015,8 +2199,11 @@ describe('ActsBundleManagerTest', function () { isKeepData: false } }); + done(); }) - done(); + setTimeout(function() { + console.info('====> getPermissionDef_0800 =====>') + },1000) }) function OnReceiveEvent1(err, data) { expect(data.name).assertEqual("com.permission.CAMERA"); @@ -2055,9 +2242,11 @@ describe('ActsBundleManagerTest', function () { expect(data.grantMode).assertEqual(""); expect(data.label).assertEqual(""); expect(data.description).assertEqual(""); + done(); } - - done(); + setTimeout(function() { + console.info('====> getPermissionDef_0900 =====>') + },1000) }) /** @@ -2073,9 +2262,11 @@ describe('ActsBundleManagerTest', function () { expect(data.grantMode).assertEqual(""); expect(data.label).assertEqual(""); expect(data.description).assertEqual(""); - + done(); } - done(); + setTimeout(function() { + console.info('====> getPermissionDef_1000 =====>') + },1000) }) /** @@ -2084,7 +2275,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0100', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(NAME1, { param: { userId: 0, @@ -2122,22 +2313,26 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEventO); }); - var datainfo = await demo.getBundleInfo(NAME1, 1); - expect(datainfo.name).assertEqual(NAME1); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(NAME1, { param: { userId: 0, isKeepData: false } }); + done(); }); - done(); + setTimeout(function() { + console.info('====> install_0100 =====>') + },1000) }) - function OnReceiveinstallEventO(err, data) { + async function OnReceiveinstallEventO(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo = await demo.getBundleInfo(NAME1, 1); + console.info('====> install_0100 =====>'+ datainfo.name); + expect(datainfo.name).assertEqual(NAME1); + expect(datainfo.uid).assertLarger(UIDMINVALUE); } /** @@ -2146,7 +2341,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0200', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST2], { param: { userId: 0, @@ -2160,16 +2355,20 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo = await demo.getBundleInfo(NAME2, 1); + expect(datainfo.name).assertEqual(NAME2); + expect(datainfo.uid).assertLarger(UIDMINVALUE); + done(); } + setTimeout(function() { + console.info('====> install_0200 =====>') + },1000) }); - var datainfo = await demo.getBundleInfo(NAME2, 1); - expect(datainfo.name).assertEqual(NAME2); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - done(); + }) /** @@ -2178,7 +2377,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0300', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST4], { param: { userId: 0, @@ -2198,21 +2397,26 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo1 = await demo.getBundleInfo(NAME3, 1); + expect(datainfo1.name).assertEqual(NAME3); + expect(datainfo1.uid).assertLarger(UIDMINVALUE); + var datainfo2 = await demo.getBundleInfo(NAME4, 1); + expect(datainfo2.name).assertEqual(NAME4); + expect(datainfo2.uid).assertLarger(UIDMINVALUE); + var datainfo3 = await demo.getBundleInfo(NAME5, 1); + expect(datainfo3.name).assertEqual(NAME5); + expect(datainfo3.uid).assertLarger(UIDMINVALUE); + done(); } + setTimeout(function() { + console.info('====> install_0300 =====>') + },1000) }); - var datainfo1 = await demo.getBundleInfo(NAME3, 1); - expect(datainfo1.name).assertEqual(NAME3); - expect(datainfo1.uid).assertLarger(UIDMINVALUE); - var datainfo2 = await demo.getBundleInfo(NAME4, 1); - expect(datainfo2.name).assertEqual(NAME4); - expect(datainfo2.uid).assertLarger(UIDMINVALUE); - var datainfo3 = await demo.getBundleInfo(NAME5, 1); - expect(datainfo3.name).assertEqual(NAME5); - expect(datainfo3.uid).assertLarger(UIDMINVALUE); - done(); + + }) /** @@ -2221,7 +2425,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0400', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + ERROR], { param: { userId: 0, @@ -2233,8 +2437,12 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_INSTALL_FAILURE_INVALID"); } + done(); }); - done(); + + setTimeout(function() { + console.info('====> install_0400 =====>') + },1000) }) /** @@ -2243,7 +2451,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0500', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([''], { param: { userId: 0, @@ -2255,9 +2463,11 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_INSTALL_FAILURE_INVALID"); } - + done(); }); - done(); + setTimeout(function() { + console.info('====> install_0500 =====>') + },1000) }) /** @@ -2266,7 +2476,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0600', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST1], { param: { userId: 0, @@ -2282,15 +2492,18 @@ describe('ActsBundleManagerTest', function () { var datainfo1 = await demo.getBundleInfo(NAME1, 1); expect(datainfo1.name).assertEqual(NAME1); expect(datainfo1.uid).assertLarger(UIDMINVALUE); - await demo.getBundleInstaller().then((info) => { + demo.getBundleInstaller().then((info) => { info.uninstall(NAME1, { param: { userId: 0, isKeepData: true } }); + done(); }); - done(); + setTimeout(function() { + console.info('====> install_0600 =====>') + },1000) }) /** @@ -2299,7 +2512,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0700', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST7], { param: { userId: 0, @@ -2311,9 +2524,11 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_INSTALL_FAILURE_INVALID"); } - + done(); }); - done(); + setTimeout(function() { + console.info('====> install_0700 =====>') + },1000) }) /** @@ -2322,7 +2537,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0800', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST8], { param: { userId: 0, @@ -2330,17 +2545,17 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo = await demo.getBundleInfo(THIRD1, 1); + expect(datainfo.name).assertEqual(THIRD1); + expect(datainfo.uid).assertLarger(UIDMINVALUE); + expect(datainfo.versionCode).assertEqual(VERSIONCODE1); + expect(datainfo.versionName).assertEqual(VERSIONNAME1); } }); - var datainfo = await demo.getBundleInfo(THIRD1, 1); - expect(datainfo.name).assertEqual(THIRD1); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - expect(datainfo.versionCode).assertEqual(VERSIONCODE1); - expect(datainfo.versionName).assertEqual(VERSIONNAME1); - await demo.getBundleInstaller().then((info) => { + demo.getBundleInstaller().then((info) => { info.install([PATH + BMSJSTEST9], { param: { userId: 0, @@ -2348,25 +2563,29 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo = await demo.getBundleInfo(THIRD1, 1); + expect(datainfo.name).assertEqual(THIRD1); + expect(datainfo.uid).assertLarger(UIDMINVALUE); + expect(datainfo.versionCode).assertEqual(VERSIONCODE2); + expect(datainfo.versionName).assertEqual(VERSIONNAME2); } }); - var datainfo = await demo.getBundleInfo(THIRD1, 1); - expect(datainfo.name).assertEqual(THIRD1); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - expect(datainfo.versionCode).assertEqual(VERSIONCODE2); - expect(datainfo.versionName).assertEqual(VERSIONNAME2); - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(THIRD1, { param: { userId: 0, isKeepData: false } }); + done(); }); - done(); + + setTimeout(function() { + console.info('====> install_0800 =====>') + },1000) }) /** @@ -2375,7 +2594,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test install interfaces. */ it('install_0900', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST9], { param: { userId: 0, @@ -2383,17 +2602,18 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo = await demo.getBundleInfo(THIRD1, 1); + expect(datainfo.name).assertEqual(THIRD1); + expect(datainfo.uid).assertLarger(UIDMINVALUE); + expect(datainfo.versionCode).assertEqual(VERSIONCODE2); + expect(datainfo.versionName).assertEqual(VERSIONNAME2); } }); - var datainfo = await demo.getBundleInfo(THIRD1, 1); - expect(datainfo.name).assertEqual(THIRD1); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - expect(datainfo.versionCode).assertEqual(VERSIONCODE2); - expect(datainfo.versionName).assertEqual(VERSIONNAME2); - await demo.getBundleInstaller().then((info) => { + + demo.getBundleInstaller().then((info) => { info.install([PATH + BMSJSTEST8], { param: { userId: 0, @@ -2401,25 +2621,29 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_INSTALL_FAILURE_INCOMPATIBLE"); + var datainfo = await demo.getBundleInfo(THIRD1, 1); + expect(datainfo.name).assertEqual(THIRD1); + expect(datainfo.uid).assertLarger(UIDMINVALUE); + expect(datainfo.versionCode).assertEqual(VERSIONCODE2); + expect(datainfo.versionName).assertEqual(VERSIONNAME2); } }); - var datainfo = await demo.getBundleInfo(THIRD1, 1); - expect(datainfo.name).assertEqual(THIRD1); - expect(datainfo.uid).assertLarger(UIDMINVALUE); - expect(datainfo.versionCode).assertEqual(VERSIONCODE2); - expect(datainfo.versionName).assertEqual(VERSIONNAME2); - await demo.getBundleInstaller().then((data) => { + + demo.getBundleInstaller().then((data) => { data.uninstall(THIRD1, { param: { userId: 0, isKeepData: false } }); + done(); }); - done(); + setTimeout(function() { + console.info('====> install_0900 =====>') + },1000) }) /** @@ -2428,7 +2652,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0100', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST1], { param: { userId: 0, @@ -2438,7 +2662,7 @@ describe('ActsBundleManagerTest', function () { }); var datainfo1 = await demo.getBundleInfo(NAME1, 1); expect(datainfo1.name).assertEqual(NAME1); - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(NAME1, { param: { userId: 0, @@ -2454,6 +2678,9 @@ describe('ActsBundleManagerTest', function () { var datainfo2 = await demo.getBundleInfo(NAME1, 1); expect(datainfo2.name).assertEqual(''); done(); + setTimeout(function() { + console.info('====> uninstall_0100 =====>') + },1000) }) /** @@ -2462,25 +2689,28 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0200', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST1], { param: { userId: 0, isKeepData: false } + }, async (err, data)=>{ + var datainfo1 = await demo.getBundleInfo(NAME1, 1); + expect(datainfo1.name).assertEqual(NAME1); }); data.install([PATH + BMSJSTEST2], { param: { userId: 0, isKeepData: false } + }, async (err, data)=>{ + var datainfo2 = await demo.getBundleInfo(NAME2, 1); + expect(datainfo2.name).assertEqual(NAME2); }); }); - var datainfo1 = await demo.getBundleInfo(NAME1, 1); - expect(datainfo1.name).assertEqual(NAME1); - var datainfo2 = await demo.getBundleInfo(NAME2, 1); - expect(datainfo2.name).assertEqual(NAME2); - await demo.getBundleInstaller().then((data) => { + + demo.getBundleInstaller().then((data) => { data.uninstall(NAME1, { param: { userId: 0, @@ -2494,16 +2724,19 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo3 = await demo.getBundleInfo(NAME1, 1); + expect(datainfo3.name).assertEqual(''); + var datainfo4 = await demo.getBundleInfo(NAME2, 1); + expect(datainfo4.name).assertEqual(''); + done(); } }); - var datainfo3 = await demo.getBundleInfo(NAME1, 1); - expect(datainfo3.name).assertEqual(''); - var datainfo4 = await demo.getBundleInfo(NAME2, 1); - expect(datainfo4.name).assertEqual(''); - done(); + setTimeout(function() { + console.info('====> uninstall_0200 =====>') + },1000) }) /** @@ -2512,32 +2745,35 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0300', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST4], { param: { userId: 0, isKeepData: false } + }, async (err, data)=>{ + var datainfo1 = await demo.getBundleInfo(NAME3, 1); + expect(datainfo1.name).assertEqual(NAME3); }); data.install([PATH + BMSJSTEST5], { param: { userId: 0, isKeepData: false } + }, async (err, data)=>{ + var datainfo2 = await demo.getBundleInfo(NAME4, 1); + expect(datainfo2.name).assertEqual(NAME4); }); data.install([PATH + BMSJSTEST6], { param: { userId: 0, isKeepData: false } + }, async (err, data)=>{ + var datainfo3 = await demo.getBundleInfo(NAME5, 1); + expect(datainfo3.name).assertEqual(NAME5); }); }); - var datainfo1 = await demo.getBundleInfo(NAME3, 1); - expect(datainfo1.name).assertEqual(NAME3); - var datainfo2 = await demo.getBundleInfo(NAME4, 1); - expect(datainfo2.name).assertEqual(NAME4); - var datainfo3 = await demo.getBundleInfo(NAME5, 1); - expect(datainfo3.name).assertEqual(NAME5); await demo.getBundleInstaller().then((data) => { data.uninstall(NAME3, { param: { @@ -2558,18 +2794,22 @@ describe('ActsBundleManagerTest', function () { } }, OnReceiveinstallEvent); - function OnReceiveinstallEvent(err, data) { + async function OnReceiveinstallEvent(err, data) { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual(SUCCESS); + var datainfo4 = await demo.getBundleInfo(NAME3, 1); + expect(datainfo4.name).assertEqual(''); + var datainfo5 = await demo.getBundleInfo(NAME4, 1); + expect(datainfo5.name).assertEqual(''); + var datainfo6 = await demo.getBundleInfo(NAME5, 1); + expect(datainfo6.name).assertEqual(''); + done(); } }); - var datainfo4 = await demo.getBundleInfo(NAME3, 1); - expect(datainfo4.name).assertEqual(''); - var datainfo5 = await demo.getBundleInfo(NAME4, 1); - expect(datainfo5.name).assertEqual(''); - var datainfo6 = await demo.getBundleInfo(NAME5, 1); - expect(datainfo6.name).assertEqual(''); - done(); + + setTimeout(function() { + console.info('====> uninstall_0300 =====>') + },1000) }) /** @@ -2578,7 +2818,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0400', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(ERROR, { param: { userId: 0, @@ -2590,8 +2830,12 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_UNINSTALL_FAILURE"); } + done(); }); - done(); + + setTimeout(function() { + console.info('====> uninstall_0400 =====>') + },1000) }) /** @@ -2600,7 +2844,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0500', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall('', { param: { userId: 0, @@ -2612,8 +2856,11 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_UNINSTALL_FAILURE_ABORTED"); } + done(); }); - done(); + setTimeout(function() { + console.info('====> uninstall_0500 =====>') + },1000) }) /** @@ -2622,7 +2869,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0600', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.uninstall(LAUNCHER, { param: { userId: 0, @@ -2634,8 +2881,11 @@ describe('ActsBundleManagerTest', function () { expect(typeof data).assertEqual(OBJECT); expect(data.statusMessage).assertEqual("STATUS_UNINSTALL_FAILURE_CONFLICT"); } + done(); }); - done(); + setTimeout(function() { + console.info('====> uninstall_0600 =====>') + },1000) }) /** @@ -2644,7 +2894,7 @@ describe('ActsBundleManagerTest', function () { * @tc.desc Test uninstall interfaces. */ it('uninstall_0700', 0, async function (done) { - await demo.getBundleInstaller().then((data) => { + demo.getBundleInstaller().then((data) => { data.install([PATH + BMSJSTEST1], { param: { userId: 0, @@ -2671,5 +2921,8 @@ describe('ActsBundleManagerTest', function () { expect(datainfo2.name).assertEqual(''); done(); }) + setTimeout(function() { + console.info('====> uninstall_0700 =====>') + },1000) }) -- GitLab