diff --git a/sensors/miscdevice_standard/BUILD.gn b/sensors/miscdevice_standard/BUILD.gn
new file mode 100755
index 0000000000000000000000000000000000000000..60b99897b8438c1fe01aaa7c3a721f257d785832
--- /dev/null
+++ b/sensors/miscdevice_standard/BUILD.gn
@@ -0,0 +1,31 @@
+# Copyright (C) 2021 Huawei Device Co., Ltd.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("//test/xts/tools/build/suite.gni")
+
+ohos_js_hap_suite("sensor_js_test") {
+ hap_profile = "./src/main/config.json"
+ deps = [
+ ":sensor_js_assets",
+ ":sensor_js_resources",
+ ]
+ certificate_profile = "./signature/openharmony_sx.p7b"
+ hap_name = "ActsSensorJSApiTest"
+}
+ohos_js_assets("sensor_js_assets") {
+ source_dir = "./src/main/js/default"
+}
+ohos_resources("sensor_js_resources") {
+ sources = [ "./src/main/resources" ]
+ hap_profile = "./src/main/config.json"
+}
diff --git a/sensors/miscdevice_standard/Test.json b/sensors/miscdevice_standard/Test.json
new file mode 100755
index 0000000000000000000000000000000000000000..c1ac0ea0a3e6e2560e43ef672ff8a1ac28485a1f
--- /dev/null
+++ b/sensors/miscdevice_standard/Test.json
@@ -0,0 +1,18 @@
+{
+ "description": "Configuration for sensor js api Tests",
+ "driver": {
+ "type": "JSUnitTest",
+ "test-timeout": "160000",
+ "package": "ohos.acts.sensors.sensor.function",
+ "shell-timeout": "60000"
+ },
+ "kits": [
+ {
+ "test-file-name": [
+ "ActsSensorJSApiTest.hap"
+ ],
+ "type": "AppInstallKit",
+ "cleanup-apps": true
+ }
+ ]
+}
diff --git a/sensors/miscdevice_standard/signature/openharmony_sx.p7b b/sensors/miscdevice_standard/signature/openharmony_sx.p7b
new file mode 100755
index 0000000000000000000000000000000000000000..9be1e98fa4c0c28ca997ed660112fa16b194f0f5
Binary files /dev/null and b/sensors/miscdevice_standard/signature/openharmony_sx.p7b differ
diff --git a/sensors/miscdevice_standard/src/main/config.json b/sensors/miscdevice_standard/src/main/config.json
new file mode 100755
index 0000000000000000000000000000000000000000..764f279caee28996e84cbbece7d224b097c2e836
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/config.json
@@ -0,0 +1,60 @@
+{
+ "app": {
+ "bundleName": "ohos.acts.sensors.sensor.function",
+ "vendor": "example",
+ "version": {
+ "code": 1,
+ "name": "1.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "ohos.acts.sensors.sensor.function",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "visible": true,
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "name": "ohos.acts.sensors.sensor.function.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ],
+ "js": [
+ {
+ "pages": [
+ "pages/index/index"
+ ],
+ "name": "default",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ }
+ ]
+ }
+}
diff --git a/sensors/miscdevice_standard/src/main/js/default/app.js b/sensors/miscdevice_standard/src/main/js/default/app.js
new file mode 100755
index 0000000000000000000000000000000000000000..e423f4bce4698ec1d7dc86c3eea3990a5e7b1085
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/app.js
@@ -0,0 +1,23 @@
+/*
+ * 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/sensors/miscdevice_standard/src/main/js/default/i18n/en-US.json b/sensors/miscdevice_standard/src/main/js/default/i18n/en-US.json
new file mode 100755
index 0000000000000000000000000000000000000000..e63c70d978a3a53be988388c87182f81785e170c
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/i18n/en-US.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ }
+}
\ No newline at end of file
diff --git a/sensors/miscdevice_standard/src/main/js/default/i18n/zh-CN.json b/sensors/miscdevice_standard/src/main/js/default/i18n/zh-CN.json
new file mode 100755
index 0000000000000000000000000000000000000000..de6ee5748322f44942c1b003319d8e66c837675f
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/i18n/zh-CN.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ }
+}
\ No newline at end of file
diff --git a/sensors/miscdevice_standard/src/main/js/default/pages/index/index.css b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.css
new file mode 100755
index 0000000000000000000000000000000000000000..6fda792753f2e15f22b529c7b90a82185b2770bf
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.css
@@ -0,0 +1,9 @@
+.container {
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.title {
+ font-size: 100px;
+}
diff --git a/sensors/miscdevice_standard/src/main/js/default/pages/index/index.hml b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.hml
new file mode 100755
index 0000000000000000000000000000000000000000..f64b040a5ae394dbaa5e185e1ecd4f4556b92184
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.hml
@@ -0,0 +1,5 @@
+
+
+ {{ $t('strings.hello') }} {{ title }}
+
+
diff --git a/sensors/miscdevice_standard/src/main/js/default/pages/index/index.js b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.js
new file mode 100755
index 0000000000000000000000000000000000000000..173f299a3b96a91ab293b130a7065f3077e95dbd
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/pages/index/index.js
@@ -0,0 +1,46 @@
+/*
+ * 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'
+
+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')
+ this.timeout = 5000
+ configService.setConfig(this)
+
+ require('../../test/List.test')
+ core.execute()
+ },
+ onReady() {
+ },
+}
diff --git a/sensors/miscdevice_standard/src/main/js/default/test/List.test.js b/sensors/miscdevice_standard/src/main/js/default/test/List.test.js
new file mode 100755
index 0000000000000000000000000000000000000000..7986a5a95ac9bc80aa67cdf3d708622001132aa0
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/test/List.test.js
@@ -0,0 +1,16 @@
+/*
+ * 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('./Vibrator.test.js')
diff --git a/sensors/miscdevice_standard/src/main/js/default/test/Vibrator.test.js b/sensors/miscdevice_standard/src/main/js/default/test/Vibrator.test.js
new file mode 100755
index 0000000000000000000000000000000000000000..a97a8e8c0e852a5d9a9cbed2286c412a704edad8
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/js/default/test/Vibrator.test.js
@@ -0,0 +1,506 @@
+/*
+ * 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 vibrator from '@ohos.vibrator'
+
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index'
+
+describe("VibratorJsTest", function () {
+ beforeAll(function () {
+
+ /*
+ * @tc.setup: setup invoked before all testcases
+ */
+ console.info('beforeAll caled')
+ })
+
+ afterAll(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after all testcases
+ */
+ console.info('afterAll caled')
+ })
+
+ beforeEach(function () {
+
+ /*
+ * @tc.setup: setup invoked before each testcases
+ */
+ console.info('beforeEach caled')
+ })
+
+ afterEach(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after each testcases
+ */
+ console.info('afterEach caled')
+ })
+
+ /*
+ * @tc.name:VibratorJsTest001
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest001", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest001 vibrator error');
+ expect(false).assertTrue();
+ } else {
+ console.info('VibratorJsTest001 vibrator success');
+ expect(true).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate(10, vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest002
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest002", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest002 vibrator success');
+ expect(true).assertTrue();
+ } else {
+ console.info('VibratorJsTest002 vibrator error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate(-1, vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest003
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest003", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest003 vibrator success');
+ expect(true).assertTrue();
+ } else {
+ console.info('VibratorJsTest003 vibrator error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate(1800000 + 1, vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest004
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest004", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest004 vibrator error');
+ expect(false).assertTrue();
+ } else {
+ console.info('VibratorJsTest004 vibrator success');
+ expect(true).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate(1800000, vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest005
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest005", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest005 vibrator success');
+ expect(true).assertTrue();
+ } else {
+ console.info('VibratorJsTest005 vibrator error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate("", vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest006
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest006", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest006 vibrator success');
+ expect(true).assertTrue();
+ } else {
+ console.info('VibratorJsTest006 vibrator error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate("xxx", vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest007
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest007", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest007 vibrator error');
+ expect(false).assertTrue();
+ } else {
+ console.info('VibratorJsTest007 vibrator success');
+ expect(true).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.vibrate("haptic.clock.timer", vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest008
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest008", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest008 stop error');
+ expect(false).assertTrue();
+ } else {
+ console.info('VibratorJsTest008 stop success');
+ expect(true).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_PRESET, vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest009
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest009", 0, async function (done) {
+ console.info('----------------------SensorJsTest001---------------------------');
+ function stopPromise() {
+ return new Promise((resolve, reject) => {
+ vibrator.stop("time", (error) => {
+ if (error) {
+ console.info('VibratorJsTest009 stop error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('VibratorJsTest009 stop success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ vibrator.vibrate(180000, (error) => {
+ if (error) {
+ console.info('VibratorJsTest009 vibrate error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('VibratorJsTest009 vibrate success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return stopPromise();
+ }, () => {
+ console.info("VibratorJsTest009 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:VibratorJsTest010
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest010", 0, async function (done) {
+ function vibrateCallback(error) {
+ if (error) {
+ console.info('VibratorJsTest010 stop success');
+ expect(true).assertTrue();
+ } else {
+ console.info('VibratorJsTest010 stop off');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ vibrator.stop("", vibrateCallback);
+ })
+
+ /*
+ * @tc.name:VibratorJsTest011
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest011", 0, async function (done) {
+ vibrator.vibrate(1000).then(() => {
+ console.log("VibratorJsTest011 vibrate success");
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(false).assertTrue();
+ console.log("VibratorJsTest011 vibrate error");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest012
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest012", 0, async function (done) {
+ vibrator.vibrate(-1).then(() => {
+ console.log("VibratorJsTest012 vibrate error");
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(true).assertTrue();
+ console.log("VibratorJsTest012 vibrate success");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest013
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest013", 0, async function (done) {
+ vibrator.vibrate(1800000 + 1).then(() => {
+ console.log("VibratorJsTest013 vibrate error");
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(true).assertTrue();
+ console.log("VibratorJsTest013 vibrate success");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest014
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest014", 0, async function (done) {
+ vibrator.vibrate(vibrator.EffectId.EFFECT_CLOCK_TIMER).then(() => {
+ console.log("VibratorJsTest014 vibrate success");
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(false).assertTrue();
+ console.log("VibratorJsTest014 vibrate error");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest015
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest015", 0, async function (done) {
+ vibrator.vibrate("").then(() => {
+ console.log("VibratorJsTest015 vibrate error");
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(true).assertTrue();
+ console.log("VibratorJsTest015 vibrate success");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest016
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest016", 0, async function (done) {
+ vibrator.stop("").then(() => {
+ console.log("VibratorJsTest016 stop error");
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(true).assertTrue();
+ console.log("VibratorJsTest016 stop success");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest017
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest017", 0, async function (done) {
+ vibrator.stop("preset").then(() => {
+ console.log("VibratorJsTest017 off success");
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ }, 500);
+ }, (error) => {
+ expect(false).assertTrue();
+ console.log("VibratorJsTest017 off error");
+ setTimeout(() => {
+ done();
+ }, 500);
+ });
+ })
+
+ /*
+ * @tc.name:VibratorJsTest018
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("VibratorJsTest018", 0, async function (done) {
+ function stopPromise() {
+ return new Promise((resolve, reject) => {
+ vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME).then(() => {
+ console.log("VibratorJsTest018 stop success");
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }, (error) => {
+ expect(false).assertTrue();
+ console.log("VibratorJsTest018 stop error");
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ vibrator.vibrate(180000).then(() => {
+ console.log("VibratorJsTest018 vibrate success");
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }, (error) => {
+ expect(false).assertTrue();
+ console.log("VibratorJsTest018 vibrate error");
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ });
+ })
+
+ await promise.then(() => {
+ return stopPromise();
+ }, () => {
+ console.info("VibratorJsTest018 reject");
+ })
+ done();
+ })
+})
diff --git a/sensors/miscdevice_standard/src/main/resources/base/element/string.json b/sensors/miscdevice_standard/src/main/resources/base/element/string.json
new file mode 100755
index 0000000000000000000000000000000000000000..7ab5369dd846fbc8870f29fc2b3c79496838da4b
--- /dev/null
+++ b/sensors/miscdevice_standard/src/main/resources/base/element/string.json
@@ -0,0 +1,12 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "SensorJSApiTest"
+ },
+ {
+ "name": "mainability_description",
+ "value": "JS_Phone_Empty Feature Ability"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/sensors/miscdevice_standard/src/main/resources/base/media/icon.png b/sensors/miscdevice_standard/src/main/resources/base/media/icon.png
new file mode 100755
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/sensors/miscdevice_standard/src/main/resources/base/media/icon.png differ
diff --git a/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_acc.js b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_acc.js
new file mode 100755
index 0000000000000000000000000000000000000000..c5318fdafc70e993daf656e8c5771c0614bc2379
--- /dev/null
+++ b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_acc.js
@@ -0,0 +1,618 @@
+/*
+ * 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 sensor from '@ohos.sensor'
+
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index'
+
+describe("SensorJsTest", function () {
+ beforeAll(function () {
+
+ /*
+ * @tc.setup: setup invoked before all testcases
+ */
+ console.info('beforeAll caled')
+ })
+
+ afterAll(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after all testcases
+ */
+ console.info('afterAll caled')
+ })
+
+ beforeEach(function () {
+
+ /*
+ * @tc.setup: setup invoked before each testcases
+ */
+ console.info('beforeEach caled')
+ })
+
+ afterEach(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after each testcases
+ */
+ console.info('afterEach caled')
+ })
+
+ /*
+ * @tc.name:SensorJsTest001
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest001", 0, async function (done) {
+ console.info('----------------------SensorJsTest001---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, (error) => {
+ if (error) {
+ console.info('SensorJsTest001 off error');
+ expect(false).assertTrue();
+ console.info('setTimeout ..start')
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest001 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 on success, x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest001 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest002
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest002", 0, async function (done) {
+ console.info('----------------------SensorJsTest002---------------------------');
+ function onSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest002 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest002 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(-1, onSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest003
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest003", 0, async function (done) {
+ console.info('----------------------SensorJsTest003---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(1, (error) => {
+ if (error) {
+ console.info('SensorJsTest003 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest003 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, { 'interval': 200000000 });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest003 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest004
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest004", 0, function () {
+ console.info('----------------------SensorJsTest004---------------------------');
+ sensor.on(1, function () { }, { 'interval': 100000000 }, 5);
+ expect(true).assertTrue();
+ console.info('----------------------SensorJsTest004--------------------------- end');
+ })
+
+ /*
+ * @tc.name:SensorJsTest005
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest005", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest005 once error');
+ expect(false).assertTrue();
+ } else {
+ console.info('SensorJsTest005 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest006
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest006", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest006 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest006 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(-1, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest007
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest007", 0, function () {
+ sensor.once(1, function () { }, 5);
+ expect(true).assertTrue();
+ })
+
+ /*
+ * @tc.name:SensorJsTest008
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest008", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest008 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest008 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(-1, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest009
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest009", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest009 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest009 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(1, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest010
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest010", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest010 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest010 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(1000000, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest011
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest011", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest011 once success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest011 once error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(1000000, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest012
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest012", 0, async function (done) {
+ function onCallback(error) {
+ if (error) {
+ console.info('SensorJsTest012 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest012 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(1000000, onCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest013
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest013", 0, function () {
+ sensor.off(1, 5);
+ expect(true).assertTrue();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest014
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest014", 0, async function (done) {
+ console.info('----------------------SensorJsTest014---------------------------');
+ function offPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.off(1, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off2 success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done(err);
+ reject(err)
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off2 error');
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve()
+ }, 500);
+ }
+ });
+ })
+ }
+
+ function offPromise1() {
+ return new Promise((resolve, reject) => {
+ sensor.off(1, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off1 success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest014 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise1();
+ }).then(() => {
+ return offPromise2();
+ });
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest015
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest015", 0, async function (done) {
+ console.info('----------------------SensorJsTest015---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(1, (error) => {
+ if (error) {
+ console.info('SensorJsTest015 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function onPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.on(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on2 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on2 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return onPromise2();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest016
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest016", 0, async function (done) {
+ console.info('----------------------SensorJsTest016---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(1, (error) => {
+ if (error) {
+ console.info('SensorJsTest016 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function oncePromise() {
+ return new Promise((resolve, reject) => {
+ sensor.once(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 once error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(1, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return oncePromise();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+})
diff --git a/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_gyr.js b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_gyr.js
new file mode 100755
index 0000000000000000000000000000000000000000..e0b98beaca462bd5753ea4ef00b616a3ac8c79cd
--- /dev/null
+++ b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_gyr.js
@@ -0,0 +1,618 @@
+/*
+ * 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 sensor from '@ohos.sensor'
+
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index'
+
+describe("SensorJsTest", function () {
+ beforeAll(function () {
+
+ /*
+ * @tc.setup: setup invoked before all testcases
+ */
+ console.info('beforeAll caled')
+ })
+
+ afterAll(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after all testcases
+ */
+ console.info('afterAll caled')
+ })
+
+ beforeEach(function () {
+
+ /*
+ * @tc.setup: setup invoked before each testcases
+ */
+ console.info('beforeEach caled')
+ })
+
+ afterEach(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after each testcases
+ */
+ console.info('afterEach caled')
+ })
+
+ /*
+ * @tc.name:SensorJsTest001
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest001", 0, async function (done) {
+ console.info('----------------------SensorJsTest001---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, (error) => {
+ if (error) {
+ console.info('SensorJsTest001 off error');
+ expect(false).assertTrue();
+ console.info('setTimeout ..start')
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest001 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 on success, x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest001 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest002
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest002", 0, async function (done) {
+ console.info('----------------------SensorJsTest002---------------------------');
+ function onSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest002 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest002 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(-1, onSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest003
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest003", 0, async function (done) {
+ console.info('----------------------SensorJsTest003---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(2, (error) => {
+ if (error) {
+ console.info('SensorJsTest003 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest003 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, { 'interval': 200000000 });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest003 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest004
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest004", 0, function () {
+ console.info('----------------------SensorJsTest004---------------------------');
+ sensor.on(2, function () { }, { 'interval': 100000000 }, 5);
+ expect(true).assertTrue();
+ console.info('----------------------SensorJsTest004--------------------------- end');
+ })
+
+ /*
+ * @tc.name:SensorJsTest005
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest005", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest005 once error');
+ expect(false).assertTrue();
+ } else {
+ console.info('SensorJsTest005 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest006
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest006", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest006 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest006 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(-1, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest007
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest007", 0, function () {
+ sensor.once(2, function () { }, 5);
+ expect(true).assertTrue();
+ })
+
+ /*
+ * @tc.name:SensorJsTest008
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest008", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest008 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest008 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(-1, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest009
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest009", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest009 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest009 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(2, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest010
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest010", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest010 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest010 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(1000000, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest011
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest011", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest011 once success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest011 once error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(1000000, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest012
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest012", 0, async function (done) {
+ function onCallback(error) {
+ if (error) {
+ console.info('SensorJsTest012 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest012 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(1000000, onCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest013
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest013", 0, function () {
+ sensor.off(2, 5);
+ expect(true).assertTrue();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest014
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest014", 0, async function (done) {
+ console.info('----------------------SensorJsTest014---------------------------');
+ function offPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.off(2, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off2 success');
+ expect(true).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err)
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off2 error');
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve()
+ }, 500);
+ }
+ });
+ })
+ }
+
+ function offPromise1() {
+ return new Promise((resolve, reject) => {
+ sensor.off(2, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off1 success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest014 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise1();
+ }).then(() => {
+ return offPromise2();
+ });
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest015
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest015", 0, async function (done) {
+ console.info('----------------------SensorJsTest015---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(2, (error) => {
+ if (error) {
+ console.info('SensorJsTest015 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function onPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.on(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on2 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on2 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return onPromise2();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest016
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest016", 0, async function (done) {
+ console.info('----------------------SensorJsTest016---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(2, (error) => {
+ if (error) {
+ console.info('SensorJsTest016 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function oncePromise() {
+ return new Promise((resolve, reject) => {
+ sensor.once(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 once error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(2, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return oncePromise();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+})
diff --git a/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_light.js b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_light.js
new file mode 100755
index 0000000000000000000000000000000000000000..7dce264580b85311aea0613d4744a40e3bedda1d
--- /dev/null
+++ b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_light.js
@@ -0,0 +1,602 @@
+/*
+ * 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 sensor from '@ohos.sensor'
+
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index'
+
+describe("SensorJsTest", function () {
+ beforeAll(function () {
+
+ /*
+ * @tc.setup: setup invoked before all testcases
+ */
+ console.info('beforeAll caled')
+ })
+
+ afterAll(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after all testcases
+ */
+ console.info('afterAll caled')
+ })
+
+ beforeEach(function () {
+
+ /*
+ * @tc.setup: setup invoked before each testcases
+ */
+ console.info('beforeEach caled')
+ })
+
+ afterEach(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after each testcases
+ */
+ console.info('afterEach caled')
+ })
+
+ /*
+ * @tc.name:SensorJsTest001
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest001", 0, async function (done) {
+ console.info('----------------------SensorJsTest001---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, (error) => {
+ if (error) {
+ console.info('SensorJsTest001 off error');
+ expect(false).assertTrue();
+ console.info('setTimeout ..start')
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest001 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 on success, success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest001 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest002
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest002", 0, async function (done) {
+ console.info('----------------------SensorJsTest002---------------------------');
+ function onSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest002 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest002 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(-1, onSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest003
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest003", 0, async function (done) {
+ console.info('----------------------SensorJsTest003---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(5, (error) => {
+ if (error) {
+ console.info('SensorJsTest003 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest003 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 on success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, { 'interval': 200000000 });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest003 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest004
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest004", 0, function () {
+ console.info('----------------------SensorJsTest004---------------------------');
+ sensor.on(5, function () { }, { 'interval': 100000000 }, 5);
+ expect(true).assertTrue();
+ console.info('----------------------SensorJsTest004--------------------------- end');
+ })
+
+ /*
+ * @tc.name:SensorJsTest005
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest005", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest005 once error');
+ expect(false).assertTrue();
+ } else {
+ console.info('SensorJsTest005 once success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest006
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest006", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest006 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest006 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(-1, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest007
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest007", 0, function () {
+ sensor.once(5, function () { }, 5);
+ expect(true).assertTrue();
+ })
+
+ /*
+ * @tc.name:SensorJsTest008
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest008", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest008 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest008 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(-1, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest009
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest009", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest009 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest009 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(5, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest010
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest010", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest010 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest010 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(2000000, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest011
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest011", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest011 once success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest011 once error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(2000000, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest012
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest012", 0, async function (done) {
+ function onCallback(error) {
+ if (error) {
+ console.info('SensorJsTest012 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest012 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(2000000, onCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest013
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest013", 0, function () {
+ sensor.off(5, 5);
+ expect(true).assertTrue();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest014
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest014", 0, async function (done) {
+ console.info('----------------------SensorJsTest014---------------------------');
+ function offPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.off(5, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off2 success');
+ expect(true).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err)
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off2 error');
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve()
+ }, 500);
+ }
+ });
+ })
+ }
+
+ function offPromise1() {
+ return new Promise((resolve, reject) => {
+ sensor.off(5, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off1 success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest014 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 on success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise1();
+ }).then(() => {
+ return offPromise2();
+ });
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest015
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest015", 0, async function (done) {
+ console.info('----------------------SensorJsTest015---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(5, (error) => {
+ if (error) {
+ console.info('SensorJsTest015 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function onPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.on(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on2 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on2 success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on1 success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return onPromise2();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest016
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest016", 0, async function (done) {
+ console.info('----------------------SensorJsTest016---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(5, (error) => {
+ if (error) {
+ console.info('SensorJsTest016 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function oncePromise() {
+ return new Promise((resolve, reject) => {
+ sensor.once(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 once error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 once success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(5, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 on1 success data: ' + data.intensity);
+ expect(typeof (data.intensity)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return oncePromise();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+})
diff --git a/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_mag.js b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_mag.js
new file mode 100755
index 0000000000000000000000000000000000000000..c5ad10eade430853306942ab29d3fdd2e59ec41d
--- /dev/null
+++ b/sensors/sensor_standard/src/main/js/default/test/SensorOnOffTest.test_mag.js
@@ -0,0 +1,618 @@
+/*
+ * 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 sensor from '@ohos.sensor'
+
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index'
+
+describe("SensorJsTest", function () {
+ beforeAll(function () {
+
+ /*
+ * @tc.setup: setup invoked before all testcases
+ */
+ console.info('beforeAll caled')
+ })
+
+ afterAll(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after all testcases
+ */
+ console.info('afterAll caled')
+ })
+
+ beforeEach(function () {
+
+ /*
+ * @tc.setup: setup invoked before each testcases
+ */
+ console.info('beforeEach caled')
+ })
+
+ afterEach(function () {
+
+ /*
+ * @tc.teardown: teardown invoked after each testcases
+ */
+ console.info('afterEach caled')
+ })
+
+ /*
+ * @tc.name:SensorJsTest001
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest001", 0, async function (done) {
+ console.info('----------------------SensorJsTest001---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, (error) => {
+ if (error) {
+ console.info('SensorJsTest001 off error');
+ expect(false).assertTrue();
+ console.info('setTimeout ..start')
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest001 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest001 on success, x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest001 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest002
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest002", 0, async function (done) {
+ console.info('----------------------SensorJsTest002---------------------------');
+ function onSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest002 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest002 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(-1, onSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest003
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest003", 0, async function (done) {
+ console.info('----------------------SensorJsTest003---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(6, (error) => {
+ if (error) {
+ console.info('SensorJsTest003 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ }, 1000)
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest003 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest003 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ }, { 'interval': 200000000 });
+ })
+
+ await promise.then(() => {
+ return offPromise();
+ }, () => {
+ console.info("SensorJsTest003 reject");
+ })
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest004
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest004", 0, function () {
+ console.info('----------------------SensorJsTest004---------------------------');
+ sensor.on(6, function () { }, { 'interval': 100000000 }, 5);
+ expect(true).assertTrue();
+ console.info('----------------------SensorJsTest004--------------------------- end');
+ })
+
+ /*
+ * @tc.name:SensorJsTest005
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest005", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest005 once error');
+ expect(false).assertTrue();
+ } else {
+ console.info('SensorJsTest005 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest006
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest006", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest006 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest006 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(-1, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest007
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest007", 0, function () {
+ sensor.once(6, function () { }, 5);
+ expect(true).assertTrue();
+ })
+
+ /*
+ * @tc.name:SensorJsTest008
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest008", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest008 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest008 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(-1, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest009
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest009", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest009 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest009 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(6, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest010
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest010", 0, async function (done) {
+ function offCallback(error) {
+ if (error) {
+ console.info('SensorJsTest010 off success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest010 off error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.off(1000000, offCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest011
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest011", 0, async function (done) {
+ function onceSensorCallback(error, data) {
+ if (error) {
+ console.info('SensorJsTest011 once success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest011 once error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.once(1000000, onceSensorCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest012
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest012", 0, async function (done) {
+ function onCallback(error) {
+ if (error) {
+ console.info('SensorJsTest012 on success');
+ expect(true).assertTrue();
+ } else {
+ console.info('SensorJsTest012 on error');
+ expect(false).assertTrue();
+ }
+ setTimeout(() => {
+ done();
+ }, 500);
+ }
+ sensor.on(1000000, onCallback);
+ })
+
+ /*
+ * @tc.name:SensorJsTest013
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest013", 0, function () {
+ sensor.off(6, 5);
+ expect(true).assertTrue();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest014
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest014", 0, async function (done) {
+ console.info('----------------------SensorJsTest014---------------------------');
+ function offPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.off(6, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off2 success');
+ expect(true).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err)
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off2 error');
+ expect(false).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve()
+ }, 500);
+ }
+ });
+ })
+ }
+
+ function offPromise1() {
+ return new Promise((resolve, reject) => {
+ sensor.off(6, (error) => {
+ if (error) {
+ console.info('SensorJsTest014 off1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 off1 success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let promise = new Promise((resolve, reject) => {
+ sensor.on(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest014 on error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest014 on success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await promise.then(() => {
+ return offPromise1();
+ }).then(() => {
+ return offPromise2();
+ });
+ done();
+ })
+
+ /*
+ * @tc.name:SensorJsTest015
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest015", 0, async function (done) {
+ console.info('----------------------SensorJsTest015---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(6, (error) => {
+ if (error) {
+ console.info('SensorJsTest015 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function onPromise2() {
+ return new Promise((resolve, reject) => {
+ sensor.on(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on2 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on2 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest015 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest015 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return onPromise2();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+
+
+ /*
+ * @tc.name:SensorJsTest016
+ * @tc.desc:verify app info is not null
+ * @tc.type: FUNC
+ * @tc.require: Issue Number
+ */
+ it("SensorJsTest016", 0, async function (done) {
+ console.info('----------------------SensorJsTest016---------------------------');
+ function offPromise() {
+ return new Promise((resolve, reject) => {
+ sensor.off(6, (error) => {
+ if (error) {
+ console.info('SensorJsTest016 off error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ done();
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 off success');
+ expect(true).assertTrue();
+ setTimeout(() => {
+ done();
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+ function oncePromise() {
+ return new Promise((resolve, reject) => {
+ sensor.once(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 once error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 once success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+ }
+
+ let onPromise1 = new Promise((resolve, reject) => {
+ sensor.on(6, function (error, data) {
+ if (error) {
+ console.info('SensorJsTest016 on1 error');
+ expect(false).assertTrue();
+ setTimeout((err) => {
+ reject(err);
+ }, 500);
+ } else {
+ console.info('SensorJsTest016 on1 success x: ' + data.x + "y: " + data.y + "z: " + data.z);
+ expect(typeof (data.x)).assertEqual("number");
+ expect(typeof (data.y)).assertEqual("number");
+ expect(typeof (data.z)).assertEqual("number");
+ setTimeout(() => {
+ resolve();
+ }, 500);
+ }
+ });
+ })
+
+ await onPromise1.then(() => {
+ return oncePromise();
+ }).then(() => {
+ return offPromise();
+ });
+ done();
+ })
+})