@fluid-experimental/property-properties 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/containerSerializer.d.ts.map +1 -1
- package/dist/containerSerializer.js +5 -5
- package/dist/containerSerializer.js.map +1 -1
- package/dist/enableValidations.js.map +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.d.ts +10 -10
- package/dist/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.js +70 -53
- package/dist/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/dist/properties/arrayProperty.d.ts.map +1 -1
- package/dist/properties/arrayProperty.js +152 -103
- package/dist/properties/arrayProperty.js.map +1 -1
- package/dist/properties/baseProperty.d.ts +4 -4
- package/dist/properties/baseProperty.d.ts.map +1 -1
- package/dist/properties/baseProperty.js +69 -47
- package/dist/properties/baseProperty.js.map +1 -1
- package/dist/properties/boolProperty.d.ts.map +1 -1
- package/dist/properties/boolProperty.js +3 -3
- package/dist/properties/boolProperty.js.map +1 -1
- package/dist/properties/containerProperty.d.ts +8 -8
- package/dist/properties/containerProperty.d.ts.map +1 -1
- package/dist/properties/containerProperty.js +33 -26
- package/dist/properties/containerProperty.js.map +1 -1
- package/dist/properties/enumArrayProperty.d.ts.map +1 -1
- package/dist/properties/enumArrayProperty.js +14 -14
- package/dist/properties/enumArrayProperty.js.map +1 -1
- package/dist/properties/enumProperty.d.ts.map +1 -1
- package/dist/properties/enumProperty.js +17 -17
- package/dist/properties/enumProperty.js.map +1 -1
- package/dist/properties/floatProperties.js +4 -4
- package/dist/properties/floatProperties.js.map +1 -1
- package/dist/properties/index.d.ts +23 -23
- package/dist/properties/index.d.ts.map +1 -1
- package/dist/properties/index.js.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.js +47 -37
- package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/dist/properties/intProperties.d.ts.map +1 -1
- package/dist/properties/intProperties.js +10 -10
- package/dist/properties/intProperties.js.map +1 -1
- package/dist/properties/lazyLoadedProperties.js.map +1 -1
- package/dist/properties/mapProperty.d.ts.map +1 -1
- package/dist/properties/mapProperty.js +21 -17
- package/dist/properties/mapProperty.js.map +1 -1
- package/dist/properties/namedNodeProperty.d.ts.map +1 -1
- package/dist/properties/namedNodeProperty.js +3 -3
- package/dist/properties/namedNodeProperty.js.map +1 -1
- package/dist/properties/namedProperty.d.ts.map +1 -1
- package/dist/properties/namedProperty.js +7 -5
- package/dist/properties/namedProperty.js.map +1 -1
- package/dist/properties/nodeProperty.d.ts.map +1 -1
- package/dist/properties/nodeProperty.js +5 -3
- package/dist/properties/nodeProperty.js.map +1 -1
- package/dist/properties/primitiveTypeCasts.d.ts.map +1 -1
- package/dist/properties/primitiveTypeCasts.js +9 -9
- package/dist/properties/primitiveTypeCasts.js.map +1 -1
- package/dist/properties/referenceArrayProperty.d.ts.map +1 -1
- package/dist/properties/referenceArrayProperty.js +31 -25
- package/dist/properties/referenceArrayProperty.js.map +1 -1
- package/dist/properties/referenceMapProperty.d.ts.map +1 -1
- package/dist/properties/referenceMapProperty.js +18 -18
- package/dist/properties/referenceMapProperty.js.map +1 -1
- package/dist/properties/referenceProperty.d.ts.map +1 -1
- package/dist/properties/referenceProperty.js +33 -29
- package/dist/properties/referenceProperty.js.map +1 -1
- package/dist/properties/setProperty.d.ts.map +1 -1
- package/dist/properties/setProperty.js +31 -29
- package/dist/properties/setProperty.js.map +1 -1
- package/dist/properties/stringProperty.d.ts.map +1 -1
- package/dist/properties/stringProperty.js +56 -40
- package/dist/properties/stringProperty.js.map +1 -1
- package/dist/properties/uintProperties.js +5 -5
- package/dist/properties/uintProperties.js.map +1 -1
- package/dist/properties/valueArrayProperty.d.ts +1 -1
- package/dist/properties/valueArrayProperty.d.ts.map +1 -1
- package/dist/properties/valueArrayProperty.js +30 -29
- package/dist/properties/valueArrayProperty.js.map +1 -1
- package/dist/properties/valueMapProperty.d.ts.map +1 -1
- package/dist/properties/valueMapProperty.js +31 -29
- package/dist/properties/valueMapProperty.js.map +1 -1
- package/dist/properties/valueProperty.d.ts.map +1 -1
- package/dist/properties/valueProperty.js +11 -9
- package/dist/properties/valueProperty.js.map +1 -1
- package/dist/propertyFactory.d.ts.map +1 -1
- package/dist/propertyFactory.js +309 -252
- package/dist/propertyFactory.js.map +1 -1
- package/dist/propertyTemplate.d.ts +17 -17
- package/dist/propertyTemplate.d.ts.map +1 -1
- package/dist/propertyTemplate.js +64 -45
- package/dist/propertyTemplate.js.map +1 -1
- package/dist/propertyTemplateWrapper.d.ts.map +1 -1
- package/dist/propertyTemplateWrapper.js +40 -25
- package/dist/propertyTemplateWrapper.js.map +1 -1
- package/dist/propertyUtils.d.ts.map +1 -1
- package/dist/propertyUtils.js.map +1 -1
- package/dist/test/properties/arrayProperty.spec.js +566 -490
- package/dist/test/properties/arrayProperty.spec.js.map +1 -1
- package/dist/test/properties/baseProperty.spec.js +293 -280
- package/dist/test/properties/baseProperty.spec.js.map +1 -1
- package/dist/test/properties/containerProperty.spec.js +100 -94
- package/dist/test/properties/containerProperty.spec.js.map +1 -1
- package/dist/test/properties/customArrayProperty.spec.js +174 -147
- package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumArrayProperty.spec.js +67 -63
- package/dist/test/properties/enumArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumProperty.spec.js +115 -97
- package/dist/test/properties/enumProperty.spec.js.map +1 -1
- package/dist/test/properties/float32.spec.js +5 -5
- package/dist/test/properties/float32.spec.js.map +1 -1
- package/dist/test/properties/int64ArrayProperty.spec.js +157 -93
- package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64MapProperty.spec.js +185 -166
- package/dist/test/properties/int64MapProperty.spec.js.map +1 -1
- package/dist/test/properties/int64Property.spec.js +109 -109
- package/dist/test/properties/int64Property.spec.js.map +1 -1
- package/dist/test/properties/isLeafNode.spec.js +75 -76
- package/dist/test/properties/isLeafNode.spec.js.map +1 -1
- package/dist/test/properties/mapProperty.spec.js +571 -531
- package/dist/test/properties/mapProperty.spec.js.map +1 -1
- package/dist/test/properties/namedNodeProperty.spec.js +31 -31
- package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
- package/dist/test/properties/nodeProperty.spec.js +805 -795
- package/dist/test/properties/nodeProperty.spec.js.map +1 -1
- package/dist/test/properties/referenceProperty.spec.js +729 -679
- package/dist/test/properties/referenceProperty.spec.js.map +1 -1
- package/dist/test/properties/relationshipProperty.spec.js +16 -16
- package/dist/test/properties/relationshipProperty.spec.js.map +1 -1
- package/dist/test/properties/setProperty.spec.js +288 -227
- package/dist/test/properties/setProperty.spec.js.map +1 -1
- package/dist/test/properties/stringProperty.spec.js +326 -318
- package/dist/test/properties/stringProperty.spec.js.map +1 -1
- package/dist/test/properties/uint64Property.spec.js +46 -36
- package/dist/test/properties/uint64Property.spec.js.map +1 -1
- package/dist/test/properties/valueMapProperty.spec.js +259 -246
- package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
- package/dist/test/properties/valueProperty.spec.js +49 -43
- package/dist/test/properties/valueProperty.spec.js.map +1 -1
- package/dist/test/propertyFactory.spec.js +2038 -1631
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/propertyTemplateWrapper.spec.js +72 -102
- package/dist/test/propertyTemplateWrapper.spec.js.map +1 -1
- package/dist/test/propertyUtils.spec.js +22 -21
- package/dist/test/propertyUtils.spec.js.map +1 -1
- package/dist/test/reversibleChangeset.spec.js +857 -703
- package/dist/test/reversibleChangeset.spec.js.map +1 -1
- package/dist/test/setup.js +5 -5
- package/dist/test/setup.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/utils.spec.js +1334 -1144
- package/dist/test/utils.spec.js.map +1 -1
- package/dist/test/validation/badMissingSemverInTypeid.js +20 -20
- package/dist/test/validation/badMissingSemverInTypeid.js.map +1 -1
- package/dist/test/validation/badPrimitiveTypeid.js +12 -12
- package/dist/test/validation/badPrimitiveTypeid.js.map +1 -1
- package/dist/test/validation/goodColorId.js +91 -91
- package/dist/test/validation/goodColorId.js.map +1 -1
- package/dist/test/validation/goodColorPalette.js +4 -4
- package/dist/test/validation/goodColorPalette.js.map +1 -1
- package/dist/test/validation/goodPointId.js +20 -20
- package/dist/test/validation/goodPointId.js.map +1 -1
- package/dist/test/validation/reversibleChangeSetTestData.js +23841 -2
- package/dist/test/validation/reversibleChangeSetTestData.js.map +1 -1
- package/lib/containerSerializer.d.ts.map +1 -1
- package/lib/containerSerializer.js +5 -5
- package/lib/containerSerializer.js.map +1 -1
- package/lib/enableValidations.js.map +1 -1
- package/lib/index.d.ts +19 -19
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19 -19
- package/lib/index.js.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.d.ts +10 -10
- package/lib/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.js +70 -53
- package/lib/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/lib/properties/arrayProperty.d.ts.map +1 -1
- package/lib/properties/arrayProperty.js +152 -103
- package/lib/properties/arrayProperty.js.map +1 -1
- package/lib/properties/baseProperty.d.ts +4 -4
- package/lib/properties/baseProperty.d.ts.map +1 -1
- package/lib/properties/baseProperty.js +73 -51
- package/lib/properties/baseProperty.js.map +1 -1
- package/lib/properties/boolProperty.d.ts.map +1 -1
- package/lib/properties/boolProperty.js +3 -3
- package/lib/properties/boolProperty.js.map +1 -1
- package/lib/properties/containerProperty.d.ts +8 -8
- package/lib/properties/containerProperty.d.ts.map +1 -1
- package/lib/properties/containerProperty.js +33 -26
- package/lib/properties/containerProperty.js.map +1 -1
- package/lib/properties/enumArrayProperty.d.ts.map +1 -1
- package/lib/properties/enumArrayProperty.js +14 -14
- package/lib/properties/enumArrayProperty.js.map +1 -1
- package/lib/properties/enumProperty.d.ts.map +1 -1
- package/lib/properties/enumProperty.js +17 -17
- package/lib/properties/enumProperty.js.map +1 -1
- package/lib/properties/floatProperties.js +4 -4
- package/lib/properties/floatProperties.js.map +1 -1
- package/lib/properties/index.d.ts +23 -23
- package/lib/properties/index.d.ts.map +1 -1
- package/lib/properties/index.js +23 -23
- package/lib/properties/index.js.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.js +47 -37
- package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/lib/properties/intProperties.d.ts.map +1 -1
- package/lib/properties/intProperties.js +10 -10
- package/lib/properties/intProperties.js.map +1 -1
- package/lib/properties/lazyLoadedProperties.js.map +1 -1
- package/lib/properties/mapProperty.d.ts.map +1 -1
- package/lib/properties/mapProperty.js +21 -17
- package/lib/properties/mapProperty.js.map +1 -1
- package/lib/properties/namedNodeProperty.d.ts.map +1 -1
- package/lib/properties/namedNodeProperty.js +3 -3
- package/lib/properties/namedNodeProperty.js.map +1 -1
- package/lib/properties/namedProperty.d.ts.map +1 -1
- package/lib/properties/namedProperty.js +7 -5
- package/lib/properties/namedProperty.js.map +1 -1
- package/lib/properties/nodeProperty.d.ts.map +1 -1
- package/lib/properties/nodeProperty.js +5 -3
- package/lib/properties/nodeProperty.js.map +1 -1
- package/lib/properties/primitiveTypeCasts.d.ts.map +1 -1
- package/lib/properties/primitiveTypeCasts.js +9 -9
- package/lib/properties/primitiveTypeCasts.js.map +1 -1
- package/lib/properties/referenceArrayProperty.d.ts.map +1 -1
- package/lib/properties/referenceArrayProperty.js +31 -25
- package/lib/properties/referenceArrayProperty.js.map +1 -1
- package/lib/properties/referenceMapProperty.d.ts.map +1 -1
- package/lib/properties/referenceMapProperty.js +18 -18
- package/lib/properties/referenceMapProperty.js.map +1 -1
- package/lib/properties/referenceProperty.d.ts.map +1 -1
- package/lib/properties/referenceProperty.js +33 -29
- package/lib/properties/referenceProperty.js.map +1 -1
- package/lib/properties/setProperty.d.ts.map +1 -1
- package/lib/properties/setProperty.js +31 -29
- package/lib/properties/setProperty.js.map +1 -1
- package/lib/properties/stringProperty.d.ts.map +1 -1
- package/lib/properties/stringProperty.js +56 -40
- package/lib/properties/stringProperty.js.map +1 -1
- package/lib/properties/uintProperties.js +5 -5
- package/lib/properties/uintProperties.js.map +1 -1
- package/lib/properties/valueArrayProperty.d.ts +1 -1
- package/lib/properties/valueArrayProperty.d.ts.map +1 -1
- package/lib/properties/valueArrayProperty.js +30 -29
- package/lib/properties/valueArrayProperty.js.map +1 -1
- package/lib/properties/valueMapProperty.d.ts.map +1 -1
- package/lib/properties/valueMapProperty.js +31 -29
- package/lib/properties/valueMapProperty.js.map +1 -1
- package/lib/properties/valueProperty.d.ts.map +1 -1
- package/lib/properties/valueProperty.js +11 -9
- package/lib/properties/valueProperty.js.map +1 -1
- package/lib/propertyFactory.d.ts.map +1 -1
- package/lib/propertyFactory.js +309 -252
- package/lib/propertyFactory.js.map +1 -1
- package/lib/propertyTemplate.d.ts +17 -17
- package/lib/propertyTemplate.d.ts.map +1 -1
- package/lib/propertyTemplate.js +64 -45
- package/lib/propertyTemplate.js.map +1 -1
- package/lib/propertyTemplateWrapper.d.ts.map +1 -1
- package/lib/propertyTemplateWrapper.js +40 -25
- package/lib/propertyTemplateWrapper.js.map +1 -1
- package/lib/propertyUtils.d.ts.map +1 -1
- package/lib/propertyUtils.js.map +1 -1
- package/package.json +28 -28
- package/src/index.d.ts +2750 -2681
|
@@ -11,935 +11,985 @@
|
|
|
11
11
|
*
|
|
12
12
|
* - /src/properties/referenceMapProperty.js
|
|
13
13
|
*/
|
|
14
|
-
const { ChangeSet } = require(
|
|
15
|
-
const { MSG } = require(
|
|
16
|
-
const { BaseProperty } = require(
|
|
17
|
-
const { PropertyFactory } = require(
|
|
18
|
-
const { ReferenceProperty } = require(
|
|
19
|
-
const { ReferenceMapProperty } = require(
|
|
20
|
-
const { ReferenceArrayProperty } = require(
|
|
21
|
-
describe(
|
|
14
|
+
const { ChangeSet } = require("@fluid-experimental/property-changeset");
|
|
15
|
+
const { MSG } = require("@fluid-experimental/property-common").constants;
|
|
16
|
+
const { BaseProperty } = require("../..");
|
|
17
|
+
const { PropertyFactory } = require("../..");
|
|
18
|
+
const { ReferenceProperty } = require("../../properties/referenceProperty");
|
|
19
|
+
const { ReferenceMapProperty } = require("../../properties/referenceMapProperty");
|
|
20
|
+
const { ReferenceArrayProperty } = require("../../properties/referenceArrayProperty");
|
|
21
|
+
describe("Reference Properties", function () {
|
|
22
22
|
var dereferenceToken;
|
|
23
23
|
before(function () {
|
|
24
24
|
dereferenceToken = BaseProperty.PATH_TOKENS.REF;
|
|
25
25
|
// A template that contains all types of reference properties
|
|
26
26
|
var referencePropertyTestTemplate = {
|
|
27
|
-
typeid:
|
|
27
|
+
typeid: "autodesk.test:referencePropertyTest-1.0.0",
|
|
28
28
|
properties: [
|
|
29
|
-
{ id:
|
|
30
|
-
{ id:
|
|
31
|
-
{ id:
|
|
32
|
-
{ id:
|
|
33
|
-
{ id:
|
|
34
|
-
{ id:
|
|
29
|
+
{ id: "ref", typeid: "Reference<NodeProperty>" },
|
|
30
|
+
{ id: "ref_anon", typeid: "Reference" },
|
|
31
|
+
{ id: "refArray", typeid: "Reference<NodeProperty>", context: "array" },
|
|
32
|
+
{ id: "refArray_anon", typeid: "Reference", context: "array" },
|
|
33
|
+
{ id: "refMap", typeid: "Reference<NodeProperty>", context: "map" },
|
|
34
|
+
{ id: "refMap_anon", typeid: "Reference", context: "map" },
|
|
35
35
|
],
|
|
36
36
|
};
|
|
37
37
|
PropertyFactory._reregister(referencePropertyTestTemplate);
|
|
38
38
|
});
|
|
39
|
-
describe(
|
|
40
|
-
it(
|
|
39
|
+
describe("ReferenceProperty", function () {
|
|
40
|
+
it("should be possible to create", function () {
|
|
41
41
|
// Test creation of an anonymous reference
|
|
42
|
-
var reference = PropertyFactory.create(
|
|
42
|
+
var reference = PropertyFactory.create("Reference");
|
|
43
43
|
expect(reference).to.be.instanceof(ReferenceProperty);
|
|
44
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
44
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
45
45
|
// Test creation of a typed reference
|
|
46
|
-
var reference = PropertyFactory.create(
|
|
46
|
+
var reference = PropertyFactory.create("Reference<NodeProperty>");
|
|
47
47
|
expect(reference).to.be.instanceof(ReferenceProperty);
|
|
48
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
48
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
49
49
|
// Test creation via a template
|
|
50
|
-
var prop = PropertyFactory.create(
|
|
50
|
+
var prop = PropertyFactory.create("autodesk.test:referencePropertyTest-1.0.0");
|
|
51
51
|
expect(prop._properties.ref_anon).to.be.instanceof(ReferenceProperty);
|
|
52
|
-
expect(prop._properties.ref_anon.getReferenceTargetTypeId()).to.equal(
|
|
52
|
+
expect(prop._properties.ref_anon.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
53
53
|
expect(prop._properties.ref).to.be.instanceof(ReferenceProperty);
|
|
54
|
-
expect(prop._properties.ref.getReferenceTargetTypeId()).to.equal(
|
|
54
|
+
expect(prop._properties.ref.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
55
55
|
});
|
|
56
|
-
it(
|
|
57
|
-
var reference = PropertyFactory.create(
|
|
56
|
+
it("empty reference should resolve to undefined", function () {
|
|
57
|
+
var reference = PropertyFactory.create("Reference");
|
|
58
58
|
// It should work with the default value
|
|
59
59
|
expect(reference.referenced).to.be.undefined;
|
|
60
60
|
expect(reference.get()).to.be.undefined;
|
|
61
61
|
// Explicitly setting it should have the same effect
|
|
62
|
-
reference.value =
|
|
62
|
+
reference.value = "";
|
|
63
63
|
expect(reference.referenced).to.be.undefined;
|
|
64
64
|
expect(reference.get()).to.be.undefined;
|
|
65
65
|
});
|
|
66
|
-
it(
|
|
67
|
-
var reference = PropertyFactory.create(
|
|
66
|
+
it("setting a referenced member to undefined should turn it into an empty string", function () {
|
|
67
|
+
var reference = PropertyFactory.create("Reference");
|
|
68
68
|
// First set it to something else than an empty reference
|
|
69
|
-
reference.value =
|
|
69
|
+
reference.value = "/test";
|
|
70
70
|
// Now reset it via the referenced member
|
|
71
71
|
reference.ref = undefined;
|
|
72
72
|
// And check the result
|
|
73
|
-
expect(reference.value).to.equal(
|
|
73
|
+
expect(reference.value).to.equal("");
|
|
74
74
|
expect(reference.ref).to.be.undefined;
|
|
75
75
|
});
|
|
76
|
-
it(
|
|
77
|
-
var reference = PropertyFactory.create(
|
|
78
|
-
expect(function () {
|
|
76
|
+
it("setting a reference to a non absolute path should not throw", function () {
|
|
77
|
+
var reference = PropertyFactory.create("Reference");
|
|
78
|
+
expect(function () {
|
|
79
|
+
reference.value = "test";
|
|
80
|
+
}).to.not.throw();
|
|
79
81
|
});
|
|
80
|
-
it(
|
|
81
|
-
var root = PropertyFactory.create(
|
|
82
|
-
var reference = PropertyFactory.create(
|
|
83
|
-
var target = PropertyFactory.create(
|
|
84
|
-
var node = PropertyFactory.create(
|
|
85
|
-
var nodeTarget = PropertyFactory.create(
|
|
86
|
-
root.insert(
|
|
87
|
-
root.insert(
|
|
88
|
-
root.insert(
|
|
89
|
-
node.insert(
|
|
82
|
+
it(".get should work to resolve the referenced property", function () {
|
|
83
|
+
var root = PropertyFactory.create("NodeProperty");
|
|
84
|
+
var reference = PropertyFactory.create("Reference<String>");
|
|
85
|
+
var target = PropertyFactory.create("String");
|
|
86
|
+
var node = PropertyFactory.create("NodeProperty");
|
|
87
|
+
var nodeTarget = PropertyFactory.create("String");
|
|
88
|
+
root.insert("target", target);
|
|
89
|
+
root.insert("reference", reference);
|
|
90
|
+
root.insert("node", node);
|
|
91
|
+
node.insert("target", nodeTarget);
|
|
90
92
|
reference.set(target);
|
|
91
|
-
expect(root.get(
|
|
93
|
+
expect(root.get("reference")).to.equal(target);
|
|
92
94
|
// checking that a primitive value for in_options is ignored:
|
|
93
|
-
expect(root.get(
|
|
94
|
-
expect(root.get(
|
|
95
|
+
expect(root.get("reference", "string")).to.equal(target);
|
|
96
|
+
expect(root.get("reference", {
|
|
95
97
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.ALWAYS,
|
|
96
98
|
})).to.equal(target);
|
|
97
|
-
expect(root.get(
|
|
99
|
+
expect(root.get("reference", {
|
|
98
100
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
99
101
|
})).to.equal(reference);
|
|
100
|
-
expect(root.get(
|
|
102
|
+
expect(root.get("reference", {
|
|
101
103
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
102
104
|
})).to.equal(reference);
|
|
103
105
|
reference.set(node);
|
|
104
|
-
expect(root.get([
|
|
106
|
+
expect(root.get(["reference", "target"], {
|
|
105
107
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.ALWAYS,
|
|
106
108
|
})).to.equal(nodeTarget);
|
|
107
|
-
expect(root.get([
|
|
109
|
+
expect(root.get(["reference", "target"], {
|
|
108
110
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
109
111
|
})).to.equal(undefined);
|
|
110
|
-
expect(root.get([
|
|
112
|
+
expect(root.get(["reference", "target"], {
|
|
111
113
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
112
114
|
})).to.equal(nodeTarget);
|
|
113
115
|
});
|
|
114
|
-
it(
|
|
115
|
-
var root = PropertyFactory.create(
|
|
116
|
-
var reference = PropertyFactory.create(
|
|
117
|
-
var node = PropertyFactory.create(
|
|
118
|
-
var nodeTarget = PropertyFactory.create(
|
|
119
|
-
root.insert(
|
|
120
|
-
root.insert(
|
|
121
|
-
node.insert(
|
|
116
|
+
it(".get should work with different types of input", function () {
|
|
117
|
+
var root = PropertyFactory.create("NodeProperty");
|
|
118
|
+
var reference = PropertyFactory.create("Reference<String>");
|
|
119
|
+
var node = PropertyFactory.create("NodeProperty");
|
|
120
|
+
var nodeTarget = PropertyFactory.create("String");
|
|
121
|
+
root.insert("reference", reference);
|
|
122
|
+
root.insert("node", node);
|
|
123
|
+
node.insert("target", nodeTarget);
|
|
122
124
|
reference.set(node);
|
|
123
125
|
expect(reference.get()).to.equal(node);
|
|
124
|
-
expect(reference.get(
|
|
125
|
-
expect(reference.get([
|
|
126
|
-
expect(reference.get(
|
|
126
|
+
expect(reference.get("")).to.equal(node);
|
|
127
|
+
expect(reference.get(["target"])).to.equal(nodeTarget);
|
|
128
|
+
expect(reference.get("target")).to.equal(node);
|
|
127
129
|
expect(reference.get([])).to.equal(reference);
|
|
128
130
|
});
|
|
129
|
-
it(
|
|
130
|
-
var root = PropertyFactory.create(
|
|
131
|
-
var reference = PropertyFactory.create(
|
|
132
|
-
var node = PropertyFactory.create(
|
|
133
|
-
var nodeTarget = PropertyFactory.create(
|
|
131
|
+
it(".get should return undefined with invalid reference", function () {
|
|
132
|
+
var root = PropertyFactory.create("NodeProperty");
|
|
133
|
+
var reference = PropertyFactory.create("Reference<String>");
|
|
134
|
+
var node = PropertyFactory.create("NodeProperty");
|
|
135
|
+
var nodeTarget = PropertyFactory.create("String");
|
|
134
136
|
// when reference is not inserted to the tree
|
|
135
|
-
root.insert(
|
|
136
|
-
node.insert(
|
|
137
|
+
root.insert("node", node);
|
|
138
|
+
node.insert("target", nodeTarget);
|
|
137
139
|
reference.set(node);
|
|
138
|
-
expect(reference.get([
|
|
140
|
+
expect(reference.get(["target"])).to.undefined;
|
|
139
141
|
// with invalid reference input
|
|
140
|
-
root.insert(
|
|
141
|
-
reference.set(
|
|
142
|
-
expect(reference.get([
|
|
142
|
+
root.insert("reference", reference);
|
|
143
|
+
reference.set("invalid_node");
|
|
144
|
+
expect(reference.get(["target"])).to.undefined;
|
|
143
145
|
// dereference property is removed
|
|
144
|
-
reference.set(
|
|
145
|
-
expect(reference.get([
|
|
146
|
-
node.remove(
|
|
147
|
-
expect(reference.get([
|
|
146
|
+
reference.set("node");
|
|
147
|
+
expect(reference.get(["target"])).to.equal(nodeTarget);
|
|
148
|
+
node.remove("target");
|
|
149
|
+
expect(reference.get(["target"])).to.undefined;
|
|
148
150
|
});
|
|
149
|
-
it(
|
|
150
|
-
var root = PropertyFactory.create(
|
|
151
|
-
var reference = PropertyFactory.create(
|
|
152
|
-
var target = PropertyFactory.create(
|
|
153
|
-
var node = PropertyFactory.create(
|
|
154
|
-
var nodeTarget = PropertyFactory.create(
|
|
155
|
-
root.insert(
|
|
156
|
-
root.insert(
|
|
157
|
-
root.insert(
|
|
158
|
-
node.insert(
|
|
151
|
+
it(".resolvePath should work to resolve the referenced property", function () {
|
|
152
|
+
var root = PropertyFactory.create("NodeProperty");
|
|
153
|
+
var reference = PropertyFactory.create("Reference<String>");
|
|
154
|
+
var target = PropertyFactory.create("String");
|
|
155
|
+
var node = PropertyFactory.create("NodeProperty");
|
|
156
|
+
var nodeTarget = PropertyFactory.create("String");
|
|
157
|
+
root.insert("target", target);
|
|
158
|
+
root.insert("reference", reference);
|
|
159
|
+
root.insert("node", node);
|
|
160
|
+
node.insert("target", nodeTarget);
|
|
159
161
|
reference.set(target);
|
|
160
|
-
expect(root.resolvePath(
|
|
161
|
-
expect(root.resolvePath(
|
|
162
|
+
expect(root.resolvePath("reference")).to.equal(target);
|
|
163
|
+
expect(root.resolvePath("reference", {
|
|
162
164
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.ALWAYS,
|
|
163
165
|
})).to.equal(target);
|
|
164
|
-
expect(root.resolvePath(
|
|
166
|
+
expect(root.resolvePath("reference", {
|
|
165
167
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
166
168
|
})).to.equal(reference);
|
|
167
|
-
expect(root.resolvePath(
|
|
169
|
+
expect(root.resolvePath("reference", {
|
|
168
170
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
169
171
|
})).to.equal(reference);
|
|
170
172
|
reference.set(node);
|
|
171
|
-
expect(root.resolvePath(
|
|
173
|
+
expect(root.resolvePath("reference.target", {
|
|
172
174
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.ALWAYS,
|
|
173
175
|
})).to.equal(nodeTarget);
|
|
174
|
-
expect(root.resolvePath(
|
|
176
|
+
expect(root.resolvePath("reference.target", {
|
|
175
177
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
176
178
|
})).to.equal(undefined);
|
|
177
|
-
expect(root.resolvePath(
|
|
179
|
+
expect(root.resolvePath("reference.target", {
|
|
178
180
|
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
179
181
|
})).to.equal(nodeTarget);
|
|
180
182
|
});
|
|
181
|
-
describe(
|
|
183
|
+
describe("Reference resolution", function () {
|
|
182
184
|
var root, target, reference, reference2, relativeReference, relativeReference2;
|
|
183
185
|
var nodeTarget, nestedChild, nodeTarget2, nestedChild2;
|
|
184
186
|
var mapTarget, nestedMapChild;
|
|
185
187
|
var arrayTarget, nestedArrayChild;
|
|
186
188
|
beforeEach(function () {
|
|
187
|
-
root = PropertyFactory.create(
|
|
188
|
-
nodeTarget = PropertyFactory.create(
|
|
189
|
-
nestedChild = PropertyFactory.create(
|
|
190
|
-
relativeReference = PropertyFactory.create(
|
|
191
|
-
nodeTarget.insert(
|
|
192
|
-
nodeTarget.insert(
|
|
193
|
-
nodeTarget2 = PropertyFactory.create(
|
|
194
|
-
nestedChild2 = PropertyFactory.create(
|
|
195
|
-
relativeReference2 = PropertyFactory.create(
|
|
196
|
-
nodeTarget2.insert(
|
|
197
|
-
nodeTarget2.insert(
|
|
198
|
-
mapTarget = PropertyFactory.create(
|
|
199
|
-
nestedMapChild = PropertyFactory.create(
|
|
200
|
-
mapTarget.insert(
|
|
201
|
-
arrayTarget = PropertyFactory.create(
|
|
202
|
-
nestedArrayChild = PropertyFactory.create(
|
|
189
|
+
root = PropertyFactory.create("NodeProperty");
|
|
190
|
+
nodeTarget = PropertyFactory.create("NodeProperty");
|
|
191
|
+
nestedChild = PropertyFactory.create("String");
|
|
192
|
+
relativeReference = PropertyFactory.create("Reference<String>");
|
|
193
|
+
nodeTarget.insert("nested", nestedChild);
|
|
194
|
+
nodeTarget.insert("relativeReference", relativeReference);
|
|
195
|
+
nodeTarget2 = PropertyFactory.create("NodeProperty");
|
|
196
|
+
nestedChild2 = PropertyFactory.create("String");
|
|
197
|
+
relativeReference2 = PropertyFactory.create("Reference<Reference>");
|
|
198
|
+
nodeTarget2.insert("nested", nestedChild2);
|
|
199
|
+
nodeTarget2.insert("relativeReference2", relativeReference2);
|
|
200
|
+
mapTarget = PropertyFactory.create("map<>");
|
|
201
|
+
nestedMapChild = PropertyFactory.create("String");
|
|
202
|
+
mapTarget.insert("nested", nestedMapChild);
|
|
203
|
+
arrayTarget = PropertyFactory.create("array<>");
|
|
204
|
+
nestedArrayChild = PropertyFactory.create("String");
|
|
203
205
|
arrayTarget.push(nestedArrayChild);
|
|
204
|
-
target = PropertyFactory.create(
|
|
205
|
-
reference = PropertyFactory.create(
|
|
206
|
-
reference2 = PropertyFactory.create(
|
|
207
|
-
root.insert(
|
|
208
|
-
root.insert(
|
|
209
|
-
root.insert(
|
|
210
|
-
root.insert(
|
|
211
|
-
root.insert(
|
|
212
|
-
root.insert(
|
|
213
|
-
root.insert(
|
|
214
|
-
target.value =
|
|
215
|
-
});
|
|
216
|
-
it(
|
|
217
|
-
reference.value =
|
|
206
|
+
target = PropertyFactory.create("String");
|
|
207
|
+
reference = PropertyFactory.create("Reference<String>");
|
|
208
|
+
reference2 = PropertyFactory.create("Reference<Reference>");
|
|
209
|
+
root.insert("target", target);
|
|
210
|
+
root.insert("nodeTarget", nodeTarget);
|
|
211
|
+
root.insert("nodeTarget2", nodeTarget2);
|
|
212
|
+
root.insert("mapTarget", mapTarget);
|
|
213
|
+
root.insert("arrayTarget", arrayTarget);
|
|
214
|
+
root.insert("reference", reference);
|
|
215
|
+
root.insert("reference2", reference2);
|
|
216
|
+
target.value = "test";
|
|
217
|
+
});
|
|
218
|
+
it("should allow resolving references", function () {
|
|
219
|
+
reference.value = "/target";
|
|
218
220
|
expect(reference.ref).to.equal(target);
|
|
219
|
-
expect(reference.ref.value).to.equal(
|
|
221
|
+
expect(reference.ref.value).to.equal("test");
|
|
220
222
|
});
|
|
221
|
-
it(
|
|
223
|
+
it("should support setting via set", function () {
|
|
222
224
|
reference.set(target);
|
|
223
225
|
expect(reference.ref).to.equal(target);
|
|
224
|
-
expect(reference.ref.value).to.equal(
|
|
225
|
-
expect(reference.value).to.equal(
|
|
226
|
+
expect(reference.ref.value).to.equal("test");
|
|
227
|
+
expect(reference.value).to.equal("/target");
|
|
226
228
|
});
|
|
227
|
-
it(
|
|
229
|
+
it("set with a Property should work", function () {
|
|
228
230
|
reference.set(nestedChild);
|
|
229
|
-
expect(reference.getValue()).to.equal(
|
|
231
|
+
expect(reference.getValue()).to.equal("/nodeTarget.nested");
|
|
230
232
|
});
|
|
231
|
-
it(
|
|
232
|
-
reference.set(
|
|
233
|
-
expect(reference.getValue()).to.equal(
|
|
233
|
+
it("set with a path should work", function () {
|
|
234
|
+
reference.set("/nodeTarget.nested");
|
|
235
|
+
expect(reference.getValue()).to.equal("/nodeTarget.nested");
|
|
234
236
|
});
|
|
235
|
-
it(
|
|
236
|
-
expect(function () {
|
|
237
|
+
it("set with something else should throw", function () {
|
|
238
|
+
expect(function () {
|
|
239
|
+
reference.set(123);
|
|
240
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
237
241
|
});
|
|
238
|
-
it(
|
|
242
|
+
it("setValue with a Property should work", function () {
|
|
239
243
|
reference.setValue(nestedChild);
|
|
240
|
-
expect(reference.getValue()).to.equal(
|
|
244
|
+
expect(reference.getValue()).to.equal("/nodeTarget.nested");
|
|
241
245
|
});
|
|
242
|
-
it(
|
|
243
|
-
reference.setValue(
|
|
244
|
-
expect(reference.getValue()).to.equal(
|
|
246
|
+
it("setValue with a path should work", function () {
|
|
247
|
+
reference.setValue("/nodeTarget.nested");
|
|
248
|
+
expect(reference.getValue()).to.equal("/nodeTarget.nested");
|
|
245
249
|
});
|
|
246
|
-
it(
|
|
247
|
-
expect(function () {
|
|
250
|
+
it("setValue with something else should throw", function () {
|
|
251
|
+
expect(function () {
|
|
252
|
+
reference.setValue(123);
|
|
253
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
248
254
|
});
|
|
249
|
-
it(
|
|
255
|
+
it("should have a working isReferenceValid", function () {
|
|
250
256
|
// An empty reference should be valid
|
|
251
|
-
reference.value =
|
|
257
|
+
reference.value = "";
|
|
252
258
|
expect(reference.isReferenceValid()).to.be.true;
|
|
253
259
|
// A reference to an existing property should be valid
|
|
254
260
|
reference.set(target);
|
|
255
261
|
expect(reference.isReferenceValid()).to.be.true;
|
|
256
262
|
// A reference that cannot be resolved should be invalid
|
|
257
|
-
reference.value =
|
|
263
|
+
reference.value = "/invalid_path";
|
|
258
264
|
expect(reference.isReferenceValid()).to.be.false;
|
|
259
265
|
});
|
|
260
|
-
it(
|
|
266
|
+
it("should allow dereferencing via a *", function () {
|
|
261
267
|
reference.set(target);
|
|
262
|
-
expect(root.resolvePath(
|
|
263
|
-
expect(root.resolvePath(
|
|
264
|
-
expect(root.get(
|
|
265
|
-
.
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
268
|
+
expect(root.resolvePath("/reference")).to.equal(target);
|
|
269
|
+
expect(root.resolvePath("/reference*")).to.equal(reference);
|
|
270
|
+
expect(root.get("reference", {
|
|
271
|
+
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
272
|
+
})).to.equal(reference);
|
|
273
|
+
expect(root.get(["reference", dereferenceToken])).to.equal(reference);
|
|
274
|
+
});
|
|
275
|
+
it("should allow dereferencing via a * with nested reference property", function () {
|
|
269
276
|
reference.set(target);
|
|
270
|
-
reference2.set(
|
|
271
|
-
expect(root.get(
|
|
272
|
-
expect(root.resolvePath(
|
|
273
|
-
});
|
|
274
|
-
it(
|
|
275
|
-
let reference3 = PropertyFactory.create(
|
|
276
|
-
let reference4 = PropertyFactory.create(
|
|
277
|
-
let reference5 = PropertyFactory.create(
|
|
278
|
-
root.insert(
|
|
279
|
-
root.insert(
|
|
280
|
-
root.insert(
|
|
277
|
+
reference2.set("/reference*");
|
|
278
|
+
expect(root.get("reference2")).to.equal(reference);
|
|
279
|
+
expect(root.resolvePath("/reference2")).to.equal(reference);
|
|
280
|
+
});
|
|
281
|
+
it("should allow dereferencing via multiple jumps", function () {
|
|
282
|
+
let reference3 = PropertyFactory.create("Reference");
|
|
283
|
+
let reference4 = PropertyFactory.create("Reference");
|
|
284
|
+
let reference5 = PropertyFactory.create("Reference");
|
|
285
|
+
root.insert("reference3", reference3);
|
|
286
|
+
root.insert("reference4", reference4);
|
|
287
|
+
root.insert("reference5", reference5);
|
|
281
288
|
reference.set(target);
|
|
282
|
-
reference2.set(
|
|
283
|
-
reference3.set(
|
|
284
|
-
reference4.set(
|
|
285
|
-
reference5.set(
|
|
286
|
-
expect(root.get(
|
|
287
|
-
expect(root.resolvePath(
|
|
288
|
-
expect(root.get(
|
|
289
|
-
expect(root.resolvePath(
|
|
290
|
-
expect(root.get(
|
|
291
|
-
expect(root.resolvePath(
|
|
292
|
-
expect(root.get(
|
|
293
|
-
expect(root.resolvePath(
|
|
294
|
-
expect(root.get(
|
|
295
|
-
expect(root.resolvePath(
|
|
296
|
-
});
|
|
297
|
-
it(
|
|
298
|
-
let reference3 = PropertyFactory.create(
|
|
299
|
-
let reference4 = PropertyFactory.create(
|
|
300
|
-
let reference5 = PropertyFactory.create(
|
|
301
|
-
root.insert(
|
|
302
|
-
root.insert(
|
|
303
|
-
root.insert(
|
|
289
|
+
reference2.set("reference");
|
|
290
|
+
reference3.set("reference2");
|
|
291
|
+
reference4.set("reference3");
|
|
292
|
+
reference5.set("reference4");
|
|
293
|
+
expect(root.get("reference5")).to.equal(target);
|
|
294
|
+
expect(root.resolvePath("/reference5")).to.equal(target);
|
|
295
|
+
expect(root.get("reference4")).to.equal(target);
|
|
296
|
+
expect(root.resolvePath("/reference4")).to.equal(target);
|
|
297
|
+
expect(root.get("reference3")).to.equal(target);
|
|
298
|
+
expect(root.resolvePath("/reference3")).to.equal(target);
|
|
299
|
+
expect(root.get("reference2")).to.equal(target);
|
|
300
|
+
expect(root.resolvePath("/reference2")).to.equal(target);
|
|
301
|
+
expect(root.get("reference")).to.equal(target);
|
|
302
|
+
expect(root.resolvePath("/reference")).to.equal(target);
|
|
303
|
+
});
|
|
304
|
+
it("should allow dereferencing via * multiple jumps", function () {
|
|
305
|
+
let reference3 = PropertyFactory.create("Reference");
|
|
306
|
+
let reference4 = PropertyFactory.create("Reference");
|
|
307
|
+
let reference5 = PropertyFactory.create("Reference");
|
|
308
|
+
root.insert("reference3", reference3);
|
|
309
|
+
root.insert("reference4", reference4);
|
|
310
|
+
root.insert("reference5", reference5);
|
|
304
311
|
reference.set(target);
|
|
305
|
-
reference2.set(
|
|
306
|
-
reference3.set(
|
|
307
|
-
reference4.set(
|
|
308
|
-
reference5.set(
|
|
309
|
-
expect(root.get(
|
|
310
|
-
expect(root.resolvePath(
|
|
311
|
-
expect(root.get(
|
|
312
|
-
expect(root.resolvePath(
|
|
313
|
-
expect(root.get(
|
|
314
|
-
expect(root.resolvePath(
|
|
315
|
-
expect(root.get(
|
|
316
|
-
expect(root.resolvePath(
|
|
317
|
-
expect(root.get(
|
|
318
|
-
expect(root.resolvePath(
|
|
319
|
-
});
|
|
320
|
-
it(
|
|
312
|
+
reference2.set("reference");
|
|
313
|
+
reference3.set("reference2");
|
|
314
|
+
reference4.set("reference3*");
|
|
315
|
+
reference5.set("reference4");
|
|
316
|
+
expect(root.get("reference5")).to.equal(reference3);
|
|
317
|
+
expect(root.resolvePath("/reference5")).to.equal(reference3);
|
|
318
|
+
expect(root.get("reference4")).to.equal(reference3);
|
|
319
|
+
expect(root.resolvePath("/reference4")).to.equal(reference3);
|
|
320
|
+
expect(root.get("reference3")).to.equal(target);
|
|
321
|
+
expect(root.resolvePath("/reference3")).to.equal(target);
|
|
322
|
+
expect(root.get("reference2")).to.equal(target);
|
|
323
|
+
expect(root.resolvePath("/reference2")).to.equal(target);
|
|
324
|
+
expect(root.get("reference")).to.equal(target);
|
|
325
|
+
expect(root.resolvePath("/reference")).to.equal(target);
|
|
326
|
+
});
|
|
327
|
+
it("should allow accessing nested paths", function () {
|
|
321
328
|
reference.set(nodeTarget);
|
|
322
|
-
expect(root.resolvePath(
|
|
323
|
-
expect(root.get([
|
|
324
|
-
expect(root.resolvePath(
|
|
325
|
-
expect(root.get([
|
|
326
|
-
nestedChild.value =
|
|
327
|
-
expect(root.resolvePath(
|
|
328
|
-
});
|
|
329
|
-
it(
|
|
329
|
+
expect(root.resolvePath("/reference.nested")).to.equal(nestedChild);
|
|
330
|
+
expect(root.get(["reference", "nested"])).to.equal(nestedChild);
|
|
331
|
+
expect(root.resolvePath("/reference*.nested")).to.equal(undefined);
|
|
332
|
+
expect(root.get(["reference", dereferenceToken, "nested"])).to.equal(undefined);
|
|
333
|
+
nestedChild.value = "test_value";
|
|
334
|
+
expect(root.resolvePath("/reference.nested").value).to.equal("test_value");
|
|
335
|
+
});
|
|
336
|
+
it("should allow accessing referenced maps", function () {
|
|
330
337
|
reference.set(mapTarget);
|
|
331
|
-
expect(root.resolvePath(
|
|
332
|
-
expect(root.resolvePath(
|
|
338
|
+
expect(root.resolvePath("/reference[nested]")).to.equal(nestedMapChild);
|
|
339
|
+
expect(root.resolvePath("/reference*[nested]")).to.equal(undefined);
|
|
333
340
|
});
|
|
334
|
-
it(
|
|
341
|
+
it("should allow accessing referenced arrays", function () {
|
|
335
342
|
reference.set(arrayTarget);
|
|
336
|
-
expect(root.resolvePath(
|
|
337
|
-
expect(root.get([
|
|
338
|
-
expect(root.resolvePath(
|
|
343
|
+
expect(root.resolvePath("/reference[0]")).to.equal(nestedArrayChild);
|
|
344
|
+
expect(root.get(["reference", 0])).to.equal(nestedArrayChild);
|
|
345
|
+
expect(root.resolvePath("/reference*[0]")).to.equal(undefined);
|
|
339
346
|
});
|
|
340
|
-
it(
|
|
347
|
+
it("forwarding should work over multiple jumps", function () {
|
|
341
348
|
reference.set(nodeTarget);
|
|
342
349
|
reference2.set(reference);
|
|
343
|
-
expect(root.resolvePath(
|
|
350
|
+
expect(root.resolvePath("/reference2.nested")).to.equal(nestedChild);
|
|
344
351
|
});
|
|
345
|
-
it(
|
|
352
|
+
it("should continue to work when the reference or the referenced node changes", function () {
|
|
346
353
|
reference.set(nodeTarget);
|
|
347
|
-
expect(root.resolvePath(
|
|
348
|
-
expect(root.get([
|
|
354
|
+
expect(root.resolvePath("/reference.nested")).to.equal(nestedChild);
|
|
355
|
+
expect(root.get(["reference", "nested"])).to.equal(nestedChild);
|
|
349
356
|
reference.set(nodeTarget2);
|
|
350
|
-
expect(root.resolvePath(
|
|
351
|
-
expect(root.get([
|
|
352
|
-
nodeTarget2.remove(
|
|
353
|
-
var newChild = PropertyFactory.create(
|
|
354
|
-
nodeTarget2.insert(
|
|
355
|
-
expect(root.resolvePath(
|
|
356
|
-
expect(root.get([
|
|
357
|
-
});
|
|
358
|
-
it(
|
|
359
|
-
relativeReference.setValue(
|
|
357
|
+
expect(root.resolvePath("/reference.nested*")).to.equal(nestedChild2);
|
|
358
|
+
expect(root.get(["reference", "nested", dereferenceToken])).to.equal(nestedChild2);
|
|
359
|
+
nodeTarget2.remove("nested");
|
|
360
|
+
var newChild = PropertyFactory.create("String");
|
|
361
|
+
nodeTarget2.insert("nested", newChild);
|
|
362
|
+
expect(root.resolvePath("/reference.nested")).to.equal(newChild);
|
|
363
|
+
expect(root.get(["reference", "nested"])).to.equal(newChild);
|
|
364
|
+
});
|
|
365
|
+
it("should work with relative paths using getReferencedProperty", function () {
|
|
366
|
+
relativeReference.setValue("../nodeTarget2");
|
|
360
367
|
expect(relativeReference.get()).to.equal(nodeTarget2);
|
|
361
368
|
});
|
|
362
|
-
it(
|
|
363
|
-
relativeReference.setValue(
|
|
369
|
+
it("should work with relative paths using getReferencedProperty", function () {
|
|
370
|
+
relativeReference.setValue("../nodeTarget2");
|
|
364
371
|
expect(relativeReference.get()).to.equal(nodeTarget2);
|
|
365
372
|
expect(relativeReference.ref).to.equal(nodeTarget2);
|
|
366
373
|
});
|
|
367
|
-
it(
|
|
368
|
-
relativeReference.setValue(
|
|
369
|
-
relativeReference2.setValue(
|
|
370
|
-
expect(root.resolvePath(
|
|
371
|
-
expect(root.get([
|
|
372
|
-
expect(root.get([
|
|
373
|
-
expect(root.get([
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
374
|
+
it("should work with multiple jumps with relative references", function () {
|
|
375
|
+
relativeReference.setValue("../nodeTarget");
|
|
376
|
+
relativeReference2.setValue("../nodeTarget.relativeReference");
|
|
377
|
+
expect(root.resolvePath("/nodeTarget2.relativeReference2.nested")).to.equal(nestedChild);
|
|
378
|
+
expect(root.get(["nodeTarget2", "relativeReference2", "nested"])).to.equal(nestedChild);
|
|
379
|
+
expect(root.get(["nodeTarget2", "relativeReference2"])).to.equal(nodeTarget);
|
|
380
|
+
expect(root.get(["nodeTarget2", "relativeReference2"], {
|
|
381
|
+
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
382
|
+
})).to.equal(relativeReference2);
|
|
383
|
+
expect(root.get(["nodeTarget2", "relativeReference2", "nested"], {
|
|
384
|
+
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,
|
|
385
|
+
})).to.equal(undefined);
|
|
386
|
+
expect(root
|
|
387
|
+
.get(["nodeTarget2", "relativeReference2"], {
|
|
388
|
+
referenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS,
|
|
389
|
+
})
|
|
390
|
+
.get(["nested"])).to.equal(nestedChild);
|
|
391
|
+
});
|
|
392
|
+
it("should return undefined when going beyond the root", function () {
|
|
393
|
+
relativeReference.setValue("../../nodeTarget2");
|
|
379
394
|
expect(relativeReference.get()).to.be.undefined;
|
|
380
395
|
});
|
|
381
|
-
it(
|
|
396
|
+
it("should clone", function () {
|
|
382
397
|
var clone = relativeReference.clone();
|
|
383
398
|
expect(relativeReference._serialize(false)).to.eql(clone._serialize(false));
|
|
384
399
|
});
|
|
385
|
-
it(
|
|
386
|
-
expect(reference.getContext()).to.equal(
|
|
400
|
+
it("get context should return single", function () {
|
|
401
|
+
expect(reference.getContext()).to.equal("single");
|
|
387
402
|
});
|
|
388
|
-
it(
|
|
389
|
-
expect(reference.getFullTypeid()).to.equal(
|
|
390
|
-
expect(reference.getFullTypeid(false)).to.equal(
|
|
403
|
+
it("getFullTypeid should work", function () {
|
|
404
|
+
expect(reference.getFullTypeid()).to.equal("Reference<String>");
|
|
405
|
+
expect(reference.getFullTypeid(false)).to.equal("Reference<String>");
|
|
391
406
|
});
|
|
392
|
-
it(
|
|
407
|
+
it("isPrimitiveType should evaluate to true", function () {
|
|
393
408
|
expect(reference.isPrimitiveType()).to.equal(true);
|
|
394
409
|
});
|
|
395
410
|
});
|
|
396
411
|
});
|
|
397
|
-
describe(
|
|
398
|
-
it(
|
|
412
|
+
describe("ReferenceMapProperty", function () {
|
|
413
|
+
it("should be possible to create", function () {
|
|
399
414
|
// Test creation of an anonymous reference
|
|
400
|
-
var reference = PropertyFactory.create(
|
|
415
|
+
var reference = PropertyFactory.create("Reference", "map");
|
|
401
416
|
expect(reference).to.be.instanceof(ReferenceMapProperty);
|
|
402
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
417
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
403
418
|
// Test creation of a typed reference
|
|
404
|
-
var reference = PropertyFactory.create(
|
|
419
|
+
var reference = PropertyFactory.create("Reference<NodeProperty>", "map");
|
|
405
420
|
expect(reference).to.be.instanceof(ReferenceMapProperty);
|
|
406
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
421
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
407
422
|
// Test creation of a typed reference
|
|
408
|
-
var reference = PropertyFactory.create(
|
|
423
|
+
var reference = PropertyFactory.create("map<Reference<NodeProperty>>");
|
|
409
424
|
expect(reference).to.be.instanceof(ReferenceMapProperty);
|
|
410
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
425
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
411
426
|
// Test creation via a template
|
|
412
|
-
var prop = PropertyFactory.create(
|
|
427
|
+
var prop = PropertyFactory.create("autodesk.test:referencePropertyTest-1.0.0");
|
|
413
428
|
expect(prop._properties.refMap_anon).to.be.instanceof(ReferenceMapProperty);
|
|
414
|
-
expect(prop._properties.refMap_anon.getReferenceTargetTypeId()).to.equal(
|
|
429
|
+
expect(prop._properties.refMap_anon.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
415
430
|
expect(prop._properties.refMap).to.be.instanceof(ReferenceMapProperty);
|
|
416
|
-
expect(prop._properties.refMap.getReferenceTargetTypeId()).to.equal(
|
|
431
|
+
expect(prop._properties.refMap.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
417
432
|
});
|
|
418
|
-
it(
|
|
419
|
-
var reference = PropertyFactory.create(
|
|
433
|
+
it("empty reference should resolve to undefined", function () {
|
|
434
|
+
var reference = PropertyFactory.create("Reference", "map");
|
|
420
435
|
// It should work for missing entries
|
|
421
|
-
expect(reference.get(
|
|
436
|
+
expect(reference.get("missing")).to.be.undefined;
|
|
422
437
|
// Explicitly setting it should have the same effect
|
|
423
|
-
reference.insert(
|
|
424
|
-
expect(reference.get(
|
|
438
|
+
reference.insert("test", "");
|
|
439
|
+
expect(reference.get("test")).to.be.undefined;
|
|
425
440
|
});
|
|
426
|
-
it(
|
|
427
|
-
var reference = PropertyFactory.create(
|
|
441
|
+
it("setting a referenced member to undefined should turn it into an empty string", function () {
|
|
442
|
+
var reference = PropertyFactory.create("Reference", "map");
|
|
428
443
|
// First set it to something else than an empty reference
|
|
429
|
-
reference.insert(
|
|
444
|
+
reference.insert("test", "/test");
|
|
430
445
|
// Now reset it via the referenced member
|
|
431
|
-
reference.set(
|
|
432
|
-
reference.insert(
|
|
446
|
+
reference.set("test", undefined);
|
|
447
|
+
reference.insert("test2", undefined);
|
|
433
448
|
// And check the result
|
|
434
|
-
expect(reference.getValue(
|
|
435
|
-
expect(reference.getValue(
|
|
436
|
-
expect(reference.get(
|
|
449
|
+
expect(reference.getValue("test")).to.equal("");
|
|
450
|
+
expect(reference.getValue("test2")).to.equal("");
|
|
451
|
+
expect(reference.get("test")).to.be.undefined;
|
|
437
452
|
});
|
|
438
|
-
it(
|
|
439
|
-
var reference = PropertyFactory.create(
|
|
440
|
-
expect(function () {
|
|
441
|
-
|
|
453
|
+
it("setting a reference to a non absolute path should not throw", function () {
|
|
454
|
+
var reference = PropertyFactory.create("Reference", "map");
|
|
455
|
+
expect(function () {
|
|
456
|
+
reference.set("test", "test");
|
|
457
|
+
}).to.not.throw();
|
|
458
|
+
expect(function () {
|
|
459
|
+
reference.insert("test2", "test");
|
|
460
|
+
}).to.not.throw();
|
|
442
461
|
});
|
|
443
|
-
describe(
|
|
462
|
+
describe("Reference resolution", function () {
|
|
444
463
|
var root, target, reference, reference2, reference3, reference4, relativeReference;
|
|
445
464
|
var nodeTarget, nestedChild, nodeTarget2, nestedChild2;
|
|
446
465
|
var mapTarget, nestedMapChild;
|
|
447
466
|
var arrayTarget, nestedArrayChild;
|
|
448
467
|
beforeEach(function () {
|
|
449
|
-
root = PropertyFactory.create(
|
|
450
|
-
target = PropertyFactory.create(
|
|
451
|
-
nodeTarget = PropertyFactory.create(
|
|
452
|
-
nestedChild = PropertyFactory.create(
|
|
453
|
-
relativeReference = PropertyFactory.create(
|
|
454
|
-
nodeTarget.insert(
|
|
455
|
-
nodeTarget.insert(
|
|
456
|
-
nodeTarget2 = PropertyFactory.create(
|
|
457
|
-
nestedChild2 = PropertyFactory.create(
|
|
458
|
-
nodeTarget2.insert(
|
|
459
|
-
mapTarget = PropertyFactory.create(
|
|
460
|
-
nestedMapChild = PropertyFactory.create(
|
|
461
|
-
mapTarget.insert(
|
|
462
|
-
arrayTarget = PropertyFactory.create(
|
|
463
|
-
nestedArrayChild = PropertyFactory.create(
|
|
468
|
+
root = PropertyFactory.create("NodeProperty");
|
|
469
|
+
target = PropertyFactory.create("String");
|
|
470
|
+
nodeTarget = PropertyFactory.create("NodeProperty");
|
|
471
|
+
nestedChild = PropertyFactory.create("String");
|
|
472
|
+
relativeReference = PropertyFactory.create("Reference<String>", "map");
|
|
473
|
+
nodeTarget.insert("nested", nestedChild);
|
|
474
|
+
nodeTarget.insert("relativeReference", relativeReference);
|
|
475
|
+
nodeTarget2 = PropertyFactory.create("NodeProperty");
|
|
476
|
+
nestedChild2 = PropertyFactory.create("String");
|
|
477
|
+
nodeTarget2.insert("nested", nestedChild2);
|
|
478
|
+
mapTarget = PropertyFactory.create("map<>");
|
|
479
|
+
nestedMapChild = PropertyFactory.create("String");
|
|
480
|
+
mapTarget.insert("nested", nestedMapChild);
|
|
481
|
+
arrayTarget = PropertyFactory.create("array<>");
|
|
482
|
+
nestedArrayChild = PropertyFactory.create("String");
|
|
464
483
|
arrayTarget.push(nestedArrayChild);
|
|
465
|
-
reference = PropertyFactory.create(
|
|
466
|
-
reference2 = PropertyFactory.create(
|
|
467
|
-
reference3 = PropertyFactory.create(
|
|
468
|
-
reference4 = PropertyFactory.create(
|
|
469
|
-
root.insert(
|
|
470
|
-
root.insert(
|
|
471
|
-
root.insert(
|
|
472
|
-
root.insert(
|
|
473
|
-
root.insert(
|
|
474
|
-
root.insert(
|
|
475
|
-
root.insert(
|
|
476
|
-
root.insert(
|
|
477
|
-
root.insert(
|
|
478
|
-
target.value =
|
|
479
|
-
});
|
|
480
|
-
it(
|
|
481
|
-
reference.setValue(
|
|
482
|
-
expect(reference.get(
|
|
483
|
-
expect(reference.get(
|
|
484
|
-
});
|
|
485
|
-
it(
|
|
484
|
+
reference = PropertyFactory.create("Reference<String>", "map");
|
|
485
|
+
reference2 = PropertyFactory.create("Reference<Reference>", "map");
|
|
486
|
+
reference3 = PropertyFactory.create("Reference<Reference>");
|
|
487
|
+
reference4 = PropertyFactory.create("Reference<String>");
|
|
488
|
+
root.insert("target", target);
|
|
489
|
+
root.insert("nodeTarget", nodeTarget);
|
|
490
|
+
root.insert("nodeTarget2", nodeTarget2);
|
|
491
|
+
root.insert("mapTarget", mapTarget);
|
|
492
|
+
root.insert("arrayTarget", arrayTarget);
|
|
493
|
+
root.insert("reference", reference);
|
|
494
|
+
root.insert("reference2", reference2);
|
|
495
|
+
root.insert("reference3", reference3);
|
|
496
|
+
root.insert("reference4", reference4);
|
|
497
|
+
target.value = "test";
|
|
498
|
+
});
|
|
499
|
+
it("should allow resolving references", function () {
|
|
500
|
+
reference.setValue("test", "/target");
|
|
501
|
+
expect(reference.get("test")).to.equal(target);
|
|
502
|
+
expect(reference.get("test").value).to.equal("test");
|
|
503
|
+
});
|
|
504
|
+
it("@bugfix should allow dereferencing via a * with reference map property", function () {
|
|
486
505
|
reference4.set(target);
|
|
487
|
-
reference3.set(
|
|
488
|
-
reference.setValue(
|
|
489
|
-
reference.setValue(
|
|
490
|
-
expect(reference.get(
|
|
491
|
-
expect(reference.get(
|
|
492
|
-
});
|
|
493
|
-
it(
|
|
494
|
-
reference.set(
|
|
495
|
-
expect(reference.get(
|
|
496
|
-
expect(reference.get(
|
|
497
|
-
expect(reference.getValue(
|
|
498
|
-
});
|
|
499
|
-
it(
|
|
500
|
-
reference.set(
|
|
501
|
-
expect(reference.getValue(
|
|
502
|
-
});
|
|
503
|
-
it(
|
|
504
|
-
reference.set(
|
|
505
|
-
expect(reference.getValue(
|
|
506
|
-
});
|
|
507
|
-
it(
|
|
508
|
-
expect(function () {
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
reference.set(
|
|
514
|
-
expect(reference.getValue(
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
reference.set(
|
|
520
|
-
expect(reference.getValue(
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
});
|
|
531
|
-
it(
|
|
532
|
-
reference.insert(
|
|
533
|
-
expect(reference.getValue(
|
|
534
|
-
});
|
|
535
|
-
it(
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
expect(
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
reference.setValues(
|
|
546
|
-
expect(reference.getValue(
|
|
547
|
-
expect(reference.getValue(
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
expect(
|
|
551
|
-
|
|
552
|
-
|
|
506
|
+
reference3.set("/reference4*");
|
|
507
|
+
reference.setValue("test", "/reference3");
|
|
508
|
+
reference.setValue("test2", "/reference3*");
|
|
509
|
+
expect(reference.get("test")).to.equal(reference4);
|
|
510
|
+
expect(reference.get("test2")).to.equal(reference3);
|
|
511
|
+
});
|
|
512
|
+
it("should support setting via set", function () {
|
|
513
|
+
reference.set("test", target);
|
|
514
|
+
expect(reference.get("test")).to.equal(target);
|
|
515
|
+
expect(reference.get("test").value).to.equal("test");
|
|
516
|
+
expect(reference.getValue("test")).to.equal("/target");
|
|
517
|
+
});
|
|
518
|
+
it("set (insert) with a Property should work", function () {
|
|
519
|
+
reference.set("test", nestedChild);
|
|
520
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
521
|
+
});
|
|
522
|
+
it("set (insert) with a path should work", function () {
|
|
523
|
+
reference.set("test", "/nodeTarget.nested");
|
|
524
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
525
|
+
});
|
|
526
|
+
it("set (insert) with something else should throw", function () {
|
|
527
|
+
expect(function () {
|
|
528
|
+
reference.set("test", 123);
|
|
529
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
530
|
+
});
|
|
531
|
+
it("set (modify) with a Property should work", function () {
|
|
532
|
+
reference.set("test");
|
|
533
|
+
expect(reference.getValue("test")).to.equal("");
|
|
534
|
+
reference.set("test", nestedChild);
|
|
535
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
536
|
+
});
|
|
537
|
+
it("set (modify) with a path should work", function () {
|
|
538
|
+
reference.set("test");
|
|
539
|
+
expect(reference.getValue("test")).to.equal("");
|
|
540
|
+
reference.set("test", "/nodeTarget.nested");
|
|
541
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
542
|
+
});
|
|
543
|
+
it("set (modify) with something else should throw", function () {
|
|
544
|
+
reference.set("test");
|
|
545
|
+
expect(reference.getValue("test")).to.equal("");
|
|
546
|
+
expect(function () {
|
|
547
|
+
reference.set("test", 123);
|
|
548
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
549
|
+
});
|
|
550
|
+
it("insert with a Property should work", function () {
|
|
551
|
+
reference.insert("test", nestedChild);
|
|
552
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
553
|
+
});
|
|
554
|
+
it("insert with a path should work", function () {
|
|
555
|
+
reference.insert("test", "/nodeTarget.nested");
|
|
556
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
557
|
+
});
|
|
558
|
+
it("insert with something else should throw", function () {
|
|
559
|
+
expect(function () {
|
|
560
|
+
reference.insert("test", 123);
|
|
561
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
562
|
+
});
|
|
563
|
+
it("setValues with Property and path should work", function () {
|
|
564
|
+
reference.setValues([nestedChild, "/nodeTarget.nested"]);
|
|
565
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
566
|
+
expect(reference.getValue(1)).to.equal("/nodeTarget.nested");
|
|
567
|
+
reference.setValues([undefined, ""]);
|
|
568
|
+
expect(reference.getValue(0)).to.equal("");
|
|
569
|
+
expect(reference.getValue(1)).to.equal("");
|
|
570
|
+
reference.setValues({ test: nestedChild, test2: "/nodeTarget.nested" });
|
|
571
|
+
expect(reference.getValue("test")).to.equal("/nodeTarget.nested");
|
|
572
|
+
expect(reference.getValue("test2")).to.equal("/nodeTarget.nested");
|
|
573
|
+
});
|
|
574
|
+
it("setValues with something else should throw", function () {
|
|
575
|
+
expect(function () {
|
|
576
|
+
reference.setValues({ test: 123 });
|
|
577
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
578
|
+
});
|
|
579
|
+
it("should have a working isReferenceValid", function () {
|
|
553
580
|
// An empty reference should be valid
|
|
554
|
-
reference.setValue(
|
|
555
|
-
expect(reference.isReferenceValid(
|
|
581
|
+
reference.setValue("test", "");
|
|
582
|
+
expect(reference.isReferenceValid("test")).to.be.true;
|
|
556
583
|
// A reference to an existing property should be valid
|
|
557
|
-
reference.set(
|
|
558
|
-
expect(reference.isReferenceValid(
|
|
584
|
+
reference.set("test", target);
|
|
585
|
+
expect(reference.isReferenceValid("test")).to.be.true;
|
|
559
586
|
// A reference that cannot be resolved should be invalid
|
|
560
|
-
reference.setValue(
|
|
561
|
-
expect(reference.isReferenceValid(
|
|
587
|
+
reference.setValue("test", "/invalid_path");
|
|
588
|
+
expect(reference.isReferenceValid("test")).to.be.false;
|
|
562
589
|
});
|
|
563
|
-
it(
|
|
564
|
-
reference.set(
|
|
565
|
-
expect(root.resolvePath(
|
|
590
|
+
it("should allow dereferencing via the array syntax", function () {
|
|
591
|
+
reference.set("test", target);
|
|
592
|
+
expect(root.resolvePath("/reference[test]")).to.equal(target);
|
|
566
593
|
});
|
|
567
|
-
it(
|
|
568
|
-
reference.insert(
|
|
569
|
-
expect(root.resolvePath(
|
|
594
|
+
it("should allow accessing nested paths", function () {
|
|
595
|
+
reference.insert("test", nodeTarget);
|
|
596
|
+
expect(root.resolvePath("/reference[test].nested")).to.equal(nestedChild);
|
|
570
597
|
});
|
|
571
|
-
it(
|
|
572
|
-
reference.set(
|
|
573
|
-
expect(root.resolvePath(
|
|
598
|
+
it("should allow accessing referenced maps", function () {
|
|
599
|
+
reference.set("test", mapTarget);
|
|
600
|
+
expect(root.resolvePath("/reference[test][nested]")).to.equal(nestedMapChild);
|
|
574
601
|
});
|
|
575
|
-
it(
|
|
576
|
-
reference.set(
|
|
577
|
-
expect(root.resolvePath(
|
|
602
|
+
it("should allow accessing referenced arrays", function () {
|
|
603
|
+
reference.set("test", arrayTarget);
|
|
604
|
+
expect(root.resolvePath("/reference[test][0]")).to.equal(nestedArrayChild);
|
|
578
605
|
});
|
|
579
|
-
it(
|
|
580
|
-
reference.set(
|
|
581
|
-
reference2.set(
|
|
582
|
-
expect(root.resolvePath(
|
|
606
|
+
it("double dereferencing a reference should work", function () {
|
|
607
|
+
reference.set("test", target);
|
|
608
|
+
reference2.set("test", reference);
|
|
609
|
+
expect(root.resolvePath("/reference2[test][test]")).to.equal(target);
|
|
583
610
|
});
|
|
584
|
-
it(
|
|
585
|
-
reference.set(
|
|
611
|
+
it("mixing maps and normal maps should work", function () {
|
|
612
|
+
reference.set("test", target);
|
|
586
613
|
reference3.set(reference);
|
|
587
|
-
expect(root.resolvePath(
|
|
588
|
-
expect(root.resolvePath(
|
|
589
|
-
expect(root.get([
|
|
590
|
-
reference.set(
|
|
614
|
+
expect(root.resolvePath("/reference3[test]")).to.equal(target);
|
|
615
|
+
expect(root.resolvePath("/reference3*[test]")).to.equal(undefined);
|
|
616
|
+
expect(root.get(["reference3", dereferenceToken, "test"])).to.equal(undefined);
|
|
617
|
+
reference.set("test", reference3);
|
|
591
618
|
reference3.set(target);
|
|
592
|
-
expect(root.resolvePath(
|
|
593
|
-
expect(root.resolvePath(
|
|
594
|
-
expect(root.get([
|
|
595
|
-
});
|
|
596
|
-
it(
|
|
597
|
-
reference.insert(
|
|
598
|
-
expect(root.resolvePath(
|
|
599
|
-
expect(reference.resolvePath(
|
|
600
|
-
reference.set(
|
|
601
|
-
expect(root.resolvePath(
|
|
602
|
-
expect(reference.resolvePath(
|
|
603
|
-
nodeTarget2.remove(
|
|
604
|
-
var newChild = PropertyFactory.create(
|
|
605
|
-
nodeTarget2.insert(
|
|
606
|
-
expect(reference.resolvePath(
|
|
607
|
-
});
|
|
608
|
-
it(
|
|
609
|
-
relativeReference.setValue(
|
|
610
|
-
expect(root.resolvePath(
|
|
611
|
-
});
|
|
612
|
-
it(
|
|
613
|
-
reference.insert(
|
|
614
|
-
expect(reference.remove(
|
|
615
|
-
expect(reference.getValue(
|
|
616
|
-
});
|
|
617
|
-
it(
|
|
618
|
-
var newReference = PropertyFactory.create(
|
|
619
|
-
newReference.insert(
|
|
620
|
-
newReference.insert(
|
|
619
|
+
expect(root.resolvePath("/reference[test]")).to.equal(target);
|
|
620
|
+
expect(root.resolvePath("/reference[test]*")).to.equal(reference3);
|
|
621
|
+
expect(root.get(["reference", "test", dereferenceToken]));
|
|
622
|
+
});
|
|
623
|
+
it("should continue to work when the reference or the referenced node changes", function () {
|
|
624
|
+
reference.insert("test", nodeTarget);
|
|
625
|
+
expect(root.resolvePath("/reference[test].nested")).to.equal(nestedChild);
|
|
626
|
+
expect(reference.resolvePath("[test].nested")).to.equal(nestedChild);
|
|
627
|
+
reference.set("test", nodeTarget2);
|
|
628
|
+
expect(root.resolvePath("/reference[test].nested")).to.equal(nestedChild2);
|
|
629
|
+
expect(reference.resolvePath("[test].nested")).to.equal(nestedChild2);
|
|
630
|
+
nodeTarget2.remove("nested");
|
|
631
|
+
var newChild = PropertyFactory.create("String");
|
|
632
|
+
nodeTarget2.insert("nested", newChild);
|
|
633
|
+
expect(reference.resolvePath("[test].nested")).to.equal(newChild);
|
|
634
|
+
});
|
|
635
|
+
it("should allow dereferencing via the array syntax using relative paths", function () {
|
|
636
|
+
relativeReference.setValue("test", "../target");
|
|
637
|
+
expect(root.resolvePath("/nodeTarget.relativeReference[test]")).to.equal(target);
|
|
638
|
+
});
|
|
639
|
+
it("remove should work and return the string path", function () {
|
|
640
|
+
reference.insert("two", target);
|
|
641
|
+
expect(reference.remove("two")).to.equal("/target");
|
|
642
|
+
expect(reference.getValue("two")).to.be.undefined;
|
|
643
|
+
});
|
|
644
|
+
it("getValues should return a map containing path strings", function () {
|
|
645
|
+
var newReference = PropertyFactory.create("Reference<String>", "map");
|
|
646
|
+
newReference.insert("one", target);
|
|
647
|
+
newReference.insert("two", nodeTarget);
|
|
621
648
|
expect(newReference.getValues()).to.deep.equal({
|
|
622
|
-
|
|
623
|
-
|
|
649
|
+
one: "/target",
|
|
650
|
+
two: "/nodeTarget",
|
|
624
651
|
});
|
|
625
652
|
});
|
|
626
|
-
it(
|
|
627
|
-
var newReference = PropertyFactory.create(
|
|
628
|
-
expect(newReference.getContext()).to.equal(
|
|
653
|
+
it("getContext should return map", function () {
|
|
654
|
+
var newReference = PropertyFactory.create("Reference<String>", "map");
|
|
655
|
+
expect(newReference.getContext()).to.equal("map");
|
|
629
656
|
});
|
|
630
657
|
});
|
|
631
658
|
});
|
|
632
|
-
describe(
|
|
633
|
-
it(
|
|
659
|
+
describe("ReferenceArrayProperty", function () {
|
|
660
|
+
it("should be possible to create", function () {
|
|
634
661
|
// Test creation of an anonymous reference
|
|
635
|
-
var reference = PropertyFactory.create(
|
|
662
|
+
var reference = PropertyFactory.create("Reference", "array");
|
|
636
663
|
expect(reference).to.be.instanceof(ReferenceArrayProperty);
|
|
637
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
664
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
638
665
|
// Test creation of a typed reference
|
|
639
|
-
var reference = PropertyFactory.create(
|
|
666
|
+
var reference = PropertyFactory.create("Reference<NodeProperty>", "array");
|
|
640
667
|
expect(reference).to.be.instanceof(ReferenceArrayProperty);
|
|
641
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
668
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
642
669
|
// Test creation of a typed reference
|
|
643
|
-
var reference = PropertyFactory.create(
|
|
670
|
+
var reference = PropertyFactory.create("array<Reference<NodeProperty>>");
|
|
644
671
|
expect(reference).to.be.instanceof(ReferenceArrayProperty);
|
|
645
|
-
expect(reference.getReferenceTargetTypeId()).to.equal(
|
|
672
|
+
expect(reference.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
646
673
|
// Test creation via a template
|
|
647
|
-
var prop = PropertyFactory.create(
|
|
674
|
+
var prop = PropertyFactory.create("autodesk.test:referencePropertyTest-1.0.0");
|
|
648
675
|
expect(prop._properties.refArray_anon).to.be.instanceof(ReferenceArrayProperty);
|
|
649
|
-
expect(prop._properties.refArray_anon.getReferenceTargetTypeId()).to.equal(
|
|
676
|
+
expect(prop._properties.refArray_anon.getReferenceTargetTypeId()).to.equal("BaseProperty");
|
|
650
677
|
expect(prop._properties.refArray).to.be.instanceof(ReferenceArrayProperty);
|
|
651
|
-
expect(prop._properties.refArray.getReferenceTargetTypeId()).to.equal(
|
|
678
|
+
expect(prop._properties.refArray.getReferenceTargetTypeId()).to.equal("NodeProperty");
|
|
652
679
|
});
|
|
653
|
-
it(
|
|
654
|
-
var reference = PropertyFactory.create(
|
|
680
|
+
it("empty reference should resolve to undefined", function () {
|
|
681
|
+
var reference = PropertyFactory.create("Reference", "array");
|
|
655
682
|
// Explicitly setting it should have the same effect
|
|
656
|
-
reference.push(
|
|
683
|
+
reference.push("");
|
|
657
684
|
expect(reference.get(0)).to.be.undefined;
|
|
658
685
|
// Explicitly setting it should have the same effect
|
|
659
|
-
reference.set(0,
|
|
686
|
+
reference.set(0, "");
|
|
660
687
|
expect(reference.get(0)).to.be.undefined;
|
|
661
|
-
expect(reference.getValue(0)).to.equal(
|
|
688
|
+
expect(reference.getValue(0)).to.equal("");
|
|
662
689
|
});
|
|
663
|
-
it(
|
|
664
|
-
var reference = PropertyFactory.create(
|
|
690
|
+
it("setting a referenced member to undefined should turn it into an empty string", function () {
|
|
691
|
+
var reference = PropertyFactory.create("Reference", "array");
|
|
665
692
|
// Test pushing a value
|
|
666
693
|
reference.push(undefined);
|
|
667
694
|
expect(reference.get(0)).to.equal(undefined);
|
|
668
695
|
// First set it to something else than an empty reference
|
|
669
|
-
reference.set(0,
|
|
696
|
+
reference.set(0, "/test");
|
|
670
697
|
// Now reset it via the referenced member
|
|
671
698
|
reference.set(0, undefined);
|
|
672
699
|
// And check the result
|
|
673
700
|
expect(reference.get(0)).to.equal(undefined);
|
|
674
701
|
});
|
|
675
|
-
it.skip(
|
|
676
|
-
var reference = PropertyFactory.create(
|
|
677
|
-
expect(function () {
|
|
678
|
-
|
|
702
|
+
it.skip("setting a reference to a non absolute path should not throw", function () {
|
|
703
|
+
var reference = PropertyFactory.create("Reference", "array");
|
|
704
|
+
expect(function () {
|
|
705
|
+
reference.push("test");
|
|
706
|
+
}).to.throw();
|
|
707
|
+
expect(function () {
|
|
708
|
+
reference.push("");
|
|
709
|
+
reference.set(0, "test");
|
|
710
|
+
}).to.throw();
|
|
679
711
|
});
|
|
680
|
-
describe(
|
|
712
|
+
describe("Reference resolution", function () {
|
|
681
713
|
var root, target, reference, reference2, reference3, relativeReference;
|
|
682
714
|
var nodeTarget, nestedChild, nodeTarget2, nestedChild2;
|
|
683
715
|
var mapTarget, nestedMapChild;
|
|
684
716
|
var arrayTarget, nestedArrayChild;
|
|
685
717
|
beforeEach(function () {
|
|
686
|
-
root = PropertyFactory.create(
|
|
687
|
-
nodeTarget = PropertyFactory.create(
|
|
688
|
-
nestedChild = PropertyFactory.create(
|
|
689
|
-
relativeReference = PropertyFactory.create(
|
|
690
|
-
nodeTarget.insert(
|
|
691
|
-
nodeTarget.insert(
|
|
692
|
-
nodeTarget2 = PropertyFactory.create(
|
|
693
|
-
nestedChild2 = PropertyFactory.create(
|
|
694
|
-
nodeTarget2.insert(
|
|
695
|
-
mapTarget = PropertyFactory.create(
|
|
696
|
-
nestedMapChild = PropertyFactory.create(
|
|
697
|
-
mapTarget.insert(
|
|
698
|
-
arrayTarget = PropertyFactory.create(
|
|
699
|
-
nestedArrayChild = PropertyFactory.create(
|
|
718
|
+
root = PropertyFactory.create("NodeProperty");
|
|
719
|
+
nodeTarget = PropertyFactory.create("NodeProperty");
|
|
720
|
+
nestedChild = PropertyFactory.create("String");
|
|
721
|
+
relativeReference = PropertyFactory.create("Reference<String>", "array");
|
|
722
|
+
nodeTarget.insert("nested", nestedChild);
|
|
723
|
+
nodeTarget.insert("relativeReference", relativeReference);
|
|
724
|
+
nodeTarget2 = PropertyFactory.create("NodeProperty");
|
|
725
|
+
nestedChild2 = PropertyFactory.create("String");
|
|
726
|
+
nodeTarget2.insert("nested", nestedChild2);
|
|
727
|
+
mapTarget = PropertyFactory.create("map<>");
|
|
728
|
+
nestedMapChild = PropertyFactory.create("String");
|
|
729
|
+
mapTarget.insert("nested", nestedMapChild);
|
|
730
|
+
arrayTarget = PropertyFactory.create("array<>");
|
|
731
|
+
nestedArrayChild = PropertyFactory.create("String");
|
|
700
732
|
arrayTarget.push(nestedArrayChild);
|
|
701
|
-
target = PropertyFactory.create(
|
|
702
|
-
reference = PropertyFactory.create(
|
|
703
|
-
reference2 = PropertyFactory.create(
|
|
704
|
-
reference3 = PropertyFactory.create(
|
|
705
|
-
root.insert(
|
|
706
|
-
root.insert(
|
|
707
|
-
root.insert(
|
|
708
|
-
root.insert(
|
|
709
|
-
root.insert(
|
|
710
|
-
root.insert(
|
|
711
|
-
root.insert(
|
|
712
|
-
root.insert(
|
|
713
|
-
target.value =
|
|
714
|
-
});
|
|
715
|
-
it(
|
|
716
|
-
reference.push(
|
|
733
|
+
target = PropertyFactory.create("String");
|
|
734
|
+
reference = PropertyFactory.create("Reference<String>", "array");
|
|
735
|
+
reference2 = PropertyFactory.create("Reference<Reference>", "array");
|
|
736
|
+
reference3 = PropertyFactory.create("Reference<Reference>");
|
|
737
|
+
root.insert("target", target);
|
|
738
|
+
root.insert("nodeTarget", nodeTarget);
|
|
739
|
+
root.insert("nodeTarget2", nodeTarget2);
|
|
740
|
+
root.insert("mapTarget", mapTarget);
|
|
741
|
+
root.insert("arrayTarget", arrayTarget);
|
|
742
|
+
root.insert("reference", reference);
|
|
743
|
+
root.insert("reference2", reference2);
|
|
744
|
+
root.insert("reference3", reference3);
|
|
745
|
+
target.value = "test";
|
|
746
|
+
});
|
|
747
|
+
it("should allow resolving references", function () {
|
|
748
|
+
reference.push("/target");
|
|
717
749
|
expect(reference.get(0)).to.equal(target);
|
|
718
|
-
expect(reference.get(0).value).to.equal(
|
|
750
|
+
expect(reference.get(0).value).to.equal("test");
|
|
719
751
|
});
|
|
720
|
-
it(
|
|
752
|
+
it("should support setting via push", function () {
|
|
721
753
|
reference.push(target);
|
|
722
754
|
expect(reference.get(0)).to.equal(target);
|
|
723
|
-
expect(reference.get(0).value).to.equal(
|
|
755
|
+
expect(reference.get(0).value).to.equal("test");
|
|
724
756
|
// expect(reference.get(0)).to.equal('/target');
|
|
725
757
|
// this last test will break when we get rid of getReferencedProperty. Fix when get supports '*'
|
|
726
758
|
});
|
|
727
|
-
it(
|
|
759
|
+
it("should support setting via insert", function () {
|
|
728
760
|
reference.insert(0, target);
|
|
729
761
|
expect(reference.get(0)).to.equal(target);
|
|
730
|
-
expect(reference.get(0).value).to.equal(
|
|
762
|
+
expect(reference.get(0).value).to.equal("test");
|
|
731
763
|
// expect(reference.get(0)).to.equal('/target');
|
|
732
764
|
// see comment above
|
|
733
765
|
});
|
|
734
|
-
it(
|
|
766
|
+
it("should support setting via insertRange", function () {
|
|
735
767
|
reference.insertRange(0, [target, nodeTarget]);
|
|
736
768
|
expect(reference.get(0)).to.equal(target);
|
|
737
|
-
expect(reference.get(0).value).to.equal(
|
|
769
|
+
expect(reference.get(0).value).to.equal("test");
|
|
738
770
|
// expect(reference.get(0)).to.equal('/target');
|
|
739
771
|
// see comment above
|
|
740
772
|
expect(reference.get(1)).to.equal(nodeTarget);
|
|
741
773
|
// expect(reference.get(1)).to.equal('/nodeTarget');
|
|
742
774
|
// see comment above
|
|
743
775
|
});
|
|
744
|
-
it(
|
|
745
|
-
reference.insertRange(0, [
|
|
776
|
+
it("should support setting via setRange", function () {
|
|
777
|
+
reference.insertRange(0, ["", ""]);
|
|
746
778
|
reference.setRange(0, [target, nodeTarget]);
|
|
747
779
|
expect(reference.get(0)).to.equal(target);
|
|
748
|
-
expect(reference.get(0).value).to.equal(
|
|
780
|
+
expect(reference.get(0).value).to.equal("test");
|
|
749
781
|
// expect(reference.get(0)).to.equal('/target');
|
|
750
782
|
// see comment above
|
|
751
783
|
expect(reference.get(1)).to.equal(nodeTarget);
|
|
752
784
|
// expect(reference.get(1)).to.equal('/nodeTarget');
|
|
753
785
|
// see comment above
|
|
754
786
|
});
|
|
755
|
-
it(
|
|
756
|
-
reference.insertRange(0, [
|
|
787
|
+
it("should support setting via set", function () {
|
|
788
|
+
reference.insertRange(0, ["", ""]);
|
|
757
789
|
reference.set(0, target);
|
|
758
790
|
reference.set(1, nodeTarget);
|
|
759
791
|
expect(reference.get(0)).to.equal(target);
|
|
760
|
-
expect(reference.get(0).value).to.equal(
|
|
792
|
+
expect(reference.get(0).value).to.equal("test");
|
|
761
793
|
// expect(reference.get(0)).to.equal('/target');
|
|
762
794
|
// to fix once .get accepts '*' tokens
|
|
763
795
|
expect(reference.get(1)).to.equal(nodeTarget);
|
|
764
796
|
// expect(reference.get(1)).to.equal('/nodeTarget');
|
|
765
797
|
// to fix once .get accepts '*' tokens
|
|
766
798
|
});
|
|
767
|
-
it(
|
|
799
|
+
it("set with a Property should work", function () {
|
|
768
800
|
reference.insert(0);
|
|
769
|
-
expect(reference.getValue(0)).to.equal(
|
|
801
|
+
expect(reference.getValue(0)).to.equal("");
|
|
770
802
|
reference.set(0, nestedChild);
|
|
771
|
-
expect(reference.getValue(0)).to.equal(
|
|
803
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
772
804
|
});
|
|
773
|
-
it(
|
|
805
|
+
it("set with a path should work", function () {
|
|
774
806
|
reference.insert(0);
|
|
775
|
-
expect(reference.getValue(0)).to.equal(
|
|
776
|
-
reference.set(0,
|
|
777
|
-
expect(reference.getValue(0)).to.equal(
|
|
807
|
+
expect(reference.getValue(0)).to.equal("");
|
|
808
|
+
reference.set(0, "/nodeTarget.nested");
|
|
809
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
778
810
|
});
|
|
779
|
-
it(
|
|
811
|
+
it("set with something else should throw", function () {
|
|
780
812
|
reference.insert(0);
|
|
781
|
-
expect(reference.getValue(0)).to.equal(
|
|
782
|
-
expect(function () {
|
|
813
|
+
expect(reference.getValue(0)).to.equal("");
|
|
814
|
+
expect(function () {
|
|
815
|
+
reference.set(0, 123);
|
|
816
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
783
817
|
});
|
|
784
|
-
it(
|
|
818
|
+
it("set should throw if in_offset is not an integer", function () {
|
|
785
819
|
reference.insert(0);
|
|
786
|
-
expect(reference.getValue(0)).to.equal(
|
|
787
|
-
expect(function () {
|
|
788
|
-
.
|
|
820
|
+
expect(reference.getValue(0)).to.equal("");
|
|
821
|
+
expect(function () {
|
|
822
|
+
reference.set("test", "/nodeTarget.nested");
|
|
823
|
+
}).to.throw(MSG.NOT_NUMBER);
|
|
789
824
|
});
|
|
790
|
-
it(
|
|
825
|
+
it("setRange with a Property and a path should work", function () {
|
|
791
826
|
reference.insert(0);
|
|
792
827
|
reference.insert(1);
|
|
793
|
-
expect(reference.getValue(0)).to.equal(
|
|
794
|
-
expect(reference.getValue(1)).to.equal(
|
|
795
|
-
reference.setRange(0, [nestedChild,
|
|
796
|
-
expect(reference.getValue(0)).to.equal(
|
|
797
|
-
expect(reference.getValue(1)).to.equal(
|
|
828
|
+
expect(reference.getValue(0)).to.equal("");
|
|
829
|
+
expect(reference.getValue(1)).to.equal("");
|
|
830
|
+
reference.setRange(0, [nestedChild, "/nodeTarget.nested"]);
|
|
831
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
832
|
+
expect(reference.getValue(1)).to.equal("/nodeTarget.nested");
|
|
798
833
|
});
|
|
799
|
-
it(
|
|
834
|
+
it("setRange with something else should throw", function () {
|
|
800
835
|
reference.insert(0);
|
|
801
|
-
expect(reference.getValue(0)).to.equal(
|
|
802
|
-
expect(function () {
|
|
836
|
+
expect(reference.getValue(0)).to.equal("");
|
|
837
|
+
expect(function () {
|
|
838
|
+
reference.setRange(0, [123]);
|
|
839
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
803
840
|
});
|
|
804
|
-
it(
|
|
841
|
+
it("setRange should throw if in_offset is not an integer", function () {
|
|
805
842
|
reference.insert(0);
|
|
806
843
|
reference.insert(1);
|
|
807
|
-
expect(reference.getValue(0)).to.equal(
|
|
808
|
-
expect(reference.getValue(1)).to.equal(
|
|
809
|
-
expect(function () {
|
|
810
|
-
.
|
|
844
|
+
expect(reference.getValue(0)).to.equal("");
|
|
845
|
+
expect(reference.getValue(1)).to.equal("");
|
|
846
|
+
expect(function () {
|
|
847
|
+
reference.setRange("test", [nestedChild, "/nodeTarget.nested"]);
|
|
848
|
+
}).to.throw(MSG.NOT_NUMBER);
|
|
811
849
|
});
|
|
812
|
-
it(
|
|
850
|
+
it("insert with a Property should work", function () {
|
|
813
851
|
reference.insert(0, nestedChild);
|
|
814
|
-
expect(reference.getValue(0)).to.equal(
|
|
852
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
815
853
|
});
|
|
816
|
-
it(
|
|
817
|
-
reference.insert(0,
|
|
818
|
-
expect(reference.getValue(0)).to.equal(
|
|
854
|
+
it("insert with a path should work", function () {
|
|
855
|
+
reference.insert(0, "/nodeTarget.nested");
|
|
856
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
819
857
|
});
|
|
820
|
-
it(
|
|
821
|
-
expect(function () {
|
|
858
|
+
it("insert with something else should throw", function () {
|
|
859
|
+
expect(function () {
|
|
860
|
+
reference.insert(0, 123);
|
|
861
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
822
862
|
});
|
|
823
|
-
it(
|
|
824
|
-
reference.insertRange(0, [nestedChild,
|
|
825
|
-
expect(reference.getValue(0)).to.equal(
|
|
826
|
-
expect(reference.getValue(1)).to.equal(
|
|
863
|
+
it("insertRange with a Property and a path should work", function () {
|
|
864
|
+
reference.insertRange(0, [nestedChild, "/nodeTarget.nested"]);
|
|
865
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
866
|
+
expect(reference.getValue(1)).to.equal("/nodeTarget.nested");
|
|
827
867
|
});
|
|
828
|
-
it(
|
|
829
|
-
expect(function () {
|
|
868
|
+
it("insertRange with something else should throw", function () {
|
|
869
|
+
expect(function () {
|
|
870
|
+
reference.insertRange(0, [123]);
|
|
871
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
830
872
|
});
|
|
831
|
-
it(
|
|
873
|
+
it("enqueue with a Property should work", function () {
|
|
832
874
|
reference.enqueue(nestedChild);
|
|
833
|
-
expect(reference.getValue(0)).to.equal(
|
|
875
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
834
876
|
});
|
|
835
|
-
it(
|
|
836
|
-
reference.enqueue(
|
|
837
|
-
expect(reference.getValue(0)).to.equal(
|
|
877
|
+
it("enqueue with a path should work", function () {
|
|
878
|
+
reference.enqueue("/nodeTarget.nested");
|
|
879
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
838
880
|
});
|
|
839
|
-
it(
|
|
840
|
-
expect(function () {
|
|
881
|
+
it("enqueue with something else should throw", function () {
|
|
882
|
+
expect(function () {
|
|
883
|
+
reference.enqueue(123);
|
|
884
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
841
885
|
});
|
|
842
|
-
it(
|
|
886
|
+
it("push with a Property should work", function () {
|
|
843
887
|
reference.push(nestedChild);
|
|
844
|
-
expect(reference.getValue(0)).to.equal(
|
|
888
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
845
889
|
});
|
|
846
|
-
it(
|
|
847
|
-
reference.push(
|
|
848
|
-
expect(reference.getValue(0)).to.equal(
|
|
890
|
+
it("push with a path should work", function () {
|
|
891
|
+
reference.push("/nodeTarget.nested");
|
|
892
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
849
893
|
});
|
|
850
|
-
it(
|
|
851
|
-
expect(function () {
|
|
894
|
+
it("push with something else should throw", function () {
|
|
895
|
+
expect(function () {
|
|
896
|
+
reference.push(123);
|
|
897
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
852
898
|
});
|
|
853
|
-
it(
|
|
899
|
+
it("unshift with a Property should work", function () {
|
|
854
900
|
reference.unshift(nestedChild);
|
|
855
|
-
expect(reference.getValue(0)).to.equal(
|
|
856
|
-
});
|
|
857
|
-
it(
|
|
858
|
-
reference.unshift(
|
|
859
|
-
expect(reference.getValue(0)).to.equal(
|
|
860
|
-
});
|
|
861
|
-
it(
|
|
862
|
-
expect(function () {
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
reference.
|
|
869
|
-
expect(reference.getValue(
|
|
870
|
-
|
|
871
|
-
reference.
|
|
872
|
-
expect(reference.getValue(
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
901
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
902
|
+
});
|
|
903
|
+
it("unshift with a path should work", function () {
|
|
904
|
+
reference.unshift("/nodeTarget.nested");
|
|
905
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
906
|
+
});
|
|
907
|
+
it("unshift with something else should throw", function () {
|
|
908
|
+
expect(function () {
|
|
909
|
+
reference.unshift(123);
|
|
910
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
911
|
+
});
|
|
912
|
+
it("setValues with Property and path should work", function () {
|
|
913
|
+
reference.setValues([nestedChild, "/nodeTarget.nested"]);
|
|
914
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
915
|
+
expect(reference.getValue(1)).to.equal("/nodeTarget.nested");
|
|
916
|
+
reference.setValues([undefined, ""]);
|
|
917
|
+
expect(reference.getValue(0)).to.equal("");
|
|
918
|
+
expect(reference.getValue(1)).to.equal("");
|
|
919
|
+
reference.setValues({ 0: nestedChild, 1: "/nodeTarget.nested" });
|
|
920
|
+
expect(reference.getValue(0)).to.equal("/nodeTarget.nested");
|
|
921
|
+
expect(reference.getValue(1)).to.equal("/nodeTarget.nested");
|
|
922
|
+
});
|
|
923
|
+
it("setValues with something else should throw", function () {
|
|
924
|
+
expect(function () {
|
|
925
|
+
reference.setValues({ 0: 123 });
|
|
926
|
+
}).to.throw(MSG.PROPERTY_OR_UNDEFINED);
|
|
927
|
+
});
|
|
928
|
+
it("should have a working isReferenceValid", function () {
|
|
879
929
|
// An empty reference should be valid
|
|
880
|
-
reference.push(
|
|
930
|
+
reference.push("");
|
|
881
931
|
expect(reference.isReferenceValid(0)).to.be.true;
|
|
882
932
|
// A reference to an existing property should be valid
|
|
883
933
|
reference.set(0, target);
|
|
884
934
|
expect(reference.isReferenceValid(0)).to.be.true;
|
|
885
935
|
// A reference that cannot be resolved should be invalid
|
|
886
|
-
reference.set(0,
|
|
936
|
+
reference.set(0, "/invalid_path");
|
|
887
937
|
expect(reference.isReferenceValid(0)).to.be.false;
|
|
888
938
|
});
|
|
889
|
-
it(
|
|
939
|
+
it("should allow dereferencing via the array syntax", function () {
|
|
890
940
|
reference.push(target);
|
|
891
|
-
expect(root.resolvePath(
|
|
941
|
+
expect(root.resolvePath("/reference[0]")).to.equal(target);
|
|
892
942
|
});
|
|
893
|
-
it(
|
|
943
|
+
it("should allow accessing nested paths", function () {
|
|
894
944
|
reference.push(nodeTarget);
|
|
895
|
-
expect(root.resolvePath(
|
|
945
|
+
expect(root.resolvePath("/reference[0].nested")).to.equal(nestedChild);
|
|
896
946
|
});
|
|
897
|
-
it(
|
|
947
|
+
it("should allow accessing referenced maps", function () {
|
|
898
948
|
reference.push(mapTarget);
|
|
899
|
-
expect(root.resolvePath(
|
|
949
|
+
expect(root.resolvePath("/reference[0][nested]")).to.equal(nestedMapChild);
|
|
900
950
|
});
|
|
901
|
-
it(
|
|
951
|
+
it("should allow accessing referenced arrays", function () {
|
|
902
952
|
reference.push(arrayTarget);
|
|
903
|
-
expect(root.resolvePath(
|
|
953
|
+
expect(root.resolvePath("/reference[0][0]")).to.equal(nestedArrayChild);
|
|
904
954
|
});
|
|
905
|
-
it(
|
|
955
|
+
it("double dereferencing a reference should work", function () {
|
|
906
956
|
reference.push(target);
|
|
907
957
|
reference2.push(reference);
|
|
908
|
-
expect(root.resolvePath(
|
|
958
|
+
expect(root.resolvePath("/reference2[0][0]")).to.equal(target);
|
|
909
959
|
});
|
|
910
|
-
it(
|
|
960
|
+
it("mixing references and array references should work", function () {
|
|
911
961
|
reference.push(target);
|
|
912
962
|
reference3.set(reference);
|
|
913
|
-
expect(root.resolvePath(
|
|
914
|
-
expect(root.resolvePath(
|
|
963
|
+
expect(root.resolvePath("/reference3[0]")).to.equal(target);
|
|
964
|
+
expect(root.resolvePath("/reference3*[0]")).to.equal(undefined);
|
|
915
965
|
reference.set(0, reference3);
|
|
916
966
|
reference3.set(target);
|
|
917
|
-
expect(root.resolvePath(
|
|
918
|
-
expect(root.resolvePath(
|
|
967
|
+
expect(root.resolvePath("/reference[0]")).to.equal(target);
|
|
968
|
+
expect(root.resolvePath("/reference[0]*")).to.equal(reference3);
|
|
919
969
|
});
|
|
920
|
-
it(
|
|
970
|
+
it("should continue to work when the reference or the referenced node changes", function () {
|
|
921
971
|
reference.push(nodeTarget);
|
|
922
|
-
expect(root.resolvePath(
|
|
923
|
-
expect(reference.resolvePath(
|
|
972
|
+
expect(root.resolvePath("/reference[0].nested")).to.equal(nestedChild);
|
|
973
|
+
expect(reference.resolvePath("[0].nested")).to.equal(nestedChild);
|
|
924
974
|
reference.set(0, nodeTarget2);
|
|
925
|
-
expect(root.resolvePath(
|
|
926
|
-
expect(reference.resolvePath(
|
|
927
|
-
nodeTarget2.remove(
|
|
928
|
-
var newChild = PropertyFactory.create(
|
|
929
|
-
nodeTarget2.insert(
|
|
930
|
-
expect(reference.resolvePath(
|
|
931
|
-
});
|
|
932
|
-
it(
|
|
933
|
-
relativeReference.push(
|
|
934
|
-
expect(root.resolvePath(
|
|
935
|
-
});
|
|
936
|
-
it(
|
|
937
|
-
let test = PropertyFactory.create(
|
|
938
|
-
let ref = PropertyFactory.create(
|
|
939
|
-
let nameProperty = PropertyFactory.create(
|
|
940
|
-
test.insert(
|
|
941
|
-
test.insert(
|
|
942
|
-
test.resolvePath(
|
|
975
|
+
expect(root.resolvePath("/reference[0].nested")).to.equal(nestedChild2);
|
|
976
|
+
expect(reference.resolvePath("[0].nested")).to.equal(nestedChild2);
|
|
977
|
+
nodeTarget2.remove("nested");
|
|
978
|
+
var newChild = PropertyFactory.create("String");
|
|
979
|
+
nodeTarget2.insert("nested", newChild);
|
|
980
|
+
expect(reference.resolvePath("[0].nested")).to.equal(newChild);
|
|
981
|
+
});
|
|
982
|
+
it("should allow dereferencing via the array syntax using relative paths", function () {
|
|
983
|
+
relativeReference.push("../target");
|
|
984
|
+
expect(root.resolvePath("/nodeTarget.relativeReference[0]")).to.equal(target);
|
|
985
|
+
});
|
|
986
|
+
it("Should return references value when a reference points to a context simple property", function () {
|
|
987
|
+
let test = PropertyFactory.create("NodeProperty");
|
|
988
|
+
let ref = PropertyFactory.create("Reference");
|
|
989
|
+
let nameProperty = PropertyFactory.create("NamedProperty");
|
|
990
|
+
test.insert("b", nameProperty);
|
|
991
|
+
test.insert("reference", ref);
|
|
992
|
+
test.resolvePath("reference*").set(nameProperty);
|
|
943
993
|
expect(test.getValues()).to.deep.equal({
|
|
944
994
|
b: {
|
|
945
995
|
guid: nameProperty.getGuid(),
|
|
@@ -949,118 +999,118 @@ describe('Reference Properties', function () {
|
|
|
949
999
|
},
|
|
950
1000
|
});
|
|
951
1001
|
});
|
|
952
|
-
it(
|
|
1002
|
+
it(".pop should work", function () {
|
|
953
1003
|
reference.insertRange(0, [target, nodeTarget]);
|
|
954
1004
|
expect(reference.length).to.equal(2);
|
|
955
1005
|
reference.pop();
|
|
956
1006
|
expect(reference.length).to.equal(1);
|
|
957
|
-
expect(reference.pop()).to.equal(
|
|
1007
|
+
expect(reference.pop()).to.equal("/target");
|
|
958
1008
|
});
|
|
959
|
-
it(
|
|
1009
|
+
it(".remove and .removeRange should work", function () {
|
|
960
1010
|
reference.insertRange(0, [target, nodeTarget]);
|
|
961
1011
|
expect(reference.length).to.equal(2);
|
|
962
|
-
expect(reference.remove(0)).to.equal(
|
|
1012
|
+
expect(reference.remove(0)).to.equal("/target");
|
|
963
1013
|
expect(reference.length).to.equal(1);
|
|
964
1014
|
reference.insert(1, target);
|
|
965
|
-
expect(reference.removeRange(0, 2)).to.deep.equal([
|
|
1015
|
+
expect(reference.removeRange(0, 2)).to.deep.equal(["/nodeTarget", "/target"]);
|
|
966
1016
|
expect(reference.length).to.equal(0);
|
|
967
1017
|
});
|
|
968
|
-
it(
|
|
1018
|
+
it(".getValues should work", function () {
|
|
969
1019
|
reference.insertRange(0, [target, nodeTarget]);
|
|
970
|
-
expect(reference.getValues()).to.deep.equal([
|
|
1020
|
+
expect(reference.getValues()).to.deep.equal(["/target", "/nodeTarget"]);
|
|
971
1021
|
});
|
|
972
1022
|
});
|
|
973
1023
|
});
|
|
974
|
-
describe(
|
|
1024
|
+
describe("Changeset tests", function () {
|
|
975
1025
|
var root;
|
|
976
1026
|
beforeEach(function () {
|
|
977
|
-
root = PropertyFactory.create(
|
|
978
|
-
root.insert(
|
|
979
|
-
root.insert(
|
|
980
|
-
root.insert(
|
|
981
|
-
root.insert(
|
|
982
|
-
root.insert(
|
|
983
|
-
root.insert(
|
|
984
|
-
root.insert(
|
|
985
|
-
root.insert(
|
|
1027
|
+
root = PropertyFactory.create("NodeProperty");
|
|
1028
|
+
root.insert("template", PropertyFactory.create("autodesk.test:referencePropertyTest-1.0.0"));
|
|
1029
|
+
root.insert("reference", PropertyFactory.create("Reference<String>"));
|
|
1030
|
+
root.insert("referenceMap", PropertyFactory.create("Reference<String>", "map"));
|
|
1031
|
+
root.insert("referenceArray", PropertyFactory.create("Reference<String>", "array"));
|
|
1032
|
+
root.insert("reference_anon", PropertyFactory.create("Reference"));
|
|
1033
|
+
root.insert("referenceMap_anon", PropertyFactory.create("Reference", "map"));
|
|
1034
|
+
root.insert("referenceArray_anon", PropertyFactory.create("Reference", "array"));
|
|
1035
|
+
root.insert("target", PropertyFactory.create("String"));
|
|
986
1036
|
var target = root._properties.target;
|
|
987
1037
|
root._properties.reference.set(target);
|
|
988
|
-
root._properties.referenceMap.set(
|
|
1038
|
+
root._properties.referenceMap.set("entry", target);
|
|
989
1039
|
root._properties.referenceArray.push(target);
|
|
990
1040
|
root._properties.reference_anon.set(target);
|
|
991
|
-
root._properties.referenceMap_anon.set(
|
|
1041
|
+
root._properties.referenceMap_anon.set("entry", target);
|
|
992
1042
|
root._properties.referenceArray_anon.push(target);
|
|
993
1043
|
root._properties.template.ref.set(target);
|
|
994
|
-
root._properties.template.refMap.set(
|
|
1044
|
+
root._properties.template.refMap.set("entry", target);
|
|
995
1045
|
root._properties.template.refArray.push(target);
|
|
996
1046
|
root._properties.template.ref_anon.set(target);
|
|
997
|
-
root._properties.template.refMap_anon.set(
|
|
1047
|
+
root._properties.template.refMap_anon.set("entry", target);
|
|
998
1048
|
root._properties.template.refArray_anon.push(target);
|
|
999
1049
|
});
|
|
1000
|
-
it(
|
|
1001
|
-
var root2 = PropertyFactory.create(
|
|
1050
|
+
it("serialize and deserialize should work", function () {
|
|
1051
|
+
var root2 = PropertyFactory.create("NodeProperty");
|
|
1002
1052
|
root2.deserialize(root.serialize());
|
|
1003
|
-
expect(root.serialize({
|
|
1053
|
+
expect(root.serialize({ dirtyOnly: false })).to.deep.equal(root.serialize({ dirtyOnly: false }));
|
|
1004
1054
|
var root2Target = root2._properties.target;
|
|
1005
1055
|
expect(root2._properties.reference.get()).to.deep.equal(root2Target);
|
|
1006
|
-
expect(root2._properties.referenceMap.get(
|
|
1056
|
+
expect(root2._properties.referenceMap.get("entry")).to.deep.equal(root2Target);
|
|
1007
1057
|
expect(root2._properties.referenceArray.get()).to.deep.equal(root2Target);
|
|
1008
1058
|
expect(root2._properties.reference_anon.get()).to.deep.equal(root2Target);
|
|
1009
|
-
expect(root2._properties.referenceMap_anon.get(
|
|
1059
|
+
expect(root2._properties.referenceMap_anon.get("entry")).to.deep.equal(root2Target);
|
|
1010
1060
|
expect(root2._properties.referenceArray_anon.get()).to.deep.equal(root2Target);
|
|
1011
1061
|
expect(root2._properties.template.ref.get()).to.deep.equal(root2Target);
|
|
1012
|
-
expect(root2._properties.template.refMap.get(
|
|
1062
|
+
expect(root2._properties.template.refMap.get("entry")).to.deep.equal(root2Target);
|
|
1013
1063
|
expect(root2._properties.template.refArray.get()).to.deep.equal(root2Target);
|
|
1014
1064
|
expect(root2._properties.template.ref_anon.get()).to.deep.equal(root2Target);
|
|
1015
|
-
expect(root2._properties.template.refMap_anon.get(
|
|
1065
|
+
expect(root2._properties.template.refMap_anon.get("entry")).to.deep.equal(root2Target);
|
|
1016
1066
|
expect(root2._properties.template.refArray_anon.get()).to.deep.equal(root2Target);
|
|
1017
1067
|
});
|
|
1018
|
-
it(
|
|
1019
|
-
var CS1 = root.serialize({
|
|
1068
|
+
it("squash should work", function () {
|
|
1069
|
+
var CS1 = root.serialize({ dirtyOnly: false });
|
|
1020
1070
|
root.cleanDirty();
|
|
1021
|
-
root.insert(
|
|
1071
|
+
root.insert("target2", PropertyFactory.create("String"));
|
|
1022
1072
|
var target2 = root._properties.target2;
|
|
1023
1073
|
// Set everything to the new target
|
|
1024
1074
|
root._properties.reference.set(target2);
|
|
1025
|
-
root._properties.referenceMap.set(
|
|
1075
|
+
root._properties.referenceMap.set("entry", target2);
|
|
1026
1076
|
root._properties.referenceArray.set(0, target2);
|
|
1027
1077
|
root._properties.referenceArray.push(target2);
|
|
1028
1078
|
root._properties.reference_anon.set(target2);
|
|
1029
|
-
root._properties.referenceMap_anon.set(
|
|
1079
|
+
root._properties.referenceMap_anon.set("entry", target2);
|
|
1030
1080
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1031
1081
|
root._properties.referenceArray_anon.push(target2);
|
|
1032
1082
|
root._properties.template.ref.set(target2);
|
|
1033
|
-
root._properties.template.refMap.set(
|
|
1083
|
+
root._properties.template.refMap.set("entry", target2);
|
|
1034
1084
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1035
1085
|
root._properties.template.refArray.push(target2);
|
|
1036
1086
|
root._properties.template.ref_anon.set(target2);
|
|
1037
|
-
root._properties.template.refMap_anon.set(
|
|
1087
|
+
root._properties.template.refMap_anon.set("entry", target2);
|
|
1038
1088
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1039
1089
|
root._properties.template.refArray_anon.push(target2);
|
|
1040
|
-
var CS2 = root.serialize({
|
|
1090
|
+
var CS2 = root.serialize({ dirtyOnly: true });
|
|
1041
1091
|
var squashed = new ChangeSet(CS1);
|
|
1042
1092
|
squashed.applyChangeSet(CS2);
|
|
1043
|
-
expect(squashed.getSerializedChangeSet()).to.deep.equal(root.serialize({
|
|
1093
|
+
expect(squashed.getSerializedChangeSet()).to.deep.equal(root.serialize({ dirtyOnly: false }));
|
|
1044
1094
|
});
|
|
1045
|
-
it(
|
|
1095
|
+
it("rebase should work", function () {
|
|
1046
1096
|
root.cleanDirty();
|
|
1047
|
-
root.insert(
|
|
1097
|
+
root.insert("target2", PropertyFactory.create("String"));
|
|
1048
1098
|
root.cleanDirty();
|
|
1049
1099
|
var target2 = root._properties.target2;
|
|
1050
1100
|
// Set everything to the new target
|
|
1051
1101
|
root._properties.reference.set(target2);
|
|
1052
|
-
root._properties.referenceMap.setValue(
|
|
1102
|
+
root._properties.referenceMap.setValue("entry", target2);
|
|
1053
1103
|
root._properties.reference_anon.set(target2);
|
|
1054
|
-
root._properties.referenceMap_anon.setValue(
|
|
1104
|
+
root._properties.referenceMap_anon.setValue("entry", target2);
|
|
1055
1105
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1056
1106
|
root._properties.template.ref.set(target2);
|
|
1057
|
-
root._properties.template.refMap.setValue(
|
|
1107
|
+
root._properties.template.refMap.setValue("entry", target2);
|
|
1058
1108
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1059
1109
|
root._properties.template.ref_anon.set(target2);
|
|
1060
|
-
root._properties.template.refMap_anon.setValue(
|
|
1110
|
+
root._properties.template.refMap_anon.setValue("entry", target2);
|
|
1061
1111
|
root._properties.referenceArray_anon.set(0, target2);
|
|
1062
|
-
var CS1 = root.serialize({
|
|
1063
|
-
var CS2 = root.serialize({
|
|
1112
|
+
var CS1 = root.serialize({ dirtyOnly: true });
|
|
1113
|
+
var CS2 = root.serialize({ dirtyOnly: true });
|
|
1064
1114
|
var rebased = new ChangeSet(CS1);
|
|
1065
1115
|
var conflicts = [];
|
|
1066
1116
|
rebased._rebaseChangeSet(CS2, conflicts);
|
|
@@ -1074,8 +1124,8 @@ describe('Reference Properties', function () {
|
|
|
1074
1124
|
root._properties.referenceArray_anon.push(target2);
|
|
1075
1125
|
root._properties.template.refArray.push(target2);
|
|
1076
1126
|
root._properties.template.refArray_anon.push(target2);
|
|
1077
|
-
CS1 = root.serialize({
|
|
1078
|
-
CS2 = root.serialize({
|
|
1127
|
+
CS1 = root.serialize({ dirtyOnly: true });
|
|
1128
|
+
CS2 = root.serialize({ dirtyOnly: true });
|
|
1079
1129
|
rebased = new ChangeSet(CS1);
|
|
1080
1130
|
conflicts = [];
|
|
1081
1131
|
rebased._rebaseChangeSet(CS2, conflicts);
|