diff --git a/communication/BUILD.gn b/communication/BUILD.gn
index db7a546a22887ea99bc1d3539a7a5eb76ea09ebd..3f600974f5776f2fee1f65ae37a4c042b508c423 100644
--- a/communication/BUILD.gn
+++ b/communication/BUILD.gn
@@ -22,6 +22,7 @@ group("communication") {
"bluetooth_standard:ActsBluetoothJsTest",
"dsoftbus/rpc:ActsRpcJsTest",
"dsoftbus/rpc_server:ActsRpcJsServer",
+ "nfc_Controller:ActsNFCJSTest",
"wifi_p2p:ActsP2PJSTest",
"wifi_standard:ActsWifiJSTest",
]
diff --git a/communication/nfc_Controller/BUILD.gn b/communication/nfc_Controller/BUILD.gn
new file mode 100644
index 0000000000000000000000000000000000000000..06d8e28a0e95cb6cc69ede6a40186630a2a85796
--- /dev/null
+++ b/communication/nfc_Controller/BUILD.gn
@@ -0,0 +1,35 @@
+# 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("//test/xts/tools/build/suite.gni")
+
+ohos_js_hap_suite("ActsNFCJSTest") {
+ hap_profile = "./src/main/config.json"
+ deps = [
+ ":nfc_js_assets",
+ ":nfc_resources",
+ ]
+ certificate_profile = "./signature/openharmony_sx.p7b"
+ hap_name = "ActsNFCJSTest"
+ part_name = "nfc"
+ subsystem_name = "communication"
+}
+ohos_js_assets("nfc_js_assets") {
+ js2abc = true
+ hap_profile = "./src/main/config.json"
+ source_dir = "./src/main/js"
+}
+ohos_resources("nfc_resources") {
+ sources = [ "./src/main/resources" ]
+ hap_profile = "./src/main/config.json"
+}
diff --git a/communication/nfc_Controller/Test.json b/communication/nfc_Controller/Test.json
new file mode 100644
index 0000000000000000000000000000000000000000..f0fb0ef9b119ece50a78f6b119873b27d833cadf
--- /dev/null
+++ b/communication/nfc_Controller/Test.json
@@ -0,0 +1,20 @@
+{
+ "description": "Configuration for nfc js api Tests",
+ "driver": {
+ "type": "OHJSUnitTest",
+ "test-timeout": "600000",
+ "shell-timeout": "600000",
+ "testcase-timeout": "600000",
+ "bundle-name": "ohos.acts.communication.nfc.nfcdevice",
+ "package-name": "ohos.acts.communication.nfc.nfcdevice"
+ },
+ "kits": [
+ {
+ "test-file-name": [
+ "ActsNFCJSTest.hap"
+ ],
+ "type": "AppInstallKit",
+ "cleanup-apps": true
+ }
+ ]
+}
diff --git a/communication/nfc_Controller/signature/openharmony_sx.p7b b/communication/nfc_Controller/signature/openharmony_sx.p7b
new file mode 100644
index 0000000000000000000000000000000000000000..66b4457a8a81fb8d3356cf46d67226c850944858
Binary files /dev/null and b/communication/nfc_Controller/signature/openharmony_sx.p7b differ
diff --git a/communication/nfc_Controller/src/main/config.json b/communication/nfc_Controller/src/main/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..c2c90a7ab9801d4f23d6c4a13d6e509c6a88eb5b
--- /dev/null
+++ b/communication/nfc_Controller/src/main/config.json
@@ -0,0 +1,221 @@
+{
+ "app": {
+ "bundleName": "ohos.acts.communication.nfc.nfcdevice",
+ "vendor": "acts",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "ohos.acts.communication.nfc.nfcdevice",
+ "name": ".entry",
+ "mainAbility": ".MainAbility",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "nfc_standard",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "formsEnabled": false,
+ "name": ".MainAbility",
+ "srcLanguage": "js",
+ "srcPath": "MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:MainAbility_desc",
+ "label": "$string:MainAbility_label",
+ "type": "page",
+ "visible": true,
+ "launchType": "standard"
+ },
+ {
+ "orientation": "unspecified",
+ "formsEnabled": false,
+ "name": ".TestAbility",
+ "srcLanguage": "js",
+ "srcPath": "TestAbility",
+ "icon": "$media:icon",
+ "description": "$string:TestAbility_desc",
+ "label": "$string:TestAbility_label",
+ "type": "page",
+ "visible": true,
+ "launchType": "standard"
+ }
+ ],
+ "js": [
+ {
+ "pages": [
+ "pages/index/index"
+ ],
+ "name": "default",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ },
+ {
+ "pages": [
+ "pages/index/index"
+ ],
+ "name": ".TestAbility",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ }
+ ],
+ "defPermissions": [
+ {
+ "availableScope": [],
+ "grantMode": "user_grant",
+ "name": "ohos.permission.ACCESS_LOCATION",
+ "availableLevel": "system_basic",
+ "provisionEnable": true,
+ "distributedSceneEnable": true,
+ "label": "ACCESS_LOCATION label",
+ "description": "ACCESS_LOCATION description"
+ },
+ {
+ "availableScope": [],
+ "grantMode": "system_grant",
+ "name": "ohos.permission.MANAGE_SECURE_SETTINGS",
+ "availableLevel": "system_basic",
+ "provisionEnable": true,
+ "distributedSceneEnable": false,
+ "label": "MANAGE_SECURE_SETTINGS label",
+ "description": "MANAGE_SECURE_SETTINGS description"
+ },
+ {
+ "availableScope": [],
+ "grantMode": "user_grant",
+ "name": "ohos.permission.LOCATION",
+ "availableLevel": "system_basic",
+ "provisionEnable": true,
+ "distributedSceneEnable": true,
+ "label": "LOCATION label",
+ "description": "LOCATION description"
+ }
+ ],
+ "reqPermissions": [
+ {
+ "name": "ohos.permission.MANAGE_SECURE_SETTINGS",
+ "reason": "need use ohos.permission.MANAGE_SECURE_SETTINGS"
+ },
+ {
+ "name": "ohos.permission.NFC_CARD_EMULATION",
+ "reason": "use ohos.permission.SET_nfc_INFO"
+ },
+ {
+ "name": "ohos.permission.MANAGE_nfc_CONNECTION",
+ "reason": "use ohos.permission.MANAGE_nfc_CONNECTION"
+ },
+ {
+ "name": "ohos.permission.NFC_TAG",
+ "reason": "use ohos.permission.NFC_TAG"
+ },
+ {
+ "name": "ohos.permission.GET_nfc_CONFIG",
+ "reason": "use ohos.permission.GET_nfc_CONFIG"
+ },
+ {
+ "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
+ "reason": "use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"
+ },
+ {
+ "name": "ohos.permission.GET_nfc_LOCAL_MAC",
+ "reason": "use ohos.permission.GET_nfc_LOCAL_MAC"
+ },
+ {
+ "name": "ohos.permission.GET_nfc_PEERS_MAC",
+ "reason": "use ohos.permission.GET_nfc_PEERS_MAC"
+ },
+ {
+ "name": "ohos.permission.MANAGE_nfc_HOTSPOT",
+ "reason": "use ohos.permission.MANAGE_nfc_HOTSPOT"
+ },
+ {
+ "name": "ohos.permission.GET_nfc_INFO_INTERNAL",
+ "reason": "use ohos.permission.GET_nfc_INFO_INTERNAL"
+ },
+ {
+ "name": "ohos.permission.LOCATION",
+ "reason": "need use ohos.permission.LOCATION",
+ "usedScene": {
+ "ability": [
+ "ohos.acts.communication.nfc.nfcdevice"
+ ],
+ "when": "inuse"
+ }
+ },
+ {
+ "name": "ohos.permission.ACCESS_LOCATION",
+ "reason": "need use ohos.permission.ACCESS_LOCATION",
+ "usedScene": {
+ "ability": [
+ "ohos.acts.communication.nfc.nfcdevice"
+ ],
+ "when": "inuse"
+ }
+ },
+ {
+ "name": "ohos.permission.LOCATION_IN_BACKGROUND",
+ "reason": "need use ohos.permission.LOCATION_IN_BACKGROUND",
+ "usedScene": {
+ "ability": [
+ "ohos.acts.communication.nfc.nfcdevice"
+ ],
+ "when": "inuse"
+ }
+ },
+ {
+ "name": "ohos.permission.MANAGE_SECURE_SETTINGS",
+ "reason": "need use ohos.permission.MANAGE_SECURE_SETTINGS",
+ "usedScene": {
+ "ability": [
+ "ohos.acts.communication.nfc.nfcdevice"
+ ],
+ "when": "inuse"
+ }
+ },
+ {
+ "name": "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",
+ "reason": "use ohos.permission.GRANT_SENSITIVE_PERMISSIONS"
+ },
+ {
+ "name": "ohos.permission.REVOKE_SENSITIVE_PERMISSIONS",
+ "reason": "use ohos.permission.REVOKE_SENSITIVE_PERMISSIONS"
+ },
+ {
+ "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"
+ },
+ {
+ "name": "ohos.permission.GET_BUNDLE_INFO"
+ }
+ ],
+ "testRunner": {
+ "name": "OpenHarmonyTestRunner",
+ "srcPath": "TestRunner"
+ },
+ "srcPath": ""
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/MainAbility/app.js b/communication/nfc_Controller/src/main/js/MainAbility/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fe0b77dcef1db4bb1706399fd481541de8166cd
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/app.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ onCreate() {
+ console.info('AceApplication onCreate');
+ },
+ onDestroy() {
+ console.info('AceApplication onDestroy');
+ }
+};
diff --git a/communication/nfc_Controller/src/main/js/MainAbility/i18n/en-US.json b/communication/nfc_Controller/src/main/js/MainAbility/i18n/en-US.json
new file mode 100644
index 0000000000000000000000000000000000000000..e63c70d978a3a53be988388c87182f81785e170c
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/i18n/en-US.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/MainAbility/i18n/zh-CN.json b/communication/nfc_Controller/src/main/js/MainAbility/i18n/zh-CN.json
new file mode 100644
index 0000000000000000000000000000000000000000..de6ee5748322f44942c1b003319d8e66c837675f
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/i18n/zh-CN.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.css b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..3a8326a076cdb9ecabf543df9dba84240f5b52a4
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.css
@@ -0,0 +1,25 @@
+/*
+ * 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/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.hml b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.hml
new file mode 100644
index 0000000000000000000000000000000000000000..0053057b5ff7362e00db48887ee1663cffa35988
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.hml
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+
+
+
+ {{ $t('strings.hello') }} {{ title }}
+
+
diff --git a/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.js b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3300c9cfc4ff94297fee72c00d5c28d3114854f3
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/MainAbility/pages/index/index.js
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+export default {
+ data: {
+ title: '',
+ myTimeout: 25000
+ },
+ onInit() {
+ this.title = this.$t('strings.world');
+ },
+ onShow() {
+ console.info('onShow finish')
+ },
+ onReady() {
+ console.info('onReady finish')
+ },
+}
+
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/app.js b/communication/nfc_Controller/src/main/js/TestAbility/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdc31f3dcf031e2f6a7665d9653e53bb649e21c5
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/app.js
@@ -0,0 +1,31 @@
+/*
+ * 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 '@ohos/hypium'
+import testsuite from '../test/List.test'
+
+export default {
+ onCreate() {
+ console.info('TestApplication onCreate')
+ var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+ var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ console.info('start run testcase!!!')
+ Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite)
+ },
+ onDestroy() {
+ console.info("TestApplication onDestroy");
+ }
+};
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/i18n/en-US.json b/communication/nfc_Controller/src/main/js/TestAbility/i18n/en-US.json
new file mode 100644
index 0000000000000000000000000000000000000000..3cb24b374b1d919ca8eac0638f361692b603a900
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/i18n/en-US.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/i18n/zh-CN.json b/communication/nfc_Controller/src/main/js/TestAbility/i18n/zh-CN.json
new file mode 100644
index 0000000000000000000000000000000000000000..c804e32c0c3103929baca5617cdac70be11fdba1
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/i18n/zh-CN.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.css b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..b1bcd43387ba131cc1d30975ff7508a6f8084a4b
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.css
@@ -0,0 +1,30 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ left: 0px;
+ top: 0px;
+ width: 100%;
+ height: 100%;
+}
+
+.title {
+ font-size: 60px;
+ text-align: center;
+ width: 100%;
+ height: 40%;
+ margin: 10px;
+}
+
+@media screen and (device-type: phone) and (orientation: landscape) {
+ .title {
+ font-size: 60px;
+ }
+}
+
+@media screen and (device-type: tablet) and (orientation: landscape) {
+ .title {
+ font-size: 100px;
+ }
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.hml b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.hml
new file mode 100644
index 0000000000000000000000000000000000000000..f629c71a9be857db6cdf94149652a191b9b272ea
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.hml
@@ -0,0 +1,5 @@
+
+
+ {{ $t('strings.hello') }} {{ title }}
+
+
diff --git a/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.js b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..88b083a7f6b979019d6a2c5ad20b19c5fd43286b
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestAbility/pages/index/index.js
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ data: {
+ title: ""
+ },
+ onInit() {
+ this.title = this.$t('strings.world');
+ }
+}
+
+
+
diff --git a/communication/nfc_Controller/src/main/js/TestRunner/OpenHarmonyTestRunner.js b/communication/nfc_Controller/src/main/js/TestRunner/OpenHarmonyTestRunner.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5fa8620ca77d381f20b65a903b833e6e3378c97
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/TestRunner/OpenHarmonyTestRunner.js
@@ -0,0 +1,59 @@
+/*
+ * 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'
+
+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', '-s dryRun'
+ ])
+ let targetParams = '';
+ for (const key in parameters) {
+ if (keySet.has(key)) {
+ targetParams += ' ' + key + ' ' + parameters[key]
+ }
+ }
+ return targetParams.trim()
+}
+
+ export default {
+ onPrepare() {
+ console.info('OpenHarmonyTestRunner OnPrepare')
+ },
+ onRun() {
+ console.log('OpenHarmonyTestRunner onRun run')
+ var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+
+ var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.TestAbility'
+
+ var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName
+ cmd += ' ' + translateParamsToString(abilityDelegatorArguments.parameters)
+ var debug = abilityDelegatorArguments.parameters["-D"]
+ console.info('debug value : '+debug)
+ if (debug == 'true')
+ {
+ cmd += ' -D'
+ }
+ console.info('cmd : '+cmd)
+ abilityDelegator.executeShellCommand(cmd, (err, data) => {
+ console.info('executeShellCommand : err : ' + JSON.stringify(err));
+ console.info('executeShellCommand : data : ' + data.stdResult);
+ console.info('executeShellCommand : data : ' + data.exitCode);
+ })
+ }
+};
diff --git a/communication/nfc_Controller/src/main/js/test/List.test.js b/communication/nfc_Controller/src/main/js/test/List.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bb31ffc969e0c8239793dfb0c7f20558bac0467
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/test/List.test.js
@@ -0,0 +1,24 @@
+/*
+ * 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 nfcControllerTest from './nfc.Controller.js'
+import parameter from '@ohos.systemparameter';
+let info = parameter.getSync("const.SystemCapability.Communication.NFC.Core" ,"false");
+export default function testsuite() {
+if (info != "false")
+{
+ nfcControllerTest();
+}
+}
diff --git a/communication/nfc_Controller/src/main/js/test/nfc.Controller.js b/communication/nfc_Controller/src/main/js/test/nfc.Controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..669a9021b3e9e2631ed8d99fe039e9e66a9421c5
--- /dev/null
+++ b/communication/nfc_Controller/src/main/js/test/nfc.Controller.js
@@ -0,0 +1,257 @@
+/*
+ * 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 tag from '@ohos.nfc.tag';
+import controller from '@ohos.nfc.controller';
+import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from '@ohos/hypium'
+
+
+let aTag = {
+ "uid": "15273952",
+ "technology": [1, 2],
+ "extrasData": [
+ {
+ "sak": 0x08, "atqa": "B000"
+ },
+ {
+ "appData": "A0C0", "protocolInfo": "131F"
+ }
+ ],
+ "tagRfDiscId": 1,
+};
+
+let vTag = {
+ "uid": "17293952",
+ "technology": [ 5 ],
+ "extrasData": [{"responseFlags": 0xA0, "dsfId": 0x13}],
+ "tagRfDiscId": 1,
+};
+
+let bTag = {
+ "uid": "15273952",
+ "technology": [1, 2],
+ "extrasData": [
+ {
+ "sak": 0x08, "atqa": "B000"
+ },
+ {
+ "appData": "A0C0", "protocolInfo": "131F"
+ }
+ ],
+ "tagRfDiscId": 1,
+};
+
+let fTag = {
+ "uid": "15273952",
+ "technology": [2, 4],
+ "extrasData": [
+ {
+ "appData": "A0C0", "protInfo": "131F"
+ },
+ {
+ "systemCode": "A0C0", "pmm": "131F"
+ }
+ ],
+ "tagRfDiscId": 1,
+};
+
+function sleep(delay) { // delay x ms
+ let start = (new Date()).getTime();
+ while ((new Date()).getTime() - start < delay) {
+ continue;
+ }
+}
+
+let NfcState={
+ STATE_OFF : 1,
+ STATE_TURNING_ON : 2,
+ STATE_ON : 3,
+ STATE_TURNING_OFF : 4,
+}
+
+export default function nfcControllerTest() {
+ describe('nfcControllerTest', function () {
+ beforeEach(function () {
+ console.info("[NFC_test]beforeEach start" );
+ })
+ afterEach(async function () {
+ console.info("[NFC_test]afterEach start" );
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0100
+ * @tc.name Test on_off_openNfcapi
+ * @tc.desc Register the NFC switch status event and enable the NFC switch.
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0100', 0, function () {
+ let NFC_STATE_NOTIFY = "nfcStateChange";
+ let recvNfcStateNotifyFunc = result => {
+ console.info("nfc state receive state ->" + result);
+ expect(result != null).assertTrue();
+ }
+ controller.on(NFC_STATE_NOTIFY, recvNfcStateNotifyFunc);
+ try {
+ let openNfcswitch = controller.openNfc();
+ sleep(5000);
+ console.info('[nfc_js] open Nfc switch ->' + openNfcswitch);
+ expect(openNfcswitch===undefined || openNfcswitch===true).assertTrue();
+ }catch(error) {
+ console.info('[nfc_js] Failed to enable the switch ->' + error);
+ expect(error != null).assertTrue();
+ }
+ controller.off(NFC_STATE_NOTIFY, recvNfcStateNotifyFunc);
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0200
+ * @tc.name Test isNfcAvailableapi
+ * @tc.desc Check whether the NFC function is enabled.
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0200', 0, function () {
+ let nfcisAvailable = controller.isNfcAvailable();
+ expect(nfcisAvailable).assertTrue();
+ console.info('[nfc_js] Nfc Available ->' + JSON.stringify(nfcisAvailable));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0300
+ * @tc.name Test isNfcOpenapi
+ * @tc.desc Check whether the NFC function is enabled.
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0300', 0, function () {
+ let nfcswitchis = controller.isNfcOpen();
+ expect(nfcswitchis).assertTrue();
+ console.info('[nfc_js] Nfc isopen state is ->' + JSON.stringify(nfcswitchis));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0400
+ * @tc.name Test isNfcAvailable_isNfcOpenapi
+ * @tc.desc Check whether the NFC function is enabled on the device.
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0400', 0, function () {
+ let nfcisAvailable1 = controller.isNfcAvailable();
+ expect(nfcisAvailable1).assertTrue();
+ console.info('[nfc_js] NfcAvailable 1 ->' + JSON.stringify(nfcisAvailable1));
+ let nfcenable1 = controller.isNfcOpen();
+ expect(nfcenable1).assertTrue();
+ console.info('[nfc_js] Nfc isopen 1 state is ->' + JSON.stringify(nfcenable1));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0500
+ * @tc.name Test getNfcStateapi
+ * @tc.desc Querying the Status When NFC Is Enabled
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0500', 0, function () {
+ let checkopennfc = controller.getNfcState();
+ expect(checkopennfc).assertEqual(NfcState.STATE_ON);
+ console.log("[nfc_test] checkopen the state of nfc-> " + JSON.stringify(checkopennfc));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_Cont_0600
+ * @tc.name Test closeNfcapi
+ * @tc.desc Deregister the NFC switch status event and disable the NFC.
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_Cont_0600', 0, function () {
+ try {
+ let closeNfc = controller.closeNfc();
+ console.info('[nfc_js] clocse Nfc switch ->' + closeNfc);
+ expect(closeNfc===undefined || closeNfc===true).assertTrue();
+ }catch(error) {
+ console.info('[nfc_js] Failed to disable the switch ->' + error );
+ expect(error!=null).assertTrue();
+ }
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_getTag_js_0700
+ * @tc.name Test getNfcATagapi
+ * @tc.desc Obtaining an NFC Type A Tag Object
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_getTag_js_0700', 0, function () {
+ let taga = tag.getNfcATag(aTag);
+ expect(taga !=null).assertTrue();
+ console.info('aTag is--<-!!!->' + JSON.stringify(taga));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_getTag_js_0800
+ * @tc.name Test getNfcVTagapi
+ * @tc.desc Obtaining an NFC Type V Tag Object
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_getTag_js_0800', 0, function () {
+ let tagV = tag.getNfcVTag(vTag);
+ expect(vTag !=null).assertTrue();
+ console.info('vTag is--<-!!!->' + JSON.stringify(tagV));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_getTag_js_0900
+ * @tc.name Test getNfcBTagapi
+ * @tc.desc Obtaining an NFC Type B Tag Object
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_getTag_js_0900', 0, function () {
+ let tagB = tag.getNfcBTag(bTag);
+ expect(tagB !=null).assertTrue();
+ console.info('bTag is--<-!!!->' + JSON.stringify(tagB));
+ })
+
+ /**
+ * @tc.number SUB_COMMUNICATION_NFC_getTag_js_1000
+ * @tc.name Test getNfcFTagapi
+ * @tc.desc Obtaining an NFC Type F Tag Object
+ * @tc.size since 7
+ * @tc.type Function
+ * @tc.level Level 2
+ */
+ it('SUB_COMMUNICATION_NFC_getTag_js_1000', 0, function () {
+ let tagF = tag.getNfcFTag(fTag);
+ expect(tagF !=null).assertTrue();
+ console.info('fTag is--<-!!!->' + JSON.stringify(tagF));
+ })
+ console.log("*************[nfc_test] start nfc js unit test end*************");
+ })
+}
+
diff --git a/communication/nfc_Controller/src/main/resources/base/element/string.json b/communication/nfc_Controller/src/main/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..d4b2a0a059d21198f9767cea679a5cc2bb8f6dad
--- /dev/null
+++ b/communication/nfc_Controller/src/main/resources/base/element/string.json
@@ -0,0 +1,28 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "OsAccountTest"
+ },
+ {
+ "name": "mainability_description",
+ "value": "JS_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "MainAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "MainAbility_label",
+ "value": "label"
+ },
+ {
+ "name": "TestAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "TestAbility_label",
+ "value": "label"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/communication/nfc_Controller/src/main/resources/base/media/icon.png b/communication/nfc_Controller/src/main/resources/base/media/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/communication/nfc_Controller/src/main/resources/base/media/icon.png differ