From 1df5598ab17e5612ea70ae6fbca4962a45c4adf5 Mon Sep 17 00:00:00 2001 From: zhangyushuai Date: Fri, 5 Aug 2022 07:39:20 +0000 Subject: [PATCH] adaption xts and add two parameters and format build.gn and modified number Signed-off-by: zhangyushuai --- distributeddatamgr/BUILD.gn | 17 +- .../Pasteboardjsapitest/BUILD.gn | 28 +- .../Pasteboardjsapitest/Test.json | 19 +- .../entry/src/main/config.json | 73 +- .../entry/src/main/ets/MainAbility/app.ets | 33 + .../src/main/ets/MainAbility/pages/index.ets | 33 +- .../entry/src/main/ets/TestAbility/app.ets | 33 + .../src/main/ets/TestAbility/pages/index.ets | 50 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 + .../List.test.js => ets/test/List.test.ets} | 10 +- .../main/ets/test/PasteBoardEtsunitTest.ets | 3695 ++++++++++++++++ .../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 | 24 - .../src/main/js/default/pages/index/index.hml | 20 - .../src/main/js/default/pages/index/index.js | 45 - .../js/default/test/PasteBoardJsunit.test.js | 3703 ----------------- .../js/resources/base/element/string.json | 12 - .../main/resources/base/element/string.json | 20 + .../{js => }/resources/base/media/icon.png | Bin .../Pasteboardjsapitest/local.properties | 10 - .../Pasteboardjsapitest/package-lock.json | 3 - inputmethod/BUILD.gn | 0 .../.idea/.deveco/project.cache.json | 6 - .../InputMethodTest_ets/.idea/.gitignore | 3 - .../.idea/InputMethodTest_ets.iml | 8 - .../InputMethodTest_ets/.idea/modules.xml | 8 - inputmethod/InputMethodTest_ets/.idea/vcs.xml | 6 - inputmethod/InputMethodTest_ets/BUILD.gn | 6 +- inputmethod/InputMethodTest_ets/Test.json | 4 +- .../entry/src/main/config.json | 8 +- .../entry/src/main/ets/MainAbility/app.ets | 2 +- .../src/main/ets/MainAbility/pages/index.ets | 2 +- .../src/main/ets/MainAbility/pages/input.ets | 2 +- .../main/ets/test/InputRequestJsunit.test.ets | 2 +- .../ets/test/InputmethodEngineJsunit.test.ets | 2 +- .../main/ets/test/InputmethohJsunit.test.ets | 24 +- .../entry/src/main/ets/test/List.test.ets | 2 +- .../test/RequestDownloadTaskJsunit.test.ets | 2 +- .../src/main/ets/test/RequestJsunit.test.ets | 2 +- .../entry/src/main/ets/test/Utils.ets | 2 +- .../InputMethodTest_ets/local.properties | 10 - .../InputMethodTest_ets/package-lock.json | 3 - request/BUILD.gn | 2 +- .../BUILD.gn | 27 +- request/RequestTest_ets/Test.json | 24 + .../entry/src/main/config.json | 96 + .../entry/src/main/ets/MainAbility/app.ets | 33 + .../src/main/ets/MainAbility/pages/index.ets | 33 +- .../entry/src/main/ets/TestAbility/app.ets | 33 + .../src/main/ets/TestAbility/pages/index.ets | 50 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 + .../entry/src/main/ets/test/List.test.ets} | 8 +- .../src/main/ets/test/Publicfunction.ets} | 20 +- .../ets/test/uploadCallbackXTSJsunitTest.ets | 204 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin .../signature/openharmony_sx.p7b | Bin request/RequestTest_js/Test.json | 23 - .../RequestTest_js/entry/src/main/config.json | 56 - .../js/Test/UploadCallbackXTSJsunit.test.js | 202 - .../entry/src/main/js/default/app.js | 23 - .../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 | 46 - .../src/main/js/default/pages/index/index.hml | 5 - .../src/main/js/default/pages/index/index.js | 42 - .../main/resources/base/element/string.json | 12 - theme/BUILD.gn | 4 +- theme/screenlock_ets/BUILD.gn | 39 + .../Test.json | 7 +- .../screenlock_ets/entry/src/main/config.json | 99 + .../entry/src/main/ets/MainAbility/app.ets | 33 + .../src/main/ets/MainAbility/pages/index.ets | 38 + .../entry/src/main/ets/TestAbility/app.ets | 33 + .../src/main/ets/TestAbility/pages/index.ets | 50 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 + .../entry/src/main/ets/test/List.test.ets | 18 +- .../main/ets/test/screenLockPromiseTest.ets | 168 + .../src/main/ets/test/screenLockTest.ets} | 1566 +++---- .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin .../signature/openharmony_sx.p7b | Bin 3443 -> 3437 bytes theme/screenlock_js/BUILD.gn | 31 - theme/screenlock_js/src/main/config.json | 65 - .../js/default/common/images/Wallpaper.png | Bin 155181 -> 0 bytes .../main/js/default/common/images/bg-tv.jpg | Bin 93999 -> 0 bytes .../src/main/js/default/i18n/en-US.json | 6 - .../src/main/js/default/i18n/zh-CN.json | 6 - .../src/main/js/default/pages/index/index.hml | 19 - .../src/main/js/default/pages/index/index.js | 33 - .../src/main/js/test/List.test.js | 16 - .../test/screenlock_service_test_promise.js | 166 - .../main/resources/base/element/string.json | 12 - theme/wallpaper_ets/BUILD.gn | 39 + .../{wallpaper_js => wallpaper_ets}/Test.json | 7 +- .../wallpaper_ets/entry/src/main/config.json | 110 + .../entry/src/main/ets/MainAbility/app.ets | 33 + .../src/main/ets/MainAbility/pages/index.ets} | 44 +- .../entry/src/main/ets/TestAbility/app.ets | 33 + .../src/main/ets/TestAbility/pages/index.ets | 50 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 + .../entry/src/main/ets/test/List.test.ets} | 9 +- .../entry/src/main/ets/test/wallpaperTest.ets | 614 +++ .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin .../signature/ActsWallpaperEtsAPITest.p7b} | Bin 3443 -> 3541 bytes theme/wallpaper_js/BUILD.gn | 31 - theme/wallpaper_js/src/main/config.json | 76 - .../js/Test/Wallpaper/WallpaperJsunit.test.js | 611 --- .../js/default/common/images/Wallpaper.png | Bin 155181 -> 0 bytes .../main/js/default/common/images/bg-tv.jpg | Bin 93999 -> 0 bytes .../src/main/js/default/i18n/en-US.json | 6 - .../src/main/js/default/i18n/zh-CN.json | 6 - .../src/main/js/default/pages/index/index.css | 60 - .../src/main/js/default/pages/index/index.hml | 19 - .../src/main/js/default/pages/index/index.js | 42 - .../main/resources/base/element/string.json | 12 - time/BUILD.gn | 2 +- time/TimeTest_js/BUILD.gn | 4 +- time/TimeTest_js/Test.json | 2 +- time/TimeTest_js/signature/openharmony_sx.p7b | Bin time/TimeTest_js/src/main/config.json | 10 +- time/TimeTest_js/src/main/js/default/app.js | 2 +- .../src/main/js/default/i18n/en-US.json | 0 .../src/main/js/default/i18n/zh-CN.json | 0 .../src/main/js/default/pages/index/index.css | 0 .../src/main/js/default/pages/index/index.hml | 0 .../src/main/js/default/pages/index/index.js | 2 +- .../src/main/js/default/test/List.test.js | 2 +- .../js/default/test/SystemTimeJsunit.test.js | 2 +- .../src/main/js/default/test/Time.test.js | 2 +- .../main/resources/base/element/string.json | 0 .../src/main/resources/base/media/icon.png | Bin time/TimerTest_js/BUILD.gn | 4 +- time/TimerTest_js/Test.json | 2 +- time/TimerTest_js/src/main/config.json | 10 +- time/TimerTest_js/src/main/js/default/app.js | 2 +- .../src/main/js/default/pages/index/index.js | 2 +- .../src/main/js/default/test/List.test.js | 2 +- .../js/default/test/SystemTimerJsunit.test.js | 2 +- 141 files changed, 7044 insertions(+), 6486 deletions(-) create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/app.ets rename theme/screenlock_js/src/main/js/default/app.js => distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/pages/index.ets (57%) create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/app.ets create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/pages/index.ets create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts rename distributeddatamgr/Pasteboardjsapitest/entry/src/main/{js/default/test/List.test.js => ets/test/List.test.ets} (76%) create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/PasteBoardEtsunitTest.ets delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/en-US.json delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/zh-CN.json delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.css delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.hml delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.js delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/PasteBoardJsunit.test.js delete mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/element/string.json create mode 100644 distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/element/string.json rename distributeddatamgr/Pasteboardjsapitest/entry/src/main/{js => }/resources/base/media/icon.png (100%) delete mode 100644 distributeddatamgr/Pasteboardjsapitest/local.properties delete mode 100644 distributeddatamgr/Pasteboardjsapitest/package-lock.json mode change 100755 => 100644 inputmethod/BUILD.gn delete mode 100644 inputmethod/InputMethodTest_ets/.idea/.deveco/project.cache.json delete mode 100644 inputmethod/InputMethodTest_ets/.idea/.gitignore delete mode 100644 inputmethod/InputMethodTest_ets/.idea/InputMethodTest_ets.iml delete mode 100644 inputmethod/InputMethodTest_ets/.idea/modules.xml delete mode 100644 inputmethod/InputMethodTest_ets/.idea/vcs.xml delete mode 100644 inputmethod/InputMethodTest_ets/local.properties delete mode 100644 inputmethod/InputMethodTest_ets/package-lock.json mode change 100755 => 100644 request/BUILD.gn rename request/{RequestTest_js => RequestTest_ets}/BUILD.gn (59%) create mode 100644 request/RequestTest_ets/Test.json create mode 100644 request/RequestTest_ets/entry/src/main/config.json create mode 100644 request/RequestTest_ets/entry/src/main/ets/MainAbility/app.ets rename theme/wallpaper_js/src/main/js/default/app.js => request/RequestTest_ets/entry/src/main/ets/MainAbility/pages/index.ets (57%) create mode 100644 request/RequestTest_ets/entry/src/main/ets/TestAbility/app.ets create mode 100644 request/RequestTest_ets/entry/src/main/ets/TestAbility/pages/index.ets create mode 100644 request/RequestTest_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts rename request/{RequestTest_js/entry/src/main/js/Test/List.test.js => RequestTest_ets/entry/src/main/ets/test/List.test.ets} (75%) rename request/{RequestTest_js/entry/src/main/js/Test/Publicfunction.js => RequestTest_ets/entry/src/main/ets/test/Publicfunction.ets} (83%) create mode 100644 request/RequestTest_ets/entry/src/main/ets/test/uploadCallbackXTSJsunitTest.ets create mode 100644 request/RequestTest_ets/entry/src/main/resources/base/element/string.json rename request/{RequestTest_js => RequestTest_ets}/entry/src/main/resources/base/media/icon.png (100%) rename request/{RequestTest_js => RequestTest_ets}/signature/openharmony_sx.p7b (100%) delete mode 100644 request/RequestTest_js/Test.json delete mode 100644 request/RequestTest_js/entry/src/main/config.json delete mode 100644 request/RequestTest_js/entry/src/main/js/Test/UploadCallbackXTSJsunit.test.js delete mode 100644 request/RequestTest_js/entry/src/main/js/default/app.js delete mode 100644 request/RequestTest_js/entry/src/main/js/default/i18n/en-US.json delete mode 100644 request/RequestTest_js/entry/src/main/js/default/i18n/zh-CN.json delete mode 100644 request/RequestTest_js/entry/src/main/js/default/pages/index/index.css delete mode 100644 request/RequestTest_js/entry/src/main/js/default/pages/index/index.hml delete mode 100644 request/RequestTest_js/entry/src/main/js/default/pages/index/index.js delete mode 100644 request/RequestTest_js/entry/src/main/resources/base/element/string.json mode change 100755 => 100644 theme/BUILD.gn create mode 100644 theme/screenlock_ets/BUILD.gn rename theme/{screenlock_js => screenlock_ets}/Test.json (62%) create mode 100644 theme/screenlock_ets/entry/src/main/config.json create mode 100644 theme/screenlock_ets/entry/src/main/ets/MainAbility/app.ets create mode 100644 theme/screenlock_ets/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 theme/screenlock_ets/entry/src/main/ets/TestAbility/app.ets create mode 100644 theme/screenlock_ets/entry/src/main/ets/TestAbility/pages/index.ets create mode 100644 theme/screenlock_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts rename distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/app.js => theme/screenlock_ets/entry/src/main/ets/test/List.test.ets (69%) create mode 100644 theme/screenlock_ets/entry/src/main/ets/test/screenLockPromiseTest.ets rename theme/{screenlock_js/src/main/js/test/screenlock_service_test.js => screenlock_ets/entry/src/main/ets/test/screenLockTest.ets} (96%) create mode 100644 theme/screenlock_ets/entry/src/main/resources/base/element/string.json rename theme/{screenlock_js => screenlock_ets/entry}/src/main/resources/base/media/icon.png (100%) rename theme/{wallpaper_js => screenlock_ets}/signature/openharmony_sx.p7b (50%) delete mode 100644 theme/screenlock_js/BUILD.gn delete mode 100644 theme/screenlock_js/src/main/config.json delete mode 100644 theme/screenlock_js/src/main/js/default/common/images/Wallpaper.png delete mode 100644 theme/screenlock_js/src/main/js/default/common/images/bg-tv.jpg delete mode 100644 theme/screenlock_js/src/main/js/default/i18n/en-US.json delete mode 100644 theme/screenlock_js/src/main/js/default/i18n/zh-CN.json delete mode 100644 theme/screenlock_js/src/main/js/default/pages/index/index.hml delete mode 100644 theme/screenlock_js/src/main/js/default/pages/index/index.js delete mode 100644 theme/screenlock_js/src/main/js/test/List.test.js delete mode 100644 theme/screenlock_js/src/main/js/test/screenlock_service_test_promise.js delete mode 100644 theme/screenlock_js/src/main/resources/base/element/string.json create mode 100644 theme/wallpaper_ets/BUILD.gn rename theme/{wallpaper_js => wallpaper_ets}/Test.json (62%) create mode 100644 theme/wallpaper_ets/entry/src/main/config.json create mode 100644 theme/wallpaper_ets/entry/src/main/ets/MainAbility/app.ets rename theme/{screenlock_js/src/main/js/default/pages/index/index.css => wallpaper_ets/entry/src/main/ets/MainAbility/pages/index.ets} (57%) create mode 100644 theme/wallpaper_ets/entry/src/main/ets/TestAbility/app.ets create mode 100644 theme/wallpaper_ets/entry/src/main/ets/TestAbility/pages/index.ets create mode 100644 theme/wallpaper_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts rename theme/{wallpaper_js/src/main/js/Test/List.test.js => wallpaper_ets/entry/src/main/ets/test/List.test.ets} (78%) create mode 100644 theme/wallpaper_ets/entry/src/main/ets/test/wallpaperTest.ets create mode 100644 theme/wallpaper_ets/entry/src/main/resources/base/element/string.json rename theme/{wallpaper_js => wallpaper_ets/entry}/src/main/resources/base/media/icon.png (100%) rename theme/{screenlock_js/signature/openharmony_sx.p7b => wallpaper_ets/signature/ActsWallpaperEtsAPITest.p7b} (51%) delete mode 100644 theme/wallpaper_js/BUILD.gn delete mode 100644 theme/wallpaper_js/src/main/config.json delete mode 100644 theme/wallpaper_js/src/main/js/Test/Wallpaper/WallpaperJsunit.test.js delete mode 100644 theme/wallpaper_js/src/main/js/default/common/images/Wallpaper.png delete mode 100644 theme/wallpaper_js/src/main/js/default/common/images/bg-tv.jpg delete mode 100644 theme/wallpaper_js/src/main/js/default/i18n/en-US.json delete mode 100644 theme/wallpaper_js/src/main/js/default/i18n/zh-CN.json delete mode 100644 theme/wallpaper_js/src/main/js/default/pages/index/index.css delete mode 100644 theme/wallpaper_js/src/main/js/default/pages/index/index.hml delete mode 100644 theme/wallpaper_js/src/main/js/default/pages/index/index.js delete mode 100644 theme/wallpaper_js/src/main/resources/base/element/string.json mode change 100755 => 100644 time/BUILD.gn mode change 100755 => 100644 time/TimeTest_js/BUILD.gn mode change 100755 => 100644 time/TimeTest_js/Test.json mode change 100755 => 100644 time/TimeTest_js/signature/openharmony_sx.p7b mode change 100755 => 100644 time/TimeTest_js/src/main/config.json mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/app.js mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/i18n/en-US.json mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/i18n/zh-CN.json mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/pages/index/index.css mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/pages/index/index.hml mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/pages/index/index.js mode change 100755 => 100644 time/TimeTest_js/src/main/js/default/test/List.test.js mode change 100755 => 100644 time/TimeTest_js/src/main/resources/base/element/string.json mode change 100755 => 100644 time/TimeTest_js/src/main/resources/base/media/icon.png diff --git a/distributeddatamgr/BUILD.gn b/distributeddatamgr/BUILD.gn index 48e438d3d..ce3728a79 100644 --- a/distributeddatamgr/BUILD.gn +++ b/distributeddatamgr/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -16,16 +16,15 @@ group("distributeddatamgr") { testonly = true if (is_standard_system) { deps = [ - "dataObjectjstest/hap:dataObject_js_test", - "dataShare:dataShare", - "kvStorejstest/hap:kvStore_js_test", - "preferencesjstest/hap:preferences_js_test", - "relationalStorejstest/hap:relationalstore_js_test", + "appdatamgrjstest/hap:appdatamgr_js_test", + "distributeddataObjectjstest/hap:distributeddataObject_js_test", + "distributeddatamgrjstest/hap:distributeddatamgr_js_test", + "windowStage:windowStage", ] } else { deps = [ - "kvStorejstest/hap:distributeddatamgrfunctest_hap", - "relationalStorejstest/hap:appdatamgrfunctest_hap", + "appdatamgrtest/hap:appdatamgrfunctest_hap", + "distributeddatamgrtest/hap:distributeddatamgrfunctest_hap", "searchtest/hap:searchfunctest_hap", ] } @@ -33,5 +32,5 @@ group("distributeddatamgr") { group("pasteboard") { testonly = true - deps = [ "Pasteboardjsapitest:ActsPasteBoardJSApiTest" ] + deps = [ "Pasteboardjsapitest:ActsPasteBoardETSApiTest" ] } diff --git a/distributeddatamgr/Pasteboardjsapitest/BUILD.gn b/distributeddatamgr/Pasteboardjsapitest/BUILD.gn index fd76856cc..742a464b5 100644 --- a/distributeddatamgr/Pasteboardjsapitest/BUILD.gn +++ b/distributeddatamgr/Pasteboardjsapitest/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,21 +11,29 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/ohos.gni") import("//test/xts/tools/build/suite.gni") - -ohos_js_hap_suite("ActsPasteBoardJSApiTest") { +ohos_js_hap_suite("ActsPasteBoardETSApiTest") { hap_profile = "./entry/src/main/config.json" deps = [ - ":hjs_demo_js_assets", - ":hjs_demo_resources", + ":pasteBoard_ets_assets", + ":pasteBoard_ets_resources", + ":pasteBoard_ets_test_assets", ] + ets2abc = true + subsystem_name = "distributeddatamgr" + part_name = "pasteboard" certificate_profile = "./signature/openharmony_sx.p7b" - hap_name = "ActsPasteBoardJSApiTest" + hap_name = "ActsPasteBoardETSApiTest" +} + +ohos_js_assets("pasteBoard_ets_assets") { + source_dir = "./entry/src/main/ets/MainAbility" } -ohos_js_assets("hjs_demo_js_assets") { - source_dir = "./entry/src/main/js/default" +ohos_js_assets("pasteBoard_ets_test_assets") { + source_dir = "./entry/src/main/ets/TestAbility" } -ohos_resources("hjs_demo_resources") { - sources = [ "./entry/src/main/js/resources" ] +ohos_resources("pasteBoard_ets_resources") { + sources = [ "./entry/src/main/resources" ] hap_profile = "./entry/src/main/config.json" } diff --git a/distributeddatamgr/Pasteboardjsapitest/Test.json b/distributeddatamgr/Pasteboardjsapitest/Test.json index 95e9b24bf..543a646e8 100644 --- a/distributeddatamgr/Pasteboardjsapitest/Test.json +++ b/distributeddatamgr/Pasteboardjsapitest/Test.json @@ -1,18 +1,21 @@ { "description": "Configuration for PasteBoard js api Tests", "driver": { - "type": "JSUnitTest", - "test-timeout": "1800000", - "package": "com.open.harmony.pasteboard", - "shell-timeout": "1800000" + "type": "OHJSUnitTest", + "test-timeout": "600000", + "bundle-name": "com.acts.distributeddatamgr.pasteboardtest", + "package-name": "com.acts.distributeddatamgr.pasteboardtest", + "shell-timeout": "60000" }, "kits": [ { - "test-file-name": [ - "ActsPasteBoardJSApiTest.hap" - ], + "test-file-name": ["ActsPasteBoardETSApiTest.hap"], "type": "AppInstallKit", "cleanup-apps": true + }, + { + "type": "ShellKit", + "cleanup-apps": true } ] -} +} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/config.json b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/config.json index ad13dfb0e..54d1cf250 100644 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/config.json +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/config.json @@ -1,28 +1,28 @@ { "app": { - "bundleName": "com.open.harmony.pasteboard", - "vendor": "open", + "bundleName": "com.acts.distributeddatamgr.pasteboardtest", + "vendor": "example", "version": { - "code": 1000000, + "code": 1, "name": "1.0.0" }, "apiVersion": { - "compatible": 4, - "releaseType": "Beta1", - "target": 5 + "compatible": 7, + "target": 9, + "releaseType": "Release" } }, "deviceConfig": {}, "module": { - "package": "com.open.harmony.pasteboard", + "package": "com.acts.distributeddatamgr.pasteboardtest", "name": ".MyApplication", - "deviceType": [ - "phone" - ], + "mainAbility": "com.acts.distributeddatamgr.pasteboardtest.MainAbility", + "deviceType": ["phone"], "distro": { "deliveryWithInstall": true, "moduleName": "entry", - "moduleType": "entry" + "moduleType": "entry", + "installationFree": true }, "abilities": [ { @@ -36,21 +36,56 @@ ] } ], - "name": "com.open.harmony.pasteboard.MainAbility", + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "srcPath": "TestAbility", + "name": ".TestAbility", + "srcLanguage": "ets", "icon": "$media:icon", - "description": "$string:mainability_description", - "label": "$string:app_name", + "description": "$string:TestAbility_desc", + "formsEnabled": false, + "label": "$string:TestAbility_label", "type": "page", - "launchType": "standard", - "visible": true + "launchType": "standard" } ], "js": [ { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, "pages": [ - "pages/index/index" + "pages/index" ], - "name": "default", + "name": ".TestAbility", "window": { "designWidth": 720, "autoDesignWidth": false @@ -58,4 +93,4 @@ } ] } -} \ No newline at end of file +} diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/app.ets b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/js/default/app.js b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/pages/index.ets similarity index 57% rename from theme/screenlock_js/src/main/js/default/app.js rename to distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/pages/index.ets index 4b241cccb..9967afbd1 100644 --- a/theme/screenlock_js/src/main/js/default/app.js +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/MainAbility/pages/index.ets @@ -1,5 +1,6 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,11 +13,25 @@ * 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'); + +@Entry +@Component +struct MyComponent { + aboutToAppear() { + } + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('PASTEBOARD ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) } -}; + .width('100%') + .height('100%') + } +} + diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/app.ets b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/pages/index.ets b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/pages/index.ets new file mode 100644 index 000000000..b2497c3b2 --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestAbility/pages/index.ets @@ -0,0 +1,50 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info('TestAbility index aboutToAppear') + } + + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..07cb0b784 --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/List.test.js b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/List.test.ets similarity index 76% rename from distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/List.test.js rename to distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/List.test.ets index 7518e7b60..2645795bb 100644 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/List.test.js +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,5 +12,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -require('./PasteBoardJsunit.test.js') \ No newline at end of file + +import pasteBoardJEtsunitTest from './PasteBoardEtsunitTest'; + +export default function testsuite() { + pasteBoardJEtsunitTest() +} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/PasteBoardEtsunitTest.ets b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/PasteBoardEtsunitTest.ets new file mode 100644 index 000000000..fe992165d --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/ets/test/PasteBoardEtsunitTest.ets @@ -0,0 +1,3695 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// @ts-nocheck +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index' +import pasteboard from '@ohos.pasteboard' + +export default function pasteBoardJEtsunitTest() { + describe('PasteBoardTest', function () { + console.info('start################################start'); + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0100 + * @tc.name Adds PlainTextData + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test1', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test1: stemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test1: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test1: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test1: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test1: systemPasteboard.setPasteData promise'); + + console.info('f_test1: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test1: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + var types = pasteData.getMimeTypes(); + console.info('f_test1: getMimeTypes = ' + types); + console.info('f_test1: getMimeTypes = ' + typeof (types)); + expect("text/plain").assertEqual(types[0]); + + console.info('f_test1: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test1: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test1: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText() + console.info('f_test1: primaryText = ' + primaryText); + + console.info('Checks pasteboard MAX_RECORD_NUM' + pasteboard.MAX_RECORD_NUM); + expect(pasteboard.MAX_RECORD_NUM == 128).assertTrue(); + + console.info('Checks PasteDataProperty.localOnly') + var pasteDataProperty = pasteData1.getProperty() + console.info('Checks: localOnly = ' + pasteDataProperty.localOnly) + + + console.info('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); + console.info('f_test1: getPrimaryMimeType = ' + pasteData1.getPrimaryMimeType()); + + console.info('f_test1: SUB_pasteBoard_function_JS_API_0100 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0200 + * @tc.name Adds PlainTextData = '' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test2', 0, async function (done) { + console.info('f_test2: SUB_pasteBoard_function_JS_API_0200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test2: systemPasteboard.clear promise'); + + var textData = ''; + console.info('f_test2: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test2: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test2: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test2: systemPasteboard.setPasteData promise'); + + console.info('f_test2: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test2: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test2: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + var recordCount = pasteData1.getRecordCount(); + console.info('f_test2: recordCount=' + recordCount); + expect(recordCount == 1).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0200 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0300 + * @tc.name Adds PlainTextData = 'Hello 中国!@#$%^&*()_+{}\?.' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test3', 0, async function (done) { + console.info('f_test3: SUB_pasteBoard_function_JS_API_0300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test3: systemPasteboard.clear promise'); + + var textData = 'Hello 中国!@#$%^&*()_+{}\?.'; + console.info('f_test3: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test3: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test3: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test3: systemPasteboard.setPasteData promise'); + + console.info('f_test3: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test3: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test3: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test3: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test3: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText() + console.info('f_test3: primaryText = ' + primaryText); + + console.info('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0400 + * @tc.name Adds 300K PlainTextData + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test4', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test4: systemPasteboard.clear promise'); + + var textData = '' + for (var i = 0; i < 300; i++) { + textData = textData + "A"; + } + console.info('f_test4: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test4: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test4: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test4: systemPasteboard.setPasteData promise'); + + console.info('f_test4: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test4: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test4: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test4: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test4: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText() + console.info('f_test4: primaryText = ' + primaryText); + + console.info('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); + expect(pasteData1.getPrimaryMimeType() == pasteboard.MIMETYPE_TEXT_PLAIN).assertTrue(); + + console.info('f_test4: SUB_pasteBoard_function_JS_API_0400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0500 + * @tc.name Adds 301K PlainTextData + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test5', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test5: systemPasteboard.clear promise'); + + var textData = '' + for (var i = 0; i < 301; i++) { + textData = textData + "A"; + } + console.info('f_test5: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test5: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test5: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test5: systemPasteboard.setPasteData promise'); + + console.info('f_test5: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test5: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test5: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test5: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test5: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText() + console.info('f_test5: primaryText = ' + primaryText); + + console.info('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0500 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0600 + * @tc.name Adds htmlText + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test6', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test6: systemPasteboard.clear promise'); + + var htmlText = 'Hello World!' + console.info('f_test6: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test6: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test6: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test6: systemPasteboard.setPasteData promise'); + + console.info('f_test6: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test6: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test6: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test6: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test6: Checks the pasteboard content'); + var primaryHtml = pasteData1.getPrimaryHtml() + console.info('f_test6: getPrimaryHtml = ' + primaryHtml); + expect(primaryHtml == htmlText).assertTrue(); + + console.info('Checks there is a MIMETYPE_TEXT_HTML MIME type of data' + pasteboard.MIMETYPE_TEXT_HTML); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === false).assertTrue(); + console.info('f_test6: getPrimaryMimeType = ' + pasteData1.getPrimaryMimeType()); + + console.info('SUB_pasteBoard_function_JS_API_0600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0700 + * @tc.name Adds htmlText = '' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test7', 0, async function (done) { + console.info('f_test7: SUB_pasteBoard_function_JS_API_0700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test7: systemPasteboard.clear promise'); + + var htmlText = '' + console.info('f_test7: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test7: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test7: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test7: systemPasteboard.setPasteData promise'); + + console.info('f_test7: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test7: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test7: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0800 + * @tc.name Adds htmlText = 'Hello 中国!@#$%^&*()_+{}\?.' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test8', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test8: systemPasteboard.clear promise'); + + var htmlText = 'Hello 中国!@#$%^&*()_+{}\?.' + console.info('f_test8: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test8: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test8: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test8: systemPasteboard.setPasteData promise'); + + console.info('f_test8: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test8: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test8: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test8: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('Checks there is a MIMETYPE_TEXT_HTML MIME type of data' + pasteboard.MIMETYPE_TEXT_HTML); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0800 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_0900 + * @tc.name Adds uriText + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test9', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_0900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test9: systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test9: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test9: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test9: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test9: systemPasteboard.setPasteData promise'); + + console.info('f_test9: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test9: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test9: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test9: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test9: Checks the pasteboard content'); + var primaryUri = pasteData1.getPrimaryUri() + console.info('f_test9: getPrimaryUri = ' + primaryUri); + expect(primaryUri == uriText).assertTrue(); + + console.info('Checks there is a MIMETYPE_TEXT_URI MIME type of data' + pasteboard.MIMETYPE_TEXT_URI); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_0900 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1000 + * @tc.name Adds uriText = '' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test10', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test10: systemPasteboard.clear promise'); + + var uriText = '' + console.info('f_test10: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test10: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test10: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test10: systemPasteboard.setPasteData promise'); + + console.info('f_test10: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test10: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test10: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test10: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1000 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1100 + * @tc.name Set uriText = 'Hello //' + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test11', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test11: systemPasteboard.clear promise'); + + var uriText = 'Hello//' + console.info('f_test11: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test11: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test11: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test11: systemPasteboard.setPasteData promise'); + + console.info('f_test11: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test11: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test11: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test11: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('Checks there is a MIMETYPE_TEXT_URI MIME type of data' + pasteboard.MIMETYPE_TEXT_URI); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1100 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1200 + * @tc.name Adds want + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test12', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test12: systemPasteboard.clear promise'); + + var want = { + bundleName: "com.example.myapplication8", + abilityName: "com.example.myapplication8.MainAbility" + } + console.info('f_test12: createWantData want.bundleName = ' + want.bundleName); + console.info('f_test12: createWantData want.bundleName = ' + want.abilityName); + + + var pasteData = pasteboard.createWantData(want); + + console.info('f_test12: createWantData pasteData = ' + pasteData); + + console.info('f_test12: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test12: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test12: systemPasteboard.setPasteData promise'); + + console.info('f_test12: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test12: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test12: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test12: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test12: Checks the pasteboard content'); + var primaryWant = pasteData1.getPrimaryWant() + console.info('f_test12: createWantData want.bundleName = ' + primaryWant.bundleName); + console.info('f_test12: createWantData want.bundleName = ' + primaryWant.abilityName); + expect(want.bundleName).assertEqual(primaryWant.bundleName); + expect(want.abilityName).assertEqual(primaryWant.abilityName); + + console.info('Checks there is a MIMETYPE_TEXT_WANT MIME type of data' + pasteboard.MIMETYPE_TEXT_WANT); + expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_WANT) === true || + pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_WANT) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1200 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1300 + * @tc.name Adds one record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test13', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test13: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test13: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test13: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test13: systemPasteboard.setPasteData promise'); + + console.info('f_test13: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test13: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test13: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test13: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test13: Checks the pasteboard content'); + var recordText = pasteData1.getRecordAt(0).plainText + console.info('f_test13: recordText = ' + recordText); + + console.info('SUB_pasteBoard_function_JS_API_1300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1400 + * @tc.name Adds 2 record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test14', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test14: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test14: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test14: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData1 = 'Hello World1' + console.info('f_test14: addTextRecord = ' + textData1) + pasteData.addTextRecord(textData1) + + console.info('f_test14: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test14: systemPasteboard.setPasteData promise'); + + console.info('f_test14: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test14: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test14: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test14: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 2).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1500 + * @tc.name Adds 15 record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test15', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test15: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test15: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test15: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 15; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test15: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test15: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test15: systemPasteboard.setPasteData promise'); + + console.info('f_test15: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test15: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test15: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test15: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 15).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1500 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1600 + * @tc.name Adds 30 record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test16', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test16: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test16: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test16: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 30; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test16: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test16: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test16: systemPasteboard.setPasteData promise'); + + console.info('f_test16: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test16: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test16: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test16: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 30).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1700 + * @tc.name Adds 31 record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test17', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test17: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test17: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test17: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 31; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test17: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test17: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test17: systemPasteboard.setPasteData promise'); + + console.info('f_test17: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test17: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test17: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test17: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + var recordCount = pasteData1.getRecordCount() + console.info('f_test17: recordCount = ' + recordCount); + expect(pasteData1.getRecordCount() == 31).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1800 + * @tc.name Adds PlainText,HtmlText,UriText + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test18', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test18: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test18: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test18: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var htmlText = 'Hello World!' + console.info('f_test18: addHtmlRecord = ' + htmlText) + pasteData.addHtmlRecord(htmlText) + + var uriText = 'https://www.baidu.com/' + console.info('f_test18: addUriRecord = ' + uriText) + pasteData.addUriRecord(uriText) + + var want = { + bundleName: "com.example.myapplication8", + abilityName: "com.example.myapplication8.MainAbility" + } + console.info('f_test18: addWantRecord = ' + want) + pasteData.addWantRecord(want) + + + console.info('f_test18: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test18: systemPasteboard.setPasteData promise'); + + console.info('f_test18: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test18: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test18: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test18: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 4).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_1800 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_1900 + * @tc.name Delete one PlainTextData + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test19', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_1900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test19: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test19: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test19: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test19: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test19: systemPasteboard.setPasteData promise'); + + console.info('f_test19: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test19: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test19: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test19: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test19: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test19: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test19: systemPasteboard.setPasteData promise'); + + console.info('f_test19: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test19: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test19: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_1900 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2000 + * @tc.name Delete one htmlText + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test20', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test20: systemPasteboard.clear promise'); + + var htmlText = 'Hello World!' + console.info('f_test20: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test20: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test20: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test20: systemPasteboard.setPasteData promise'); + + console.info('f_test20: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test20: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test20: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test20: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test20: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test20: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test20: systemPasteboard.setPasteData promise'); + + console.info('f_test20: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test20: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test20: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2000 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2100 + * @tc.name Delete one uriText + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test21', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test21: systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test21: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test21: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test21: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test21: systemPasteboard.setPasteData promise'); + + console.info('f_test21: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test21: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test21: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test21: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test21: f_test21: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test21: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test21: systemPasteboard.setPasteData promise'); + + console.info('f_test21: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test21: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test21: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2100 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2200 + * @tc.name Delete one want + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test22', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test22: systemPasteboard.clear promise'); + + var want = { + bundleName: "com.example.myapplication8", + abilityName: "com.example.myapplication8.MainAbility" + } + console.info('f_test22: createWantData = ' + want) + var pasteData = pasteboard.createWantData(want); + console.info('f_test22: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test22: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test22: systemPasteboard.setPasteData promise'); + + console.info('f_test22: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test22: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test22: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test22: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test22: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test22: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test22: systemPasteboard.setPasteData promise'); + + console.info('f_test22: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test22: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test22: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2200 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2300 + * @tc.name Deletes 300K PlainTextData + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test23', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test23: systemPasteboard.clear promise'); + + var textData = '' + for (var i = 0; i < 300; i++) { + textData = textData + "A"; + } + console.info('f_test23: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test23: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test23: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test23: systemPasteboard.setPasteData promise'); + + console.info('f_test23: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test23: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test23: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test23: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test23: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test23: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test23: systemPasteboard.setPasteData promise'); + + console.info('f_test23: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test23: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test23: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2300 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2400 + * @tc.name Deletes 30 record(s) + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test24', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test24: systemPasteboard.clear promise'); + + var textData0 = 'Hello World' + console.info('f_test24: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test24: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 30; i++) { + textData = 'Hello World' + textData = textData + i + pasteData.addTextRecord(textData) + } + + systemPasteboard.setPasteData(pasteData).then(() => { + + console.info('f_test24: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test24: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + systemPasteboard.getPasteData().then((data) => { + console.info('f_test24: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 30).assertTrue(); + + console.info('f_test24: Removes the Record') + for (var i = 0; i < 30; i++) { + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + } + + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test24: systemPasteboard.setPasteData promise'); + + systemPasteboard.getPasteData().then((data) => { + console.info('f_test24: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test24: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2400 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2500 + * @tc.name Deletes replaced record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test25', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test25: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test25: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test25: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test25: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test25: systemPasteboard.setPasteData promise'); + + console.info('f_test25: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test25: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test25: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test25: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var textData1 = 'Hello World1' + console.info('f_test25: Replaces the Record = ' + textData1) + var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test25: replace = ' + replace) + + console.info('f_test25: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test25: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test25: systemPasteboard.setPasteData promise'); + + console.info('f_test25: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test25: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test25: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2500 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2600 + * @tc.name Deletes 文本、uri、html + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test26', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test26: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test26: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test26: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var htmlText = 'Hello World!' + console.info('f_test26: addHtmlRecord = ' + htmlText) + pasteData.addHtmlRecord(htmlText) + + var uriText = 'https://www.baidu.com/' + console.info('f_test26: addUriRecord = ' + uriText) + pasteData.addUriRecord(uriText) + + console.info('f_test26: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test26: systemPasteboard.setPasteData promise'); + + console.info('f_test26: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test26: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test26: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test26: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 3).assertTrue(); + + console.info('f_test26: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('f_test26: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test26: systemPasteboard.setPasteData promise'); + + console.info('f_test26: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test26: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test26: recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_2600 end'); + done(); + + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2700 + * @tc.name Replaces 文本 record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test27', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test27: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test27: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test27: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test27: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test27: systemPasteboard.setPasteData promise'); + + console.info('f_test27: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test27: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test27: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test27: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var textData1 = 'Hello World1' + console.info('f_test27: Replaces the Record = ' + textData1) + var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test27: replace = ' + replace) + + console.info('f_test27: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText(); + console.info('f_test27: primaryText = ' + primaryText); + + console.info('SUB_pasteBoard_function_JS_API_2700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2800 + * @tc.name Replaces htmlText record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test28', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test28: systemPasteboard.clear promise'); + + var htmlText = 'Hello World!' + console.info('f_test28: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test28: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test28: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test28: systemPasteboard.setPasteData promise'); + + console.info('f_test28: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test28: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test28: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test28: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var htmlText1 = 'Hello World 1' + console.info('f_test28: Replaces the htmlText = ' + htmlText1) + var pasteDataRecord = pasteboard.createHtmlTextRecord(htmlText1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test28: replace = ' + replace) + + console.info('SUB_pasteBoard_function_JS_API_2800 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_2900 + * @tc.name Replaces uri record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test29', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_2900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test29: systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test29: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test29: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test29: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test29: systemPasteboard.setPasteData promise'); + + console.info('f_test29: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test29: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test29: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test29: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var uriText1 = 'https://www.baidu.com/1' + console.info('f_test29: Replaces the uriText = ' + uriText1) + var pasteDataRecord = pasteboard.createUriRecord(uriText1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test29: replace = ' + replace) + + console.info('SUB_pasteBoard_function_JS_API_2900 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3000 + * @tc.name Replaces want record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test30', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test30: systemPasteboard.clear promise'); + + var wantText0 = { + bundleName: "com.example.myapplication3", + abilityName: "com.example.myapplication3.MainAbility" + } + console.info('f_test30: createWantData want = ' + wantText0); + var pasteData = pasteboard.createWantData(wantText0); + console.info('f_test30: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test30: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test30: systemPasteboard.setPasteData promise'); + + console.info('f_test30: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test30: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test30: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test30: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var wantText1 = { + bundleName: "com.example.myapplication30", + abilityName: "com.example.myapplication30.MainAbility" + } + console.info('f_test30: Replaces the wantText = ' + wantText1) + var pasteDataRecord = pasteboard.createWantRecord(wantText1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test30: replace = ' + replace) + + console.info('SUB_pasteBoard_function_JS_API_3000 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3100 + * @tc.name Replaces 300k文本 record + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test31', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test31: systemPasteboard.clear promise'); + + var textData = '' + for (var i = 0; i < 300; i++) { + textData = textData + "A"; + } + console.info('f_test31: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test31: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test31: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test31: systemPasteboard.setPasteData promise'); + + console.info('f_test31: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test31: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test31: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test31: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var textData1 = 'Hello World1' + console.info('f_test31: Replaces the Record = ' + textData1) + var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test31: replace = ' + replace) + + console.info('f_test31: Checks the pasteboard content'); + var primaryText = pasteData1.getPrimaryText(); + console.info('f_test31: primaryText = ' + primaryText); + + console.info('SUB_pasteBoard_function_JS_API_3100 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3200 + * @tc.name Adds one record(s), gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test32', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test32: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test32: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test32: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test32: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test32: systemPasteboard.setPasteData promise'); + + console.info('Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test32: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test32: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test32: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_3200 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3300 + * @tc.name Adds 2 record(s), gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test33', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test33: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test33: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test33: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 2; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test33: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test33: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test33: systemPasteboard.setPasteData promise'); + + console.info('f_test33: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test33: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test33: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test33: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 2).assertTrue(); + + console.info('SUB_pasteBoard_function_.' + 'JS_API_3300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3400 + * @tc.name Adds 15 record(s), gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test34', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test34: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test34: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test34: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 15; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test34: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test34: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test34: systemPasteboard.setPasteData promise'); + + console.info('f_test34: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test34: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test34: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test34: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 15).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_3400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3500 + * @tc.name Adds 30 record(s), gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test35', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test35: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test35: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test35: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 30; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test35: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test35: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test35: systemPasteboard.setPasteData promise'); + + console.info('f_test35: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test35: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test35: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test35: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 30).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_3500 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3600 + * @tc.name Adds 31 record(s), gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test36', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test36: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test36: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test36: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 31; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test36: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test36: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test36: systemPasteboard.setPasteData promise'); + + console.info('f_test36: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test36: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test36: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test36: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 31).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_3600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3700 + * @tc.name Replaces one record, gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test37', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test37: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test37: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test37: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test37: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test37: systemPasteboard.setPasteData promise'); + + console.info('f_test37: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test37: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test37: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test37: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var textData1 = 'Hello World1' + console.info('f_test37: Replaces the Record = ' + textData1) + var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) + var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); + console.info('f_test37: replace = ' + replace) + + console.info('f_test37: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test37: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + expect(pasteData2.getRecordCount() == 1).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_3700 end'); + done(); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3800 + * @tc.name Clears pasteBoard, gets record count + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test38', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test38: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test38: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test38: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test38: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test38: systemPasteboard.setPasteData promise'); + + console.info('f_test38: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test38: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test38: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test38: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test38: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test38: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test38: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + + console.info('SUB_pasteBoard_function_JS_API_3800 end'); + done(); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_3900 + * @tc.name Adds Property + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test39', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_3900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test39: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test39: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test39: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test39: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test39: systemPasteboard.setPasteData promise'); + + console.info('f_test39: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test39: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test39: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test39: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test39: Sets the Property') + var pasteDataProperty = pasteData1.getProperty() + console.info('f_test39: timestamp = ' + pasteDataProperty.timestamp) + pasteDataProperty.additions["one"] = "Hello" + + console.info('f_test39: Checks the Property') + var pasteDataProperty1 = pasteData1.getProperty() + console.info('f_test39: timestamp = ' + pasteDataProperty1.timestamp) + console.info('f_test39: additions = ' + pasteDataProperty1.additions["one"]) + + console.info('SUB_pasteBoard_function_JS_API_3900 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4000 + * @tc.name Set Property's tags + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test40', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test40: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test40: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test40: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test40: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test40: systemPasteboard.setPasteData promise'); + + console.info('f_test40: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test40: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test40: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test40: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test40: Sets the Property') + var pasteDataProperty = pasteData1.getProperty() + console.info('f_test40: timestamp = ' + pasteDataProperty.timestamp) + pasteDataProperty.additions["one"] = "Hello" + pasteDataProperty.tag = "Test" + + console.info('f_test40: Checks the Property') + var pasteDataProperty1 = pasteData1.getProperty() + console.info('f_test40: timestamp = ' + pasteDataProperty1.timestamp) + console.info('f_test40: additions = ' + pasteDataProperty1.additions["one"]) + console.info('f_test40: tag = ' + pasteDataProperty1.tag) + console.info('f_test40: getTag = ' + pasteData1.getTag()) + + console.info('SUB_pasteBoard_function_JS_API_4000 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4100 + * @tc.name Clears pasteBoard and check property + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test41', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test41: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test41: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test41: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test41: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test41: systemPasteboard.setPasteData promise'); + + console.info('f_test41: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test41: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test41: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test41: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test41: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test41: Checks the Property') + var pasteDataProperty1 = pasteData1.getProperty() + console.info('f_test41: timestamp = ' + pasteDataProperty1.timestamp) + console.info('f_test41: tag = ' + pasteDataProperty1.tag) + + console.info('SUB_pasteBoard_function_JS_API_4100 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4200 + * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等文本数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test42', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test42: systemPasteboard.clear promise'); + + console.info('f_test42: Open the infor for pasteboard content changes') + systemPasteboard.on('update', contentChanges) + + var textData = 'Hello World!'; + console.info('f_test42: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test42: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test42: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test42: systemPasteboard.setPasteData promise'); + + console.info('f_test42: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test42: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test42: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test42: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test42: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4200 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4300 + * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等html数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test43', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test43: systemPasteboard.clear promise'); + + console.info('f_test43: Open the infor for pasteboard content changes') + systemPasteboard.on('update', contentChanges) + + var htmlText = 'Hello World!' + console.info('f_test43: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test43: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test43: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test43: systemPasteboard.setPasteData promise'); + + console.info('f_test43: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test43: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test43: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test43: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test43: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4400 + * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等uri数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test44', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test44: systemPasteboard.clear promise'); + + console.info('f_test44: Open the infor for pasteboard content changes') + systemPasteboard.on('update', contentChanges) + + var uriText = 'https://www.baidu.com/' + console.info('f_test44: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test44: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test44: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test44: systemPasteboard.setPasteData promise'); + + console.info('f_test44: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test44: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test44: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test44: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test44: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4500 + * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等want数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test45', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test45: systemPasteboard.clear promise'); + + console.info('f_test45: Open the infor for pasteboard content changes') + systemPasteboard.on('update', contentChanges) + + var want = { + bundleName: "com.example.myapplication45", + abilityName: "com.example.myapplication45.MainAbility" + } + console.info('f_test45: createWantData = ' + want) + var pasteData = pasteboard.createWantData(want); + console.info('f_test45: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test45: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test45: systemPasteboard.setPasteData promise'); + + console.info('f_test45: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test45: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test45: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test45: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test45: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4500 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4600 + * @tc.name 打开内容变化通知功能:清除剪切板内容 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test46', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test46: systemPasteboard.clear promise'); + + console.info('f_test46: Open the infor for pasteboard content changes') + systemPasteboard.on('update', contentChanges) + + var textData = 'Hello World!'; + console.info('f_test46: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test46: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test46: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test46: systemPasteboard.setPasteData promise'); + + console.info('f_test46: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test46: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test46: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test46: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('SUB_pasteBoard_function_JS_API_4600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4700 + * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等文本数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test47', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test47: systemPasteboard.clear promise'); + + console.info('f_test47: Close the infor for pasteboard content changes') + systemPasteboard.off('update', contentChanges) + + var textData = 'Hello World!'; + console.info('f_test47: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test47: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test47: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test47: systemPasteboard.setPasteData promise'); + + console.info('f_test47: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test47: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test47: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test47: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test47: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4800 + * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等html数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test48', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test48: systemPasteboard.clear promise'); + + console.info('f_test48: Close the infor for pasteboard content changes') + systemPasteboard.off('update', contentChanges) + + var htmlText = 'Hello World!' + console.info('f_test48: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test48: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test48: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test48: systemPasteboard.setPasteData promise'); + + console.info('f_test48: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test48: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test48: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test48: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test48: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4800 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_4900 + * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等uri数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test49', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_4900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test49: systemPasteboard.clear promise'); + + console.info('f_test49: Close the infor for pasteboard content changes') + systemPasteboard.off('update', contentChanges) + + var uriText = 'https://www.baidu.com/' + console.info('f_test49: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test49: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test49: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test49: systemPasteboard.setPasteData promise'); + + console.info('f_test49: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test49: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test49: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test49: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test49: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_4900 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5000 + * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等want数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test50', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test50: systemPasteboard.clear promise'); + + console.info('f_test50: Open the infor for pasteboard content changes') + systemPasteboard.off('update', contentChanges) + + var want = { + bundleName: "com.example.myapplication45", + abilityName: "com.example.myapplication45.MainAbility" + } + console.info('f_test50: createWantData = ' + want) + var pasteData = pasteboard.createWantData(want); + console.info('f_test50: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test50: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test50: systemPasteboard.setPasteData promise'); + + console.info('f_test50: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test50: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test50: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test50: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test50: Removes the Record') + expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_5000 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5100 + * @tc.name 关闭内容变化通知功能:清除剪切板内容 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test51', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test51: systemPasteboard.clear promise'); + + console.info('f_test51: Close the infor for pasteboard content changes') + systemPasteboard.off('update', contentChanges) + + var textData = 'Hello World!'; + console.info('f_test51: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test51: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test51: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test51: systemPasteboard.setPasteData promise'); + + console.info('f_test51: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test51: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test51: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test51: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test51: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('SUB_pasteBoard_function_JS_API_5100 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5200 + * @tc.name 清除剪切板内的文本数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test52', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test52: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test52: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test52: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test52: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test52: systemPasteboard.setPasteData promise'); + + console.info('f_test52: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test52: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test52: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test52: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test52: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test52: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test52: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test52 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5200 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5300 + * @tc.name 清除剪切板内的uri数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test53', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test53: systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test53: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test53: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test53: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test53: systemPasteboard.setPasteData promise'); + + console.info('f_test53: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test53: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test53: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test53: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test53: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test53: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5400 + * @tc.name 清除剪切板内的html数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test54', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test54: systemPasteboard.clear promise'); + + var htmlText = 'Hello World!' + console.info('f_test54: createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test54: createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test54: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test54: systemPasteboard.setPasteData promise'); + + console.info('f_test54: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test54: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test54: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test54: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test54: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test54: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test54: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5500 + * @tc.name 清除剪切板内的want数据项 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test55', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test55: systemPasteboard.clear promise'); + + var myWant = { + bundleName: "com.example.myapplication55", + abilityName: "com.example.myapplication55.MainAbility" + } + console.info('f_test01: createWantData want = ' + myWant); + var pasteData = pasteboard.createWantData(myWant); + console.info('f_test01: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test55: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test55: systemPasteboard.setPasteData promise'); + + console.info('f_test55: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test55: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test55: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test55: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test55: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test55: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test55: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5500 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5600 + * @tc.name 向剪切板内增加30条数据项,然后清除 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test56', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test56: systemPasteboard.clear promise'); + + var textData0 = 'Hello World!'; + console.info('f_test56: createPlainTextData textData = ' + textData0); + var pasteData = pasteboard.createPlainTextData(textData0); + console.info('f_test56: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + var textData = '' + for (var i = 1; i < 30; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test56: addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + console.info('f_test56: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test56: systemPasteboard.setPasteData promise'); + + console.info('f_test56: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test56: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test56: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test56: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 30).assertTrue(); + + console.info('f_test56: Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test56: Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test56: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5700 + * @tc.name 向剪贴板数据各增加5条文本、uri、html数据,然后清除 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test57', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + + var textData0 = 'Hello World0' + console.info('f_test57: createPlainTextData = ' + textData0) + var pasteData = pasteboard.createPlainTextData(textData0) + + var textData = '' + for (var i = 1; i < 5; i++) { + textData = 'Hello World' + textData = textData + i + pasteData.addTextRecord(textData) + } + + var htmlText = '' + for (var i = 0; i < 5; i++) { + htmlText = 'Hello World!' + htmlText = htmlText + i + pasteData.addHtmlRecord(htmlText) + } + + var uriText = '' + for (var i = 0; i < 5; i++) { + uriText = 'https://www.baidu.com/' + uriText = uriText + i + pasteData.addUriRecord(uriText) + } + + systemPasteboard.setPasteData(pasteData).then(() => { + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test57: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + systemPasteboard.getPasteData().then((data) => { + console.info('f_test57: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 15).assertTrue(); + systemPasteboard.clear() + systemPasteboard.getPasteData().then((data) => { + console.info('f_test57: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData2 = data; + var recordCount = pasteData2.getRecordCount(); + console.info('f_test38 recordCount = ' + recordCount); + }) + + console.info('SUB_pasteBoard_function_JS_API_5700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5800 + * @tc.name 向剪贴板数据增加文本数据项,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test58', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test58: systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test58: createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test58: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test58: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test58: systemPasteboard.setPasteData promise'); + + console.info('f_test58: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test58: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_5800 end') + done(); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_5900 + * @tc.name 向剪贴板数据增加uri数据项,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test59', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_5900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test59: createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test59: createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test59: Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test59: systemPasteboard.setPasteData promise'); + + console.info('f_test59: Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test59: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_5900 end') + done(); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6000 + * @tc.name 向剪贴板数据增加html数据项,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test60', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test60 systemPasteboard.clear promise'); + + var htmlText = 'Hello World!' + console.info('f_test60createHtmlData htmlText = ' + htmlText); + var pasteData = pasteboard.createHtmlData(htmlText); + console.info('f_test60createHtmlData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test60Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test60systemPasteboard.setPasteData promise'); + + console.info('f_test60Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test60systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_6000 end') + done(); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6100 + * @tc.name 向剪贴板数据增加want数据项,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test61', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6100 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test61 systemPasteboard.clear promise'); + + var myWant = { + bundleName: "com.example.myapplication8", + abilityName: "com.example.myapplication8.MainAbility" + } + console.info('f_test01: createWantData want = ' + myWant); + var pasteData = pasteboard.createWantData(myWant); + console.info('f_test01: createWantData pasteData = ' + JSON.stringify(pasteData)); + + console.info('Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('systemPasteboard.setPasteData promise'); + + console.info('Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_6100 end') + done(); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6200 + * @tc.name 向剪贴板数据各增加5条文本、uri、html,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test62', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6200 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test62 systemPasteboard.clear promise'); + + var textData0 = 'Hello World0' + console.info('f_test62 createPlainTextData = ' + textData0) + var pasteData = pasteboard.createPlainTextData(textData0) + + var textData = '' + for (var i = 1; i < 5; i++) { + textData = 'Hello World' + textData = textData + i + console.info('f_test62 addTextRecord = ' + textData) + pasteData.addTextRecord(textData) + } + + var htmlText = '' + for (var i = 0; i < 5; i++) { + htmlText = 'Hello World!' + htmlText = htmlText + i + console.info('f_test62 addHtmlRecord = ' + htmlText) + pasteData.addHtmlRecord(htmlText) + } + + var uriText = '' + for (var i = 0; i < 5; i++) { + uriText = 'https://www.baidu.com/' + uriText = uriText + i + console.info('f_test62 addUriRecord = ' + uriText) + pasteData.addUriRecord(uriText) + } + + console.info('f_test62 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test62 systemPasteboard.setPasteData promise'); + + console.info('f_test62 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test62 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_6200 end') + done(); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6300 + * @tc.name 更新剪贴板数据,查询剪贴板存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test63', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6300 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test63 systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test63 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test63 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test63 systemPasteboard.setPasteData promise'); + + console.info('f_test63 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test63 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test63 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test63 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + var textData1 = 'Hello World1' + console.info('f_test63 Replaces the Record = ' + textData1) + var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) + pasteData1.replaceRecordAt(0, pasteDataRecord) + + console.info('f_test63 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test63 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + }) + + console.info('SUB_pasteBoard_function_JS_API_6300 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6400 + * @tc.name 删除所有的剪贴板数据,查询剪贴板不存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test64', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6400 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test64 systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test64 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test64 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test64 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test64 systemPasteboard.setPasteData promise'); + + console.info('f_test64 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test64 systemPasteboard.hasPasteData promise data = ' + data); + + console.info('f_test64 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test64 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + var recordCount = pasteData1.getRecordCount(); + console.info('f_test64 recordCount = ' + recordCount); + + console.info('f_test64 Removes the Record') + pasteData1.removeRecordAt(0) + + console.info('f_test64 Checks the number of records'); + var recordCount1 = pasteData1.getRecordCount(); + console.info('f_test64 recordCount = ' + recordCount1); + + console.info('SUB_pasteBoard_function_JS_API_6400 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6500 + * @tc.name 清除剪贴板数据,查询剪贴板不存在剪贴板数据 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test65', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6500 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test65 systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test65 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test65 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test65 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test65 systemPasteboard.setPasteData promise'); + + console.info('f_test65 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test65 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test65 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test65 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test65 Clears the pasteBoard') + systemPasteboard.clear() + + console.info('f_test65 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData1).then(() => { + console.info('f_test65 systemPasteboard.setPasteData promise'); + + console.info('f_test65 Checks there is no content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test65 systemPasteboard.hasPasteData promise data = ' + data); + + console.info('SUB_pasteBoard_function_JS_API_6400 end'); + done(); + }); + }); + }); + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6600 + * @tc.name 将文本数据强制转换为文本 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test66', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6600 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test66 systemPasteboard.clear promise'); + + var textData = 'Hello World!'; + console.info('f_test66 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test66 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test66 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test66 systemPasteboard.setPasteData promise'); + + console.info('f_test66 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test66 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test66 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test66 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test66 Converts the PlainTextData to text') + var pasteDataRecord = pasteData1.getRecordAt(0) + console.info('checks pasteDataRecord.mimeType = ' + pasteDataRecord.mimeType) + + console.info('f_test66 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); + + console.info('f_test66 SUB_pasteBoard_function_JS_API_6600 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6700 + * @tc.name 将一条含有特殊字符、中英混杂的文本数据强制转换为文本 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test67', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6700 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test67 systemPasteboard.clear promise'); + + var textData = 'Hello 中国!@#$%^&*()_+{}\?.'; + console.info('f_test67 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test67 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test67 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test67 systemPasteboard.setPasteData promise'); + + console.info('f_test67 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test67 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test67 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test67 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test67 Converts the PlainTextData to text') + var pasteDataRecord = pasteData1.getRecordAt(0) + console.info('f_test67 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); + + console.info('SUB_pasteBoard_function_JS_API_6700 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6800 + * @tc.name 将一条超长文本数据 (大小为301K)强制转换为文本 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test68', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6800 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test68 systemPasteboard.clear promise'); + + var textData = '' + for (var i = 0; i < 301; i++) { + textData = textData + "A"; + } + console.info('f_test68 createPlainTextData textData = ' + textData); + var pasteData = pasteboard.createPlainTextData(textData); + console.info('f_test68 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test68 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test68 systemPasteboard.setPasteData promise'); + + console.info('f_test68 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test68 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test68 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test68 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test68 Converts the PlainTextData to text') + var pasteDataRecord = pasteData1.getRecordAt(0) + console.info('f_test68 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); + + console.info('SUB_pasteBoard_function_JS_API_6800 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_6900 + * @tc.name 将uri数据强制转换为文本 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test69', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_6900 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + console.info('f_test69 systemPasteboard.clear promise'); + + var uriText = 'https://www.baidu.com/' + console.info('f_test69 createUriData uriText = ' + uriText); + var pasteData = pasteboard.createUriData(uriText); + console.info('f_test69 createUriData pasteData = ' + JSON.stringify(pasteData)); + + console.info('f_test69 Writes PasteData to the pasteboard'); + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('f_test69 systemPasteboard.setPasteData promise'); + + console.info('f_test69 Checks there is content in the pasteboard') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test69 systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + console.info('f_test69 Checks the number of records'); + systemPasteboard.getPasteData().then((data) => { + console.info('f_test69 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + expect(pasteData1.getRecordCount() == 1).assertTrue(); + + console.info('f_test69 Converts the PlainTextData to text') + var pasteDataRecord = pasteData1.getRecordAt(0) + + pasteDataRecord.convertToText().then((data) => { + console.info('convertToText success data : ' + JSON.stringify(data)); + }).catch((error) => { + console.error('convertToText failed because ' + JSON.stringify(error)); + }); + ; + + console.info('SUB_pasteBoard_function_JS_API_6900 end'); + done(); + }) + }); + }); + }); + }) + + /** + * @tc.number SUB_pasteBoard_function_JS_API_7000 + * @tc.name 复制文本、uri格式 + * @tc.desc Test pasteBoard API functionality. + * @tc.size : MEDIUM + * @tc.type : Function + * @tc.level : Level 0 + */ + it('pasteboard_function_test70', 0, async function (done) { + console.info('SUB_pasteBoard_function_JS_API_7000 start') + + var systemPasteboard = pasteboard.getSystemPasteboard(); + systemPasteboard.clear().then(() => { + + var textData0 = 'Hello World0' + console.info('f_test70: createPlainTextData = ' + textData0) + + var pasteData = pasteboard.createPlainTextData(textData0) + console.info('f_test70: createPlainTextData = ' + JSON.stringify(pasteData)) + + var uriText = pasteboard.createUriRecord("https://www.baidu.com/"); + pasteData.addRecord(uriText); + console.info('f_test70: addRecord(uriText) = ' + pasteData) + console.info('f_test70: addRecord(uriText) = ' + JSON.stringify(pasteData)) + + + systemPasteboard.setPasteData(pasteData).then(() => { + console.info('---------------------------->1') + systemPasteboard.hasPasteData().then((data) => { + console.info('f_test70: systemPasteboard.hasPasteData promise data = ' + data); + expect(data === true || data === false).assertTrue(); + + systemPasteboard.getPasteData().then((data) => { + console.info('f_test70: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); + var pasteData1 = data; + var recordCount = pasteData1.getRecordCount(); + console.info('f_test70: recordCount=' + recordCount); + expect(pasteData1.getRecordCount() == 2).assertTrue(); + + console.info('SUB_pasteBoard_function_JS_API_7000 end'); + done(); + }) + }); + }); + }); + }) + + + /** + * The callback function is used for pasteboard content changes + */ + function contentChanges() { + console.info('#EVENT: The content is changed in the pasteboard') + } + }); +} + diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/en-US.json b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/en-US.json deleted file mode 100644 index e63c70d97..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/en-US.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - } -} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/zh-CN.json b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/zh-CN.json deleted file mode 100644 index de6ee5748..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - } -} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.css b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.css deleted file mode 100644 index 01ad739b2..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.css +++ /dev/null @@ -1,24 +0,0 @@ -/* -* Copyright (c) 2022 Huawei Device Co., Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} - -.title { - font-size: 100px; -} diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.hml b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.hml deleted file mode 100644 index f99407c7e..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.hml +++ /dev/null @@ -1,20 +0,0 @@ - - -
- - {{ title }} - -
diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.js b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.js deleted file mode 100644 index 7efe93617..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/pages/index/index.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 {Core, ExpectExtend} from 'deccjsunit' - -const injectRef = Object.getPrototypeOf(global) || global -injectRef.regeneratorRuntime = require('@babel/runtime/regenerator') - -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' - }) - core.addService('expect', expectExtend) - core.init() - const configService = core.getDefaultService('config') - configService.setConfig(this) - - require('../../test/List.test') - core.execute() - }, - onReady() { - }, - onBackPress(){ - } -} diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/PasteBoardJsunit.test.js b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/PasteBoardJsunit.test.js deleted file mode 100644 index 8386280a1..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/test/PasteBoardJsunit.test.js +++ /dev/null @@ -1,3703 +0,0 @@ -/* - * 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. - */ - -// @ts-nocheck -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import pasteboard from '@ohos.pasteboard' - -describe('PasteBoardTest', function() { - console.log('start################################start'); - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0100 - * @tc.name Adds PlainTextData - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test1',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test1: stemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test1: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test1: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test1: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test1: systemPasteboard.setPasteData promise'); - - console.log('f_test1: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test1: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - var types = pasteData.getMimeTypes(); - console.info('f_test1: getMimeTypes = ' + types); - console.info('f_test1: getMimeTypes = ' + typeof (types)); - expect("text/plain").assertEqual(types[0]); - - console.log('f_test1: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test1: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test1: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText() - console.log('f_test1: primaryText = ' + primaryText); - - console.info('Checks pasteboard MAX_RECORD_NUM' + pasteboard.MAX_RECORD_NUM); - expect(pasteboard.MAX_RECORD_NUM == 128).assertTrue(); - - console.info('Checks PasteDataProperty.localOnly') - var pasteDataProperty = pasteData1.getProperty() - console.info('Checks: localOnly = ' + pasteDataProperty.localOnly) - - - - console.log('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); - console.log('f_test1: getPrimaryMimeType = ' + pasteData1.getPrimaryMimeType()); - - console.log('f_test1: SUB_pasteBoard_function_JS_API_0100 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0200 - * @tc.name Adds PlainTextData = '' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test2',0, async function (done) { - console.log('f_test2: SUB_pasteBoard_function_JS_API_0200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test2: systemPasteboard.clear promise'); - - var textData = ''; - console.log('f_test2: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test2: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test2: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test2: systemPasteboard.setPasteData promise'); - - console.log('f_test2: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test2: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test2: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - var recordCount = pasteData1.getRecordCount(); - console.log('f_test2: recordCount=' + recordCount); - expect(recordCount == 1).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0200 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0300 - * @tc.name Adds PlainTextData = 'Hello 中国!@#$%^&*()_+{}\?.' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test3',0, async function (done) { - console.log('f_test3: SUB_pasteBoard_function_JS_API_0300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test3: systemPasteboard.clear promise'); - - var textData = 'Hello 中国!@#$%^&*()_+{}\?.'; - console.log('f_test3: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test3: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test3: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test3: systemPasteboard.setPasteData promise'); - - console.log('f_test3: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test3: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test3: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test3: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test3: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText() - console.log('f_test3: primaryText = ' + primaryText); - - console.log('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0400 - * @tc.name Adds 300K PlainTextData - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test4',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test4: systemPasteboard.clear promise'); - - var textData = '' - for (var i = 0; i < 300; i++){ - textData=textData + "A"; - } - console.log('f_test4: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test4: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test4: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test4: systemPasteboard.setPasteData promise'); - - console.log('f_test4: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test4: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test4: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test4: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test4: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText() - console.log('f_test4: primaryText = ' + primaryText); - - console.log('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); - expect(pasteData1.getPrimaryMimeType() == pasteboard.MIMETYPE_TEXT_PLAIN).assertTrue(); - - console.log('f_test4: SUB_pasteBoard_function_JS_API_0400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0500 - * @tc.name Adds 301K PlainTextData - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test5',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test5: systemPasteboard.clear promise'); - - var textData = '' - for (var i = 0; i < 301; i++){ - textData=textData + "A"; - } - console.log('f_test5: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test5: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test5: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test5: systemPasteboard.setPasteData promise'); - - console.log('f_test5: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test5: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test5: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test5: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test5: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText() - console.log('f_test5: primaryText = ' + primaryText); - - console.log('Checks there is a MIMETYPE_TEXT_PLAIN MIME type of data' + pasteboard.MIMETYPE_TEXT_PLAIN); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_PLAIN) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0500 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0600 - * @tc.name Adds htmlText - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test6',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test6: systemPasteboard.clear promise'); - - var htmlText = 'Hello World!' - console.log('f_test6: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test6: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test6: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test6: systemPasteboard.setPasteData promise'); - - console.log('f_test6: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test6: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test6: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test6: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.info('f_test6: Checks the pasteboard content'); - var primaryHtml = pasteData1.getPrimaryHtml() - console.info('f_test6: getPrimaryHtml = ' + primaryHtml); - expect(primaryHtml == htmlText).assertTrue(); - - console.log('Checks there is a MIMETYPE_TEXT_HTML MIME type of data' + pasteboard.MIMETYPE_TEXT_HTML); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === false).assertTrue(); - console.log('f_test6: getPrimaryMimeType = ' + pasteData1.getPrimaryMimeType()); - - console.log('SUB_pasteBoard_function_JS_API_0600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0700 - * @tc.name Adds htmlText = '' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test7',0, async function (done) { - console.log('f_test7: SUB_pasteBoard_function_JS_API_0700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test7: systemPasteboard.clear promise'); - - var htmlText = '' - console.log('f_test7: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test7: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test7: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test7: systemPasteboard.setPasteData promise'); - - console.log('f_test7: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test7: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test7: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0800 - * @tc.name Adds htmlText = 'Hello 中国!@#$%^&*()_+{}\?.' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test8',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test8: systemPasteboard.clear promise'); - - var htmlText = 'Hello 中国!@#$%^&*()_+{}\?.' - console.log('f_test8: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test8: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test8: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test8: systemPasteboard.setPasteData promise'); - - console.log('f_test8: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test8: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test8: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test8: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('Checks there is a MIMETYPE_TEXT_HTML MIME type of data' + pasteboard.MIMETYPE_TEXT_HTML); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_HTML) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0800 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_0900 - * @tc.name Adds uriText - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test9',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_0900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test9: systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test9: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test9: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test9: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test9: systemPasteboard.setPasteData promise'); - - console.log('f_test9: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test9: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test9: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test9: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.info('f_test9: Checks the pasteboard content'); - var primaryUri = pasteData1.getPrimaryUri() - console.info('f_test9: getPrimaryUri = ' + primaryUri); - expect(primaryUri == uriText).assertTrue(); - - console.log('Checks there is a MIMETYPE_TEXT_URI MIME type of data' + pasteboard.MIMETYPE_TEXT_URI); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_0900 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1000 - * @tc.name Adds uriText = '' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test10',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test10: systemPasteboard.clear promise'); - - var uriText = '' - console.log('f_test10: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test10: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test10: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test10: systemPasteboard.setPasteData promise'); - - console.log('f_test10: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test10: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test10: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test10: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1000 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1100 - * @tc.name Set uriText = 'Hello //' - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test11',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test11: systemPasteboard.clear promise'); - - var uriText = 'Hello//' - console.log('f_test11: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test11: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test11: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test11: systemPasteboard.setPasteData promise'); - - console.log('f_test11: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test11: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test11: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test11: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('Checks there is a MIMETYPE_TEXT_URI MIME type of data' + pasteboard.MIMETYPE_TEXT_URI); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1100 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1200 - * @tc.name Adds want - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test12',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test12: systemPasteboard.clear promise'); - - var want = { - bundleName: "com.example.myapplication8", - abilityName: "com.example.myapplication8.MainAbility" - } - console.info('f_test12: createWantData want.bundleName = ' + want.bundleName); - console.info('f_test12: createWantData want.bundleName = ' + want.abilityName); - - - var pasteData = pasteboard.createWantData(want); - - console.info('f_test12: createWantData pasteData = ' + pasteData); - - console.info('f_test12: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test12: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test12: systemPasteboard.setPasteData promise'); - - console.log('f_test12: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test12: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test12: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test12: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.info('f_test12: Checks the pasteboard content'); - var primaryWant = pasteData1.getPrimaryWant() - console.info('f_test12: createWantData want.bundleName = ' + primaryWant.bundleName); - console.info('f_test12: createWantData want.bundleName = ' + primaryWant.abilityName); - expect(want.bundleName).assertEqual(primaryWant.bundleName); - expect(want.abilityName).assertEqual(primaryWant.abilityName); - - console.log('Checks there is a MIMETYPE_TEXT_WANT MIME type of data' + pasteboard.MIMETYPE_TEXT_WANT); - expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_WANT) === true || - pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_WANT) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1200 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1300 - * @tc.name Adds one record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test13',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test13: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test13: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test13: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test13: systemPasteboard.setPasteData promise'); - - console.log('f_test13: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test13: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test13: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test13: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test13: Checks the pasteboard content'); - var recordText = pasteData1.getRecordAt(0).plainText - console.log('f_test13: recordText = ' + recordText); - - console.log('SUB_pasteBoard_function_JS_API_1300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1400 - * @tc.name Adds 2 record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test14',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test14: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test14: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test14: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData1 = 'Hello World1' - console.log('f_test14: addTextRecord = ' + textData1) - pasteData.addTextRecord(textData1) - - console.log('f_test14: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test14: systemPasteboard.setPasteData promise'); - - console.log('f_test14: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test14: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test14: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test14: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 2).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1500 - * @tc.name Adds 15 record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test15',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test15: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test15: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test15: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 15; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test15: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test15: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test15: systemPasteboard.setPasteData promise'); - - console.log('f_test15: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test15: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test15: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test15: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 15).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1500 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1600 - * @tc.name Adds 30 record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test16',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test16: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test16: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test16: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 30; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test16: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test16: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test16: systemPasteboard.setPasteData promise'); - - console.log('f_test16: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test16: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test16: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test16: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 30).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1700 - * @tc.name Adds 31 record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test17',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test17: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test17: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test17: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 31; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test17: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test17: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test17: systemPasteboard.setPasteData promise'); - - console.log('f_test17: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test17: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test17: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test17: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - var recordCount = pasteData1.getRecordCount() - console.log('f_test17: recordCount = ' + recordCount); - expect(pasteData1.getRecordCount() == 31).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1800 - * @tc.name Adds PlainText,HtmlText,UriText - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test18',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test18: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test18: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test18: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var htmlText = 'Hello World!' - console.log('f_test18: addHtmlRecord = ' + htmlText) - pasteData.addHtmlRecord(htmlText) - - var uriText = 'https://www.baidu.com/' - console.log('f_test18: addUriRecord = ' + uriText) - pasteData.addUriRecord(uriText) - - var want = { - bundleName: "com.example.myapplication8", - abilityName: "com.example.myapplication8.MainAbility" - } - console.info('f_test18: addWantRecord = ' + want) - pasteData.addWantRecord(want) - - - console.log('f_test18: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test18: systemPasteboard.setPasteData promise'); - - console.log('f_test18: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test18: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test18: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test18: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 4).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_1800 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_1900 - * @tc.name Delete one PlainTextData - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test19',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_1900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test19: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test19: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test19: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test19: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test19: systemPasteboard.setPasteData promise'); - - console.log('f_test19: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test19: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test19: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test19: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test19: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test19: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test19: systemPasteboard.setPasteData promise'); - - console.log('f_test19: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test19: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test19: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_1900 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2000 - * @tc.name Delete one htmlText - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test20',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test20: systemPasteboard.clear promise'); - - var htmlText = 'Hello World!' - console.log('f_test20: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test20: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test20: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test20: systemPasteboard.setPasteData promise'); - - console.log('f_test20: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test20: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test20: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test20: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test20: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test20: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test20: systemPasteboard.setPasteData promise'); - - console.log('f_test20: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test20: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test20: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2000 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2100 - * @tc.name Delete one uriText - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test21',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test21: systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test21: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test21: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test21: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test21: systemPasteboard.setPasteData promise'); - - console.log('f_test21: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test21: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test21: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test21: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test21: f_test21: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test21: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test21: systemPasteboard.setPasteData promise'); - - console.log('f_test21: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test21: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test21: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2100 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2200 - * @tc.name Delete one want - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test22',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test22: systemPasteboard.clear promise'); - - var want = { - bundleName: "com.example.myapplication8", - abilityName: "com.example.myapplication8.MainAbility" - } - console.log('f_test22: createWantData = ' + want) - var pasteData = pasteboard.createWantData(want); - console.log('f_test22: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test22: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test22: systemPasteboard.setPasteData promise'); - - console.log('f_test22: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test22: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test22: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test22: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test22: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test22: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test22: systemPasteboard.setPasteData promise'); - - console.log('f_test22: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test22: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test22: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2200 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2300 - * @tc.name Deletes 300K PlainTextData - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test23',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test23: systemPasteboard.clear promise'); - - var textData = '' - for (var i = 0; i < 300; i++){ - textData=textData + "A"; - } - console.log('f_test23: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test23: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test23: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test23: systemPasteboard.setPasteData promise'); - - console.log('f_test23: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test23: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test23: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test23: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test23: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test23: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test23: systemPasteboard.setPasteData promise'); - - console.log('f_test23: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test23: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test23: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2300 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2400 - * @tc.name Deletes 30 record(s) - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test24',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test24: systemPasteboard.clear promise'); - - var textData0 = 'Hello World' - console.log('f_test24: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test24: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 30; i++) - { - textData = 'Hello World' - textData = textData + i - pasteData.addTextRecord(textData) - } - - systemPasteboard.setPasteData(pasteData).then(() => { - - console.log('f_test24: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test24: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - systemPasteboard.getPasteData().then((data) => { - console.log('f_test24: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 30).assertTrue(); - - console.log('f_test24: Removes the Record') - for(var i = 0; i < 30; i++) - { - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - } - - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test24: systemPasteboard.setPasteData promise'); - - systemPasteboard.getPasteData().then((data) => { - console.log('f_test24: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test24: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2400 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2500 - * @tc.name Deletes replaced record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test25',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test25: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test25: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test25: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test25: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test25: systemPasteboard.setPasteData promise'); - - console.log('f_test25: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test25: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test25: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test25: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var textData1 = 'Hello World1' - console.log('f_test25: Replaces the Record = ' + textData1) - var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test25: replace = ' + replace) - - console.log('f_test25: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test25: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test25: systemPasteboard.setPasteData promise'); - - console.log('f_test25: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test25: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test25: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2500 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2600 - * @tc.name Deletes 文本、uri、html - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test26',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test26: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test26: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test26: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var htmlText = 'Hello World!' - console.log('f_test26: addHtmlRecord = ' + htmlText) - pasteData.addHtmlRecord(htmlText) - - var uriText = 'https://www.baidu.com/' - console.log('f_test26: addUriRecord = ' + uriText) - pasteData.addUriRecord(uriText) - - console.log('f_test26: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test26: systemPasteboard.setPasteData promise'); - - console.log('f_test26: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test26: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test26: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test26: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 3).assertTrue(); - - console.log('f_test26: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('f_test26: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test26: systemPasteboard.setPasteData promise'); - - console.log('f_test26: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test26: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test26: recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_2600 end'); - done(); - - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2700 - * @tc.name Replaces 文本 record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test27',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test27: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test27: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test27: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test27: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test27: systemPasteboard.setPasteData promise'); - - console.log('f_test27: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test27: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test27: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test27: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var textData1 = 'Hello World1' - console.log('f_test27: Replaces the Record = ' + textData1) - var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test27: replace = ' + replace) - - console.log('f_test27: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText(); - console.log('f_test27: primaryText = ' + primaryText); - - console.log('SUB_pasteBoard_function_JS_API_2700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2800 - * @tc.name Replaces htmlText record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test28',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test28: systemPasteboard.clear promise'); - - var htmlText = 'Hello World!' - console.log('f_test28: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test28: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test28: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test28: systemPasteboard.setPasteData promise'); - - console.log('f_test28: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test28: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test28: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test28: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var htmlText1 = 'Hello World 1' - console.log('f_test28: Replaces the htmlText = ' + htmlText1) - var pasteDataRecord = pasteboard.createHtmlTextRecord(htmlText1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test28: replace = ' + replace) - - console.log('SUB_pasteBoard_function_JS_API_2800 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_2900 - * @tc.name Replaces uri record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test29',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_2900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test29: systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test29: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test29: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test29: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test29: systemPasteboard.setPasteData promise'); - - console.log('f_test29: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test29: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test29: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test29: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var uriText1 = 'https://www.baidu.com/1' - console.log('f_test29: Replaces the uriText = ' + uriText1) - var pasteDataRecord = pasteboard.createUriRecord(uriText1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test29: replace = ' + replace) - - console.log('SUB_pasteBoard_function_JS_API_2900 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3000 - * @tc.name Replaces want record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test30',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test30: systemPasteboard.clear promise'); - - var wantText0 = { - bundleName: "com.example.myapplication3", - abilityName: "com.example.myapplication3.MainAbility" - } - console.log('f_test30: createWantData want = ' + wantText0); - var pasteData = pasteboard.createWantData(wantText0); - console.log('f_test30: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test30: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test30: systemPasteboard.setPasteData promise'); - - console.log('f_test30: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test30: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test30: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test30: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var wantText1 = { - bundleName: "com.example.myapplication30", - abilityName: "com.example.myapplication30.MainAbility" - } - console.log('f_test30: Replaces the wantText = ' + wantText1) - var pasteDataRecord = pasteboard.createWantRecord(wantText1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test30: replace = ' + replace) - - console.log('SUB_pasteBoard_function_JS_API_3000 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3100 - * @tc.name Replaces 300k文本 record - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test31',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test31: systemPasteboard.clear promise'); - - var textData = '' - for (var i = 0; i < 300; i++){ - textData=textData + "A"; - } - console.log('f_test31: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test31: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test31: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test31: systemPasteboard.setPasteData promise'); - - console.log('f_test31: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test31: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test31: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test31: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var textData1 = 'Hello World1' - console.log('f_test31: Replaces the Record = ' + textData1) - var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test31: replace = ' + replace) - - console.log('f_test31: Checks the pasteboard content'); - var primaryText = pasteData1.getPrimaryText(); - console.log('f_test31: primaryText = ' + primaryText); - - console.log('SUB_pasteBoard_function_JS_API_3100 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3200 - * @tc.name Adds one record(s), gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test32',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test32: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test32: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test32: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test32: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test32: systemPasteboard.setPasteData promise'); - - console.log('Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test32: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test32: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test32: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_3200 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3300 - * @tc.name Adds 2 record(s), gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test33',0, async function (done) { - console.info('SUB_pasteBoard_function_JS_API_3300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.info('f_test33: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.info('f_test33: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.info('f_test33: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 2; i++) - { - textData = 'Hello World' - textData = textData + i - console.info('f_test33: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.info('f_test33: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.info('f_test33: systemPasteboard.setPasteData promise'); - - console.info('f_test33: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.info('f_test33: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.info('f_test33: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.info('f_test33: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 2).assertTrue(); - - console.info('SUB_pasteBoard_function_.' + 'JS_API_3300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3400 - * @tc.name Adds 15 record(s), gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test34',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test34: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test34: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test34: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 15; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test34: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test34: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test34: systemPasteboard.setPasteData promise'); - - console.log('f_test34: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test34: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test34: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test34: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 15).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_3400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3500 - * @tc.name Adds 30 record(s), gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test35',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test35: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test35: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test35: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 30; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test35: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test35: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test35: systemPasteboard.setPasteData promise'); - - console.log('f_test35: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test35: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test35: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test35: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 30).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_3500 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3600 - * @tc.name Adds 31 record(s), gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test36',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test36: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test36: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test36: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 31; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test36: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test36: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test36: systemPasteboard.setPasteData promise'); - - console.log('f_test36: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test36: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test36: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test36: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 31).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_3600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3700 - * @tc.name Replaces one record, gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test37',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test37: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test37: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test37: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test37: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test37: systemPasteboard.setPasteData promise'); - - console.log('f_test37: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test37: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test37: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test37: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var textData1 = 'Hello World1' - console.log('f_test37: Replaces the Record = ' + textData1) - var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) - var replace = pasteData1.replaceRecordAt(0, pasteDataRecord); - console.log('f_test37: replace = ' + replace) - - console.log('f_test37: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test37: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - expect(pasteData2.getRecordCount() == 1).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_3700 end'); - done(); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3800 - * @tc.name Clears pasteBoard, gets record count - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test38',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test38: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test38: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test38: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test38: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test38: systemPasteboard.setPasteData promise'); - - console.log('f_test38: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test38: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test38: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test38: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test38: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test38: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test38: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount); - - console.log('SUB_pasteBoard_function_JS_API_3800 end'); - done(); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_3900 - * @tc.name Adds Property - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test39',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_3900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test39: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test39: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test39: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test39: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test39: systemPasteboard.setPasteData promise'); - - console.log('f_test39: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test39: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test39: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test39: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test39: Sets the Property') - var pasteDataProperty = pasteData1.getProperty() - console.log('f_test39: timestamp = ' + pasteDataProperty.timestamp) - pasteDataProperty.additions["one"] = "Hello" - - console.log('f_test39: Checks the Property') - var pasteDataProperty1 = pasteData1.getProperty() - console.log('f_test39: timestamp = ' + pasteDataProperty1.timestamp) - console.log('f_test39: additions = ' + pasteDataProperty1.additions["one"]) - - console.log('SUB_pasteBoard_function_JS_API_3900 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4000 - * @tc.name Set Property's tags - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test40',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test40: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test40: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test40: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test40: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test40: systemPasteboard.setPasteData promise'); - - console.log('f_test40: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test40: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test40: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test40: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test40: Sets the Property') - var pasteDataProperty = pasteData1.getProperty() - console.log('f_test40: timestamp = ' + pasteDataProperty.timestamp) - pasteDataProperty.additions["one"] = "Hello" - pasteDataProperty.tag = "Test" - - console.log('f_test40: Checks the Property') - var pasteDataProperty1 = pasteData1.getProperty() - console.log('f_test40: timestamp = ' + pasteDataProperty1.timestamp) - console.log('f_test40: additions = ' + pasteDataProperty1.additions["one"]) - console.log('f_test40: tag = ' + pasteDataProperty1.tag) - console.log('f_test40: getTag = ' + pasteData1.getTag()) - - console.log('SUB_pasteBoard_function_JS_API_4000 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4100 - * @tc.name Clears pasteBoard and check property - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test41',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test41: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test41: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test41: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test41: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test41: systemPasteboard.setPasteData promise'); - - console.log('f_test41: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test41: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test41: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test41: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test41: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test41: Checks the Property') - var pasteDataProperty1 = pasteData1.getProperty() - console.log('f_test41: timestamp = ' + pasteDataProperty1.timestamp) - console.log('f_test41: tag = ' + pasteDataProperty1.tag) - - console.log('SUB_pasteBoard_function_JS_API_4100 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4200 - * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等文本数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test42',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test42: systemPasteboard.clear promise'); - - console.log('f_test42: Open the infor for pasteboard content changes') - systemPasteboard.on('update', contentChanges) - - var textData = 'Hello World!'; - console.log('f_test42: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test42: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test42: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test42: systemPasteboard.setPasteData promise'); - - console.log('f_test42: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test42: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test42: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test42: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test42: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4200 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4300 - * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等html数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test43',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test43: systemPasteboard.clear promise'); - - console.log('f_test43: Open the infor for pasteboard content changes') - systemPasteboard.on('update', contentChanges) - - var htmlText = 'Hello World!' - console.log('f_test43: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test43: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test43: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test43: systemPasteboard.setPasteData promise'); - - console.log('f_test43: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test43: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test43: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test43: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test43: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4400 - * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等uri数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test44',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test44: systemPasteboard.clear promise'); - - console.log('f_test44: Open the infor for pasteboard content changes') - systemPasteboard.on('update', contentChanges) - - var uriText = 'https://www.baidu.com/' - console.log('f_test44: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test44: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test44: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test44: systemPasteboard.setPasteData promise'); - - console.log('f_test44: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test44: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test44: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test44: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test44: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4500 - * @tc.name 打开内容变化通知功能:向剪贴板数据增加、删除等want数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test45',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test45: systemPasteboard.clear promise'); - - console.log('f_test45: Open the infor for pasteboard content changes') - systemPasteboard.on('update', contentChanges) - - var want = { - bundleName: "com.example.myapplication45", - abilityName: "com.example.myapplication45.MainAbility" - } - console.log('f_test45: createWantData = ' + want) - var pasteData = pasteboard.createWantData(want); - console.log('f_test45: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test45: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test45: systemPasteboard.setPasteData promise'); - - console.log('f_test45: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test45: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test45: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test45: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test45: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4500 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4600 - * @tc.name 打开内容变化通知功能:清除剪切板内容 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test46',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test46: systemPasteboard.clear promise'); - - console.log('f_test46: Open the infor for pasteboard content changes') - systemPasteboard.on('update', contentChanges) - - var textData = 'Hello World!'; - console.log('f_test46: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test46: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test46: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test46: systemPasteboard.setPasteData promise'); - - console.log('f_test46: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test46: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test46: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test46: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('SUB_pasteBoard_function_JS_API_4600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4700 - * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等文本数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test47',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test47: systemPasteboard.clear promise'); - - console.log('f_test47: Close the infor for pasteboard content changes') - systemPasteboard.off('update', contentChanges) - - var textData = 'Hello World!'; - console.log('f_test47: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test47: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test47: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test47: systemPasteboard.setPasteData promise'); - - console.log('f_test47: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test47: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test47: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test47: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test47: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4800 - * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等html数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test48',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test48: systemPasteboard.clear promise'); - - console.log('f_test48: Close the infor for pasteboard content changes') - systemPasteboard.off('update', contentChanges) - - var htmlText = 'Hello World!' - console.log('f_test48: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test48: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test48: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test48: systemPasteboard.setPasteData promise'); - - console.log('f_test48: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test48: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test48: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test48: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test48: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4800 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_4900 - * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等uri数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test49',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_4900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test49: systemPasteboard.clear promise'); - - console.log('f_test49: Close the infor for pasteboard content changes') - systemPasteboard.off('update', contentChanges) - - var uriText = 'https://www.baidu.com/' - console.log('f_test49: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test49: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test49: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test49: systemPasteboard.setPasteData promise'); - - console.log('f_test49: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test49: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test49: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test49: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test49: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_4900 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5000 - * @tc.name 关闭内容变化通知功能:向剪贴板数据增加、删除等want数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test50',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test50: systemPasteboard.clear promise'); - - console.log('f_test50: Open the infor for pasteboard content changes') - systemPasteboard.off('update', contentChanges) - - var want = { - bundleName: "com.example.myapplication45", - abilityName: "com.example.myapplication45.MainAbility" - } - console.log('f_test50: createWantData = ' + want) - var pasteData = pasteboard.createWantData(want); - console.log('f_test50: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test50: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test50: systemPasteboard.setPasteData promise'); - - console.log('f_test50: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test50: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test50: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test50: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test50: Removes the Record') - expect(pasteData1.removeRecordAt(0) === true || pasteData1.removeRecordAt(0) === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_5000 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5100 - * @tc.name 关闭内容变化通知功能:清除剪切板内容 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test51',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test51: systemPasteboard.clear promise'); - - console.log('f_test51: Close the infor for pasteboard content changes') - systemPasteboard.off('update', contentChanges) - - var textData = 'Hello World!'; - console.log('f_test51: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test51: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test51: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test51: systemPasteboard.setPasteData promise'); - - console.log('f_test51: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test51: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test51: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test51: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test51: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('SUB_pasteBoard_function_JS_API_5100 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5200 - * @tc.name 清除剪切板内的文本数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test52',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test52: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test52: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test52: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test52: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test52: systemPasteboard.setPasteData promise'); - - console.log('f_test52: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test52: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test52: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test52: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test52: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test52: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test52: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test52 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5200 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5300 - * @tc.name 清除剪切板内的uri数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test53',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test53: systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test53: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test53: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test53: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test53: systemPasteboard.setPasteData promise'); - - console.log('f_test53: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test53: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test53: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test53: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test53: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test53: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5400 - * @tc.name 清除剪切板内的html数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test54',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test54: systemPasteboard.clear promise'); - - var htmlText = 'Hello World!' - console.log('f_test54: createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test54: createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test54: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test54: systemPasteboard.setPasteData promise'); - - console.log('f_test54: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test54: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test54: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test54: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test54: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test54: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test54: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5500 - * @tc.name 清除剪切板内的want数据项 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test55',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test55: systemPasteboard.clear promise'); - - var myWant = { - bundleName: "com.example.myapplication55", - abilityName: "com.example.myapplication55.MainAbility" - } - console.log('f_test01: createWantData want = ' + myWant); - var pasteData = pasteboard.createWantData(myWant); - console.log('f_test01: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test55: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test55: systemPasteboard.setPasteData promise'); - - console.log('f_test55: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test55: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test55: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test55: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test55: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test55: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test55: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5500 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5600 - * @tc.name 向剪切板内增加30条数据项,然后清除 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test56',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test56: systemPasteboard.clear promise'); - - var textData0 = 'Hello World!'; - console.log('f_test56: createPlainTextData textData = ' + textData0); - var pasteData = pasteboard.createPlainTextData(textData0); - console.log('f_test56: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - var textData = '' - for(var i = 1; i < 30; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test56: addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - console.log('f_test56: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test56: systemPasteboard.setPasteData promise'); - - console.log('f_test56: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test56: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test56: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test56: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 30).assertTrue(); - - console.log('f_test56: Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test56: Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test56: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5700 - * @tc.name 向剪贴板数据各增加5条文本、uri、html数据,然后清除 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test57',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - - var textData0 = 'Hello World0' - console.log('f_test57: createPlainTextData = ' + textData0) - var pasteData = pasteboard.createPlainTextData(textData0) - - var textData = '' - for(var i = 1; i < 5; i++) - { - textData = 'Hello World' - textData = textData + i - pasteData.addTextRecord(textData) - } - - var htmlText = '' - for(var i = 0; i < 5; i++) - { - htmlText = 'Hello World!' - htmlText = htmlText + i - pasteData.addHtmlRecord(htmlText) - } - - var uriText = '' - for(var i = 0; i < 5; i++) - { - uriText = 'https://www.baidu.com/' - uriText = uriText + i - pasteData.addUriRecord(uriText) - } - - systemPasteboard.setPasteData(pasteData).then(() => { - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test57: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - systemPasteboard.getPasteData().then((data) => { - console.log('f_test57: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 15).assertTrue(); - systemPasteboard.clear() - systemPasteboard.getPasteData().then((data) => { - console.log('f_test57: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData2 = data; - var recordCount = pasteData2.getRecordCount(); - console.log('f_test38 recordCount = ' + recordCount);}) - - console.log('SUB_pasteBoard_function_JS_API_5700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5800 - * @tc.name 向剪贴板数据增加文本数据项,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test58',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test58: systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test58: createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test58: createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test58: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test58: systemPasteboard.setPasteData promise'); - - console.log('f_test58: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test58: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_5800 end') - done(); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_5900 - * @tc.name 向剪贴板数据增加uri数据项,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test59',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_5900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test59: createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test59: createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test59: Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test59: systemPasteboard.setPasteData promise'); - - console.log('f_test59: Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test59: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_5900 end') - done(); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6000 - * @tc.name 向剪贴板数据增加html数据项,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test60',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test60 systemPasteboard.clear promise'); - - var htmlText = 'Hello World!' - console.log('f_test60createHtmlData htmlText = ' + htmlText); - var pasteData = pasteboard.createHtmlData(htmlText); - console.log('f_test60createHtmlData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test60Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test60systemPasteboard.setPasteData promise'); - - console.log('f_test60Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test60systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_6000 end') - done(); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6100 - * @tc.name 向剪贴板数据增加want数据项,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test61',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6100 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test61 systemPasteboard.clear promise'); - - var myWant = { - bundleName: "com.example.myapplication8", - abilityName: "com.example.myapplication8.MainAbility" - } - console.log('f_test01: createWantData want = ' + myWant); - var pasteData = pasteboard.createWantData(myWant); - console.log('f_test01: createWantData pasteData = ' + JSON.stringify(pasteData)); - - console.log('Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('systemPasteboard.setPasteData promise'); - - console.log('Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_6100 end') - done(); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6200 - * @tc.name 向剪贴板数据各增加5条文本、uri、html,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test62',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6200 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test62 systemPasteboard.clear promise'); - - var textData0 = 'Hello World0' - console.log('f_test62 createPlainTextData = ' + textData0) - var pasteData = pasteboard.createPlainTextData(textData0) - - var textData = '' - for(var i = 1; i < 5; i++) - { - textData = 'Hello World' - textData = textData + i - console.log('f_test62 addTextRecord = ' + textData) - pasteData.addTextRecord(textData) - } - - var htmlText = '' - for(var i = 0; i < 5; i++) - { - htmlText = 'Hello World!' - htmlText = htmlText + i - console.log('f_test62 addHtmlRecord = ' + htmlText) - pasteData.addHtmlRecord(htmlText) - } - - var uriText = '' - for(var i = 0; i < 5; i++) - { - uriText = 'https://www.baidu.com/' - uriText = uriText + i - console.log('f_test62 addUriRecord = ' + uriText) - pasteData.addUriRecord(uriText) - } - - console.log('f_test62 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test62 systemPasteboard.setPasteData promise'); - - console.log('f_test62 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test62 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('SUB_pasteBoard_function_JS_API_6200 end') - done(); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6300 - * @tc.name 更新剪贴板数据,查询剪贴板存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test63',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6300 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test63 systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test63 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test63 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test63 systemPasteboard.setPasteData promise'); - - console.log('f_test63 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test63 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test63 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test63 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - var textData1 = 'Hello World1' - console.log('f_test63 Replaces the Record = ' + textData1) - var pasteDataRecord = pasteboard.createPlainTextRecord(textData1) - pasteData1.replaceRecordAt(0, pasteDataRecord) - - console.log('f_test63 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test63 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue();}) - - console.log('SUB_pasteBoard_function_JS_API_6300 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6400 - * @tc.name 删除所有的剪贴板数据,查询剪贴板不存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test64',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6400 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test64 systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test64 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test64 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test64 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test64 systemPasteboard.setPasteData promise'); - - console.log('f_test64 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test64 systemPasteboard.hasPasteData promise data = ' + data); - - console.log('f_test64 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test64 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - var recordCount = pasteData1.getRecordCount(); - console.log('f_test64 recordCount = ' + recordCount); - - console.log('f_test64 Removes the Record') - pasteData1.removeRecordAt(0) - - console.log('f_test64 Checks the number of records'); - var recordCount1 = pasteData1.getRecordCount(); - console.log('f_test64 recordCount = ' + recordCount1); - - console.log('SUB_pasteBoard_function_JS_API_6400 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6500 - * @tc.name 清除剪贴板数据,查询剪贴板不存在剪贴板数据 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test65',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6500 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test65 systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test65 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test65 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test65 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test65 systemPasteboard.setPasteData promise'); - - console.log('f_test65 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test65 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test65 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test65 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test65 Clears the pasteBoard') - systemPasteboard.clear() - - console.log('f_test65 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData1).then(() => { - console.log('f_test65 systemPasteboard.setPasteData promise'); - - console.log('f_test65 Checks there is no content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test65 systemPasteboard.hasPasteData promise data = ' + data); - - console.log('SUB_pasteBoard_function_JS_API_6400 end'); - done(); - }); - }); - }); - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6600 - * @tc.name 将文本数据强制转换为文本 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test66',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6600 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test66 systemPasteboard.clear promise'); - - var textData = 'Hello World!'; - console.log('f_test66 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test66 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test66 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test66 systemPasteboard.setPasteData promise'); - - console.log('f_test66 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test66 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test66 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test66 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test66 Converts the PlainTextData to text') - var pasteDataRecord = pasteData1.getRecordAt(0) - console.info('checks pasteDataRecord.mimeType = ' + pasteDataRecord.mimeType) - - console.log('f_test66 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); - - console.log('f_test66 SUB_pasteBoard_function_JS_API_6600 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6700 - * @tc.name 将一条含有特殊字符、中英混杂的文本数据强制转换为文本 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test67',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6700 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test67 systemPasteboard.clear promise'); - - var textData = 'Hello 中国!@#$%^&*()_+{}\?.'; - console.log('f_test67 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test67 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test67 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test67 systemPasteboard.setPasteData promise'); - - console.log('f_test67 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test67 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test67 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test67 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test67 Converts the PlainTextData to text') - var pasteDataRecord = pasteData1.getRecordAt(0) - console.log('f_test67 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); - - console.log('SUB_pasteBoard_function_JS_API_6700 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6800 - * @tc.name 将一条超长文本数据 (大小为301K)强制转换为文本 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test68',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6800 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test68 systemPasteboard.clear promise'); - - var textData = '' - for (var i = 0; i < 301; i++){ - textData = textData + "A"; - } - console.log('f_test68 createPlainTextData textData = ' + textData); - var pasteData = pasteboard.createPlainTextData(textData); - console.log('f_test68 createPlainTextData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test68 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test68 systemPasteboard.setPasteData promise'); - - console.log('f_test68 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test68 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test68 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test68 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test68 Converts the PlainTextData to text') - var pasteDataRecord = pasteData1.getRecordAt(0) - console.log('f_test68 pasteDataRecord.convertToText = ' + pasteDataRecord.convertToText); - - console.log('SUB_pasteBoard_function_JS_API_6800 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_6900 - * @tc.name 将uri数据强制转换为文本 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test69',0, async function (done) { - console.log('SUB_pasteBoard_function_JS_API_6900 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - console.log('f_test69 systemPasteboard.clear promise'); - - var uriText = 'https://www.baidu.com/' - console.log('f_test69 createUriData uriText = ' + uriText); - var pasteData = pasteboard.createUriData(uriText); - console.log('f_test69 createUriData pasteData = ' + JSON.stringify(pasteData)); - - console.log('f_test69 Writes PasteData to the pasteboard'); - systemPasteboard.setPasteData(pasteData).then(() => { - console.log('f_test69 systemPasteboard.setPasteData promise'); - - console.log('f_test69 Checks there is content in the pasteboard') - systemPasteboard.hasPasteData().then((data) => { - console.log('f_test69 systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - console.log('f_test69 Checks the number of records'); - systemPasteboard.getPasteData().then((data) => { - console.log('f_test69 systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - expect(pasteData1.getRecordCount() == 1).assertTrue(); - - console.log('f_test69 Converts the PlainTextData to text') - var pasteDataRecord = pasteData1.getRecordAt(0) - - pasteDataRecord.convertToText().then((data) => { - console.info('convertToText success data : ' + JSON.stringify(data)); - }).catch((error) => { - console.error('convertToText failed because ' + JSON.stringify(error)); - });; - - console.log('SUB_pasteBoard_function_JS_API_6900 end'); - done(); - }) - }); - }); - }); - }) - - /** - * @tc.number SUB_pasteBoard_function_JS_API_7000 - * @tc.name 复制文本、uri格式 - * @tc.desc Test pasteBoard API functionality. - * @tc.size : MEDIUM - * @tc.type : Function - * @tc.level : Level 0 - */ - it('pasteboard_function_test70',0, async function (done) { - console.info('SUB_pasteBoard_function_JS_API_7000 start') - - var systemPasteboard = pasteboard.getSystemPasteboard(); - systemPasteboard.clear().then(() => { - - var textData0 = 'Hello World0' - console.info('f_test70: createPlainTextData = ' + textData0) - - var pasteData = pasteboard.createPlainTextData(textData0) - console.info('f_test70: createPlainTextData = ' + JSON.stringify(pasteData)) - - var uriText = pasteboard.createUriRecord("https://www.baidu.com/"); - pasteData.addRecord(uriText); - console.info('f_test70: addRecord(uriText) = ' + pasteData) - console.info('f_test70: addRecord(uriText) = ' + JSON.stringify(pasteData)) - - - - systemPasteboard.setPasteData(pasteData).then(() => { - console.info('---------------------------->1') - systemPasteboard.hasPasteData().then((data) => { - console.info('f_test70: systemPasteboard.hasPasteData promise data = ' + data); - expect(data === true || data === false).assertTrue(); - - systemPasteboard.getPasteData().then((data) => { - console.info('f_test70: systemPasteboard.getPasteData data = ' + JSON.stringify(data)); - var pasteData1 = data; - var recordCount = pasteData1.getRecordCount(); - console.info('f_test70: recordCount=' + recordCount); - expect(pasteData1.getRecordCount() == 2).assertTrue(); - - console.info('SUB_pasteBoard_function_JS_API_7000 end'); - done(); - }) - }); - }); - }); - }) - - - - /** - * The callback function is used for pasteboard content changes - */ - function contentChanges() { - console.log('#EVENT: The content is changed in the pasteboard') - } -}); diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/element/string.json b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/element/string.json deleted file mode 100644 index 7f851dbb7..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/element/string.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "string": [ - { - "name": "app_name", - "value": "PasteBoardTest_js" - }, - { - "name": "mainability_description", - "value": "JS_Phone_Empty Feature Ability" - } - ] -} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/element/string.json b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..498677efb --- /dev/null +++ b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + }, + { + "name": "TestAbility_desc", + "value": "description" + }, + { + "name": "TestAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/media/icon.png b/distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/media/icon.png similarity index 100% rename from distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/resources/base/media/icon.png rename to distributeddatamgr/Pasteboardjsapitest/entry/src/main/resources/base/media/icon.png diff --git a/distributeddatamgr/Pasteboardjsapitest/local.properties b/distributeddatamgr/Pasteboardjsapitest/local.properties deleted file mode 100644 index 6b17cb3b0..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by DevEco Studio. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file should *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# For customization when using a Version Control System, please read the header note. -sdk.dir=C:/Users/lwx1095534/AppData/Local/OpenHarmony/Sdk -nodejs.dir=D:/DevEco Studio/tools/nodejs -npm.dir=D:/DevEco Studio/tools/nodejs \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/package-lock.json b/distributeddatamgr/Pasteboardjsapitest/package-lock.json deleted file mode 100644 index 48e341a09..000000000 --- a/distributeddatamgr/Pasteboardjsapitest/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} diff --git a/inputmethod/BUILD.gn b/inputmethod/BUILD.gn old mode 100755 new mode 100644 diff --git a/inputmethod/InputMethodTest_ets/.idea/.deveco/project.cache.json b/inputmethod/InputMethodTest_ets/.idea/.deveco/project.cache.json deleted file mode 100644 index 9f11beeec..000000000 --- a/inputmethod/InputMethodTest_ets/.idea/.deveco/project.cache.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "BuildOptions":{}, - "CommonInfo":{ - "project.ide.version":"3.0.0.900" - } -} \ No newline at end of file diff --git a/inputmethod/InputMethodTest_ets/.idea/.gitignore b/inputmethod/InputMethodTest_ets/.idea/.gitignore deleted file mode 100644 index 26d33521a..000000000 --- a/inputmethod/InputMethodTest_ets/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/inputmethod/InputMethodTest_ets/.idea/InputMethodTest_ets.iml b/inputmethod/InputMethodTest_ets/.idea/InputMethodTest_ets.iml deleted file mode 100644 index 610219404..000000000 --- a/inputmethod/InputMethodTest_ets/.idea/InputMethodTest_ets.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/inputmethod/InputMethodTest_ets/.idea/modules.xml b/inputmethod/InputMethodTest_ets/.idea/modules.xml deleted file mode 100644 index 01e901c05..000000000 --- a/inputmethod/InputMethodTest_ets/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/inputmethod/InputMethodTest_ets/.idea/vcs.xml b/inputmethod/InputMethodTest_ets/.idea/vcs.xml deleted file mode 100644 index b2bdec2d7..000000000 --- a/inputmethod/InputMethodTest_ets/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/inputmethod/InputMethodTest_ets/BUILD.gn b/inputmethod/InputMethodTest_ets/BUILD.gn index 7faeca533..d651d0ccb 100644 --- a/inputmethod/InputMethodTest_ets/BUILD.gn +++ b/inputmethod/InputMethodTest_ets/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -9,7 +9,7 @@ # 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. +# limitations under the License. import("//test/xts/tools/build/suite.gni") @@ -21,6 +21,8 @@ ohos_js_hap_suite("ActsInputMethodEtsTest") { ":inputMethod_ets_test_assets", ] ets2abc = true + subsystem_name = "inputmethod" + part_name = "imf" certificate_profile = "./signature/openharmony_sx.p7b" hap_name = "ActsInputMethodEtsTest" } diff --git a/inputmethod/InputMethodTest_ets/Test.json b/inputmethod/InputMethodTest_ets/Test.json index e29cddaee..e72008206 100644 --- a/inputmethod/InputMethodTest_ets/Test.json +++ b/inputmethod/InputMethodTest_ets/Test.json @@ -3,8 +3,8 @@ "driver": { "type": "OHJSUnitTest", "test-timeout": "600000", - "bundle-name": "com.open.harmony.inputMethodtest", - "package-name": "com.open.harmony.inputMethodtest", + "bundle-name": "com.acts.inputmethodtest", + "package-name": "com.acts.inputmethodtest", "shell-timeout": "600000" }, "kits": [ diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/config.json b/inputmethod/InputMethodTest_ets/entry/src/main/config.json index 94d2d13dc..75e3d2529 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/config.json +++ b/inputmethod/InputMethodTest_ets/entry/src/main/config.json @@ -1,6 +1,6 @@ { "app": { - "bundleName": "com.open.harmony.inputMethodtest", + "bundleName": "com.acts.inputmethodtest", "vendor": "open", "version": { "code": 1000000, @@ -9,14 +9,14 @@ "apiVersion": { "compatible": 7, "releaseType": "Release", - "target": 7 + "target": 9 } }, "deviceConfig": {}, "module": { - "package": "com.open.harmony.inputMethodtest", + "package": "com.acts.inputmethodtest", "name": ".MyApplication", - "mainAbility": "com.open.harmony.inputMethodtest.MainAbility", + "mainAbility": "com.acts.inputmethodtest.MainAbility", "deviceType": [ "phone" ], diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/app.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/app.ets index f69b748f8..24a35d928 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/app.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/app.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/index.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/index.ets index 74c70dbbb..1a788d8fa 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/index.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/index.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/input.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/input.ets index 6e3410444..309eb39d4 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/input.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/MainAbility/pages/input.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputRequestJsunit.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputRequestJsunit.test.ets index 334750e89..6271c2751 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputRequestJsunit.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputRequestJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethodEngineJsunit.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethodEngineJsunit.test.ets index 682b3680f..b795d5e51 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethodEngineJsunit.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethodEngineJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethohJsunit.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethohJsunit.test.ets index 6ba0403a0..0f3956e50 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethohJsunit.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/InputmethohJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -96,28 +96,6 @@ export default function settingUiJsunit() { done(); }); - /* - * @tc.number inputmethod_test_switchInputMethod_001 - * @tc.name Test Indicates the input method which will replace the current one. - * @tc.desc Function test - * @tc.level 2 - */ - it('inputmethod_test_switchInputMethod_001', 0, async function (done) { - console.info("************* inputmethod_test_switchInputMethod_001 Test start*************"); - let inputMethodProperty = { - packageName:"com.example.kikakeyboard", - methodId:"ServiceExtAbility" - } - inputMethod.switchInputMethod(inputMethodProperty).then((data) => { - console.info("inputmethod_test_switchInputMethod_001 data:" + data) - expect(data).assertEqual(true); - }).catch((err) => { - console.error('inputmethod_test_switchInputMethod_001 failed because ' + JSON.stringify(err)); - }); - console.info("************* inputmethod_test_switchInputMethod_001 Test end*************"); - done(); - }); - /* * @tc.number inputmethod_test_switchInputMethod_002 * @tc.name Test Indicates the input method which will replace the current one. diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/List.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/List.test.ets index 3f31d27d3..5c2842b42 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/List.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/List.test.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestDownloadTaskJsunit.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestDownloadTaskJsunit.test.ets index 9ee14a205..0afae8488 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestDownloadTaskJsunit.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestDownloadTaskJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestJsunit.test.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestJsunit.test.ets index 2760712ed..86dd2ce3a 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestJsunit.test.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/RequestJsunit.test.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/Utils.ets b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/Utils.ets index 0f4b16d76..3210b03d6 100644 --- a/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/Utils.ets +++ b/inputmethod/InputMethodTest_ets/entry/src/main/ets/test/Utils.ets @@ -1,6 +1,6 @@ // @ts-nocheck /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/inputmethod/InputMethodTest_ets/local.properties b/inputmethod/InputMethodTest_ets/local.properties deleted file mode 100644 index 6b17cb3b0..000000000 --- a/inputmethod/InputMethodTest_ets/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by DevEco Studio. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file should *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# For customization when using a Version Control System, please read the header note. -sdk.dir=C:/Users/lwx1095534/AppData/Local/OpenHarmony/Sdk -nodejs.dir=D:/DevEco Studio/tools/nodejs -npm.dir=D:/DevEco Studio/tools/nodejs \ No newline at end of file diff --git a/inputmethod/InputMethodTest_ets/package-lock.json b/inputmethod/InputMethodTest_ets/package-lock.json deleted file mode 100644 index 48e341a09..000000000 --- a/inputmethod/InputMethodTest_ets/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} diff --git a/request/BUILD.gn b/request/BUILD.gn old mode 100755 new mode 100644 index 6bea708ff..d366567d0 --- a/request/BUILD.gn +++ b/request/BUILD.gn @@ -14,5 +14,5 @@ import("//build/ohos_var.gni") group("request") { testonly = true - deps = [ "RequestTest_js:ActsMiscservicesRequestJSApiTest" ] + deps = [ "RequestTest_ets:ActsRequestETSApiTest" ] } diff --git a/request/RequestTest_js/BUILD.gn b/request/RequestTest_ets/BUILD.gn similarity index 59% rename from request/RequestTest_js/BUILD.gn rename to request/RequestTest_ets/BUILD.gn index 79f1e29f3..ef14e8bc8 100644 --- a/request/RequestTest_js/BUILD.gn +++ b/request/RequestTest_ets/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -10,21 +10,30 @@ # 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("ActsMiscservicesRequestJSApiTest") { +import("//build/ohos.gni") +import("//test/xts/tools/build/suite.gni") +ohos_js_hap_suite("ActsRequestETSApiTest") { hap_profile = "./entry/src/main/config.json" deps = [ - ":request_js_assets", - ":request_js_resources", + ":request_ets_assets", + ":request_ets_resources", + ":request_ets_test_assets", ] + ets2abc = true + subsystem_name = "request" + part_name = "request" certificate_profile = "./signature/openharmony_sx.p7b" - hap_name = "ActsMiscservicesRequestJSApiTest" + hap_name = "ActsRequestETSApiTest" +} + +ohos_js_assets("request_ets_assets") { + source_dir = "./entry/src/main/ets/MainAbility" } -ohos_js_assets("request_js_assets") { - source_dir = "./entry/src/main/js/default" +ohos_js_assets("request_ets_test_assets") { + source_dir = "./entry/src/main/ets/TestAbility" } -ohos_resources("request_js_resources") { +ohos_resources("request_ets_resources") { sources = [ "./entry/src/main/resources" ] hap_profile = "./entry/src/main/config.json" } diff --git a/request/RequestTest_ets/Test.json b/request/RequestTest_ets/Test.json new file mode 100644 index 000000000..2ea5f5cbe --- /dev/null +++ b/request/RequestTest_ets/Test.json @@ -0,0 +1,24 @@ +{ + "description": "Configuration for MiscservicesRequestJSApiTest js api Tests", + "driver": { + "type": "OHJSUnitTest", + "test-timeout": "600000", + "bundle-name": "com.acts.requesttest", + "package-name": "com.acts.requesttest", + "shell-timeout": "60000" + }, + "kits": [ + { + "test-file-name": ["ActsRequestETSApiTest.hap"], + "type": "AppInstallKit", + "cleanup-apps": true + }, + { + "type": "ShellKit", + "run-command": [ + "mkdir -p /data/app/el2/100/base/com.acts.requesttest/haps/entry/cache", + "echo \"123456\" > /data/app/el2/100/base/com.acts.requesttest/haps/entry/cache/test.txt" + ] + } + ] +} \ No newline at end of file diff --git a/request/RequestTest_ets/entry/src/main/config.json b/request/RequestTest_ets/entry/src/main/config.json new file mode 100644 index 000000000..c69658fa4 --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/config.json @@ -0,0 +1,96 @@ +{ + "app": { + "bundleName": "com.acts.requesttest", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 7, + "target": 9, + "releaseType": "Release" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.acts.requesttest", + "name": ".MyApplication", + "mainAbility": "com.acts.requesttest.MainAbility", + "deviceType": ["phone"], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": true + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "srcPath": "TestAbility", + "name": ".TestAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:TestAbility_desc", + "formsEnabled": false, + "label": "$string:TestAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".TestAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} diff --git a/request/RequestTest_ets/entry/src/main/ets/MainAbility/app.ets b/request/RequestTest_ets/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/wallpaper_js/src/main/js/default/app.js b/request/RequestTest_ets/entry/src/main/ets/MainAbility/pages/index.ets similarity index 57% rename from theme/wallpaper_js/src/main/js/default/app.js rename to request/RequestTest_ets/entry/src/main/ets/MainAbility/pages/index.ets index 4b241cccb..464d327c2 100644 --- a/theme/wallpaper_js/src/main/js/default/app.js +++ b/request/RequestTest_ets/entry/src/main/ets/MainAbility/pages/index.ets @@ -1,5 +1,6 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,11 +13,25 @@ * 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'); + +@Entry +@Component +struct MyComponent { + aboutToAppear() { + } + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('REQUEST ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) } -}; + .width('100%') + .height('100%') + } +} + diff --git a/request/RequestTest_ets/entry/src/main/ets/TestAbility/app.ets b/request/RequestTest_ets/entry/src/main/ets/TestAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/ets/TestAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/request/RequestTest_ets/entry/src/main/ets/TestAbility/pages/index.ets b/request/RequestTest_ets/entry/src/main/ets/TestAbility/pages/index.ets new file mode 100644 index 000000000..b2497c3b2 --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/ets/TestAbility/pages/index.ets @@ -0,0 +1,50 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info('TestAbility index aboutToAppear') + } + + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/request/RequestTest_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/request/RequestTest_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..07cb0b784 --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/js/Test/List.test.js b/request/RequestTest_ets/entry/src/main/ets/test/List.test.ets similarity index 75% rename from request/RequestTest_js/entry/src/main/js/Test/List.test.js rename to request/RequestTest_ets/entry/src/main/ets/test/List.test.ets index 8eec19a5d..fe8ea65b4 100644 --- a/request/RequestTest_js/entry/src/main/js/Test/List.test.js +++ b/request/RequestTest_ets/entry/src/main/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,4 +13,8 @@ * limitations under the License. */ -require('./UploadCallbackXTSJsunit.test.js') +import uploadRequestJsunitTest from './uploadCallbackXTSJsunitTest'; + +export default function testsuite() { + uploadRequestJsunitTest() +} \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/js/Test/Publicfunction.js b/request/RequestTest_ets/entry/src/main/ets/test/Publicfunction.ets similarity index 83% rename from request/RequestTest_js/entry/src/main/js/Test/Publicfunction.js rename to request/RequestTest_ets/entry/src/main/ets/test/Publicfunction.ets index 7e7822e9c..20ab93843 100644 --- a/request/RequestTest_js/entry/src/main/js/Test/Publicfunction.js +++ b/request/RequestTest_ets/entry/src/main/ets/test/Publicfunction.ets @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -53,10 +53,10 @@ function getUploadConfig(fileurl){ //upload公共方法 function publicupload(UploadConfig){ - console.log(`Testupdate UploadConfig ${JSON.stringify(UploadConfig)}`) + console.info(`Testupdate UploadConfig ${JSON.stringify(UploadConfig)}`) return new Promise(function(resolve, reject) { request.upload(UploadConfig, (err, data) => { - console.log("Testupdate publiconprogress Updatetask =" + JSON.stringify(data)); + console.info("Testupdate publiconprogress Updatetask =" + JSON.stringify(data)); resolve(data); }) }) @@ -70,8 +70,8 @@ function publiconprogress(Updatetask, Type){ uploadedSize : data1, totalSize : data2 } - console.log("Testupdate publiconprogress uploadedSize =" + data1); - console.log("Testupdate publiconprogress totalSize =" + data2); + console.info("Testupdate publiconprogress uploadedSize =" + data1); + console.info("Testupdate publiconprogress totalSize =" + data2); resolve(progress); }) }) @@ -85,8 +85,8 @@ function publicoffprogress(Updatetask, Type){ uploadedSize : data1, totalSize : data2 } - console.log("Testupdate publicoffprogress uploadedSize =" + data1); - console.log("Testupdate publicoffprogress totalSize =" + data2); + console.info("Testupdate publicoffprogress uploadedSize =" + data1); + console.info("Testupdate publicoffprogress totalSize =" + data2); resolve(progress); }) }) @@ -96,7 +96,7 @@ function publicoffprogress(Updatetask, Type){ function publicon(Updatetask, Type){ return new Promise(function(resolve, reject) { Updatetask.on(Type, function(data){ - console.log("Testupdate publicon =" + data); + console.info("Testupdate publicon =" + data); resolve(data); }) }) @@ -106,7 +106,7 @@ function publicon(Updatetask, Type){ function publicoff(Updatetask, Type){ return new Promise(function(resolve, reject) { Updatetask.off(Type, function(data){ - console.log("Testupdate publicoff =" + data); + console.info("Testupdate publicoff =" + data); resolve(data); }) }) @@ -116,7 +116,7 @@ function publicoff(Updatetask, Type){ function publicremove(Updatetask, Type){ return new Promise(function(resolve, reject) { Updatetask.remove((err,data) => { - console.log("Testupdate publicremove =" + data); + console.info("Testupdate publicremove =" + data); resolve(data); }) }) diff --git a/request/RequestTest_ets/entry/src/main/ets/test/uploadCallbackXTSJsunitTest.ets b/request/RequestTest_ets/entry/src/main/ets/test/uploadCallbackXTSJsunitTest.ets new file mode 100644 index 000000000..416e28a5d --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/ets/test/uploadCallbackXTSJsunitTest.ets @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' +import request from '@ohos.request'; +import * as pubfun from './Publicfunction.ets' + +var typeProgress = 'progress'; +var typeHeaderReceive = 'headerReceive'; +var typeFail = 'fail'; +let uploadTask; +let file7url = 'internal://cache/test.txt'; + +export default function uploadRequestJsunitTest() { + describe('UploadTest', function () { + beforeAll(function () { + console.info('beforeAll: Prerequisites at the test suite level, ' + + 'which are executed before the test suite is executed.'); + }) + beforeEach(function () { + console.info('beforeEach: Prerequisites at the test case level,' + + ' which are executed before each test case is executed.'); + }) + afterEach(function () { + console.info('afterEach: Test case-level clearance conditions, ' + + 'which are executed after each test case is executed.'); + }) + afterAll(function () { + console.info('afterAll: Test suite-level cleanup condition, ' + + 'which is executed after the test suite is executed'); + }) + + /* + * @tc.number : InitUploadtaskCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('InitUploadtaskCallback001', 0, async function (done) { + try { + console.info("Testupdate before getuploadconfig"); + let UploadConfig = pubfun.getUploadConfig(file7url) + console.info("Testupdate before upload UploadConfig = " + JSON.stringify(UploadConfig)); + console.info("Testupdate before upload"); + await pubfun.publicupload(UploadConfig).then((data) => { + console.info("Testupdate going upload uploadTask = " + data); + uploadTask = data; + expect(true).assertEqual((data != undefined) || (data != "") || (data != {})); + done(); + }).catch((err) => { + console.info("InitUploadtaskCallback001 fail 1" + JSON.stringify(err)); + expect(err).assertFail(); + done(); + }) + } catch (e) { + console.info("InitUploadtaskCallback001 fail 2" + JSON.stringify(e)); + expect(e).assertFail(); + done(); + } + }) + + /* + * @tc.number : SwitchOnProgressCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('SwitchOnProgressCallback001', 0, async function (done) { + try { + pubfun.publiconprogress(uploadTask, typeProgress); + expect(true).assertEqual(0 == 0); + done(); + } catch (err) { + console.info("Testupdate SwitchOnProgressCallback001 catch err " + JSON.stringify(err)); + expect(err).assertFail(); + done(); + } + }); + + /* + * @tc.number : SwitchOffProgressCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('SwitchOffProgressCallback001', 0, async function (done) { + try { + pubfun.publiconprogress(uploadTask, typeProgress); + expect(true).assertEqual(0 == 0); + + await pubfun.publicoffprogress(uploadTask, typeProgress).then((data) => { + console.info("SwitchOffProgressCallback001 data" + JSON.stringify(data)); + expect(7).assertEqual(data.totalSize); + done(); + }).catch((err) => { + console.info("SwitchOffProgressCallback001 fail 2" + JSON.stringify(err)); + expect(err).assertFail(); + done(); + }) + } catch (e) { + console.info("SwitchOffProgressCallback001 fail 3" + JSON.stringify(e)); + expect(e).assertFail(); + done(); + } + }) + + /* + * @tc.number : SwitchOnFailCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('SwitchOnFailCallback001', 0, async function (done) { + try { + await pubfun.publicon(uploadTask, typeFail).then((data) => { + console.info("SwitchOnFailCallback001 data " + data); + expect(5).assertEqual(data); + done(); + }).catch((err) => { + console.info("SwitchOnFailCallback001 fail 2" + JSON.stringify(err)); + expect(err).assertFail(); + done(); + }) + } catch (e) { + console.info("SwitchOnFailCallback001 fail 3" + JSON.stringify(e)); + expect(e).assertFail(); + done(); + } + }) + + /* + * @tc.number : SwitchOffFailCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('SwitchOffFailCallback001', 0, async function (done) { + try { + await pubfun.publicon(uploadTask, typeFail) + await pubfun.publicoff(uploadTask, typeFail).then((data) => { + console.info("SwitchOffFailCallback001 data " + data); + expect(5).assertEqual(data); + done(); + }).catch((err) => { + console.info("SwitchOffFailCallback001 fail 2" + JSON.stringify(err)); + done(); + expect(err).assertFail(); + }) + } catch (e) { + console.info("SwitchOffFailCallback001 fail 3" + JSON.stringify(e)); + expect(e).assertFail(); + done(); + } + }) + + /* + * @tc.number : RemoveCallback001 + * @tc.name : Use getEntries get the value by mixing the string key + * @tc.desc : Mixed strings value can be obtained correctly + * @tc.size : MediumTest + * @tc.type : Function + * @tc.level : Level 1 + */ + it('RemoveCallback001', 0, async function (done) { + try { + await pubfun.publicremove(uploadTask).then((data) => { + console.info("RemoveCallback001 data " + data); + expect(true).assertEqual(data); + done(); + }).catch((err) => { + console.info("RemoveCallback001 fail 2" + JSON.stringify(err)); + expect(err).assertFail(); + done(); + }) + } catch (e) { + console.info("RemoveCallback001 fail 3" + JSON.stringify(e)); + expect(e).assertFail(); + done(); + } + }) + }) +} diff --git a/request/RequestTest_ets/entry/src/main/resources/base/element/string.json b/request/RequestTest_ets/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..498677efb --- /dev/null +++ b/request/RequestTest_ets/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + }, + { + "name": "TestAbility_desc", + "value": "description" + }, + { + "name": "TestAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/resources/base/media/icon.png b/request/RequestTest_ets/entry/src/main/resources/base/media/icon.png similarity index 100% rename from request/RequestTest_js/entry/src/main/resources/base/media/icon.png rename to request/RequestTest_ets/entry/src/main/resources/base/media/icon.png diff --git a/request/RequestTest_js/signature/openharmony_sx.p7b b/request/RequestTest_ets/signature/openharmony_sx.p7b similarity index 100% rename from request/RequestTest_js/signature/openharmony_sx.p7b rename to request/RequestTest_ets/signature/openharmony_sx.p7b diff --git a/request/RequestTest_js/Test.json b/request/RequestTest_js/Test.json deleted file mode 100644 index 2246162fa..000000000 --- a/request/RequestTest_js/Test.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "description": "Configuration for MiscservicesRequestJSApiTest js api Tests", - "driver": { - "type": "JSUnitTest", - "test-timeout": "4200000", - "package": "com.example.myapplication.hmservice", - "shell-timeout": "60000" - }, - "kits": [ - { - "test-file-name": ["ActsMiscservicesRequestJSApiTest.hap"], - "type": "AppInstallKit", - "cleanup-apps": true - }, - { - "type": "ShellKit", - "run-command": [ - "mkdir -p /data/app/el2/100/base/com.example.myapplication.hmservice/haps/entry/cache", - "echo \"123456\" > /data/app/el2/100/base/com.example.myapplication.hmservice/haps/entry/cache/test.txt" - ] - } - ] -} diff --git a/request/RequestTest_js/entry/src/main/config.json b/request/RequestTest_js/entry/src/main/config.json deleted file mode 100644 index 3b09ad691..000000000 --- a/request/RequestTest_js/entry/src/main/config.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "app": { - "bundleName": "com.example.myapplication.hmservice", - "vendor": "example", - "version": { - "code": 1, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 6, - "target": 6, - "releaseType": "Beta1" - } - }, - "deviceConfig": {}, - "module": { - "package": "com.example.myapplication.hmservice", - "name": ".MyApplication", - "mainAbility": "com.example.myapplication.hmservice.MainAbility", - "deviceType": ["phone"], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": true - }, - "abilities": [ - { - "skills": [ - { - "entities": ["entity.system.home"], - "actions": ["action.system.home"] - } - ], - "name": "com.example.myapplication.hmservice.MainAbility", - "icon": "$media:icon", - "description": "$string:mainability_description", - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard", - "visible": true, - "isVisible": "true" - } - ], - "js": [ - { - "pages": ["pages/index/index"], - "name": "default", - "window": { - "designWidth": 720, - "autoDesignWidth": true - } - } - ] - } -} diff --git a/request/RequestTest_js/entry/src/main/js/Test/UploadCallbackXTSJsunit.test.js b/request/RequestTest_js/entry/src/main/js/Test/UploadCallbackXTSJsunit.test.js deleted file mode 100644 index 8f7c4a320..000000000 --- a/request/RequestTest_js/entry/src/main/js/Test/UploadCallbackXTSJsunit.test.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - * 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 {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import request from '@ohos.request'; -import * as pubfun from './Publicfunction.js' - -var typeProgress = 'progress'; -var typeHeaderReceive = 'headerReceive'; -var typeFail = 'fail'; -let uploadTask; -let file7url = 'internal://cache/test.txt'; - -describe('UploadTest', function () { - beforeAll(function () { - console.info('beforeAll: Prerequisites at the test suite level, ' + - 'which are executed before the test suite is executed.'); - }) - beforeEach(function () { - console.info('beforeEach: Prerequisites at the test case level,' + - ' which are executed before each test case is executed.'); - }) - afterEach(function () { - console.info('afterEach: Test case-level clearance conditions, ' + - 'which are executed after each test case is executed.'); - }) - afterAll(function () { - console.info('afterAll: Test suite-level cleanup condition, ' + - 'which is executed after the test suite is executed'); - }) - - /* - * @tc.number : InitUploadtaskCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('InitUploadtaskCallback001', 0, async function (done) { - try { - console.log("Testupdate before getuploadconfig"); - let UploadConfig = pubfun.getUploadConfig(file7url) - console.log("Testupdate before upload UploadConfig = " + JSON.stringify(UploadConfig)); - console.log("Testupdate before upload"); - await pubfun.publicupload(UploadConfig).then((data) => { - console.log("Testupdate going upload uploadTask = " + data); - uploadTask = data; - expect(true).assertEqual((data != undefined) || (data != "") || (data != {})); - done(); - }).catch((err) => { - console.log("InitUploadtaskCallback001 fail 1" + JSON.stringify(err)); - expect(err).assertFail(); - done(); - }) - } catch (e) { - console.log("InitUploadtaskCallback001 fail 2" + JSON.stringify(e)); - expect(e).assertFail(); - done(); - } - }) - - /* - * @tc.number : SwitchOnProgressCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('SwitchOnProgressCallback001', 0, async function (done) { - try { - pubfun.publiconprogress(uploadTask, typeProgress); - expect(true).assertEqual(0 == 0); - done(); - } catch (err) { - console.log("Testupdate SwitchOnProgressCallback001 catch err " + JSON.stringify(err)); - expect(err).assertFail(); - done(); - } - }); - - /* - * @tc.number : SwitchOffProgressCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('SwitchOffProgressCallback001', 0, async function (done) { - try { - pubfun.publiconprogress(uploadTask, typeProgress); - expect(true).assertEqual(0 == 0); - - await pubfun.publicoffprogress(uploadTask, typeProgress).then((data) => { - console.log("SwitchOffProgressCallback001 data" + JSON.stringify(data)); - expect(7).assertEqual(data.totalSize); - done(); - }).catch((err) => { - console.log("SwitchOffProgressCallback001 fail 2" + JSON.stringify(err)); - expect(err).assertFail(); - done(); - }) - } catch (e) { - console.log("SwitchOffProgressCallback001 fail 3" + JSON.stringify(e)); - expect(e).assertFail(); - done(); - } - }) - - /* - * @tc.number : SwitchOnFailCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('SwitchOnFailCallback001', 0, async function (done) { - try { - await pubfun.publicon(uploadTask, typeFail).then((data) => { - console.log("SwitchOnFailCallback001 data " + data); - expect(5).assertEqual(data); - done(); - }).catch((err) => { - console.log("SwitchOnFailCallback001 fail 2" + JSON.stringify(err)); - expect(err).assertFail(); - done(); - }) - } catch (e) { - console.log("SwitchOnFailCallback001 fail 3" + JSON.stringify(e)); - expect(e).assertFail(); - done(); - } - }) - - /* - * @tc.number : SwitchOffFailCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('SwitchOffFailCallback001', 0, async function (done) { - try { - await pubfun.publicon(uploadTask, typeFail) - await pubfun.publicoff(uploadTask, typeFail).then((data) => { - console.log("SwitchOffFailCallback001 data " + data); - expect(5).assertEqual(data); - done(); - }).catch((err) => { - console.log("SwitchOffFailCallback001 fail 2" + JSON.stringify(err)); - done(); - expect(err).assertFail(); - }) - } catch (e) { - console.log("SwitchOffFailCallback001 fail 3" + JSON.stringify(e)); - expect(e).assertFail(); - done(); - } - }) - - /* - * @tc.number : RemoveCallback001 - * @tc.name : Use getEntries get the value by mixing the string key - * @tc.desc : Mixed strings value can be obtained correctly - * @tc.size : MediumTest - * @tc.type : Function - * @tc.level : Level 1 - */ - it('RemoveCallback001', 0, async function (done) { - try { - await pubfun.publicremove(uploadTask).then((data) => { - console.log("RemoveCallback001 data " + data); - expect(true).assertEqual(data); - done(); - }).catch((err) => { - console.log("RemoveCallback001 fail 2" + JSON.stringify(err)); - expect(err).assertFail(); - done(); - }) - } catch (e) { - console.log("RemoveCallback001 fail 3" + JSON.stringify(e)); - expect(e).assertFail(); - done(); - } - }) -}) \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/js/default/app.js b/request/RequestTest_js/entry/src/main/js/default/app.js deleted file mode 100644 index b98633982..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/app.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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/request/RequestTest_js/entry/src/main/js/default/i18n/en-US.json b/request/RequestTest_js/entry/src/main/js/default/i18n/en-US.json deleted file mode 100644 index e63c70d97..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/i18n/en-US.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - } -} \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/js/default/i18n/zh-CN.json b/request/RequestTest_js/entry/src/main/js/default/i18n/zh-CN.json deleted file mode 100644 index de6ee5748..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - } -} \ No newline at end of file diff --git a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.css b/request/RequestTest_js/entry/src/main/js/default/pages/index/index.css deleted file mode 100644 index 5bd756702..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.css +++ /dev/null @@ -1,46 +0,0 @@ -.container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.title { - font-size: 40px; - color: #000000; - opacity: 0.9; -} - -@media screen and (device-type: tablet) and (orientation: landscape) { - .title { - font-size: 100px; - } -} - -@media screen and (device-type: wearable) { - .title { - font-size: 28px; - color: #FFFFFF; - } -} - -@media screen and (device-type: tv) { - .container { - background-image: url("/common/images/Wallpaper.png"); - background-size: cover; - background-repeat: no-repeat; - background-position: center; - } - - .title { - font-size: 100px; - color: #FFFFFF; - } -} - -@media screen and (device-type: phone) and (orientation: landscape) { - .title { - font-size: 60px; - } -} diff --git a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.hml b/request/RequestTest_js/entry/src/main/js/default/pages/index/index.hml deleted file mode 100644 index f64b040a5..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.hml +++ /dev/null @@ -1,5 +0,0 @@ -
- - {{ $t('strings.hello') }} {{ title }} - -
diff --git a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.js b/request/RequestTest_js/entry/src/main/js/default/pages/index/index.js deleted file mode 100644 index f4629924c..000000000 --- a/request/RequestTest_js/entry/src/main/js/default/pages/index/index.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 { Core, ExpectExtend } from 'deccjsunit/index' -import { DataDriver } from 'deccjsunit' - -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', - }) - core.addService('expect', expectExtend) - core.init() - const configService = core.getDefaultService('config') - configService.setConfig(this) - console.log('test start') - require('../../../Test/List.test.js') - core.execute() - this.title = this.$t('strings.bye') - }, - onReady() {}, -} diff --git a/request/RequestTest_js/entry/src/main/resources/base/element/string.json b/request/RequestTest_js/entry/src/main/resources/base/element/string.json deleted file mode 100644 index 0bae6bd40..000000000 --- a/request/RequestTest_js/entry/src/main/resources/base/element/string.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "string": [ - { - "name": "entry_MainAbility", - "value": "entry_MainAbility" - }, - { - "name": "mainability_description", - "value": "JS_Empty Ability" - } - ] -} \ No newline at end of file diff --git a/theme/BUILD.gn b/theme/BUILD.gn old mode 100755 new mode 100644 index 441614e3a..163c39526 --- a/theme/BUILD.gn +++ b/theme/BUILD.gn @@ -15,7 +15,7 @@ import("//build/ohos_var.gni") group("theme") { testonly = true deps = [ - "screenlock_js:ActsScreenLockJSApiTest", - "wallpaper_js:ActsWallpaperJSApiTest", + "screenlock_ets:ActsScreenLockETSApiTest", + "wallpaper_ets:ActsWallpaperETSApiTest", ] } diff --git a/theme/screenlock_ets/BUILD.gn b/theme/screenlock_ets/BUILD.gn new file mode 100644 index 000000000..715afe2f9 --- /dev/null +++ b/theme/screenlock_ets/BUILD.gn @@ -0,0 +1,39 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//test/xts/tools/build/suite.gni") +ohos_js_hap_suite("ActsScreenLockETSApiTest") { + hap_profile = "./entry/src/main/config.json" + deps = [ + ":screenLock_ets_assets", + ":screenLock_ets_resources", + ":screenLock_ets_test_assets", + ] + ets2abc = true + subsystem_name = "theme" + part_name = "screenlock_mgr" + certificate_profile = "./signature/openharmony_sx.p7b" + hap_name = "ActsScreenLockETSApiTest" +} + +ohos_js_assets("screenLock_ets_assets") { + source_dir = "./entry/src/main/ets/MainAbility" +} +ohos_js_assets("screenLock_ets_resources") { + source_dir = "./entry/src/main/ets/TestAbility" +} +ohos_resources("screenLock_ets_test_assets") { + sources = [ "./entry/src/main/resources" ] + hap_profile = "./entry/src/main/config.json" +} diff --git a/theme/screenlock_js/Test.json b/theme/screenlock_ets/Test.json similarity index 62% rename from theme/screenlock_js/Test.json rename to theme/screenlock_ets/Test.json index 3f5461b4d..406968a98 100644 --- a/theme/screenlock_js/Test.json +++ b/theme/screenlock_ets/Test.json @@ -1,15 +1,16 @@ { "description": "Configuration for screenlock js api Tests", "driver": { - "type": "JSUnitTest", + "type": "OHJSUnitTest", "test-timeout": "600000", - "package": "com.ohos.miscscreenlock", + "bundle-name": "com.acts.theme.screenlocktest", + "package-name": "com.acts.theme.screenlocktest", "shell-timeout": "600000" }, "kits": [ { "test-file-name": [ - "ActsScreenLockJSApiTest.hap" + "ActsScreenLockETSApiTest.hap" ], "type": "AppInstallKit", "cleanup-apps": true diff --git a/theme/screenlock_ets/entry/src/main/config.json b/theme/screenlock_ets/entry/src/main/config.json new file mode 100644 index 000000000..1ca5bf79c --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/config.json @@ -0,0 +1,99 @@ +{ + "app": { + "bundleName": "com.acts.theme.screenlocktest", + "vendor": "open", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 7, + "releaseType": "Release", + "target": 9 + } + }, + "deviceConfig": {}, + "module": { + "package": "com.acts.theme.screenlocktest", + "name": ".MyApplication", + "mainAbility": "com.acts.theme.screenlocktest.MainAbility", + + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "srcPath": "TestAbility", + "name": ".TestAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:TestAbility_desc", + "formsEnabled": false, + "label": "$string:TestAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".TestAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/theme/screenlock_ets/entry/src/main/ets/MainAbility/app.ets b/theme/screenlock_ets/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/screenlock_ets/entry/src/main/ets/MainAbility/pages/index.ets b/theme/screenlock_ets/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..eb4afee1d --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,38 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct MyComponent { + aboutToAppear() { + } + + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('SCREENLOCK ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('100%') + } +} + diff --git a/theme/screenlock_ets/entry/src/main/ets/TestAbility/app.ets b/theme/screenlock_ets/entry/src/main/ets/TestAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/TestAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/screenlock_ets/entry/src/main/ets/TestAbility/pages/index.ets b/theme/screenlock_ets/entry/src/main/ets/TestAbility/pages/index.ets new file mode 100644 index 000000000..b2497c3b2 --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/TestAbility/pages/index.ets @@ -0,0 +1,50 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info('TestAbility index aboutToAppear') + } + + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/theme/screenlock_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/theme/screenlock_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..07cb0b784 --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/app.js b/theme/screenlock_ets/entry/src/main/ets/test/List.test.ets similarity index 69% rename from distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/app.js rename to theme/screenlock_ets/entry/src/main/ets/test/List.test.ets index 4b241cccb..fd10a4e7c 100644 --- a/distributeddatamgr/Pasteboardjsapitest/entry/src/main/js/default/app.js +++ b/theme/screenlock_ets/entry/src/main/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,11 +12,11 @@ * 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'); - } -}; + +import screenLockJSUnit from './screenLockTest'; +import ScreenLockPromiseTest from './screenLockPromiseTest'; + +export default function testsuite() { + screenLockJSUnit(); + ScreenLockPromiseTest() +} \ No newline at end of file diff --git a/theme/screenlock_ets/entry/src/main/ets/test/screenLockPromiseTest.ets b/theme/screenlock_ets/entry/src/main/ets/test/screenLockPromiseTest.ets new file mode 100644 index 000000000..0fb0fc74d --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/ets/test/screenLockPromiseTest.ets @@ -0,0 +1,168 @@ +// @ts-nocheck +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import screenLock from '@ohos.screenLock'; +import {describe, expect, it} from 'deccjsunit/index' + +const SLEEP_TIME = 1000; + +export default function ScreenLockPromiseTest(){ + describe('ScreenLockServicePromiseTest', function () { + console.info("-----------------------ScreenlockPromiseTest is starting-----------------------"); + + function sleep(numberMillis) { + var now = new Date(); + var exitTime = now.getTime() + numberMillis; + while (true) { + now = new Date(); + if (now.getTime() > exitTime) + return; + } + } + + /* + * @tc.number ScreenLock_Test_Promise_0100 + * @tc.name Set to locked screen, query the lock screen state is locked state + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_Promise_0100", 0, async function (done) { + console.info("------------------start ScreenLock_Test_Promise_0100-------------------"); + var isScreenLocked = true; + try { + screenLock.isScreenLocked().then((data) => { + console.info("ScreenLock_Test_Promise_0100 isScreenLocked result is " + data); + expect(data == true).assertTrue() + }) + } catch (error) { + console.info("ScreenLock_Test_Promise_0100 test_setScreenLocked : error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_Promise_0100-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_Promise_0200 + * @tc.name Set to unlocked screen, query the lock screen state is unlocked state + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_Promise_0200", 0, async function (done) { + console.info("------------------start ScreenLock_Test_Promise_0200-------------------"); + var isScreenLocked = false; + try { + screenLock.isScreenLocked().then((data) => { + console.info("ScreenLock_Test_Promise_0200 isScreenLocked result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("ScreenLock_Test_Promise_0200 test_setScreenLocked : error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_Promise_0200-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_Promise_0300 + * @tc.name Query whether a password has been set, and return the password that has not been set + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_Promise_0300", 0, async function (done) { + console.info("------------------start ScreenLock_Test_Promise_0300-------------------"); + try { + screenLock.isSecureMode().then((data) => { + console.info("ScreenLock_Test_Promise_0300 isScreenLocked result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("ScreenLock_Test_Promise_0300 isScreenLocked TRUE: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_Promise_0300-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_Promise_0400 + * @tc.name Request to unlock the device screen, unlock successfully + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_Promise_0400", 0, async function (done) { + console.info("------------------start ScreenLock_Test_Promise_0400-------------------"); + try { + screenLock.unlockScreen().then(() => { + console.info("ScreenLock_Test_Promise_0400: send unlockScreen issue success"); + }); + sleep(SLEEP_TIME); + var unlockScreenResult = 0; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult).then((data) => { + console.info("ScreenLock_Test_Promise_0400: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + sleep(SLEEP_TIME); + screenLock.isScreenLocked().then((data) => { + console.info("ScreenLock_Test_Promise_0400: isScreenLocked result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("Screenlock_Test_1400: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_Promise_0400-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_Promise_0500 + * @tc.name Request to unlock device screen, unlock failed + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_Promise_0500", 0, async function (done) { + console.info("------------------start ScreenLock_Test_Promise_0500-------------------"); + try { + screenLock.unlockScreen().then(() => { + console.info("ScreenLock_Test_Promise_0500: send unlockScreen issue success"); + }); + + sleep(SLEEP_TIME); + var unlockScreenResult = 1; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult).then((data) => { + console.info("ScreenLock_Test_Promise_0500: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.isScreenLocked().then((data) => { + console.info("ScreenLock_Test_Promise_0500: isScreenLocked result is " + data); + expect(data == true).assertTrue(); + done(); + }); + } catch (error) { + console.info("logMessage ScreenLock_Test_Promise_0500: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_Promise_0500-------------------"); + done(); + }); + + }) +} diff --git a/theme/screenlock_js/src/main/js/test/screenlock_service_test.js b/theme/screenlock_ets/entry/src/main/ets/test/screenLockTest.ets similarity index 96% rename from theme/screenlock_js/src/main/js/test/screenlock_service_test.js rename to theme/screenlock_ets/entry/src/main/ets/test/screenLockTest.ets index c09d7dc31..40a5036bd 100644 --- a/theme/screenlock_js/src/main/js/test/screenlock_service_test.js +++ b/theme/screenlock_ets/entry/src/main/ets/test/screenLockTest.ets @@ -1,782 +1,784 @@ -// @ts-nocheck -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import screenLock from '@ohos.screenLock'; -import {describe, expect, it} from 'deccjsunit/index' - -const INTERACTIVE_STATE_END_SLEEP = 0; -const INTERACTIVE_STATE_USERID = 2; -const INTERACTIVE_STATE_BEGIN_SLEEP = 3; -const SLEEP_TIME = 1000; - -describe('ScreenLockServiceTest', function () { - console.info("-----------------------ScreenlockTest is starting-----------------------"); - - function sleep(numberMillis) { - var now = new Date(); - var exitTime = now.getTime() + numberMillis; - while (true) { - now = new Date(); - if (now.getTime() > exitTime) - return; - } - } - - /* - * @tc.number ScreenLock_Test_0100 - * @tc.name Set to locked screen, query the lock screen state is locked state - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_0100", 0, async function (done) { - console.info("------------------start ScreenLock_Test_0100-------------------"); - try { - screenLock.isScreenLocked((err, data) => { - console.info("ScreenLock_Test_0100 isScreenLocked's status is " + data); - expect(data == true).assertTrue(); - }); - } catch (error) { - console.info("logMessage ScreenLock_Test_0100: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_0100-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_0200 - * @tc.name Set to unlocked screen, query the lock screen state is unlocked state - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_0200", 0, async function (done) { - console.info("------------------start ScreenLock_Test_0200-------------------"); - try { - screenLock.isScreenLocked((err, data) => { - console.info("ScreenLock_Test_0200 isScreenLocked's status is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("logMessage ScreenLock_Test_0200: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_0200-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_0300 - * @tc.name Query whether a password has been set, and return the password that has not been set - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_0300", 0, async function (done) { - console.info("------------------start ScreenLock_Test_0300-------------------"); - try { - screenLock.isSecureMode((err, data) => { - console.info("ScreenLock_Test_0300 isSecureMode's result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("logMessage ScreenLock_Test_0300: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_0300-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_0400 - * @tc.name Request to unlock the device screen, unlock successfully - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_0400", 0, async function (done) { - console.info("------------------start Screenlock_Test_0400-------------------"); - try { - screenLock.unlockScreen(() => { - console.info("Screenlock_Test_0400: send unlockScreen issue success"); - }); - - sleep(SLEEP_TIME); - var unlockScreenResult = 0; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { - console.info("Screenlock_Test_0400: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.isScreenLocked((err, data) => { - console.info("Screenlock_Test_0400: isScreenLocked result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("Screenlock_Test_1400: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end Screenlock_Test_0400-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_0500 - * @tc.name Request to unlock device screen, unlock failed - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_0500", 0, async function (done) { - console.info("------------------start Screenlock_Test_0500-------------------"); - try { - screenLock.unlockScreen(() => { - console.info("Screenlock_Test_0500: send unlockScreen issue success"); - }); - - sleep(SLEEP_TIME); - var unlockScreenResult = 1; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { - console.info("Screenlock_Test_0500: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.isScreenLocked((err, data) => { - console.info("Screenlock_Test_0500: isScreenLocked result is " + data); - expect(data == true).assertTrue(); - }); - } catch (error) { - console.info("logMessage Screenlock_Test_0500: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end Screenlock_Test_0500-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2100 - * @tc.name After the systemUI is started, it is in the locked state, the lock management sends - the unlock request successfully, and the lock screen application notifies the unlock - success message - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2100", 0, async function (done) { - console.info("------------------start Screenlock_Test_2100-------------------"); - try { - screenLock.isScreenLocked((err, data) => { - console.info("Screenlock_Test_2100: isScreenLocked result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.unlockScreen(() => { - console.info("Screenlock_Test_2100: send unlockScreen issue success"); - }); - - sleep(SLEEP_TIME); - var unlockScreenResult = 0; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { - console.info("Screenlock_Test_2100: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.isScreenLocked((err, data) => { - console.info("Screenlock_Test_2100: isScreenLocked result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("Screenlock_Test_2100: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end Screenlock_Test_2100-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2200 - * @tc.name After systemUI is started, it is currently unlocked - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2200", 0, async function (done) { - console.info("------------------start Screenlock_Test_2200-------------------"); - try { - screenLock.isScreenLocked((err, data) => { - console.info("Screenlock_Test_2200: isScreenLocked is successful, result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("logMessage Screenlock_Test_2200: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_2200-------------------"); - done(); - }); - - - /* - * @tc.number Screenlock_Test_2300 - * @tc.name After the systemUI is started, it is in the locked state, the lock management sends - the unlock request successfully, and the lock screen application notifies the unlock - failed message - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2300", 0, async function (done) { - console.info("------------------start Screenlock_Test_2300-------------------"); - try { - screenLock.isScreenLocked((err, data) => { - console.log("Screenlock_Test_2300: isScreenLocked result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.unlockScreen(() => { - console.log("Screenlock_Test_2300: send unlockScreen issue success"); - }); - - sleep(SLEEP_TIME); - var unlockScreenResult = 1; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { - console.log("Screenlock_Test_2300: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.isScreenLocked((err, data) => { - console.log("Screenlock_Test_2300: isScreenLocked result is " + data); - expect(data == true).assertTrue(); - }); - } catch (error) { - console.info("Screenlock_Test_2300: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end Screenlock_Test_2300-------------------"); - done(); - }); - - - /* - * @tc.number Screenlock_Test_2400 - * @tc.name Device management causes the screen to go off, and run "beginWakeUp" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2400", 0, async function (done) { - console.log("------------------start Screenlock_Test_2400-------------------"); - try { - var eventType = 'beginWakeUp'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2400: test_getRuntimeState beginWakeUp is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2400: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2400-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2500 - * @tc.name Device management causes the screen to go off, and run "endWakeUp" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2500", 0, async function (done) { - console.log("------------------start Screenlock_Test_2500-------------------"); - try { - var eventType = 'endWakeUp'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2500: test_getRuntimeState endWakeUp is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2500: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2500-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2600 - * @tc.name Device management causes the screen to go off, and run "beginScreenOn" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2600", 0, async function (done) { - console.log("------------------start Screenlock_Test_2600-------------------"); - try { - var eventType = 'beginScreenOn'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2600: test_getRuntimeState beginScreenOn is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2600: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2600-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2700 - * @tc.name Device management causes the screen to go off, and run "endScreenOn" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2700", 0, async function (done) { - console.log("------------------start Screenlock_Test_2700-------------------"); - try { - var eventType = 'beginScreenOn'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2700: test_getRuntimeState endScreenOn is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2700: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2700-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2800 - * @tc.name User causes the screen to go off, and run "beginScreenOff" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2800", 0, async function (done) { - console.log("------------------start Screenlock_Test_2800-------------------"); - try { - var eventType = 'beginScreenOff'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2800: test_getRuntimeState beginScreenOff is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2800: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2800-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_2900 - * @tc.name User causes the screen to go off, and run "endScreenOff" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_2900", 0, async function (done) { - console.log("------------------start Screenlock_Test_2900-------------------"); - try { - var eventType = 'endScreenOff'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_2900: test_getRuntimeState endScreenOff is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_2900: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_2900-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3000 - * @tc.name User causes the screen to go off, and run "unlockScreen" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3000", 0, async function (done) { - console.log("------------------start Screenlock_Test_3000-------------------"); - try { - var eventType = 'unlockScreen'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3000: test_getRuntimeState unlockScreen is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3000: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3000-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3100 - * @tc.name User causes the screen to go off, and run "beginExitAnimation" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3100", 0, async function (done) { - console.log("------------------start Screenlock_Test_3100-------------------"); - try { - var eventType = 'beginExitAnimation'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3100: test_getRuntimeState beginExitAnimation is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3100: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3100-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3200 - * @tc.name No operation for a long time causes the screen to go off, and run "screenlockEnabled" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3200", 0, async function (done) { - console.log("------------------start Screenlock_Test_3200-------------------"); - try { - var eventType = 'screenlockEnabled'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3200: test_getRuntimeState screenlockEnabled is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3200: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3200-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3300 - * @tc.name No operation for a long time causes the screen to go off, and run "beginSleep" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3300", 0, async function (done) { - console.log("------------------start Screenlock_Test_3300-------------------"); - try { - var eventType = 'beginSleep'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3300: test_getRuntimeState beginSleep is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3300: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3300-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3400 - * @tc.name No operation for a long time causes the screen to go off, and run "endSleep" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3400", 0, async function (done) { - console.log("------------------start Screenlock_Test_3400-------------------"); - try { - var eventType = 'endSleep'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3400: test_getRuntimeState endSleep is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3400: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3400-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3500 - * @tc.name No operation for a long time causes the screen to go off, and run "changeUser" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3500", 0, async function (done) { - console.log("------------------start Screenlock_Test_3500-------------------"); - try { - var eventType = 'changeUser'; - screenLock.off(eventType, () => { - console.log("Screenlock_Test_3500: test_getRuntimeState changeUser is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3500: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3500-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3600 - * @tc.name Responding to bright screen events, and run "beginWakeUp" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3600", 0, async function (done) { - console.log("------------------start Screenlock_Test_3600-------------------"); - try { - var eventType = 'beginWakeUp'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_3600: test_getRuntimeState beginWakeUp is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3600: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3600-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3700 - * @tc.name Responding to bright screen events, and run "endWakeUp" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3700", 0, async function (done) { - console.log("------------------logMessage Screenlock_Test_3700-------------------"); - try { - var eventType = 'endWakeUp'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_3700: test_getRuntimeState endWakeUp is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3700: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3700-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3800 - * @tc.name Responding to bright screen events, and run "beginScreenOn" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3800", 0, async function (done) { - console.log("------------------start Screenlock_Test_3800-------------------"); - try { - var eventType = 'beginScreenOn'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_3800: test_getRuntimeState beginScreenOn is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3800: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3800-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_3900 - * @tc.name Responding to bright screen events, and run "endScreenOn" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_3900", 0, async function (done) { - console.log("------------------start Screenlock_Test_3900-------------------"); - try { - var eventType = 'endScreenOn'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_3900: test_getRuntimeState endScreenOn is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_3900: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_3900-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4000 - * @tc.name Responding to bright screen events, and run "beginScreenOff" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4000", 0, async function (done) { - console.log("------------------start Screenlock_Test_4000-------------------"); - try { - var eventType = 'beginScreenOff'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_4000: test_getRuntimeState beginScreenOff is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_4000: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4000-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4100 - * @tc.name Responding to bright screen events, and run "endScreenOff" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4100", 0, async function (done) { - console.log("------------------logMessage Screenlock_Test_4100-------------------"); - try { - var eventType = 'endScreenOff'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_4100: test_getRuntimeState endScreenOff is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_4100: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4100-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4200 - * @tc.name Responding to bright screen events, and run "unlockScreen" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4200", 0, async function (done) { - console.log("------------------start Screenlock_Test_4200-------------------"); - try { - var eventType = 'unlockScreen'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_4200: test_getRuntimeState unlockScreen is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_4200: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4200-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4300 - * @tc.name Responding to bright screen events, and run "beginExitAnimation" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4300", 0, async function (done) { - console.log("------------------start Screenlock_Test_4300-------------------"); - try { - var eventType = 'beginExitAnimation'; - screenLock.on(eventType, () => { - console.log("Screenlock_Test_4300: test_getRuntimeState beginExitAnimation is successful" ); - }); - } catch (error) { - console.log("end Screenlock_Test_4300: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4300-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4400 - * @tc.name Responding to bright screen events, and run "beginSleep" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4400", 0, async function (done) { - console.log("------------------start Screenlock_Test_4400-------------------"); - try { - var eventType = 'changeUser'; - screenLock.on(eventType, (err, data) => { - console.log("Screenlock_Test_4400: test_getRuntimeState beginSleep is successful"); - expect(data == INTERACTIVE_STATE_BEGIN_SLEEP).assertTrue(); - }); - } catch (error) { - console.log("logMessage Screenlock_Test_4400: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4400-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4500 - * @tc.name Responding to bright screen events, and run "endSleep" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4500", 0, async function (done) { - console.log("------------------start Screenlock_Test_4500-------------------"); - try { - var eventType = 'endSleep'; - screenLock.test_getRuntimeState(eventType, (err, data) => { - console.log("Screenlock_Test_4500: test_getRuntimeState endSleep is successful"); - expect(data == INTERACTIVE_STATE_END_SLEEP).assertTrue(); - }); - } catch (error) { - console.log("logMessage Screenlock_Test_4500: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4500-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4600 - * @tc.name Responding to bright screen events, and run "changeUser" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4600", 0, async function (done) { - console.log("------------------start Screenlock_Test_4600-------------------"); - try { - var eventType = 'changeUser'; - screenLock.test_getRuntimeState(eventType, (err, data) => { - console.log("Screenlock_Test_4600: test_getRuntimeState changeUser is successfuls"); - expect(data == INTERACTIVE_STATE_USERID).assertTrue(); - }); - } catch (error) { - console.log("logMessage Screenlock_Test_4600: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4600-------------------"); - done(); - }); - - /* - * @tc.number Screenlock_Test_4700 - * @tc.name Responding to bright screen events, and run "screenlockEnabled" operate - * @tc.desc Function test - * @tc.level 0 - */ - it("Screenlock_Test_4700", 0, async function (done) { - console.log("------------------start Screenlock_Test_4700-------------------"); - try { - var eventType = 'screenlockEnabled'; - screenLock.test_getRuntimeState(eventType, (err, data) => { - console.log("Screenlock_Test_4700: test_getRuntimeState screenlockEnabled is successfuls"); - expect(data == true).assertTrue(); - }); - } catch (error) { - console.log("logMessage Screenlock_Test_4700: error = " + error); - expect(true).assertTrue(); - } - console.log("------------------end Screenlock_Test_4700-------------------"); - done(); - }); -}) \ No newline at end of file +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import screenLock from '@ohos.screenLock'; +import {describe, expect, it} from "hypium/index"; + +export default function screenLockJSUnit() { + const INTERACTIVE_STATE_END_SLEEP = 0; + const INTERACTIVE_STATE_USERID = 2; + const INTERACTIVE_STATE_BEGIN_SLEEP = 3; + const SLEEP_TIME = 1000; + + describe('ScreenLockServiceTest', function () { + console.info("-----------------------ScreenlockTest is starting-----------------------"); + + function sleep(numberMillis) { + var now = new Date(); + var exitTime = now.getTime() + numberMillis; + while (true) { + now = new Date(); + if (now.getTime() > exitTime) + return; + } + } + + /* + * @tc.number ScreenLock_Test_0100 + * @tc.name Set to locked screen, query the lock screen state is locked state + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_0100", 0, async function (done) { + console.info("------------------start ScreenLock_Test_0100-------------------"); + try { + screenLock.isScreenLocked((err, data) => { + console.info("ScreenLock_Test_0100 isScreenLocked's status is " + data); + expect(data == true).assertTrue(); + }); + } catch (error) { + console.info("logMessage ScreenLock_Test_0100: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_0100-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_0200 + * @tc.name Set to unlocked screen, query the lock screen state is unlocked state + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_0200", 0, async function (done) { + console.info("------------------start ScreenLock_Test_0200-------------------"); + try { + screenLock.isScreenLocked((err, data) => { + console.info("ScreenLock_Test_0200 isScreenLocked's status is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("logMessage ScreenLock_Test_0200: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_0200-------------------"); + done(); + }); + + /* + * @tc.number ScreenLock_Test_0300 + * @tc.name Query whether a password has been set, and return the password that has not been set + * @tc.desc Function test + * @tc.level 0 + */ + it("ScreenLock_Test_0300", 0, async function (done) { + console.info("------------------start ScreenLock_Test_0300-------------------"); + try { + screenLock.isSecureMode((err, data) => { + console.info("ScreenLock_Test_0300 isSecureMode's result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("logMessage ScreenLock_Test_0300: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_0300-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_0400 + * @tc.name Request to unlock the device screen, unlock successfully + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_0400", 0, async function (done) { + console.info("------------------start Screenlock_Test_0400-------------------"); + try { + screenLock.unlockScreen(() => { + console.info("Screenlock_Test_0400: send unlockScreen issue success"); + }); + + sleep(SLEEP_TIME); + var unlockScreenResult = 0; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { + console.info("Screenlock_Test_0400: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.isScreenLocked((err, data) => { + console.info("Screenlock_Test_0400: isScreenLocked result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("Screenlock_Test_1400: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end Screenlock_Test_0400-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_0500 + * @tc.name Request to unlock device screen, unlock failed + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_0500", 0, async function (done) { + console.info("------------------start Screenlock_Test_0500-------------------"); + try { + screenLock.unlockScreen(() => { + console.info("Screenlock_Test_0500: send unlockScreen issue success"); + }); + + sleep(SLEEP_TIME); + var unlockScreenResult = 1; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { + console.info("Screenlock_Test_0500: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.isScreenLocked((err, data) => { + console.info("Screenlock_Test_0500: isScreenLocked result is " + data); + expect(data == true).assertTrue(); + }); + } catch (error) { + console.info("logMessage Screenlock_Test_0500: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end Screenlock_Test_0500-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2100 + * @tc.name After the systemUI is started, it is in the locked state, the lock management sends + the unlock request successfully, and the lock screen application notifies the unlock + success message + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2100", 0, async function (done) { + console.info("------------------start Screenlock_Test_2100-------------------"); + try { + screenLock.isScreenLocked((err, data) => { + console.info("Screenlock_Test_2100: isScreenLocked result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.unlockScreen(() => { + console.info("Screenlock_Test_2100: send unlockScreen issue success"); + }); + + sleep(SLEEP_TIME); + var unlockScreenResult = 0; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { + console.info("Screenlock_Test_2100: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.isScreenLocked((err, data) => { + console.info("Screenlock_Test_2100: isScreenLocked result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("Screenlock_Test_2100: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end Screenlock_Test_2100-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2200 + * @tc.name After systemUI is started, it is currently unlocked + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2200", 0, async function (done) { + console.info("------------------start Screenlock_Test_2200-------------------"); + try { + screenLock.isScreenLocked((err, data) => { + console.info("Screenlock_Test_2200: isScreenLocked is successful, result is " + data); + expect(data == false).assertTrue(); + }); + } catch (error) { + console.info("logMessage Screenlock_Test_2200: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end ScreenLock_Test_2200-------------------"); + done(); + }); + + + /* + * @tc.number Screenlock_Test_2300 + * @tc.name After the systemUI is started, it is in the locked state, the lock management sends + the unlock request successfully, and the lock screen application notifies the unlock + failed message + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2300", 0, async function (done) { + console.info("------------------start Screenlock_Test_2300-------------------"); + try { + screenLock.isScreenLocked((err, data) => { + console.log("Screenlock_Test_2300: isScreenLocked result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.unlockScreen(() => { + console.log("Screenlock_Test_2300: send unlockScreen issue success"); + }); + + sleep(SLEEP_TIME); + var unlockScreenResult = 1; + var eventType = 'unlockScreenResult'; + screenLock.sendScreenLockEvent(eventType, unlockScreenResult, (err, data) => { + console.log("Screenlock_Test_2300: sendScreenLockEvent result is " + data); + expect(data == true).assertTrue(); + }); + + sleep(SLEEP_TIME); + screenLock.isScreenLocked((err, data) => { + console.log("Screenlock_Test_2300: isScreenLocked result is " + data); + expect(data == true).assertTrue(); + }); + } catch (error) { + console.info("Screenlock_Test_2300: error = " + error); + expect(true).assertTrue(); + } + console.info("------------------end Screenlock_Test_2300-------------------"); + done(); + }); + + + /* + * @tc.number Screenlock_Test_2400 + * @tc.name Device management causes the screen to go off, and run "beginWakeUp" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2400", 0, async function (done) { + console.log("------------------start Screenlock_Test_2400-------------------"); + try { + var eventType = 'beginWakeUp'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2400: test_getRuntimeState beginWakeUp is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2400: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2400-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2500 + * @tc.name Device management causes the screen to go off, and run "endWakeUp" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2500", 0, async function (done) { + console.log("------------------start Screenlock_Test_2500-------------------"); + try { + var eventType = 'endWakeUp'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2500: test_getRuntimeState endWakeUp is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2500: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2500-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2600 + * @tc.name Device management causes the screen to go off, and run "beginScreenOn" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2600", 0, async function (done) { + console.log("------------------start Screenlock_Test_2600-------------------"); + try { + var eventType = 'beginScreenOn'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2600: test_getRuntimeState beginScreenOn is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2600: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2600-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2700 + * @tc.name Device management causes the screen to go off, and run "endScreenOn" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2700", 0, async function (done) { + console.log("------------------start Screenlock_Test_2700-------------------"); + try { + var eventType = 'beginScreenOn'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2700: test_getRuntimeState endScreenOn is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2700: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2700-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2800 + * @tc.name User causes the screen to go off, and run "beginScreenOff" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2800", 0, async function (done) { + console.log("------------------start Screenlock_Test_2800-------------------"); + try { + var eventType = 'beginScreenOff'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2800: test_getRuntimeState beginScreenOff is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2800: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2800-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_2900 + * @tc.name User causes the screen to go off, and run "endScreenOff" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_2900", 0, async function (done) { + console.log("------------------start Screenlock_Test_2900-------------------"); + try { + var eventType = 'endScreenOff'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_2900: test_getRuntimeState endScreenOff is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_2900: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_2900-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3000 + * @tc.name User causes the screen to go off, and run "unlockScreen" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3000", 0, async function (done) { + console.log("------------------start Screenlock_Test_3000-------------------"); + try { + var eventType = 'unlockScreen'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3000: test_getRuntimeState unlockScreen is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3000: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3000-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3100 + * @tc.name User causes the screen to go off, and run "beginExitAnimation" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3100", 0, async function (done) { + console.log("------------------start Screenlock_Test_3100-------------------"); + try { + var eventType = 'beginExitAnimation'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3100: test_getRuntimeState beginExitAnimation is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3100: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3100-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3200 + * @tc.name No operation for a long time causes the screen to go off, and run "screenlockEnabled" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3200", 0, async function (done) { + console.log("------------------start Screenlock_Test_3200-------------------"); + try { + var eventType = 'screenlockEnabled'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3200: test_getRuntimeState screenlockEnabled is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3200: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3200-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3300 + * @tc.name No operation for a long time causes the screen to go off, and run "beginSleep" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3300", 0, async function (done) { + console.log("------------------start Screenlock_Test_3300-------------------"); + try { + var eventType = 'beginSleep'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3300: test_getRuntimeState beginSleep is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3300: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3300-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3400 + * @tc.name No operation for a long time causes the screen to go off, and run "endSleep" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3400", 0, async function (done) { + console.log("------------------start Screenlock_Test_3400-------------------"); + try { + var eventType = 'endSleep'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3400: test_getRuntimeState endSleep is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3400: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3400-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3500 + * @tc.name No operation for a long time causes the screen to go off, and run "changeUser" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3500", 0, async function (done) { + console.log("------------------start Screenlock_Test_3500-------------------"); + try { + var eventType = 'changeUser'; + screenLock.off(eventType, () => { + console.log("Screenlock_Test_3500: test_getRuntimeState changeUser is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3500: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3500-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3600 + * @tc.name Responding to bright screen events, and run "beginWakeUp" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3600", 0, async function (done) { + console.log("------------------start Screenlock_Test_3600-------------------"); + try { + var eventType = 'beginWakeUp'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_3600: test_getRuntimeState beginWakeUp is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3600: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3600-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3700 + * @tc.name Responding to bright screen events, and run "endWakeUp" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3700", 0, async function (done) { + console.log("------------------logMessage Screenlock_Test_3700-------------------"); + try { + var eventType = 'endWakeUp'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_3700: test_getRuntimeState endWakeUp is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3700: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3700-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3800 + * @tc.name Responding to bright screen events, and run "beginScreenOn" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3800", 0, async function (done) { + console.log("------------------start Screenlock_Test_3800-------------------"); + try { + var eventType = 'beginScreenOn'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_3800: test_getRuntimeState beginScreenOn is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3800: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3800-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_3900 + * @tc.name Responding to bright screen events, and run "endScreenOn" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_3900", 0, async function (done) { + console.log("------------------start Screenlock_Test_3900-------------------"); + try { + var eventType = 'endScreenOn'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_3900: test_getRuntimeState endScreenOn is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_3900: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_3900-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4000 + * @tc.name Responding to bright screen events, and run "beginScreenOff" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4000", 0, async function (done) { + console.log("------------------start Screenlock_Test_4000-------------------"); + try { + var eventType = 'beginScreenOff'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_4000: test_getRuntimeState beginScreenOff is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_4000: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4000-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4100 + * @tc.name Responding to bright screen events, and run "endScreenOff" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4100", 0, async function (done) { + console.log("------------------logMessage Screenlock_Test_4100-------------------"); + try { + var eventType = 'endScreenOff'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_4100: test_getRuntimeState endScreenOff is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_4100: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4100-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4200 + * @tc.name Responding to bright screen events, and run "unlockScreen" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4200", 0, async function (done) { + console.log("------------------start Screenlock_Test_4200-------------------"); + try { + var eventType = 'unlockScreen'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_4200: test_getRuntimeState unlockScreen is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_4200: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4200-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4300 + * @tc.name Responding to bright screen events, and run "beginExitAnimation" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4300", 0, async function (done) { + console.log("------------------start Screenlock_Test_4300-------------------"); + try { + var eventType = 'beginExitAnimation'; + screenLock.on(eventType, () => { + console.log("Screenlock_Test_4300: test_getRuntimeState beginExitAnimation is successful" ); + }); + } catch (error) { + console.log("end Screenlock_Test_4300: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4300-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4400 + * @tc.name Responding to bright screen events, and run "beginSleep" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4400", 0, async function (done) { + console.log("------------------start Screenlock_Test_4400-------------------"); + try { + var eventType = 'changeUser'; + screenLock.on(eventType, (err, data) => { + console.log("Screenlock_Test_4400: test_getRuntimeState beginSleep is successful"); + expect(data == INTERACTIVE_STATE_BEGIN_SLEEP).assertTrue(); + }); + } catch (error) { + console.log("logMessage Screenlock_Test_4400: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4400-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4500 + * @tc.name Responding to bright screen events, and run "endSleep" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4500", 0, async function (done) { + console.log("------------------start Screenlock_Test_4500-------------------"); + try { + var eventType = 'endSleep'; + screenLock.test_getRuntimeState(eventType, (err, data) => { + console.log("Screenlock_Test_4500: test_getRuntimeState endSleep is successful"); + expect(data == INTERACTIVE_STATE_END_SLEEP).assertTrue(); + }); + } catch (error) { + console.log("logMessage Screenlock_Test_4500: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4500-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4600 + * @tc.name Responding to bright screen events, and run "changeUser" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4600", 0, async function (done) { + console.log("------------------start Screenlock_Test_4600-------------------"); + try { + var eventType = 'changeUser'; + screenLock.test_getRuntimeState(eventType, (err, data) => { + console.log("Screenlock_Test_4600: test_getRuntimeState changeUser is successfuls"); + expect(data == INTERACTIVE_STATE_USERID).assertTrue(); + }); + } catch (error) { + console.log("logMessage Screenlock_Test_4600: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4600-------------------"); + done(); + }); + + /* + * @tc.number Screenlock_Test_4700 + * @tc.name Responding to bright screen events, and run "screenlockEnabled" operate + * @tc.desc Function test + * @tc.level 0 + */ + it("Screenlock_Test_4700", 0, async function (done) { + console.log("------------------start Screenlock_Test_4700-------------------"); + try { + var eventType = 'screenlockEnabled'; + screenLock.test_getRuntimeState(eventType, (err, data) => { + console.log("Screenlock_Test_4700: test_getRuntimeState screenlockEnabled is successfuls"); + expect(data == true).assertTrue(); + }); + } catch (error) { + console.log("logMessage Screenlock_Test_4700: error = " + error); + expect(true).assertTrue(); + } + console.log("------------------end Screenlock_Test_4700-------------------"); + done(); + }); + }) +} diff --git a/theme/screenlock_ets/entry/src/main/resources/base/element/string.json b/theme/screenlock_ets/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..498677efb --- /dev/null +++ b/theme/screenlock_ets/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + }, + { + "name": "TestAbility_desc", + "value": "description" + }, + { + "name": "TestAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/resources/base/media/icon.png b/theme/screenlock_ets/entry/src/main/resources/base/media/icon.png similarity index 100% rename from theme/screenlock_js/src/main/resources/base/media/icon.png rename to theme/screenlock_ets/entry/src/main/resources/base/media/icon.png diff --git a/theme/wallpaper_js/signature/openharmony_sx.p7b b/theme/screenlock_ets/signature/openharmony_sx.p7b similarity index 50% rename from theme/wallpaper_js/signature/openharmony_sx.p7b rename to theme/screenlock_ets/signature/openharmony_sx.p7b index 66b4457a8a81fb8d3356cf46d67226c850944858..9be1e98fa4c0c28ca997ed660112fa16b194f0f5 100644 GIT binary patch delta 1005 zcmY+DO>Em_7{`}1ZRwPNG(;tKX)y;R+NO5CnoJtweQnovT03zP=fldOw&TQ!9XoaG zI5tC-a;T6%NL4Oq2R05voM2*HkdV;0Ax$7n)8K}XKyZOc?64COZqbT3zQ6zTd-NWj z|C7sqTs}f)iT={c>&Nu*(?n!BdTW*tLsXAOBG?OPVrk{zn2x9mv1nxR0y^i4{kOQm;GnH?;@iI|qNC3PLu4y{}^o64afetQ#f{L$%tTQyW^tRnMxWIbVN z*0`fiRKpsn_IxLDZM8(;IFM64;4u*N7_wF=i$XAeFY@sbHz2XL$r4P!)r53IQ#dvt zy^sdyYye%BAA308BI-O(kzSFg4ah1B0R=FD#35U3n_{}I$-|B=r?MtnAw9x7o2E%m z3nZ%Uszc3?2PDse%)ge#(p8~ywA-OVu}1RYC!R&qv*=kOu#h=Zz?9vW)6kHInx+h~ ziEQd#qXufQryOefpwu?YJOg2`clIjtEQB7115g2bf$G*UlH|!r&ZD$c*Ofgw@C!{> zbUeN0Hkkq4M78X+ZK|BwlNBC^9l`Fj2yEKIn<5Sa($-shX5Qi%#^gF~YTplbEsXI5 z0(4=ItJ77MqzKSxn>|>QHCyS=XAAkGwz-Q3g=v=#nyBG7b(*VSYAGXjt?dnY!~&1P z@k6T0W(p9n1mpoBdcYF_y3maApPpA02-Y89(s0CCi@IjU{CB^q!U%jlzxs?<7!Wt#473tCqp@*8?Z zA$(3S_MB4Pw9~Y{A2jpDLMJ=6l|nGSI=>!Ey`)a1;mA;vLqEJ&qpwJ($9nfsOkBQ* zqqE4hupFp9mloCe&G_>3|1Zh>^LX+ILvvUbO{Mecyohd}cV;DqA+dGu;i~cpcCYm~ z`o-;ygDY#z8`p)OKYb|wb@I(;Kjhze7rnUjT-e9&uErLkF$yK4>voBFHNN)ew@!LE zdGn^t;gj#hzl$HrhsB>BzaM|?jp!>EzRW1zqXqWI8%W~P+KYFrUw`}P;NC&`_6K+F MkH7x?LGzb?0ItqZ1poj5 delta 988 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

-!Awc_yZD~-<2&{Tp_+cHBt5; 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 z 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�-(Z_N>V@h1j{y+fMeg0 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 Oy{mub!poU|hyMrO6nYW> diff --git a/theme/screenlock_js/src/main/js/default/i18n/en-US.json b/theme/screenlock_js/src/main/js/default/i18n/en-US.json deleted file mode 100644 index e63c70d97..000000000 --- a/theme/screenlock_js/src/main/js/default/i18n/en-US.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - } -} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/js/default/i18n/zh-CN.json b/theme/screenlock_js/src/main/js/default/i18n/zh-CN.json deleted file mode 100644 index de6ee5748..000000000 --- a/theme/screenlock_js/src/main/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - } -} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/js/default/pages/index/index.hml b/theme/screenlock_js/src/main/js/default/pages/index/index.hml deleted file mode 100644 index 4b91ca46b..000000000 --- a/theme/screenlock_js/src/main/js/default/pages/index/index.hml +++ /dev/null @@ -1,19 +0,0 @@ - -

- - {{ $t('strings.hello') }} {{ title }} - -
diff --git a/theme/screenlock_js/src/main/js/default/pages/index/index.js b/theme/screenlock_js/src/main/js/default/pages/index/index.js deleted file mode 100644 index 50b814823..000000000 --- a/theme/screenlock_js/src/main/js/default/pages/index/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 app from '@system.app' -import file from '@system.file' -import {Core} from 'deccjsunit/index' - -export default { - data: {title: ""}, - onInit() { - this.title = this.$t('strings.world'); - }, - onShow() { - console.info('onShow finish') - const core = Core.getInstance() - core.init() - const configService = core.getDefaultService('config') - configService.setConfig(this) - require('../../../test/List.test') - core.execute() - } -} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/js/test/List.test.js b/theme/screenlock_js/src/main/js/test/List.test.js deleted file mode 100644 index 2dcc2fdbf..000000000 --- a/theme/screenlock_js/src/main/js/test/List.test.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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('./screenlock_service_test.js'); -require('./screenlock_service_test_promise.js'); diff --git a/theme/screenlock_js/src/main/js/test/screenlock_service_test_promise.js b/theme/screenlock_js/src/main/js/test/screenlock_service_test_promise.js deleted file mode 100644 index 7f8ad52ce..000000000 --- a/theme/screenlock_js/src/main/js/test/screenlock_service_test_promise.js +++ /dev/null @@ -1,166 +0,0 @@ -// @ts-nocheck -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import screenLock from '@ohos.screenLock'; -import {describe, expect, it} from 'deccjsunit/index' - -const SLEEP_TIME = 1000; - -describe('ScreenLockServicePromiseTest', function () { - console.info("-----------------------ScreenlockPromiseTest is starting-----------------------"); - - function sleep(numberMillis) { - var now = new Date(); - var exitTime = now.getTime() + numberMillis; - while (true) { - now = new Date(); - if (now.getTime() > exitTime) - return; - } - } - - /* - * @tc.number ScreenLock_Test_Promise_0100 - * @tc.name Set to locked screen, query the lock screen state is locked state - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_Promise_0100", 0, async function (done) { - console.info("------------------start ScreenLock_Test_Promise_0100-------------------"); - var isScreenLocked = true; - try { - screenLock.isScreenLocked().then((data) => { - console.info("ScreenLock_Test_Promise_0100 isScreenLocked result is " + data); - expect(data == true).assertTrue() - }) - } catch (error) { - console.info("ScreenLock_Test_Promise_0100 test_setScreenLocked : error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_Promise_0100-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_Promise_0200 - * @tc.name Set to unlocked screen, query the lock screen state is unlocked state - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_Promise_0200", 0, async function (done) { - console.info("------------------start ScreenLock_Test_Promise_0200-------------------"); - var isScreenLocked = false; - try { - screenLock.isScreenLocked().then((data) => { - console.info("ScreenLock_Test_Promise_0200 isScreenLocked result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("ScreenLock_Test_Promise_0200 test_setScreenLocked : error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_Promise_0200-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_Promise_0300 - * @tc.name Query whether a password has been set, and return the password that has not been set - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_Promise_0300", 0, async function (done) { - console.info("------------------start ScreenLock_Test_Promise_0300-------------------"); - try { - screenLock.isSecureMode().then((data) => { - console.info("ScreenLock_Test_Promise_0300 isScreenLocked result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("ScreenLock_Test_Promise_0300 isScreenLocked TRUE: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_Promise_0300-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_Promise_0400 - * @tc.name Request to unlock the device screen, unlock successfully - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_Promise_0400", 0, async function (done) { - console.info("------------------start ScreenLock_Test_Promise_0400-------------------"); - try { - screenLock.unlockScreen().then(() => { - console.info("ScreenLock_Test_Promise_0400: send unlockScreen issue success"); - }); - sleep(SLEEP_TIME); - var unlockScreenResult = 0; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult).then((data) => { - console.info("ScreenLock_Test_Promise_0400: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - sleep(SLEEP_TIME); - screenLock.isScreenLocked().then((data) => { - console.info("ScreenLock_Test_Promise_0400: isScreenLocked result is " + data); - expect(data == false).assertTrue(); - }); - } catch (error) { - console.info("Screenlock_Test_1400: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_Promise_0400-------------------"); - done(); - }); - - /* - * @tc.number ScreenLock_Test_Promise_0500 - * @tc.name Request to unlock device screen, unlock failed - * @tc.desc Function test - * @tc.level 0 - */ - it("ScreenLock_Test_Promise_0500", 0, async function (done) { - console.info("------------------start ScreenLock_Test_Promise_0500-------------------"); - try { - screenLock.unlockScreen().then(() => { - console.info("ScreenLock_Test_Promise_0500: send unlockScreen issue success"); - }); - - sleep(SLEEP_TIME); - var unlockScreenResult = 1; - var eventType = 'unlockScreenResult'; - screenLock.sendScreenLockEvent(eventType, unlockScreenResult).then((data) => { - console.info("ScreenLock_Test_Promise_0500: sendScreenLockEvent result is " + data); - expect(data == true).assertTrue(); - }); - - sleep(SLEEP_TIME); - screenLock.isScreenLocked().then((data) => { - console.info("ScreenLock_Test_Promise_0500: isScreenLocked result is " + data); - expect(data == true).assertTrue(); - done(); - }); - } catch (error) { - console.info("logMessage ScreenLock_Test_Promise_0500: error = " + error); - expect(true).assertTrue(); - } - console.info("------------------end ScreenLock_Test_Promise_0500-------------------"); - done(); - }); - -}) \ No newline at end of file diff --git a/theme/screenlock_js/src/main/resources/base/element/string.json b/theme/screenlock_js/src/main/resources/base/element/string.json deleted file mode 100644 index 6353a8a89..000000000 --- a/theme/screenlock_js/src/main/resources/base/element/string.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "string": [ - { - "name": "entry_MainAbility", - "value": "screenLock" - }, - { - "name": "mainability_description", - "value": "JS_Empty screenLock" - } - ] -} \ No newline at end of file diff --git a/theme/wallpaper_ets/BUILD.gn b/theme/wallpaper_ets/BUILD.gn new file mode 100644 index 000000000..46487916a --- /dev/null +++ b/theme/wallpaper_ets/BUILD.gn @@ -0,0 +1,39 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//test/xts/tools/build/suite.gni") +ohos_js_hap_suite("ActsWallpaperETSApiTest") { + hap_profile = "./entry/src/main/config.json" + deps = [ + ":wallPaper_ets_assets", + ":wallPaper_ets_resources", + ":wallPaper_ets_test_assets", + ] + ets2abc = true + subsystem_name = "theme" + part_name = "wallpaper_mgr" + certificate_profile = "./signature/ActsWallpaperEtsAPITest.p7b" + hap_name = "ActsWallpaperETSApiTest" +} + +ohos_js_assets("wallPaper_ets_assets") { + source_dir = "./entry/src/main/ets/MainAbility" +} +ohos_js_assets("wallPaper_ets_resources") { + source_dir = "./entry/src/main/ets/TestAbility" +} +ohos_resources("wallPaper_ets_test_assets") { + sources = [ "./entry/src/main/resources" ] + hap_profile = "./entry/src/main/config.json" +} diff --git a/theme/wallpaper_js/Test.json b/theme/wallpaper_ets/Test.json similarity index 62% rename from theme/wallpaper_js/Test.json rename to theme/wallpaper_ets/Test.json index 4fb2b6f57..59199b627 100644 --- a/theme/wallpaper_js/Test.json +++ b/theme/wallpaper_ets/Test.json @@ -1,15 +1,16 @@ { "description": "Configuration for wallpaper js api Tests", "driver": { - "type": "JSUnitTest", + "type": "OHJSUnitTest", "test-timeout": "600000", - "package": "com.xts.wpxts", + "bundle-name": "com.acts.theme.wallpapertest", + "package-name": "com.acts.theme.wallpapertest", "shell-timeout": "600000" }, "kits": [ { "test-file-name": [ - "ActsWallpaperJSApiTest.hap" + "ActsWallpaperETSApiTest.hap" ], "type": "AppInstallKit", "cleanup-apps": true diff --git a/theme/wallpaper_ets/entry/src/main/config.json b/theme/wallpaper_ets/entry/src/main/config.json new file mode 100644 index 000000000..b4f940dc8 --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/config.json @@ -0,0 +1,110 @@ +{ + "app": { + "bundleName": "com.acts.theme.wallpapertest", + "vendor": "open", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 7, + "releaseType": "Release", + "target": 9 + } + }, + "deviceConfig": {}, + "module": { + "package": "com.acts.theme.wallpapertest", + "name": ".MyApplication", + "mainAbility": "com.acts.theme.wallpapertest.MainAbility", + + "deviceType": [ + "phone", + "tablet", + "tv", + "wearable" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "srcPath": "TestAbility", + "name": ".TestAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:TestAbility_desc", + "formsEnabled": false, + "label": "$string:TestAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "reqPermissions": [ + { + "name": "ohos.permission.SET_WALLPAPER" + }, + { + "name": "ohos.permission.GET_WALLPAPER" + } + ], + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".TestAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/theme/wallpaper_ets/entry/src/main/ets/MainAbility/app.ets b/theme/wallpaper_ets/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/screenlock_js/src/main/js/default/pages/index/index.css b/theme/wallpaper_ets/entry/src/main/ets/MainAbility/pages/index.ets similarity index 57% rename from theme/screenlock_js/src/main/js/default/pages/index/index.css rename to theme/wallpaper_ets/entry/src/main/ets/MainAbility/pages/index.ets index a6bb21f7f..f76e64e54 100644 --- a/theme/screenlock_js/src/main/js/default/pages/index/index.css +++ b/theme/wallpaper_ets/entry/src/main/ets/MainAbility/pages/index.ets @@ -1,5 +1,6 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,25 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} -.title { - font-size: 40px; - background-color: green; - color: #000000; - opacity: 0.9; -} +@Entry +@Component +struct MyComponent { + aboutToAppear() { + } -.button{ - margin-top: 50px; - background-color: green; - font-size: 25px; - color: white; - padding: 10px; + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('WALLPAPER ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('100%') + } } + diff --git a/theme/wallpaper_ets/entry/src/main/ets/TestAbility/app.ets b/theme/wallpaper_ets/entry/src/main/ets/TestAbility/app.ets new file mode 100644 index 000000000..2e4e48f73 --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/ets/TestAbility/app.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from 'hypium/index' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('Application onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/theme/wallpaper_ets/entry/src/main/ets/TestAbility/pages/index.ets b/theme/wallpaper_ets/entry/src/main/ets/TestAbility/pages/index.ets new file mode 100644 index 000000000..b2497c3b2 --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/ets/TestAbility/pages/index.ets @@ -0,0 +1,50 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info('TestAbility index aboutToAppear') + } + + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/theme/wallpaper_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/theme/wallpaper_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..07cb0b784 --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/theme/wallpaper_js/src/main/js/Test/List.test.js b/theme/wallpaper_ets/entry/src/main/ets/test/List.test.ets similarity index 78% rename from theme/wallpaper_js/src/main/js/Test/List.test.js rename to theme/wallpaper_ets/entry/src/main/ets/test/List.test.ets index 32f283ffa..11551f27a 100644 --- a/theme/wallpaper_js/src/main/js/Test/List.test.js +++ b/theme/wallpaper_ets/entry/src/main/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,4 +12,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -require("./Wallpaper/WallpaperJsunit.test.js") \ No newline at end of file + +import wallpaperJSUnit from './wallpaperTest'; + +export default function testsuite() { + wallpaperJSUnit(); +} \ No newline at end of file diff --git a/theme/wallpaper_ets/entry/src/main/ets/test/wallpaperTest.ets b/theme/wallpaper_ets/entry/src/main/ets/test/wallpaperTest.ets new file mode 100644 index 000000000..e1138aa0b --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/ets/test/wallpaperTest.ets @@ -0,0 +1,614 @@ +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import wallpaper from '@ohos.wallpaper' +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' + +const WALLPAPER_SYSTEM = 0; +const WALLPAPER_LOCKSCREEN = 1; +var imageSourceSystem = '/data/service/el1/public/wallpaper/0/system/wallpaper'; +var imageSourceLockscreen = '/data/service/el1/public/wallpaper/0/lockscreen/wallpaper_lock'; + +export default function wallpaperJSUnit() { + describe('WallpaperJsunitTest', function () { + beforeAll(async function () { + console.info('beforeAll: Prerequisites at the test suite level, ' + + 'which are executed before the test suite is executed.'); + }) + beforeEach(function () { + console.info('beforeEach: Prerequisites at the test case level, ' + + 'which are executed before each test case is executed.'); + }) + afterEach(function () { + console.info('afterEach: Test case-level clearance conditions,' + + ' which are executed after each test case is executed.'); + }) + afterAll(function () { + console.info('afterAll: Test suite-level cleanup condition, ' + + 'which is executed after the test suite is executed'); + }) + + /* + * @tc.number testWALLPAPER_SYSTEM + * @tc.name Test WALLPAPER_SYSTEM value + * @tc.desc Function test + * @tc.level 0 + */ + it('testWALLPAPER_SYSTEM', 0, async function (done) { + console.info('wallpaperXTS ===> testWALLPAPER_SYSTEM : ' + + JSON.stringify(wallpaper.WallpaperType.WALLPAPER_SYSTEM)); + expect(wallpaper.WallpaperType.WALLPAPER_SYSTEM == 0).assertTrue(); + done(); + }) + + /* + * @tc.number testWALLPAPER_LOCKSCREEN + * @tc.name Test WALLPAPER_LOCKSCREEN value + * @tc.desc Function test + * @tc.level 0 + */ + it('testWALLPAPER_LOCKSCREEN', 0, async function (done) { + console.info('wallpaperXTS ===> testWALLPAPER_LOCKSCREEN : ' + + JSON.stringify(wallpaper.WallpaperType.WALLPAPER_LOCKSCREEN)); + expect(wallpaper.WallpaperType.WALLPAPER_LOCKSCREEN == 1).assertTrue(); + done(); + }) + + /* + * @tc.number testGetColorsCallbackSystem101 + * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetColorsCallbackSystem101', 0, async function (done) { + await wallpaper.getColors(WALLPAPER_SYSTEM, function (err, data) { + console.info('wallpaperXTS ===> testGetColorsCallbackSystem err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + JSON.stringify(data)); + console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][0]); + console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][1]); + console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][2]); + console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][3]); + + + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetColorsPromiseSystem101 + * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetColorsPromiseSystem101', 0, async function (done) { + await wallpaper.getColors(WALLPAPER_SYSTEM).then((data) => { + console.info('wallpaperXTS ===> testGetColorsPromiseSystem data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetColorsPromiseSystem err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testGetColorsCallbackLock102 + * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetColorsCallbackLock102', 0, async function (done) { + await wallpaper.getColors(WALLPAPER_LOCKSCREEN, function (err, data) { + console.info('wallpaperXTS ===> testGetColorsCallbackLock err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetColorsCallbackLock data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetColorsPromiseLock102 + * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetColorsPromiseLock102', 0, async function (done) { + await wallpaper.getColors(WALLPAPER_LOCKSCREEN).then((data) => { + console.info('wallpaperXTS ===> testGetColorsCallbackLock data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetColorsCallbackLock err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testGetColorsPromiseLock102 + * @tc.name Test getId() to the ID of the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetIdCallbackSystem101', 0, async function (done) { + await wallpaper.getId(WALLPAPER_SYSTEM, function (err, data) { + console.info('wallpaperXTS ===> testGetIdCallbackSystem err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetIdCallbackSystem data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetIdPromiseSystem101 + * @tc.name Test getId() to the ID of the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetIdPromiseSystem101', 0, async function (done) { + await wallpaper.getId(WALLPAPER_SYSTEM).then((data) => { + console.info('wallpaperXTS ===> testGetIdCallbackSystem data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetIdCallbackSystem err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testGetIdCallbackLock102 + * @tc.name Test getId() to the ID of the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetIdCallbackLock102', 0, async function (done) { + await wallpaper.getId(WALLPAPER_LOCKSCREEN, function (err, data) { + console.info('wallpaperXTS ===> testGetIdCallbackLock err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetIdCallbackLock data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetIdPromiseLock102 + * @tc.name Test getId() to the ID of the wallpaper of the specified type. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetIdPromiseLock102', 0, async function (done) { + await wallpaper.getId(WALLPAPER_LOCKSCREEN).then((data) => { + console.info('wallpaperXTS ===> testGetIdCallbackLock data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetIdCallbackLock err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testGetMinHeightCallback101 + * @tc.name Test getMinHeight() to the minimum width of the wallpaper. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetMinHeightCallback101', 0, async function (done) { + await wallpaper.getMinHeight(function (err, data) { + console.info('wallpaperXTS ===> testGetMinHeightCallback err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetMinHeightCallback data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetMinHeightPromise101 + * @tc.name Test getMinHeight() to the minimum width of the wallpaper. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetMinHeightPromise101', 0, async function (done) { + await wallpaper.getMinHeight().then((data) => { + console.info('wallpaperXTS ===> testGetMinHeightPromise data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetMinHeightPromise err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testGetMinWidthCallback101 + * @tc.name Test getMinHeight() to the minimum width of the wallpaper. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetMinWidthCallback101', 0, async function (done) { + await wallpaper.getMinWidth(function (err, data) { + console.info('wallpaperXTS ===> testGetMinWidthCallback err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testGetMinWidthCallback data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testGetMinWidthPromise101 + * @tc.name Test getMinHeight() to the minimum width of the wallpaper. + * @tc.desc Function test + * @tc.level 0 + */ + it('testGetMinWidthPromise101', 0, async function (done) { + await wallpaper.getMinWidth().then((data) => { + console.info('wallpaperXTS ===> testGetMinWidthPromise data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testGetMinWidthPromise err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testIsChangePermittedCallback101 + * @tc.name Test isChangePermitted() to checks whether to allow the application to change the + wallpaper for the current user. + * @tc.desc Function test + * @tc.level 0 + */ + it('testIsChangePermittedCallback101', 0, async function (done) { + await wallpaper.isChangePermitted(function (err, data) { + console.info('wallpaperXTS ===> testIsChangePermittedCallback err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testIsChangePermittedCallback data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testIsChangePermittedPromise101 + * @tc.name Test isChangePermitted() to checks whether to allow the application to change the + wallpaper for the current user. + * @tc.desc Function test + * @tc.level 0 + */ + it('testIsChangePermittedPromise101', 0, async function (done) { + await wallpaper.isChangePermitted().then((data) => { + console.info('wallpaperXTS ===> testIsChangePermittedPromise data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testIsChangePermittedPromise err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testIsOperationAllowedCallback101 + * @tc.name Test isOperationAllowed() to checks whether a user is allowed to set wallpapers. + * @tc.desc Function test + * @tc.level 0 + */ + it('testIsOperationAllowedCallback101', 0, async function (done) { + await wallpaper.isOperationAllowed(function (err, data) { + console.info('wallpaperXTS ===> testIsOperationAllowedCallback err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testIsOperationAllowedCallback data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testIsOperationAllowedPromise101 + * @tc.name Test isOperationAllowed() to checks whether a user is allowed to set wallpapers. + * @tc.desc Function test + * @tc.level 0 + */ + it('testIsOperationAllowedPromise101', 0, async function (done) { + await wallpaper.isOperationAllowed().then((data) => { + console.info('wallpaperXTS ===> testIsOperationAllowedPromise data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }).catch((err) => { + console.info('wallpaperXTS ===> testIsOperationAllowedPromise err : ' + JSON.stringify(err)); + if (err) { + expect(null).assertFail(); + } + }); + done(); + }) + + /* + * @tc.number testResetCallbackSystem101 + * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. + * @tc.desc Function test + * @tc.level 0 + */ + it('testResetCallbackSystem101', 0, async function (done) { + await wallpaper.reset(WALLPAPER_SYSTEM, function (err, data) { + console.info('wallpaperXTS ===> testResetCallbackSystem err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testResetCallbackSystem data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testResetPromiseSystem101 + * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. + * @tc.desc Function test + * @tc.level 0 + */ + it('testResetPromiseSystem101', 0, async function (done) { + await wallpaper.reset(WALLPAPER_SYSTEM).then((data) => { + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + done(); + }).catch((err) => { + expect(true).assertTrue(); + done(); + }); + }) + + /* + * @tc.number testResetCallbackLock102 + * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. + * @tc.desc Function test + * @tc.level 0 + */ + it('testResetCallbackLock102', 0, async function (done) { + await wallpaper.reset(WALLPAPER_LOCKSCREEN, function (err, data) { + console.info('wallpaperXTS ===> testResetCallbackLock err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testResetCallbackLock data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testResetPromiseLock102 + * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. + * @tc.desc Function test + * @tc.level 0 + */ + it('testResetPromiseLock102', 0, async function (done) { + await wallpaper.reset(WALLPAPER_LOCKSCREEN).then((data) => { + console.info('wallpaperXTS ===> testResetPromiseLock data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + done(); + }).catch((err) => { + console.info('wallpaperXTS ===> testResetPromiseLock--- err : ' + JSON.stringify(err)); + expect(true).assertTrue(); + done(); + }); + }) + + /* + * @tc.number testSetWallpaperURLPromiseLock104 + * @tc.name Test setPixelMap() to sets a wallpaper of the specified type based on the uri path from a + JPEG or PNG file or the pixel map of a PNG file. + * @tc.desc Function test + * @tc.level 0 + */ + it('testSetWallpaperURLPromiseLock104', 0, async function (done) { + await wallpaper.setWallpaper(imageSourceLockscreen, WALLPAPER_LOCKSCREEN).then((data) => { + console.info('wallpaperXTS ===> testSetWallpaperURLPromiseLock data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + done(); + }).catch((err) => { + console.info('wallpaperXTS ===> testSetWallpaperURLPromiseLock err : ' + JSON.stringify(err)); + expect(true).assertTrue(); + done(); + }); + }) + + /* + * @tc.number testSetWallpaperURLCallbackSystem103 + * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a + JPEG or PNG file or the pixel map of a PNG file. + * @tc.desc Function test + * @tc.level 0 + */ + it('testSetWallpaperURLCallbackSystem103', 0, async function (done) { + await wallpaper.setWallpaper(imageSourceSystem, WALLPAPER_SYSTEM, function (err, data) { + console.info('wallpaperXTS ===> testSetWallpaperURLCallbackSystem err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testSetWallpaperURLCallbackSystem data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }); + done(); + }) + + /* + * @tc.number testSetWallpaperURLPromiseSystem103 + * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a + JPEG or PNG file or the pixel map of a PNG file. + * @tc.desc Function test + * @tc.level 0 + */ + it('testSetWallpaperURLPromiseSystem103', 0, function (done) { + if(true) { + expect(true).assertTrue(); + done(); + return; + } + wallpaper.setWallpaper(imageSourceSystem, WALLPAPER_SYSTEM).then((data) => { + console.info('wallpaperXTS ===> testSetWallpaperURLPromiseSystem data : ' + JSON.stringify(data)); + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + done(); + }).catch((err) => { + console.info('wallpaperXTS ===> testSetWallpaperURLPromiseSystem err : ' + JSON.stringify(err)); + expect(true).assertTrue(); + done(); + }); + }) + + /* + * @tc.number testSetWallpaperURLCallbackLock104 + * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a + JPEG or PNG file or the pixel map of a PNG file. + * @tc.desc Function test + * @tc.level 0 + */ + it('testSetWallpaperURLCallbackLock104', 0, async function (done) { + await wallpaper.setWallpaper(imageSourceLockscreen, WALLPAPER_LOCKSCREEN, function (err, data) { + console.info('wallpaperXTS ===> testSetWallpaperURLCallbackLock err : ' + JSON.stringify(err)); + console.info('wallpaperXTS ===> testSetWallpaperURLCallbackLock data : ' + JSON.stringify(data)); + if (err) { + expect(null).assertFail(); + } + if ((data != undefined) && (data != null) && (data != '')) { + expect(true).assertTrue(); + } + }); + done(); + }) + + /* + * @tc.number testOnCallback101 + * @tc.name Test on_colorChange to registers a listener for wallpaper color changes to + receive notifications about the changes. + * @tc.desc Function test + * @tc.level 0 + */ + it('testOnCallback101', 0, async function (done) { + await wallpaper.on('colorChange', function (colors, wallpaperType) { + console.info('wallpaperXTS ===> testOnCallback colors : ' + JSON.stringify(colors)); + console.info('wallpaperXTS ===> testOnCallback wallpaperType : ' + JSON.stringify(wallpaperType)); + if ((colors != undefined) && (colors != null) && (colors != '')) { + expect(true).assertTrue(); + } + if ((wallpaperType != undefined) && (wallpaperType != null) && (wallpaperType != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + + /* + * @tc.number testOffCallback101 + * @tc.name Test on_colorChange to registers a listener for wallpaper color changes to + receive notifications about the changes. + * @tc.desc Function test + * @tc.level 0 + */ + it('testOffCallback101', 0, async function (done) { + await wallpaper.off('colorChange', function (colors, wallpaperType) { + console.info('wallpaperXTS ===> testOffCallback colors : ' + JSON.stringify(colors)); + console.info('wallpaperXTS ===> testOffCallback wallpaperType : ' + JSON.stringify(wallpaperType)); + if ((colors != undefined) && (colors != null) && (colors != '')) { + expect(true).assertTrue(); + } + if ((wallpaperType != undefined) && (wallpaperType != null) && (wallpaperType != '')) { + expect(true).assertTrue(); + } + }) + done(); + }) + }) +} diff --git a/theme/wallpaper_ets/entry/src/main/resources/base/element/string.json b/theme/wallpaper_ets/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..498677efb --- /dev/null +++ b/theme/wallpaper_ets/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + }, + { + "name": "TestAbility_desc", + "value": "description" + }, + { + "name": "TestAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/theme/wallpaper_js/src/main/resources/base/media/icon.png b/theme/wallpaper_ets/entry/src/main/resources/base/media/icon.png similarity index 100% rename from theme/wallpaper_js/src/main/resources/base/media/icon.png rename to theme/wallpaper_ets/entry/src/main/resources/base/media/icon.png diff --git a/theme/screenlock_js/signature/openharmony_sx.p7b b/theme/wallpaper_ets/signature/ActsWallpaperEtsAPITest.p7b similarity index 51% rename from theme/screenlock_js/signature/openharmony_sx.p7b rename to theme/wallpaper_ets/signature/ActsWallpaperEtsAPITest.p7b index 66b4457a8a81fb8d3356cf46d67226c850944858..ee7d66c3f07a361051fd687bef57669195da824c 100644 GIT binary patch delta 1446 zcmY*ZO^n+_7*(>#mMyHr0SUn(H4TSC)oh(?yqgqO>Wu9;PBKZnNj94_&^q?SaqQTM z?Zio16lo9Th)~1oNq?d11k~PS7b* z<18R(3AAP-e_*wuTbvM92k2YX0#JVtD= z`=ZEmUXHEyxLV6ZP~btl#xbf_Sj>VO&m)dYd(Ap6G!AlZJ3-SzX3uEUsY%NeW}pkz z;ywfj@%rLU@YI|uLIjfsY*m;dR`rT3M|7x)JY-ltIy**>Fi&E+0s{Kd6Lt|JQprh% z1(o}KEyPf1uVp^$kM?vg<1N3tz(QD-`TbFa&rI9(^k|MNu-2?+TvSoLoVpaTEKHYM z=EE|gf^rr*QoYz!cw^kwV5M1~7>$FXfik+sd5vt|Y6`O+#Q?D(_|Gkqyscg_av`^5M8(gN8M&&*@FQn;u%akhV8Pe%Q z1GL-4ZjwKmox*t{gTNektbgh~stm;Jc?if=s~8}N`~fRDQAFfAfW@5E!1Wt+cA^f|8gJxnr@SxdGeyge;%(DunW+M&C34lGSm_k^Yl zE4V49+>y}ZaxBf)iu6G{n;K>~R~P!U#EEppGvdWGIYzU@m#P&V8@YCMpxczUySum+ zIz<9`6rSVI%T|9=l3i!h?czS(^d!R=NF+)wc3eMe(!d}Yi#k)s#r?~&AKfK7h;^{! zj+RM|cF7VrQjkRv^e5n9q@(3_xD^YpoH%)rIt;u>b{(ZJq%dB*^B6NvQOS5bzC~>{sq+u^-C8If4Mm<< zx%ui^<+&&2)s=HEpZ??XAAY&^=DqKR8|!-$V0>jHsFSOYkWKp8ZfGSK%1~@Da`17( zzWWVmJ@ez&>d(Kwar3DU&dlF_)_(1Fy^d`q6c`+f+h8_K%{2K8IqVLf}o?~*DRTym-Bfonbq-Q z^WLfF34hHQ8(q!RBu^uzH~XiCgza7HSiWYsl8>w7{8h>9s2zWexVTPOwx5(W-FC+v zv-wQ!LN=YvP4DWG?rScVFXZx>`8h1VHBHEYrJ7o@W9jxdUDZ}K({?mBxjPc?XcjBE zecM{YebkQUyCWfXa%9AaAsQ44K-LTpau66CE%Alf0R<2=jFon;%U1+}0$~jx21SJd zC_$rKhoC8fUYT!Ms49fC(WL5vaG4JMio(=`MW(nWFXaPGq?Zv?7?7&bg$N1a95m%# zyRGz7tFqNI>P)@eQY=}dyQo0#+CYS)r)@$5hB9Mzn~ka?r!$5?(jnVc%BV|+s0-Hc z5F!`xB8rxZ0h0)`j+HJNDvv1i8IQ+GwF=J=G*)M9|p#GEW@s#7-T*Oo9HM zfW(%?lB1X7XNSd-DdVA)bS+#Gfd~y{e?=S|ud8M4Eet^zmJ0xga+5Czg0qy>)n1b= zXR@ngV-B!VluCCiP^Br`D^|JXl-B4+d~>kKw5(EybdPPzYALw*ZmpH#V0Q|07 z$U&gzXb4aNWOMFtoV@|w9S^KRH5LN)KFPoSqSoWxmGtM1i~RxD6BAx zD3izO6chj@0T3<=Tm(wKL{@~flcBg^*6~`_0#X+Wlp$nmY|12IroyzLi43)q9_Tr% zm-ifLKnvU~*(isO?&k!+h3sMg(o33I@66gQYXHn5nWHSZnF>Xh`X=9bL+K-U+r8F7G8RA$9U{0e|&L^JbLgjzHHxJN=(EPELn`da^PY0l6w2= ztDm2_LT4ZUx%tDnE$#bv-@o7g#u$o`|_8!zy0jNp}Wui1L9u6wEzGB diff --git a/theme/wallpaper_js/BUILD.gn b/theme/wallpaper_js/BUILD.gn deleted file mode 100644 index fe9e4c3d8..000000000 --- a/theme/wallpaper_js/BUILD.gn +++ /dev/null @@ -1,31 +0,0 @@ -# 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("ActsWallpaperJSApiTest") { - hap_profile = "./src/main/config.json" - deps = [ - ":hjs_demo_js_assets", - ":hjs_demo_resources", - ] - certificate_profile = "./signature/openharmony_sx.p7b" - hap_name = "ActsWallpaperJSApiTest" -} -ohos_js_assets("hjs_demo_js_assets") { - source_dir = "./src/main/js/default" -} -ohos_resources("hjs_demo_resources") { - sources = [ "./src/main/resources" ] - hap_profile = "./src/main/config.json" -} diff --git a/theme/wallpaper_js/src/main/config.json b/theme/wallpaper_js/src/main/config.json deleted file mode 100644 index 6e7f3b17c..000000000 --- a/theme/wallpaper_js/src/main/config.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "app": { - "bundleName": "com.xts.wpxts", - "vendor": "xts", - "version": { - "code": 1000000, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 8, - "target": 8, - "releaseType": "Release" - } - }, - "deviceConfig": {}, - "module": { - "package": "com.xts.wpxts", - "name": ".MyApplication", - "deviceType": [ - "phone", - "tablet", - "tv", - "wearable" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": false - }, - "abilities": [ - { - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "visible": true, - "name": "com.xts.wpxts.MainAbility", - "icon": "$media:icon", - "description": "$string:mainability_description", - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard" - } - ], - "reqPermissions": [ - { - "name": "ohos.permission.SET_WALLPAPER" - }, - { - "name": "ohos.permission.GET_WALLPAPER" - }, - { - "name": "ohos.permission.READ_USER_STORAGE" - } - ], - "js": [ - { - "pages": [ - "pages/index/index" - ], - "name": "default", - "window": { - "designWidth": 720, - "autoDesignWidth": true - } - } - ] - } -} diff --git a/theme/wallpaper_js/src/main/js/Test/Wallpaper/WallpaperJsunit.test.js b/theme/wallpaper_js/src/main/js/Test/Wallpaper/WallpaperJsunit.test.js deleted file mode 100644 index b1378b8ad..000000000 --- a/theme/wallpaper_js/src/main/js/Test/Wallpaper/WallpaperJsunit.test.js +++ /dev/null @@ -1,611 +0,0 @@ -/* - * 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 {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import wallpaper from '@ohos.wallpaper' - -const WALLPAPER_SYSTEM = 0; -const WALLPAPER_LOCKSCREEN = 1; -var imageSourceSystem = '/data/service/el1/public/wallpaper/0/system/wallpaper'; -var imageSourceLockscreen = '/data/service/el1/public/wallpaper/0/lockscreen/wallpaper_lock'; - -describe('WallpaperJsunitTest', function () { - beforeAll(async function () { - console.info('beforeAll: Prerequisites at the test suite level, ' + - 'which are executed before the test suite is executed.'); - }) - beforeEach(function () { - console.info('beforeEach: Prerequisites at the test case level, ' + - 'which are executed before each test case is executed.'); - }) - afterEach(function () { - console.info('afterEach: Test case-level clearance conditions,' + - ' which are executed after each test case is executed.'); - }) - afterAll(function () { - console.info('afterAll: Test suite-level cleanup condition, ' + - 'which is executed after the test suite is executed'); - }) - - /* - * @tc.number testWALLPAPER_SYSTEM - * @tc.name Test WALLPAPER_SYSTEM value - * @tc.desc Function test - * @tc.level 0 - */ - it('testWALLPAPER_SYSTEM', 0, async function (done) { - console.info('wallpaperXTS ===> testWALLPAPER_SYSTEM : ' + - JSON.stringify(wallpaper.WallpaperType.WALLPAPER_SYSTEM)); - expect(wallpaper.WallpaperType.WALLPAPER_SYSTEM == 0).assertTrue(); - done(); - }) - - /* - * @tc.number testWALLPAPER_LOCKSCREEN - * @tc.name Test WALLPAPER_LOCKSCREEN value - * @tc.desc Function test - * @tc.level 0 - */ - it('testWALLPAPER_LOCKSCREEN', 0, async function (done) { - console.info('wallpaperXTS ===> testWALLPAPER_LOCKSCREEN : ' + - JSON.stringify(wallpaper.WallpaperType.WALLPAPER_LOCKSCREEN)); - expect(wallpaper.WallpaperType.WALLPAPER_LOCKSCREEN == 1).assertTrue(); - done(); - }) - - /* - * @tc.number testGetColorsCallbackSystem101 - * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetColorsCallbackSystem101', 0, async function (done) { - await wallpaper.getColors(WALLPAPER_SYSTEM, function (err, data) { - console.info('wallpaperXTS ===> testGetColorsCallbackSystem err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + JSON.stringify(data)); - console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][0]); - console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][1]); - console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][2]); - console.info('wallpaperXTS ===> testGetColorsCallbackSystem data : ' + data[0][3]); - - - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetColorsPromiseSystem101 - * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetColorsPromiseSystem101', 0, async function (done) { - await wallpaper.getColors(WALLPAPER_SYSTEM).then((data) => { - console.info('wallpaperXTS ===> testGetColorsPromiseSystem data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetColorsPromiseSystem err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testGetColorsCallbackLock102 - * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetColorsCallbackLock102', 0, async function (done) { - await wallpaper.getColors(WALLPAPER_LOCKSCREEN, function (err, data) { - console.info('wallpaperXTS ===> testGetColorsCallbackLock err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetColorsCallbackLock data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetColorsPromiseLock102 - * @tc.name Test getColors() to obtains the wallpaper colors for the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetColorsPromiseLock102', 0, async function (done) { - await wallpaper.getColors(WALLPAPER_LOCKSCREEN).then((data) => { - console.info('wallpaperXTS ===> testGetColorsCallbackLock data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetColorsCallbackLock err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testGetColorsPromiseLock102 - * @tc.name Test getId() to the ID of the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetIdCallbackSystem101', 0, async function (done) { - await wallpaper.getId(WALLPAPER_SYSTEM, function (err, data) { - console.info('wallpaperXTS ===> testGetIdCallbackSystem err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetIdCallbackSystem data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetIdPromiseSystem101 - * @tc.name Test getId() to the ID of the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetIdPromiseSystem101', 0, async function (done) { - await wallpaper.getId(WALLPAPER_SYSTEM).then((data) => { - console.info('wallpaperXTS ===> testGetIdCallbackSystem data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetIdCallbackSystem err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testGetIdCallbackLock102 - * @tc.name Test getId() to the ID of the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetIdCallbackLock102', 0, async function (done) { - await wallpaper.getId(WALLPAPER_LOCKSCREEN, function (err, data) { - console.info('wallpaperXTS ===> testGetIdCallbackLock err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetIdCallbackLock data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetIdPromiseLock102 - * @tc.name Test getId() to the ID of the wallpaper of the specified type. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetIdPromiseLock102', 0, async function (done) { - await wallpaper.getId(WALLPAPER_LOCKSCREEN).then((data) => { - console.info('wallpaperXTS ===> testGetIdCallbackLock data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetIdCallbackLock err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testGetMinHeightCallback101 - * @tc.name Test getMinHeight() to the minimum width of the wallpaper. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetMinHeightCallback101', 0, async function (done) { - await wallpaper.getMinHeight(function (err, data) { - console.info('wallpaperXTS ===> testGetMinHeightCallback err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetMinHeightCallback data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetMinHeightPromise101 - * @tc.name Test getMinHeight() to the minimum width of the wallpaper. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetMinHeightPromise101', 0, async function (done) { - await wallpaper.getMinHeight().then((data) => { - console.info('wallpaperXTS ===> testGetMinHeightPromise data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetMinHeightPromise err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testGetMinWidthCallback101 - * @tc.name Test getMinHeight() to the minimum width of the wallpaper. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetMinWidthCallback101', 0, async function (done) { - await wallpaper.getMinWidth(function (err, data) { - console.info('wallpaperXTS ===> testGetMinWidthCallback err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testGetMinWidthCallback data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testGetMinWidthPromise101 - * @tc.name Test getMinHeight() to the minimum width of the wallpaper. - * @tc.desc Function test - * @tc.level 0 - */ - it('testGetMinWidthPromise101', 0, async function (done) { - await wallpaper.getMinWidth().then((data) => { - console.info('wallpaperXTS ===> testGetMinWidthPromise data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testGetMinWidthPromise err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testIsChangePermittedCallback101 - * @tc.name Test isChangePermitted() to checks whether to allow the application to change the - wallpaper for the current user. - * @tc.desc Function test - * @tc.level 0 - */ - it('testIsChangePermittedCallback101', 0, async function (done) { - await wallpaper.isChangePermitted(function (err, data) { - console.info('wallpaperXTS ===> testIsChangePermittedCallback err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testIsChangePermittedCallback data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testIsChangePermittedPromise101 - * @tc.name Test isChangePermitted() to checks whether to allow the application to change the - wallpaper for the current user. - * @tc.desc Function test - * @tc.level 0 - */ - it('testIsChangePermittedPromise101', 0, async function (done) { - await wallpaper.isChangePermitted().then((data) => { - console.info('wallpaperXTS ===> testIsChangePermittedPromise data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testIsChangePermittedPromise err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testIsOperationAllowedCallback101 - * @tc.name Test isOperationAllowed() to checks whether a user is allowed to set wallpapers. - * @tc.desc Function test - * @tc.level 0 - */ - it('testIsOperationAllowedCallback101', 0, async function (done) { - await wallpaper.isOperationAllowed(function (err, data) { - console.info('wallpaperXTS ===> testIsOperationAllowedCallback err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testIsOperationAllowedCallback data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testIsOperationAllowedPromise101 - * @tc.name Test isOperationAllowed() to checks whether a user is allowed to set wallpapers. - * @tc.desc Function test - * @tc.level 0 - */ - it('testIsOperationAllowedPromise101', 0, async function (done) { - await wallpaper.isOperationAllowed().then((data) => { - console.info('wallpaperXTS ===> testIsOperationAllowedPromise data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }).catch((err) => { - console.info('wallpaperXTS ===> testIsOperationAllowedPromise err : ' + JSON.stringify(err)); - if (err) { - expect(null).assertFail(); - } - }); - done(); - }) - - /* - * @tc.number testResetCallbackSystem101 - * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. - * @tc.desc Function test - * @tc.level 0 - */ - it('testResetCallbackSystem101', 0, async function (done) { - await wallpaper.reset(WALLPAPER_SYSTEM, function (err, data) { - console.info('wallpaperXTS ===> testResetCallbackSystem err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testResetCallbackSystem data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testResetPromiseSystem101 - * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. - * @tc.desc Function test - * @tc.level 0 - */ - it('testResetPromiseSystem101', 0, async function (done) { - wallpaper.reset(WALLPAPER_SYSTEM).then((data) => { - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - done(); - }).catch((err) => { - expect(true).assertTrue(); - done(); - }); - }) - - /* - * @tc.number testResetCallbackLock102 - * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. - * @tc.desc Function test - * @tc.level 0 - */ - it('testResetCallbackLock102', 0, async function (done) { - await wallpaper.reset(WALLPAPER_LOCKSCREEN, function (err, data) { - console.info('wallpaperXTS ===> testResetCallbackLock err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testResetCallbackLock data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testResetPromiseLock102 - * @tc.name Test reset() to removes a wallpaper of the specified type and restores the default one. - * @tc.desc Function test - * @tc.level 0 - */ - it('testResetPromiseLock102', 0, async function (done) { - await wallpaper.reset(WALLPAPER_LOCKSCREEN).then((data) => { - console.info('wallpaperXTS ===> testResetPromiseLock data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - done(); - }).catch((err) => { - console.info('wallpaperXTS ===> testResetPromiseLock--- err : ' + JSON.stringify(err)); - expect(true).assertTrue(); - done(); - }); - }) - - /* - * @tc.number testSetWallpaperURLPromiseLock104 - * @tc.name Test setPixelMap() to sets a wallpaper of the specified type based on the uri path from a - JPEG or PNG file or the pixel map of a PNG file. - * @tc.desc Function test - * @tc.level 0 - */ - it('testSetWallpaperURLPromiseLock104', 0, async function (done) { - await wallpaper.setWallpaper(imageSourceLockscreen, WALLPAPER_LOCKSCREEN).then((data) => { - console.info('wallpaperXTS ===> testSetWallpaperURLPromiseLock data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - done(); - }).catch((err) => { - console.info('wallpaperXTS ===> testSetWallpaperURLPromiseLock err : ' + JSON.stringify(err)); - expect(true).assertTrue(); - done(); - }); - }) - - /* - * @tc.number testSetWallpaperURLCallbackSystem103 - * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a - JPEG or PNG file or the pixel map of a PNG file. - * @tc.desc Function test - * @tc.level 0 - */ - it('testSetWallpaperURLCallbackSystem103', 0, async function (done) { - await wallpaper.setWallpaper(imageSourceSystem, WALLPAPER_SYSTEM, function (err, data) { - console.info('wallpaperXTS ===> testSetWallpaperURLCallbackSystem err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testSetWallpaperURLCallbackSystem data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }); - done(); - }) - - /* - * @tc.number testSetWallpaperURLPromiseSystem103 - * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a - JPEG or PNG file or the pixel map of a PNG file. - * @tc.desc Function test - * @tc.level 0 - */ - it('testSetWallpaperURLPromiseSystem103', 0, function (done) { - if(true) { - expect(true).assertTrue(); - done(); - return; - } - wallpaper.setWallpaper(imageSourceSystem, WALLPAPER_SYSTEM).then((data) => { - console.info('wallpaperXTS ===> testSetWallpaperURLPromiseSystem data : ' + JSON.stringify(data)); - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - done(); - }).catch((err) => { - console.info('wallpaperXTS ===> testSetWallpaperURLPromiseSystem err : ' + JSON.stringify(err)); - expect(true).assertTrue(); - done(); - }); - }) - - /* - * @tc.number testSetWallpaperURLCallbackLock104 - * @tc.name Test setWallpaper() to sets a wallpaper of the specified type based on the uri path from a - JPEG or PNG file or the pixel map of a PNG file. - * @tc.desc Function test - * @tc.level 0 - */ - it('testSetWallpaperURLCallbackLock104', 0, async function (done) { - await wallpaper.setWallpaper(imageSourceLockscreen, WALLPAPER_LOCKSCREEN, function (err, data) { - console.info('wallpaperXTS ===> testSetWallpaperURLCallbackLock err : ' + JSON.stringify(err)); - console.info('wallpaperXTS ===> testSetWallpaperURLCallbackLock data : ' + JSON.stringify(data)); - if (err) { - expect(null).assertFail(); - } - if ((data != undefined) && (data != null) && (data != '')) { - expect(true).assertTrue(); - } - }); - done(); - }) - - /* - * @tc.number testOnCallback101 - * @tc.name Test on_colorChange to registers a listener for wallpaper color changes to - receive notifications about the changes. - * @tc.desc Function test - * @tc.level 0 - */ - it('testOnCallback101', 0, async function (done) { - await wallpaper.on('colorChange', function (colors, wallpaperType) { - console.info('wallpaperXTS ===> testOnCallback colors : ' + JSON.stringify(colors)); - console.info('wallpaperXTS ===> testOnCallback wallpaperType : ' + JSON.stringify(wallpaperType)); - if ((colors != undefined) && (colors != null) && (colors != '')) { - expect(true).assertTrue(); - } - if ((wallpaperType != undefined) && (wallpaperType != null) && (wallpaperType != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) - - /* - * @tc.number testOffCallback101 - * @tc.name Test on_colorChange to registers a listener for wallpaper color changes to - receive notifications about the changes. - * @tc.desc Function test - * @tc.level 0 - */ - it('testOffCallback101', 0, async function (done) { - await wallpaper.off('colorChange', function (colors, wallpaperType) { - console.info('wallpaperXTS ===> testOffCallback colors : ' + JSON.stringify(colors)); - console.info('wallpaperXTS ===> testOffCallback wallpaperType : ' + JSON.stringify(wallpaperType)); - if ((colors != undefined) && (colors != null) && (colors != '')) { - expect(true).assertTrue(); - } - if ((wallpaperType != undefined) && (wallpaperType != null) && (wallpaperType != '')) { - expect(true).assertTrue(); - } - }) - done(); - }) -}) diff --git a/theme/wallpaper_js/src/main/js/default/common/images/Wallpaper.png b/theme/wallpaper_js/src/main/js/default/common/images/Wallpaper.png deleted file mode 100644 index 60d4841a80eb20c63de74306cb7f8350d6a85c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155181 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

-!Awc_yZD~-<2&{Tp_+cHBt5; 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 z zx7{xN2m|?Udd3paFL9H941XIEf4FuaS;0;N%u|CH{0l6RzYo&GHGBJo!H5KIvdqZ=K7EcQNK{iwo$=z z;jrP3rqT;7v1$a9L5O_5l*p=$AsA9&r36<7m{jm*tTa4u#JMtXna>4(mafct7Nb3t zEwF{RWr}>4s$uH`Tx;9!GBj0uk}z=SJodIVW#TI%^L-;Is7rwrksTYY^5!ZEer>9} zi`*tLRcCiup{rzz_$oi}n7)wEwq_Mx$^LNXuwH7u@9mQ7#m;uVg0NdOkh(^iNys`o zj)hyHe*}dxeE$c@@^W3cqZgjx$o#Bv=!>5WVi=rOU))d@*gksbguLmKYuw`VCO2CM z-ma)e!F=P_QTZq9U&&K`IE19cho~cC-#SN}dM+W79G0^aDN*isVb*Fp#lW-oP1kYl zyNtA3Uj8dp>c?xvqU<$A-8awqqnb-&M)V2-P-7oYGtl37!;{yG&~<)y1`Dad?oq4- zq!qnr>`(*!Z3a2`lvc4FbC}=4&WmH~v0)T1wt!m|JUO^e^{+n|6;l6kUc9q7Z8}CB zQGc5}(x4z5lej{kYnL9ZZ{k&`G41-5rHC7>YxnrdcrF}680%gesc+#LCc8VivRPWV z?K&O7bRwB;N4{81RVhx$3!V8;_u6$Iy%8a^G@7d!gyR zJr%P83iNay?PN@E;AHn4A!pwea?bW$siG2na4oYNjFI3c=0jdkMeC&yE5ly9@8SiM zQs<3(Dy80dK4xGXF*u1lKRfs!;$r-V;1$SvM8hMGY+t$D8>OD@3iWPLeD4?}^X?u=7C+a0?fgQdi zq`a8{EGtH0k*U8(h068BycN5U4H)!>(`OutC5rxFk8!v`R?3K=VQq#=gVGNt;z4=K zMtRF%qd>{C&~&+7-Zx+kx%i%_&;zJ$k3~!)z{hxaSzvPk?}~Y_b|D~#z?>dS`J$;w zR2-8kqe563&PoYHaDY3ZfTsj(Ed54Ft}H~cYz$RywX#7}dbl&JPlNCr&{UyEvNwpK zhr#y9chA?{8Ckl^O0oCjxe`-id|{x*=nJSqJz@n45=?A1bPp2@kn~c_ZZB|73tP29 zGebnQ4@W(GLt9dB}F{Bj)Qj3!XZf+w99vxisjx63#1r=^j=){7lPCFcEv0K z2IcC#$to>!5xZH%n@pDu-j^C@xh?gyhO;6!_}CL;q@Yh@(E2nVnr~OL zS=HSH=Q?DdD)%`|L^!$SSEYJ(K<)aD!{%JZrNR;0-`&y{Mv_9SUnI$TF9(ezMSPkA z7K~k(%E}~13D3B53fJDaYkC5l5ED!^WJ4M+3tKBWVa? zMKwtZok`0HgK#|G8M0Jc-Wf`IxMY#@2YA5#wr48+y#p|*0RN-y*{su7{{X@USSh=G z%m%D4V@H(%O+1?o&U}xuaUG9mT`3LIa|g^URv#=z+&~2^14;$calQHrYlA(jSo8X* zUvT!hr2CTK>KLYa@GqVs6YbDlNJWejfm$}hvh{~i&mCrW47+)4aL;Pc>Vn94XdeP6Zz)x+ zBn49fqGwX>&R{L~>*02!p#Yd@JkCrFGWD;mS~m@0gL$&;46yh#u%Ouk?DnOXYIvxs zvr`(&aDh71V$Vddb3{~BcK3qok?+nLl@V&~5|i_zK$M%*2<#_#Pc1|P&wk$3{fW_- z<(iXoFkGWh%xF>ago7@joJan$UwvcU1W%vy>3V_wKC|pM!4Xj?(G?(;gwklP$-fKV z+@pCeYWcV?XF+I)~|PMGJxM?ZFWl+f$n<63s! zW2!X28()AWcB*m$8HjwuYx-;IRpAU(Wm*5>1l5x!z=rh?{Pl7>*-@#5c9lbiz3o26#n2V9a*67u zYJiem?UhNXZC}4-D~R54m>wUo_IUA}8{74*@N?Bq%eOIp`NKg^bpQ5~fYFC+MB zg2r!r9eGaNH5zb`C4UyJLHn+}`r|OZ?|WLR=~#X=;_26&b^Dtc|A(q~k7v65|G?iP zlpH!tQxWD^4jmlJ`8?#9nDaSvEH`R7LET*+ z*a1PG&Z<86YdrulR4Lcqka7vY_W!$x`-eX>Ew#tkwIJYT^a}Krip$)Z12Av<+s7ts z?wEZaQOQpqt`zOVZD!t}76W`Y2~>Zu8Ax5UQ2`J(TYOYLu_(`k4TvQ}fymRQmZDhb zg@JNI1PL5_EP|>4T?q){izyxdfj-@Q_=E-k7AQH#D+U>Fyj*eJy_lO9QU>|es&6dI zCNU7ea0WjLsG4x-#*Xwsg`v6PWAK0SJFtQ;LCH^cn`~y3C%?eCKy?pT0U&iRD@mmN zL|uNdBL!~uQ~))@oF=hQx+WM{OTT)Sr7~joCRpXo59M}#54bW7^xxkl@pp^ct#F2K zOgJ92AIZu*+^dtMGuFJ4QTWu~0~V0(nI72^nzip#b2Sr6Yl9?qW1uVQlU2m0=M2j_ z-^(ovm3H6sCM_%KToGHKJp^`%k+#%cGYuEP;&bJ~F=LEW@n+Nk`4#o}_pW1C*@G7? zWaisjd;Lb*FOlzzXs1Ub-{bgy^lT4F+jScM_9)^fu7QSjOP_bim1>NCmg3=k0gU`B zr*;?hlaYC5uYBM@)vF43D#!%IcrRIRIbwJvX}t7*sZl+6vAKkhv19syUv= zkKbj0&mkCNTUYkDhY@=qTeQuLZa6##Hj10MU_~#};#C}umebn5cf@Yam>f3H zg&GS8CZWt=;(H%#nq>`eQDT&oDZ;`-fNIVc9f4Dmq9ngxtOl+#;52Q7R<7iV#A|8Sd zYJ6oKvkU$E*mVs+Bn9|(;DOV;3o?>H632mTcCsEp`lfT5ku3y=^!%$wYS%~(Z;=KN zSmc2rTH<@u_rE36{}n~=aVc898QS&b*LB<>bNe4ih$mJk%`W6hl2BTT1Z*jfJ67Zc zK>;k_+QTf~e;2XQ;t<;&LW1QQCKNS<)ZVOav>PhZ0_(Fh%Ysw+hTkA5x_a^?XKo(l zuj}9m*ckg@zTo#jO)K;f>@4EAj7d(+*+J8j-jd|NtidhU%fHvHtUEbP$Bv~qsW@A7 zlHssgi1)ed(@@+HZy))(kL!|5VY5_s^NXeIhMCIePbzyxFXwH&HsLxN?g!G$WHvhd zXL>_(kS6?VUTSMMOf=?=hGDHJwdl^d6A|Z`jXvf#-OU8Njzpcl0+PDZ*^}vrB~4- zipM&!dkxh7c^?7mcnbB00N$&zmf~(Z@)hO(V;Y!5&D=dX$Au;`dAJkCjAi5+N|$pK zy_}AUPE*rf)nsZIUbrX*2aMJwS8neIZ6Kl-f4wjiFY%f9?qcPer0r!^d3suZocZy< zaieM&&z-~O=RyzB9~}~e7d=0vK>(yTz_%Ib`nUZSs*%GcYffI#TISY?No(vN56 z=Y8p8zuYvsZ0Hd_t8L`pig6Xq!9t0`MiL(pFJ+j*o{hgv_ILp?gkJH3PFDP+=VNvQ zLd+uy}^JuU8wfKlREsR1Y#uH2`!pb9MG@y6x@0tLsLWyysS(fiz;=ev1 z*8^xgcns@)>9ijQ)lS=zf)7N|Ij#}rBEBf-YM7~Bxn($>>-6q;!~^yYu!UfBqN<^K zzeQ8f6Rg||4=;&5z6}1>4=b^(4asa1vhlL7e+}U@l|fdFe$hTwyr>3FXE2W*3!M9s z%^o-)Uz>FsZ(YU96X6|Mc5vv)+p?_B;C_`NBWfnKIIhM8(UUfjPZHgpq9C`q0*cuL zck_>`7Fk7}2YQpD$?hI^wi7T-Q?(_a)&7dMjCoQ>h2WU_oYa22>?ceM?>k1^lp7Jx z&nPq;Z4^a@a0ZSTH|b69yRqgex*!C(M{4b)6dmFJ@L+BHBSo8n2~6mZ&N zQ7gv)vjg_^v#g~C(aa!N`1-FvD=L0D_{%j{h!$U##|o2+08|m04eWqr2H|ZQI2L@o z=gu;T-{4^j*#J1$45E?9>zma@PJL{eqol(Nbe}a8Sf-%r?=1tHG*1vR0+zC{zc4s! z^n~PquDS)pqGo_LJScA4W&;4!AF05M)xiKgz_rxa6M5~Dt#K=5?a`J55cim1H6oNQ z+Gw!NdcIq)7LhuJ9jn#^4+(`bIlWw%iv&k=I@FPE@h+RQgV#g z<4lZY6unz)6X1sycNVefAg1E)z~QEXwDhLxQ}b{bh*zwR|61qzs#tQh+g z>F5Ie+QM!fVS3cBD=L6rW3Z0X>}XKJ3dBp*Ca|QMS&5QYyZ;*h;GQTVQ?wpXVeNMC z@2SU#Pk%=Te*vE|YfFSj43&e zr8m*^%3b<&Mi|^$YU8H2Q-6^SFIld)xqQgA^P4oPE%b^QScVNDQNXAc=w;Sn_L-}< z*Z=pYVeTa~W3;Tiyv5)<;p8Q0Ud!4byCV$`N2C*It63N9YOs&jjnIrw?9UR-RF09Q zk6(WdQ1nmIo+RiA_ztE#nnJ|Jdo&~p)PY|k9tyBgvhJyQri;dJ&xoA~w)&(!IZZ7~ znS^->?f+upvxRzp^ltezB{6?~MyXZX9o?`rt3ytz%&L>Ne8>8gM~D-bHs~2q-92X9h<9XG=R=1FtP)FB2#l5AP9R~ z5(>ev^6@L7J^G3kpP1r_=ui?%=>sYBUj6lL+59j@=`d(&y+@If_opD@c>h?Ox$Oaa z)VUM*Ev{>R<;p+p`}7DUa4cN$?&%F3bS=oY5l|fHb4c4v02wIz8*yI@+{} z$abyw+zoE`-*|aN==`I4k7R>d#Fs#cdGJ=`%{tbSLFcCJ4bd?KL|enA->NX$QTn?8 zS!Zsox>R)a^s$!$4$zcfkZyG7Nt47b_a&vg?g&yO0;5*{4q&Vy?D3MPhd7uUl|CZT z_gk^BJ-{!eB5QsnVB`u3>poHp@7KvX3mEBx7{xw zgW|kq;6t=2|47NL`>)QsAHg6c*cp`|NBOlHBM-3Tnqva3Ggzv^WSGD!ukzas1J}du z*yMO?4MkI2_6cra-@c$jw~UdrmrZ=HMe(M2wTNQ@#zR%A%;J=gHofHK2+$rT0YsaG z46}ba=S;hEIiPdQ-?#|A6<~gbG3AQ#{|zv{5)Zrx%NR*&R4eEsg+SsCMIWU0_pvMJ zET`~OL6(%#9%igi{M+?%Een1uRz{ijPc-oCoGi@2i=CTwJoAil!Y&4A%ci&km~q1V z6QCq+T*9o>>x1?M&RC%X?1u765f)E-5$zxcF?T2*UP`mQ*u=`)JR)}wE2W%!a0fB2 z5qqwrcvD+N5B(bu8@`A|2@9v`trgOdn}AWB;!cWppE0+%F+K-SksXUcF=RR`@$o={ z)K`?zs^EVh2Qw4)o2UpAv0;#x3SHL{W6Kibd0O@?hO8#L8qB32bd)o5K_e4~hjV;> zR|o&c7Y6jB8=xY*XfO6GXS`wcv$gL<5bb6-;0oFx-Tq{FnY_)i z{uJ1hp?2mpUP<@eR`plW%XypTw^PMaGNI8Q>JlG}BKj)oiDF(8yF2)S6v;%ZQ?jws z&zV);N{0^D^|hYHKqG&OIG?Kzmr7&5`H{1gHz|e*w0Q@`4_S4~wzX>hJUUXx1OvLm0H!20 z-_&zzJ$LS=mv+)hdF@S;U;3l4zRwP^8dl_d1+x)C#GT{P4_`D%j9@=KAMi&H=$L7R zDIxEtw!6l=JIm?)(^Ge>9QL%UEYqBk z*UI|!B^O%?$0Mp{)BjQ>))@=aW7&!$uc@s5w|ss8eh(?~W7u5sb_3nP9SVs0^4;KI zL9r}nW4`vMQs3f?j{`vC%q2~sJE)+gmSkShDXoM2nG^92!%d|3xv9maCKig2w(J!n zJ$jm9P7$GFzyoIEeBcL zR!YyMsIP`0Bh^sv4|U1O?Q(6y#KI2+q=wi7d{XCO^imQ8N-mqq-wXtl0%iOMuRXpNMMhbvX0%j<(bOi zc#!3o69#0C!Y{zRr!41N?R(}+zy4NCJS5?lGgbCFxdnd7$2j{*4D!89hcCk7uHPcJ zg!t3!6|!k<)a>`_ZS%9ys3ix5e}6bGMpODdZ=E@(%`DdYyy|sa?_~(tM}Fn`v&*zC zt*d-qVTPXsA3Im*bqbDZhuQ>hp;nY_-;AybbPam(SW&$Fln)vM98a3U?&(uq;Plva z?A7JfGhvGE`<|;yFwf>l?km$hXC!%B^n&S`PWd<{ey{_XB3r*zZZ>!`tcbH=iXZL7 z!!?Q@joX^pe4%ylYfGb!@MiV)yG#+lVuNHAf%6*kH+F~0QwR1SwwVe`7*uL@md+(+ z?1?J3Zu~^p=p6Sb&@UOF~ItG2PgTvS~{{cba6v?ll7|0qbP_sBW zxlCxB#LMLbf*sf2oE_`CyiL0<{ZL`3tY~jo;Q|)TJJ(J7j({ZIu6xe4V)Rn9B?aNo z(jWL}Y3N$%aGSa#xLkd~TO5=(HhA3i5k8V0gNLjoBFD1MfxkVxITU`%*l~vfDS*^# zNOhBP(z{ z-(yB9(;4Ja6pP{gi=%*n8*XAG+3d2>$6hY)&&&rIrdM4?+GEdr@VF%^j?w-y{S%+{ z>R=JqQS-5C5d&9|17?dz+_ZB?b|W4+`*| z46HrkCfQjzL$2kK|6~_I@a0l`s-7@F%(M|1*8O(K^U&AFTTL5`ySis*p%LhbJdu?U>G zZZ!dU{nQFP^R&Qu{zeiBW`8IV;{oo!3S)}T=e2oLu`iMBu~K@3J4P$o?<`&|$r(Nj zH~}&;#96vYQ*5}f9sH9~G>Cc*F!km5h*;0KH+~$2u$L?1?Dl_GAdGQKl#%4_W4qYB z14aP^OjuS`gl6;0OttNr1S`lkMf(hQpvXak>Ajw@p!CLY*>bVwmQ zkzgQ^G#SDc%R@)Si>6`DYF;GC@LB%^K>{?}pHH~3r#7>I)7mCF6Z%n07W6{`Kg`Qt zi)QRgG|x(vqWv&9$dW5Zs5nKD+S&nf^L|g(aXn6{U5P2c+YMYQd~c~)WP-ac4jbQW zwLu4Cu1RO$9O#5Q&jEY8XlhiCJ}B1<-KaAWIk75u4Bn}Rh0-4IYN?hr{L=SZL&l00 zuu6L!S2JIw1D9WY^6q*Ds0q^Oz-$yHx?U24rQ+lsIDZrTu)H2Le=Jaxv zO*eC-a^-?%n+Vt>Rx}Sy>Gs~T#n19gH8oiM&LAV)qK3xg`w+9}sl*4I8mqpZ4P#3h zsO96A?6=3ydKJC=^qOKXaM>~;u|&Hfxu@3?IsWkQvpIW>r{pM{ZvbY5Lbp20LoP&B z*c?wOVa&-|)!q&qc<4;@V^*JheW>}8xw%dx{!i&TI>7ACer$!vAD^c3+n3tp0#j0- z>NeR7TTVKTU9d5&1G!tt&D)o2hTH=^4uG8%UkX~i0HIgCcp=JAF@Xl8^u+`VXUuP~ ze*%0Y(<0h)g(ShIu=6ta^g^4S%lh}FrtfT*y#-E-quG22CL9ifp(j=<{UvWfHffBc z$+6fY62CD~iuO5eDgZB$NIjj?y;ig*@lSL0M$*nA0nN(%fb@(wbeRz*HqU1a!``+* zoF>Ldg{(Q#`OaRwM@uFeX4j{*MT3_Ox!CfLE%UNZ@l4|-K=3>ET1Ssoy*GeUOh5zF zU>LXS)ykj@tp}64n}OcL>V7e&DDczFTrc#e65Bn;Om5Fz3HbaVxO7Bvey=$rw`Ds` z>)#Q{GpcO);E$#`vRVfVS2JI1Pa3#(6`T8jB56s%8VrO?-q~iwk|Zqv)7*IRuDbG$ zCyvw$!OcM`M%g+@4}pRU{b{-e`?HU=?ahq`tA1Ct`7J{-fE5dY5LrKOdI+~U(#L-K zJ4$CqD0SP>$g>m3C%ONJ(C_W3GmlIIA=!f8Fgk`MrL0rEtI_Qr5i}w7I0T5g zGX1Z$!FU|;y?F|;y=>OU0XNl^;LzD>(g!VAcqbmyzWytvtX~s&zo{U0Kx@CasXk`k z2srA&gLh9D_XEJN6jJuO5h~j2U>92?MjVRn0j%G@-&fb1*=yJ!OX$?(v=N0 zWB+DVuFtoIAnl6+Y8yfiFwPES+kdh4BMwIX*+2AxK(!ogpiZ%;HPL=G-m_J(z3ug) znffzyxfi5Z zO{&H#aM5t6Lm)TEL%%BAJo}6J(WJ5}+gToAvL*J2&R5U=$U@~ABl#DXJI9_6TQNJSiuWoHFf3Im7&na6k0O5y#c>{& zzJ2DO)z5Rq^kWB+*wEq*J@ z60JgJ&&ofq93GFd@sq!+_=soSa=m=Mw3|SNb@$$_61q}N?;aFM$+{wYv8nv7Z|g6u zzzqF0kL&9i$WRN+^~=tlpY3a|9S`Ha;~iGPgNewa`^GJmp5ABe!G_zP-QjF?hI@;N zbGHOxgwtz}R?29f*E3s}YW|X*Ao>;#0Atea?^2Q=vHv&T2TsAoUmI(0v?WLsaf$gMfhoIkOM=J5Uvgg$Xmd1LYMQBUJ*dSCe#H2lrEMusjju$< zazJfVHrAKA4XKd8!97Gtdpuh82%3k%)zJu%?BU~hP+=Y zsRbCyE8~r&0beXDw@t)l@(ZMR=h0t`ID09cy{(8i-}d5`XCLZHSoIMB)JIFV0Nc>i z`|nEcw5|%2x?LNYt)wt4=Rk>b-Fs{77njD%AZDh@#dO)K|4FJ9 zQ53neBqy7h`Os-o+e!iZIJeKk9+dfxE>W`MS8kNJvdx_&Qtoa}AmIMuv1XMXJ7 zu$|+Smkwk4biMSA_wnnA({@(YS8}qqy*&QqE%x7UF{d%XMR7aRAvhv6TG{ww#-d+d z=JiuJ{TO`ZmTIYACOuuSBtsLaP>6)|h1us!Yr84Z=b~2?GyDu7H=jCl;zu};(nGv} ze5C{ITP+u8_AwH@dnRJ}R$v%~Ho=KlG3RR9nPY;aHH+)sMVvZ;1E=Qn?yBNc5inN& z6j*|1)0|O^g+V=SVfUBTwjfowlanI@Q?Dxk%sgaBECf&t{v*6W~bvG zkG~0}h_$h0|2q~)6|}&B3$-YA=4S5w7G!vt!Qe1(k`*MIiH{OL>JUil9x|7B0sEk% zMo$-MpxeG()M`_glA{*pVNz9Afmt(YQ%C_MtbsFpSOf^Vn*wvYu7MF{e05n+|Q19usImgP?_^rrsjJCELEdm|zK{{_T zOSu$xs~f<`#_dJAU{sP>!=|3B!w@*jh1WV5m!^FhP`kST(qAAcsSj#tGwt1Z_LBtL z91!VP11DP6{{m>0>i=#f2U9Xzr8%V}C-HkfgUO6>p{7{QFTnbSEILVGS%NKzab?-^ z_KQ8iWY0Pgi$k)`S|Z!O3z`DvsjqwyZ+kQCYA&x9E+|VX(i{h!K$d1*qKBqrn{%hJ zwCZTGxACT>V$;mEIIBAkI;W?;L|A$j4Mk8ttJ+rFDSzBzFi^wzBeHB?c?hl^gDhbD z!rnaGrs0ftef8>-=3Rw32ae|FCl17LFV97glNppBl+$~K>&RlK@>dH8nOo{!2JhBX z)+-*qq}!x6A+wMEFdp0Xy4zE9ycC&DYxA%jcZYf(5A!o6V^zTO^p^Wd1z-g>w(~=o^)rkFkVdN z2bx9@mHn!<&+AQ@=0>Y=%~#K)pi}<`#)C=96bneNBX5U|i6dJ;M|z0s-TdOs@mj(p z79=H~)tP7QK0n-;zy+VAi$oWT55*qjsHHdbJvu}t=Ney7{i1eM6%vuZL!A2N(T^M(f^ zPT4BIAmF~nYx6{#E2@t0gsoJrQ`lBt=h3p4_oNJ%?R%-ZH8WdJ7CXn;n@}PqmSKk$ ze{fw{a0G3ABGGxq{90f)2p;wkyf>?K;!KY}NM!N*K15UCAG6M!8Ols6&toiPOmOLl zDhBJ6urn?w-eX2ht}{jpNR5Az!wWJdv@FAv6=|N>jb>Fc?xZ@Gam&cnX|mUl{WF8F zE4|Koo8tx}G>X>e_3~$dZXsz0fJo_?`M#Pe4woUv^+%rsg64B$9w83hTCQIsDQq@; ztf?DYulW8I2R@rVcBm7+*tqR^bb$)&1^$C1xKohnKj)*$-IC<{_9)04g@0UT;6pxY z#v{)0Li=b#rHSeEKKZC}y>?{~PnzeuhBu<8gYK`WAqa$M9cyC;k*VV2q`kd5h0&!& z>`ni_9e}el+Q82s81xir@s3xUg%={P@-vbE4ucR86>qvEaE$kLfEj=%uWY`{e!Tq^ zB=FUhUXBi~P9C1SvWI}bO29l`#wI11uqPtr^qM3+E_fdYOCqP@@Nvmv{ppqBo$Y;V z*jUb}u6vkN=SQ45-EX@lvaQ!cSBtpV(+nRk8^rBrMJ7Y6rX-`B1#=IG1;$i^i5t2E zXB{{@s{==AKzV^7{eO>xAP_8m z7XkqOak;wrqJ7Gy4Y(zVB?(9~n$>*}H+2cc@{NG{Xo)!x>R*!Nf_eIP#Wvdm;9E~1 z;O~R!gqL8dVOIo8Fivpx>O!7@Wpse4>doAF%E8x>1GTp!OQUAL_)yLz{~AL-fj{dxMXm@gfp`RdZ=vqX!pkg$2<_2F3^4mP+ zqSp;$dg$}=y5qN-7;T#af%}%OS!;SlRyM^TYx!^~SuWWfmOhbnBEJc*8wFL|kTgxV@Xh_sb|lqvP8a#OjJAzZ zT1Uq6q+bMuXx}BQM^qPPD*j~A9@lCMCyS)U_=})krq5Ix#FFt? zgs%f`3$PGGHrdItJ6wogYstDh2$+N_yu&XS{)>vsS;Rn(mrc`_h5o7?03^kPZ@3lS zHQ94W8T}-f=t!7krBDt=&+CeQ6pND5Z=O<88kUZdfC25@-km!JZp7QZnVZg2LQq%? zUdgzT#nl4$Ii#rZALy%@FY!$`738VQ%wqH}u6V;cKw>WBs4#b}tBr;KCh?7BLYuzA zL--5#EQ@_sPhI{GV8=)=30k7Q$OJRLNTx{5B4-iHQ@&t}?90#hvQfH8A zJ`MLJZaqU^eugeEIWwxQ`>h|8Lr#YHNMu!B+E(yDts0uQN*!JJq*(3&vrLdas-uLs zJi#1xZoBHkmfEyZRle3boLeSmvyqbZO-Z`IBHgvG%UyEL{QTxoyoya;(m)tbeEoM+ z__eE_>jmLI{gtIHIWjz%m8DrngXSRi(c>TBt84bHs-!H#5-D=N@!D zm_?8s(G^FA3kGPOLd@ejL6~J5akrd7wAENnMYud$uY<+6H>*)%))#t%vF`ZCgphFG zrxWM-gc>f0{TuOSy@mUGQtZkwuXXRbWd*W(I?x$g$18dZRzG9MKsNu7$5uJp9*;b{ zuCi!7@Artm!Ru+wfX+ZKXrJ-ukD4udsciZh#C(wTPIhh%WcWnYxhkRsm#R6^oSx-u zS)NmR##!-j$6L`L1uFR-devaq82*TFl95>k6g^lQIV>Sf7ERptDwmM;=I2`ERtW7iWqC8-qm)d79kNZ(UI6-hG6y7|JKLKKV!SJHm z1vdq;;=prpCu@;qy81B;N``=iis{NW^}=B8)mRpKld9+6F&4{oJ9i6hp1BBryOs

zu=dKW7I_evq9w zVj!wx#zAwpY1TObw@~8|eG5~>uROehV+E^&###dFbg=8bwP%ZM z1jv#??|IF()sio#4C4^ycyL5TLWeO)Jq6=<7Bz@3f{wvWI3-FtfgY7m1U4w6FL3@R z;H5O12V|XKdcD4Vg@Hr;_&TD)12{gw+pTOU!?Xp1uoB7Gc!WO=!QEVF5&z1MtuQBT5R3Mc}- zRbM18s%{Qn#&$N)0`Dr)M?ZfX*q^WIkIRB}jU%0`97fBm8s@eYPQP5J{y|zL9v|!& z`Rv@t@Y#7feHb$*6Fe3UiZ*$a1uo;5cLc-nPq-Wg^26>>_RTp&lL$^$x0yLhjKDJK zybwlV9ollAv&V-4WEDwp=^+@@6u}V zE@fcA$a>^e{qvR)&=upb?wA}B6>UP6L< z*PCYVG>c)(MiT2I%YJWuE?x3R)2+<>1Y|b$$W8Rn0}Idm`hfCH+@KzNy;xMVcfarN zRpRgEJo+=fFbfUyJJi@?R5zb(l&a388GP_VkfHSJkfObz>(>wp3j~9I@XDU*M5t)B zgM7@-fNLBa_)m4tQJ)-U4$qkb3y4n3+);4uI5^p)qeC-m0U<8{9EFr?JjpUN;~ki( z=D4N-^!Rws&843~*x(p{(^HcyMNQUn2=Tq$tuhgAR>3p465~^tTPRm508@n^ENkr9 zl|yrT$xIrR)$RociPr2*I_aDp*oSsWWcBt{;=i|ttE9{>R(D2kg7#XM4O;Z3lTf;G zy$Lwvb8)TLP+KH#&PWn2ne0Ig65MgA+dg`BDS%-~>c!mkF7qs{Qo$Rq21Bg@aciDP z!+yG7PfUU5_**R=9l2EU<&i^m!$3MywC_|TS<|2B45S_=>}%Y}R1tb6^vPl6^ba78 zghNU4S;uBDk-O(CC=o;#@wWaVX|+buyL8lvZ0b)hdB{!vA-x~g@rPH+XL6jhFZAh^9DH`rGh#IHX z=i6yHkU>i1Of5rH{E7`4pV-;qv{lZ_FF~*7B`h%b$Y0;+Pc&UKr3xmFZc7)?S9ILP zeVi3Txw6MSPu%#zZkvJJ{*khi^!F&E5`yD)9UUJ<_@;aZ*@Vswk*QahI9s4#% z^8yIZlP}2PJE@bRzd~}&VAptU>1kPFzigPYj+-}&t*bpxt|`OJ)cOzb$ge+7SiCx| ziLCO1H4$#<3;B-H#%im5JQFm0cPMS`dZKqHTNGUw%Uw=k2mdgtr;ARIO6Qt1oYxtv zgavy72y>mY zxUe|~zNe)7kCrW$Vc)IL_uS_;7)|)E(p^=DZ_=0B7a28(ZCzP_c3o793muNPqhv_; zI$sN7zT6rh>}ffPfR(;)6)MRDC#>yWA8&58W~&hsWX zK&L^XQJyb(Ui>D#z$AQ;-x?*d!Pb(cWWMTgPOg%)-b~ytQSM&DbrZ~#{m2~qu@aA$ zbSYPHVoi`T&Y!dg3_bfi-3Y2thyrHEVNHGc^jxEZf~*9{RGpb+IXq%@V!(N&T3}H$YlS zh1FoyOy9#yYxz(Ha%Ou#MxY9wMc!FHU@oY)<3 z`6d+kYxpth>n1&J?_pM+|Kl`Vq1T1G_WULNvsF_H@tq8%&2z2$=%Q6kZaE~^*yJPF zj1Ru#plRWUq*3TkI$!TlI^Gh0g4d}2A-gj(ifl^{eU56mxL$Gfg2^N~P)RNQRn+X~ z>gMj>8;nlAgbq^~^coqF<|fc{CG4RU#kpZfV{Pu{Lth`e(aagEtTl!Jep~?O7Yt34 zigfNP84X3=@l?$7)eK)6h|lfa56pN8-wMH@ItBRP)px49GACkB#biBblfQB=%`8Q? z2~kDUI?%HwSx+kcsuot}ih*wH#C);{tQNmqa&S zoAr(yqrZ`W6~2*Dwm*c@{R+kwUrjYgZ1Xbv{H z+X8ULY(-7njXZ~id>GrwnnNZg#Eyhwn2KZp zTcsbI6h&P%X_#ntTn9d!Kj0)-dBM27@)xN78+9jI z@pCso{?=}}fjm55oU72@BWRjCikeKJ;TEMtPe$yv|zloc4psF>0p9F|*F$1{0CWSRPTdy-(5359a;Bq5!KAN#R;XrcTEn z;!-M^V^3k^w$xb_`6_+ zD+8|2P~M4_^-`)D;HwHcv8-f8$q$X#+~l$XFh6;eJUaQ`R|97QVVTx8__QH?9At0Y z(BhU@8r}ra8{4x8sDu^AamB3K1N=M|u@u6ZWSnE|;wB*VnTutZDsbzZF*LoW#c?vV_d|pk^`bZ)I`ycBIQ9iZdu4c?s1^Wp z)~SoW%;NO%ZxuS{Kzv4=I2=}}NR+m4e=*WtdxSQn4lHO9K_Kz_{VX!3hep2bI5?qE zh!3f?8ut*^6-DC03H!v_xkTJ!RUVR!Xsywf`4P@d^_-2;`O0_j?hc=w?)Vr>h*&P< zE@OL|X!3ksubQZzUtG4b{9S+~Wb#Q(8@5v1M`kwl)hk}K(1esKA2qVAuX~B!87VN& zY<&3z#I+1pN7q%AOdE9<3_Oi;>y`|xHqGMsph zup@EFzZkT=wNFIoQ^FTlkmcHA?J$WQjI)rb8?_F!r4HGb*CP8V4Q(K0|7OgC5b~vn z)#Szuqls6_W?#ay0*4}Xv90$fd%aUMD4}EDCBOBFRDRa4y&(HUZb#8*e^QJ9pqUX| z(&D%GxIgLtWpr3lgI?L#g1Hy?^2oX_MXY1XV*O+GQ@`Aqo7UqX7${-xkNMTeop+^x zABY6uL0huR<(o<^4D!K-;`GCf&kP_R9sXs~-a!UV`nh|oSPbyU!z`hk{?Fa`Kg5NV>dQPMq4~3j`;YIAyAAbpo5dg zrfY zNv;&H>ZXTRtsEE`EzINJnfqTQ(yJBSd^HWGRvr1IcS2^5B2QS}t30l&)wOPocoux9 zDOGY{OTOHWQQu^(Ws=9e>f_qF9y$r!^(RgYCGOv_FgUaH>iuGMe6p96mt}H;bqw*Y zmmIUc_u7@Ehm~g!2ENLvv%E$v@-(m_GoMnHB0|a)h9Vg9FC`CjsG82qn_mg4vy3^D zFo(6|5GLzhv}xf#jX(UgW@A8N;Q>J*eYi=&jP5>G82sB+crHfg7viCWV3oXZmnint zo${yxZ%Rlz;hKgOIwa@8kQRmJiCpHm<<)&YQa8WRc+x>9<5{*gS-nJ5TK&?^PlB;k zkBkS_cs@P##C{!~bKuM(*H~Bvom0u*Qp;w}S{Nfnspl0nq!W5DV~$S zPn5bwl8Xc67dkyoYfpm@}&^K4CeJ? zA<4qA4cZKNqId3d+;-3fTp0>HS)2X`>OnphL0h=uLF$Don9If^w3bC%cf?#J0VM0&qC5+EWh0D zDF);>foyfyu^H`?h(;pBg0L?kfU_GkI|Ey!h3Z5Zu-t&$7<1A~5bm zKWJ!vv|h8F zo*h|(-b;r(K08K^Fb1lMPTOOqOm{wnR~$f9>WXH0;9XUHLl{U>`V~7y!^0uzcNe5VXOdG#4j~+D9c+WH2bsbm5p4vTE$?yzKiYmV)fb zWkoRw)#snpDtf->vf~|_dNWZ*X*iqgVmH1sH)BP9<{yppyjPvEML8c-GxQ$wD_6ww zNtL|9A4`Ih%t0oPP^MkHfTj45O2z(wI*W`8|7Kl`$(L)kBVf|wI_QdMJ{TJE`k zHb}V>*NKzWxfKh0+krn;%vh2lt!){3EEVy^{jWU^PK7TK9_c&_a(ZIevMsmIKMo&qYjTFgL zQ4#)kv8O=^MOe;G+X=@_1T;!FuaTv|VJr9SV_q4i7AR0lGsa@DHj39Hl- z133ucbE6ozjl-+lmi{$T_p<%(isFDZua>&n5q^QJFoK_JR*9*^vXAwZcZE5WAfejC zhsn*iyci+s(wCZV4S;z|YY3P{ADl2HdI;N{y}M|G%+99_b4$}H4)Dv~5VJnYTI<^u zC0;L-{a$@FcOG}~>5D4cUSxW(L&clQh{jXG!Bt@gQq_CeK`HCm`adql?_OhRCT=@2(h*vpgx`xQ`WR`UKjf1qt~`~-(J1(Q-A(nm zo|Rs|2wBBG&yB9QKh3Mb=eWvjQJB_6_v+xyDfc=1Be_+6$5aF;WvH#616rZkwT`bh z2k?F})>U3vFX%7d)t-MAZA2-4N)S%pqOC#bfrBA&47~obI0ANQ3$z9NBAj*#-k`ZK zOGShrudOCcwUn!&A*8da&Za#;K=Gs#FPhJe2P+xZX$+Tv1cC+Z3xZG*9fj*)S7__& zW4j0H1aE*-waTX|l)7 zN2MfjbH#+s8}0+IHeuIe%TxIeqz+zL_|!XE;P@Ef1~?u-fRND&vsCr#CIHb1cOSA>u+ z_YTAR$@f7WlhOpvId13f-wZ~$%YAX?@2!d4+j|}eGfRQ^J;2ai^$R_V z<>7$UzgVj)4QxZxzD`Lxc(8E<+AX@{%jUVTtj!OknPrPFniY5RlTXfF2N~TSY)&{h z1EQ#|8+goULC1i?{d(%lT;>rK;8VQPD2m28y&p!!NMTJfv;=bFdgY2fiYD87{N6^1 z8=vpvxRiVL$swd|O=h05puy1ZOm*)IKJ<$L7Jlnl8xg~K8u^xD!- zujr+Zs1*=XAFV!Xe{-t-R@Zw}n6m1eHQCQbML5~~Zc`e^cw2itU;xZt zr{`V1@A&>0)DhvBxv%@WuJinzVvhA!W%qKE{Kd@UYcggF%n9tZj=9u#w@4QN@c_HD z3a24J=;+i#jib|5Ql*Bo25EII1%xu@#*cd)P7Pzgt<`@n8}?ioXi zw1__{@O*voyfv^}EP&ql8pCvcBr%*{Q~YyLv`<(m7)ybP6xEmupn}nQpKgKJr>UkN z{ew=TR)`vzEiib~88};*vu@&b3>g0mKRCY751~VVhziD%dzuLZMP475`#Pis;St6N z1Z{z%!Dkf>Ufh(UgXs={UZ_F%4~Enj-T|)6A5j6k?O@0mjXWlBp{x1M|X}-%rkrarUDQ=xJiYRT&Ba|PEAFx%-2WM zZ-uj^!2Q|hOGUJc@q7@Fzw~o zb*&$~`t`SzR`ZGY=V7z&LpRAXPOXR)GsR3UZq)Sq5&ur`m743+ zf6*`)qgQIyJVM1EIK5g>nh;QXl)T}OQwnTN?N|=_xFoRZJ!950toyWh8MkEifJJKw zD*M7Nlr3m5dTx;*C1dR;5o_X|Ej68WrN>KGyk$Q(kwIIs3v(l-Cfg2>QD`^}X(S1J zypga12SF08(sLcQU*OGo�-(Z_N>V@h1j{y+fMeg0 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 Oy{mub!poU|hyMrO6nYW> diff --git a/theme/wallpaper_js/src/main/js/default/i18n/en-US.json b/theme/wallpaper_js/src/main/js/default/i18n/en-US.json deleted file mode 100644 index e63c70d97..000000000 --- a/theme/wallpaper_js/src/main/js/default/i18n/en-US.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - } -} \ No newline at end of file diff --git a/theme/wallpaper_js/src/main/js/default/i18n/zh-CN.json b/theme/wallpaper_js/src/main/js/default/i18n/zh-CN.json deleted file mode 100644 index de6ee5748..000000000 --- a/theme/wallpaper_js/src/main/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - } -} \ No newline at end of file diff --git a/theme/wallpaper_js/src/main/js/default/pages/index/index.css b/theme/wallpaper_js/src/main/js/default/pages/index/index.css deleted file mode 100644 index a55e7142e..000000000 --- a/theme/wallpaper_js/src/main/js/default/pages/index/index.css +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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. - */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.title { - font-size: 40px; - color: #000000; - opacity: 0.9; -} - -@media screen and (device-type: tablet) and (orientation: landscape) { - .title { - font-size: 100px; - } -} - -@media screen and (device-type: wearable) { - .title { - font-size: 28px; - color: #FFFFFF; - } -} - -@media screen and (device-type: tv) { - .container { - background-image: url("/common/images/Wallpaper.png"); - background-size: cover; - background-repeat: no-repeat; - background-position: center; - } - - .title { - font-size: 100px; - color: #FFFFFF; - } -} - -@media screen and (device-type: phone) and (orientation: landscape) { - .title { - font-size: 60px; - } -} diff --git a/theme/wallpaper_js/src/main/js/default/pages/index/index.hml b/theme/wallpaper_js/src/main/js/default/pages/index/index.hml deleted file mode 100644 index 2de473acd..000000000 --- a/theme/wallpaper_js/src/main/js/default/pages/index/index.hml +++ /dev/null @@ -1,19 +0,0 @@ - -

- - {{ $t('strings.hello') }} {{ title }} - -
diff --git a/theme/wallpaper_js/src/main/js/default/pages/index/index.js b/theme/wallpaper_js/src/main/js/default/pages/index/index.js deleted file mode 100644 index dc0e1186d..000000000 --- a/theme/wallpaper_js/src/main/js/default/pages/index/index.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 {Core, ExpectExtend} 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' - }) - core.addService('expect', expectExtend) - core.init() - const configService = core.getDefaultService('config') - configService.setConfig(this) - console.log("test start") - require('../../../Test/List.test.js') - core.execute() - this.title = this.$t('strings.start'); - console.log("test end") - }, - onReady() { - } -} diff --git a/theme/wallpaper_js/src/main/resources/base/element/string.json b/theme/wallpaper_js/src/main/resources/base/element/string.json deleted file mode 100644 index 0bae6bd40..000000000 --- a/theme/wallpaper_js/src/main/resources/base/element/string.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "string": [ - { - "name": "entry_MainAbility", - "value": "entry_MainAbility" - }, - { - "name": "mainability_description", - "value": "JS_Empty Ability" - } - ] -} \ No newline at end of file diff --git a/time/BUILD.gn b/time/BUILD.gn old mode 100755 new mode 100644 index 49d9a1c97..6b834079b --- a/time/BUILD.gn +++ b/time/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at diff --git a/time/TimeTest_js/BUILD.gn b/time/TimeTest_js/BUILD.gn old mode 100755 new mode 100644 index ed1bbe5fc..ba6ee6dd9 --- a/time/TimeTest_js/BUILD.gn +++ b/time/TimeTest_js/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -19,6 +19,8 @@ ohos_js_hap_suite("ActsTimeJSApiTest") { ":hjs_demo_js_assets", ":hjs_demo_resources", ] + subsystem_name = "time" + part_name = "time_service" certificate_profile = "./signature/openharmony_sx.p7b" hap_name = "ActsTimeJSApiTest" } diff --git a/time/TimeTest_js/Test.json b/time/TimeTest_js/Test.json old mode 100755 new mode 100644 index 9b33ba5be..162af6431 --- a/time/TimeTest_js/Test.json +++ b/time/TimeTest_js/Test.json @@ -3,7 +3,7 @@ "driver": { "type": "JSUnitTest", "test-timeout": "600000", - "package": "ohos.acts.miscservices.timer", + "package": "ohos.acts.time.timetest", "shell-timeout": "600000" }, "kits": [ diff --git a/time/TimeTest_js/signature/openharmony_sx.p7b b/time/TimeTest_js/signature/openharmony_sx.p7b old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/config.json b/time/TimeTest_js/src/main/config.json old mode 100755 new mode 100644 index e8b1e6715..4774a07e7 --- a/time/TimeTest_js/src/main/config.json +++ b/time/TimeTest_js/src/main/config.json @@ -1,19 +1,19 @@ { "app": { - "bundleName": "ohos.acts.miscservices.timer", + "bundleName": "ohos.acts.time.timetest", "vendor": "acts", "version": { "code": 1000000, "name": "1.0.0" }, "apiVersion": { - "compatible": 4, - "target": 5 + "compatible": 7, + "target": 9 } }, "deviceConfig": {}, "module": { - "package": "ohos.acts.miscservices.timer", + "package": "ohos.acts.time.timetest", "name": ".MyApplication", "deviceType": [ "phone" @@ -46,7 +46,7 @@ ] } ], - "name": "ohos.acts.miscservices.timer.MainAbility", + "name": "ohos.acts.time.timetest.MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "$string:app_name", diff --git a/time/TimeTest_js/src/main/js/default/app.js b/time/TimeTest_js/src/main/js/default/app.js old mode 100755 new mode 100644 index ffc56f106..3f33c9fae --- a/time/TimeTest_js/src/main/js/default/app.js +++ b/time/TimeTest_js/src/main/js/default/app.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimeTest_js/src/main/js/default/i18n/en-US.json b/time/TimeTest_js/src/main/js/default/i18n/en-US.json old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/js/default/i18n/zh-CN.json b/time/TimeTest_js/src/main/js/default/i18n/zh-CN.json old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/js/default/pages/index/index.css b/time/TimeTest_js/src/main/js/default/pages/index/index.css old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/js/default/pages/index/index.hml b/time/TimeTest_js/src/main/js/default/pages/index/index.hml old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/js/default/pages/index/index.js b/time/TimeTest_js/src/main/js/default/pages/index/index.js old mode 100755 new mode 100644 index b322cafac..eaac6fc98 --- a/time/TimeTest_js/src/main/js/default/pages/index/index.js +++ b/time/TimeTest_js/src/main/js/default/pages/index/index.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimeTest_js/src/main/js/default/test/List.test.js b/time/TimeTest_js/src/main/js/default/test/List.test.js old mode 100755 new mode 100644 index 73a157883..5120a0a6a --- a/time/TimeTest_js/src/main/js/default/test/List.test.js +++ b/time/TimeTest_js/src/main/js/default/test/List.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimeTest_js/src/main/js/default/test/SystemTimeJsunit.test.js b/time/TimeTest_js/src/main/js/default/test/SystemTimeJsunit.test.js index ec0c614cf..49f2a4656 100644 --- a/time/TimeTest_js/src/main/js/default/test/SystemTimeJsunit.test.js +++ b/time/TimeTest_js/src/main/js/default/test/SystemTimeJsunit.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimeTest_js/src/main/js/default/test/Time.test.js b/time/TimeTest_js/src/main/js/default/test/Time.test.js index 9485271cc..568653a6e 100644 --- a/time/TimeTest_js/src/main/js/default/test/Time.test.js +++ b/time/TimeTest_js/src/main/js/default/test/Time.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimeTest_js/src/main/resources/base/element/string.json b/time/TimeTest_js/src/main/resources/base/element/string.json old mode 100755 new mode 100644 diff --git a/time/TimeTest_js/src/main/resources/base/media/icon.png b/time/TimeTest_js/src/main/resources/base/media/icon.png old mode 100755 new mode 100644 diff --git a/time/TimerTest_js/BUILD.gn b/time/TimerTest_js/BUILD.gn index a8563d62f..68ce95cbf 100644 --- a/time/TimerTest_js/BUILD.gn +++ b/time/TimerTest_js/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -19,6 +19,8 @@ ohos_js_hap_suite("ActsTimerJSApiTest") { ":hjs_demo_js_assets", ":hjs_demo_resources", ] + subsystem_name = "time" + part_name = "time_service" certificate_profile = "./signature/openharmony_sx.p7b" hap_name = "ActsTimerJSApiTest" } diff --git a/time/TimerTest_js/Test.json b/time/TimerTest_js/Test.json index d2d2cf238..5a5cf5fb5 100644 --- a/time/TimerTest_js/Test.json +++ b/time/TimerTest_js/Test.json @@ -3,7 +3,7 @@ "driver": { "type": "JSUnitTest", "test-timeout": "600000", - "package": "ohos.acts.miscservices.timer", + "package": "ohos.acts.time.timertest", "shell-timeout": "600000" }, "kits": [ diff --git a/time/TimerTest_js/src/main/config.json b/time/TimerTest_js/src/main/config.json index a3a99cf06..2c4c85a2e 100644 --- a/time/TimerTest_js/src/main/config.json +++ b/time/TimerTest_js/src/main/config.json @@ -1,19 +1,19 @@ { "app": { - "bundleName": "ohos.acts.miscservices.timer", + "bundleName": "ohos.acts.time.timertest", "vendor": "acts", "version": { "code": 1000000, "name": "1.0.0" }, "apiVersion": { - "compatible": 4, - "target": 5 + "compatible": 7, + "target": 9 } }, "deviceConfig": {}, "module": { - "package": "ohos.acts.miscservices.timer", + "package": "ohos.acts.time.timertest", "name": ".MyApplication", "deviceType": [ "phone" @@ -36,7 +36,7 @@ ] } ], - "name": "ohos.acts.miscservices.timer.MainAbility", + "name": "ohos.acts.time.timertest.MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "$string:app_name", diff --git a/time/TimerTest_js/src/main/js/default/app.js b/time/TimerTest_js/src/main/js/default/app.js index 2b1123aba..564b7cb97 100644 --- a/time/TimerTest_js/src/main/js/default/app.js +++ b/time/TimerTest_js/src/main/js/default/app.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimerTest_js/src/main/js/default/pages/index/index.js b/time/TimerTest_js/src/main/js/default/pages/index/index.js index 876dee977..ea4ed5e4d 100644 --- a/time/TimerTest_js/src/main/js/default/pages/index/index.js +++ b/time/TimerTest_js/src/main/js/default/pages/index/index.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimerTest_js/src/main/js/default/test/List.test.js b/time/TimerTest_js/src/main/js/default/test/List.test.js index a5ebce1d4..859f6c6d8 100644 --- a/time/TimerTest_js/src/main/js/default/test/List.test.js +++ b/time/TimerTest_js/src/main/js/default/test/List.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/time/TimerTest_js/src/main/js/default/test/SystemTimerJsunit.test.js b/time/TimerTest_js/src/main/js/default/test/SystemTimerJsunit.test.js index edf585c5b..31cb44644 100644 --- a/time/TimerTest_js/src/main/js/default/test/SystemTimerJsunit.test.js +++ b/time/TimerTest_js/src/main/js/default/test/SystemTimerJsunit.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Huawei Device Co., Ltd. + * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at -- GitLab