diff --git a/distributeddatamgr/BUILD.gn b/distributeddatamgr/BUILD.gn
index b58a8686b6ad2fc8ac186befd1c631fcd3d85d90..076d6369f267ea23abf563534f452a5b24a8123e 100755
--- a/distributeddatamgr/BUILD.gn
+++ b/distributeddatamgr/BUILD.gn
@@ -17,6 +17,7 @@ group("distributeddatamgr") {
if (is_standard_system) {
deps = [
"appdatamgrjstest/hap:appdatamgr_js_test",
+ "distributeddataObjectjstest/hap:distributeddataObject_js_test",
"distributeddatamgrjstest/hap:distributeddatamgr_js_test",
]
} else {
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/BUILD.gn b/distributeddatamgr/distributeddataObjectjstest/hap/BUILD.gn
new file mode 100755
index 0000000000000000000000000000000000000000..8f02c8259e973a4f3927bfa0807584778989bd4f
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/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("distributeddataObject_js_test") {
+ hap_profile = "./src/main/config.json"
+ deps = [
+ ":distributeddataObject_js_assets",
+ ":distributeddataObject_resources",
+ ]
+ certificate_profile = "./signature/openharmony_sx.p7b"
+ hap_name = "ActsDistributedDataObjectJsTest"
+}
+ohos_js_assets("distributeddataObject_js_assets") {
+ source_dir = "./src/main/js/default"
+}
+ohos_resources("distributeddataObject_resources") {
+ sources = [ "./src/main/resources" ]
+ hap_profile = "./src/main/config.json"
+}
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/Test.json b/distributeddatamgr/distributeddataObjectjstest/hap/Test.json
new file mode 100755
index 0000000000000000000000000000000000000000..c72fa3e508d50d73babcbf55e793b0b60116f5fb
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/Test.json
@@ -0,0 +1,18 @@
+{
+ "description": "Configuration for hjunit demo Tests",
+ "driver": {
+ "type": "JSUnitTest",
+ "test-timeout": "1200000",
+ "package": "ohos.acts.distributeddataObject",
+ "shell-timeout": "60000"
+ },
+ "kits": [
+ {
+ "test-file-name": [
+ "ActsDistributedDataObjectJsTest.hap"
+ ],
+ "type": "AppInstallKit",
+ "cleanup-apps": true
+ }
+ ]
+}
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/signature/openharmony_sx.p7b b/distributeddatamgr/distributeddataObjectjstest/hap/signature/openharmony_sx.p7b
new file mode 100755
index 0000000000000000000000000000000000000000..9be1e98fa4c0c28ca997ed660112fa16b194f0f5
Binary files /dev/null and b/distributeddatamgr/distributeddataObjectjstest/hap/signature/openharmony_sx.p7b differ
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/config.json b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/config.json
new file mode 100755
index 0000000000000000000000000000000000000000..2356ccf35bd12ace0e0d424304b846d89c23b435
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/config.json
@@ -0,0 +1,62 @@
+{
+ "app": {
+ "bundleName": "ohos.acts.distributeddataObject",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "ohos.acts.distributeddataObject",
+ "name": ".MyApplication",
+ "mainAbility": "ohos.acts.distributeddataObject.MainAbility",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry",
+ "installationFree": false
+ },
+ "abilities": [
+ {
+ "visible": true,
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "name": "ohos.acts.distributeddataObject.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": true
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/app.js b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/app.js
new file mode 100755
index 0000000000000000000000000000000000000000..6a06f7f6cad18519bf28b42a2a171b69d2140f32
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/app.js
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2021 Huawei Device Co., Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+export default {
+ onCreate() {
+ console.info('TestApplication onCreate');
+ },
+ onDestroy() {
+ console.info('TestApplication onDestroy');
+ }
+};
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/en-US.json b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/en-US.json
new file mode 100755
index 0000000000000000000000000000000000000000..55561b83737c3c31d082fbfa11e5fc987a351104
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/en-US.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/zh-CN.json b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/zh-CN.json
new file mode 100755
index 0000000000000000000000000000000000000000..cce1af06761a42add0cac1a0567aa3237eda8cb4
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/i18n/zh-CN.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.css b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.css
new file mode 100755
index 0000000000000000000000000000000000000000..e19021816bc61bc4cb5128677386b9789132e270
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.css
@@ -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.
+*/
+.container {
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.title {
+ font-size: 100px;
+}
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.hml b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.hml
new file mode 100755
index 0000000000000000000000000000000000000000..1c26cf73deab18390844a53a103458b10ed11e93
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.hml
@@ -0,0 +1,5 @@
+
+
+ {{ $t('strings.hello') }} {{title}}
+
+
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.js b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.js
new file mode 100755
index 0000000000000000000000000000000000000000..505e12812901b7929a09cd03ff95c4f2184a4d64
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/pages/index/index.js
@@ -0,0 +1,36 @@
+/*
+* 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} 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()
+ core.init()
+ require('../../test/List.test')
+ core.execute()
+ },
+ onReady() {
+ },
+}
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/List.test.js b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/List.test.js
new file mode 100755
index 0000000000000000000000000000000000000000..3e7638cf5f1a9c791a7eefdaf4ff37fb024ad0da
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/List.test.js
@@ -0,0 +1,15 @@
+/*
+* Copyright (c) 2021 Huawei Device Co., Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+require('./ObjectStoreJsunit.test.js')
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/ObjectStoreJsunit.test.js b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/ObjectStoreJsunit.test.js
new file mode 100755
index 0000000000000000000000000000000000000000..b9008ca07cf8709e0209e91ab838bcb53dd17d64
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/js/default/test/ObjectStoreJsunit.test.js
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
+import distributedObject from '@ohos.data.distributedDataObject';
+
+var baseLine = 500; //0.5 second
+const TAG = "OBJECTSTORE_TEST";
+
+function changeCallback(sessionId, changeData) {
+ console.info("get init change111" + sessionId + " " + changeData);
+ if (changeData != null && changeData != undefined) {
+ changeData.forEach(element => {
+ console.info(TAG + "data changed !" + element);
+ });
+ }
+ console.info(TAG + "get init change111 end" + sessionId + " " + changeData);
+}
+
+function changeCallback2(sessionId, changeData) {
+ console.info("get init change222" + sessionId + " " + changeData);
+ if (changeData != null && changeData != undefined) {
+ changeData.forEach(element => {
+ console.info(TAG + "data changed !" + element);
+ });
+ }
+ console.info(TAG + "get init change222 end" + sessionId + " " + changeData);
+}
+
+function statusCallback1(sessionId, networkId, status) {
+ console.info(TAG + "test init change111" + sessionId);
+ this.response += "\nstatus changed " + sessionId + " " + status + " " + networkId;
+}
+
+function statusCallback2(sessionId, networkId, status) {
+ console.info(TAG + "test init change222" + sessionId);
+ this.response += "\nstatus changed " + sessionId + " " + status + " " + networkId;
+}
+
+function statusCallback3(sessionId, networkId, status) {
+ console.info(TAG + "test init change333" + sessionId);
+ this.response += "\nstatus changed " + sessionId + " " + status + " " + networkId;
+}
+
+describe('objectStoreTest', function () {
+ beforeAll(function () {
+ console.info(TAG + 'beforeAll')
+ })
+
+ beforeEach(function () {
+ console.info(TAG + 'beforeEach')
+ })
+
+ afterEach(function () {
+ console.info(TAG + 'afterEach')
+ })
+
+ afterAll(function () {
+ console.info(TAG + 'afterAll')
+ })
+
+ console.log(TAG + "*************Unit Test Begin*************");
+
+
+ /**
+ * @tc.name: testOn001
+ * @tc.desc: object join session and on,object can receive callback when data has been changed
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOn001', 0, function (done) {
+ console.log(TAG + "************* testOn001 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session1");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session1" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOn001 joinSession failed");
+ }
+ console.info(TAG + " start call watch change");
+ objectTest.on("change", changeCallback);
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testOn001 end *************");
+ })
+
+ /**
+ * @tc.name: testOn002
+ * @tc.desc object join session and no on,obejct can not receive callback when data has been changed
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOn002', 0, function (done) {
+ console.log(TAG + "************* testOn002 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session2");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session2" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOn002 joinSession failed");
+ }
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testOn002 end *************");
+ })
+
+ /**
+ * @tc.name: testOn003
+ * @tc.desc: object join session and on,then object change data twice,
+ * object can receive two callbacks when data has been changed
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOn003', 0, function (done) {
+ console.log(TAG + "************* testOn003 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session3");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session3" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOn003 joinSession failed");
+ }
+ objectTest.on("change", changeCallback);
+ console.info(TAG + " start call watch change");
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ objectTest.name = "jack2";
+ objectTest.age = 20;
+ objectTest.isVis = false;
+ expect(objectTest.name == "jack2");
+ expect(objectTest.age == 20);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testOn003 end *************");
+ })
+
+ /**
+ * @tc.name: testOn004
+ * @tc.desc object join session and on,then object do not change data,object can not receive callbacks
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOn004', 0, function (done) {
+ console.log(TAG + "************* testOn004 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session4");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session4" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOn004 joinSession failed");
+ }
+ objectTest.on("change", changeCallback);
+ console.info(TAG + " start call watch change");
+ console.info(TAG + " end call watch change");
+
+ done()
+ console.log(TAG + "************* testOn004 end *************");
+ })
+
+ /**
+ * @tc.name testOff001
+ * @tc.desc object join session and on&off,object can not receive callback after off
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOff001', 0, function (done) {
+ console.log(TAG + "************* testOff001 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session5");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session5" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOff001 joinSession failed");
+ }
+ objectTest.on("change", changeCallback);
+ console.info(TAG + " start call watch change");
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+ objectTest.off("change");
+ console.info(TAG + " end call watch change");
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack2";
+ objectTest.age = 20;
+ objectTest.isVis = false;
+ expect(objectTest.name == "jack2");
+ expect(objectTest.age == 20);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testOff001 end *************");
+ })
+
+ /**
+ * @tc.name:testOff002
+ * @tc.desc object join session and off,object can not receive callback
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testOff002', 0, function (done) {
+ console.log(TAG + "************* testOff002 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session6");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session6" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testOff002 joinSession failed");
+ }
+ objectTest.off("change");
+ console.info(TAG + " end call watch change");
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testOff002 end *************");
+ })
+
+ /**
+ * @tc.name: testMultiObjectOn001
+ * @tc.desc: two objects join session and on,then object change data,user can receive two callbacks from two objects
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testMultiObjectOn001', 0, function (done) {
+ console.log(TAG + "************* testMultiObjectOn001 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session7");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session7" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testMultiObjectOn001 joinSession failed");
+ }
+ var testObject = distributedObject.createDistributedObject({ name: "Eric", age: 81, isVis: true });
+ testObject.setSessionId("testSession1");
+ if (testObject != undefined && testObject != null) {
+ expect("testSession1").assertEqual(testObject.sessionId3);
+ } else {
+ console.log(TAG + "testMultiObjectOn001 joinSession failed");
+ }
+ objectTest.on("change", changeCallback);
+ testObject.on("change", changeCallback2);
+ console.info(TAG + " start call watch change");
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = "jack1";
+ objectTest.age = 19;
+ objectTest.isVis = true;
+ expect(objectTest.name == "jack1");
+ expect(objectTest.age == 19);
+ objectTest.name = "jack2";
+ objectTest.age = 20;
+ objectTest.isVis = false;
+ expect(objectTest.name == "jack2");
+ expect(objectTest.age == 20);
+ console.info(TAG + " set data success!");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testMultiObjectOn001 end *************");
+ })
+
+ /**
+ * @tc.name: testUndefinedType001
+ * @tc.desc: object use undefined type,can not join session
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testUndefinedType001', 0, function (done) {
+ console.log(TAG + "************* testUndefinedType001 start *************");
+ var object1 = distributedObject.createDistributedObject({ name: undefined, age: undefined, isVis: undefined });
+ try {
+ object1.setSessionId("session11");
+ if (object1 != undefined && object1 != null) {
+ expect("session11" == object1.sessionId3);
+ } else {
+ console.log(TAG + "testChangeSession001 joinSession session11 failed");
+ }
+ } catch (error) {
+ console.error(TAG + error);
+ }
+
+ done()
+ console.log(TAG + "************* testUndefinedType001 end *************");
+ })
+
+ /**
+ * @tc.name: testGenSessionId001
+ * @tc.desc: object generate random sessionId
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testGenSessionId001', 0, function (done) {
+ console.log(TAG + "************* testGenSessionId001 start *************");
+ var sessionId = distributedObject.genSessionId();
+ expect(sessionId != null && sessionId.length > 0 && typeof (sessionId) == 'string');
+
+ done()
+ console.log(TAG + "************* testGenSessionId001 end *************");
+ })
+
+ /**
+ * @tc.name: testGenSessionId002
+ * @tc.desc: object generate 2 random sessionId and not equal
+ * @tc.type: FUNC
+ * @tc.require: I4H3LS
+ */
+ it('testGenSessionId002', 0, function (done) {
+ console.log(TAG + "************* testGenSessionId001 start *************");
+ var sessionId1 = distributedObject.genSessionId();
+ var sessionId2 = distributedObject.genSessionId();
+ expect(sessionId1 != sessionId2);
+
+ done()
+ console.log(TAG + "************* testGenSessionId002 end *************");
+ })
+
+ /**
+ * @tc.name: testOnStatus001
+ * @tc.desc: object set a listener to watch another object online/offline
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testOnStatus001', 0, function (done) {
+ console.log(TAG + "************* testOnStatus001 start *************");
+ console.log(TAG + "start watch status");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.on("status", statusCallback1);
+ console.log(TAG + "watch success");
+
+ done()
+ console.log(TAG + "************* testOnStatus001 end *************");
+ })
+
+ /**
+ * @tc.name: testOnStatus002
+ * @tc.desc: object set several listener and can unset specified listener
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testOnStatus002', 0, function (done) {
+ console.log(TAG + "************* testOnStatus001 start *************");
+ console.log(TAG + "start watch status");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.on("status", statusCallback1);
+ objectTest.on("status", statusCallback2);
+ objectTest.on("status", statusCallback3);
+ console.log(TAG + "watch success");
+ console.log(TAG + "start call unwatch status");
+ objectTest.off("status", statusCallback1);
+ console.log(TAG + "unwatch success");
+
+ done()
+ console.log(TAG + "************* testOnStatus002 end *************");
+ })
+
+ /**
+ * @tc.name: testOnStatus003
+ * @tc.desc: object set several listener and can unWatch all watcher
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testOnStatus002', 0, function (done) {
+ console.log(TAG + "************* testOnStatus001 start *************");
+ console.log(TAG + "start watch status");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.on("status", statusCallback1);
+ objectTest.on("status", statusCallback2);
+ objectTest.on("status", statusCallback3);
+ console.log(TAG + "watch success");
+ console.log(TAG + "start call unwatch status");
+ objectTest.off("status");
+ console.log(TAG + "unwatch success");
+
+ done()
+ console.log(TAG + "************* testOnStatus003 end *************");
+ })
+
+ /**
+ * @tc.name: testComplex001
+ * @tc.desc: object can get/set complex data
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testComplex001', 0, function (done) {
+ console.log(TAG + "************* testComplex001 start *************");
+ var complexObject = distributedObject.createDistributedObject({
+ name: undefined,
+ age: undefined,
+ parent: undefined,
+ list: undefined
+ });
+ complexObject.setSessionId("session12");
+ if (complexObject != undefined && complexObject != null) {
+ expect("session12" == complexObject.sessionId3);
+ } else {
+ console.log(TAG + "testOnComplex001 joinSession session12 failed");
+ }
+ complexObject.name = "jack";
+ complexObject.age = 19;
+ complexObject.isVis = false;
+ complexObject.parent = { mother: "jack mom", father: "jack Dad" };
+ complexObject.list = [{ mother: "jack mom" }, { father: "jack Dad" }];
+ expect(complexObject.name == "jack");
+ expect(complexObject.age == 19);
+ expect(complexObject.parent == { mother: "jack1 mom", father: "jack1 Dad" });
+ expect(complexObject.list == [{ mother: "jack1 mom", father: "jack1 Dad" }]);
+
+ done()
+ console.log(TAG + "************* testComplex001 end *************");
+ })
+
+ /**
+ * @tc.name: testMaxSize001
+ * @tc.desc: object can get/set data under 4MB size
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testMaxSize001', 0, function (done) {
+ console.log(TAG + "************* testMaxSize001 start *************");
+ var objectTest = distributedObject.createDistributedObject({ name: "Amy", age: 18, isVis: false });
+ objectTest.setSessionId("session13");
+ if (objectTest != undefined && objectTest != null) {
+ expect("session13" == objectTest.sessionId3);
+ } else {
+ console.log(TAG + "testMaxSize001 joinSession session13 failed");
+ }
+ //maxString = 32byte
+ var maxString = "12345678123456781234567812345678".repeat(131072);
+ if (objectTest != undefined && objectTest != null) {
+ objectTest.name = maxString;
+ objectTest.age = 42;
+ objectTest.isVis = false;
+ expect(objectTest.name == maxString);
+ console.log(TAG + "get/set maxSize string success");
+ } else {
+ console.info(TAG + " object is null,set name fail");
+ }
+
+ done()
+ console.log(TAG + "************* testMaxSize001 end *************");
+ })
+
+ /**
+ * @tc.name: testPerformance001
+ * @tc.desc: performanceTest for set/get data
+ * @tc.type: FUNC
+ * @tc.require: I4H3M8
+ */
+ it('testPerformance001', 0, function (done) {
+ console.log(TAG + "************* testPerformance001 start *************");
+ var complexObject = distributedObject.createDistributedObject({
+ name: undefined,
+ age: undefined,
+ parent: undefined,
+ list: undefined
+ });
+ var st1;
+ var totalTime = 0;
+ var setSessionIdTime = 0;
+ var setTime = 0;
+ var onTime = 0;
+ var offTime = 0;
+ for (var i = 0;i < 100; i++) {
+ st1 = Date.now();
+ complexObject.setSessionId("session14");
+ setSessionIdTime += Date.now() - st1;
+ if (complexObject != undefined && complexObject != null) {
+ expect("session14" == complexObject.sessionId3);
+ } else {
+ console.log(TAG + "testPerformance001 joinSession session14 failed");
+ }
+ console.info(TAG + " start call watch change");
+ st1 = Date.now();
+ complexObject.on("change", changeCallback);
+ onTime += Date.now() - st1;
+ console.info(TAG + "on change success");
+ st1 = Date.now();
+ complexObject.name = "jack2";
+ complexObject.age = 20;
+ complexObject.isVis = false;
+ complexObject.parent = { mother: "jack1 mom1", father: "jack1 Dad1" };
+ complexObject.list = [{ mother: "jack1 mom1" }, { father: "jack1 Dad1" }];
+ setTime += Date.now() - st1;
+ expect(complexObject.name == "jack2");
+ expect(complexObject.age == 20);
+ expect(complexObject.parent == { mother: "jack1 mom1", father: "jack1 Dad1" });
+ expect(complexObject.list == [{ mother: "jack1 mom1", father: "jack1 Dad1" }]);
+
+ console.log(TAG + "start unWatch change");
+ st1 = Date.now();
+ complexObject.off("change");
+ offTime += Date.now() - st1;
+ totalTime += setSessionIdTime;
+ totalTime += setTime;
+ totalTime += onTime;
+ totalTime += offTime;
+ console.log(TAG + "end unWatch success");
+ }
+ console.log(TAG + "totalTime = " + (totalTime / 100));
+ expect(totalTime < baseLine);
+ done()
+ console.log(TAG + "************* testPerformance001 end *************");
+ })
+
+ console.log(TAG + "*************Unit Test End*************");
+})
\ No newline at end of file
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/element/string.json b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/element/string.json
new file mode 100755
index 0000000000000000000000000000000000000000..14984ec9d1e6c37703629fe3a6737e7ec52aa059
--- /dev/null
+++ b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/element/string.json
@@ -0,0 +1,12 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "DistributeddataObjectJsTest"
+ },
+ {
+ "name": "mainability_description",
+ "value": "hap sample empty page"
+ }
+ ]
+}
diff --git a/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/media/icon.png b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/media/icon.png
new file mode 100755
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/distributeddatamgr/distributeddataObjectjstest/hap/src/main/resources/base/media/icon.png differ