@fluid-experimental/property-properties 2.100.0 → 2.101.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/dist/test/properties/arrayProperty.spec.js +11 -12
- package/dist/test/properties/arrayProperty.spec.js.map +1 -1
- package/dist/test/properties/baseProperty.spec.js +4 -1
- package/dist/test/properties/baseProperty.spec.js.map +1 -1
- package/dist/test/properties/containerProperty.spec.js +1 -1
- package/dist/test/properties/containerProperty.spec.js.map +1 -1
- package/dist/test/properties/customArrayProperty.spec.js +2 -2
- package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64ArrayProperty.spec.js +4 -4
- package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64Property.spec.js +2 -2
- package/dist/test/properties/int64Property.spec.js.map +1 -1
- package/dist/test/properties/isLeafNode.spec.js +1 -7
- package/dist/test/properties/isLeafNode.spec.js.map +1 -1
- package/dist/test/properties/namedNodeProperty.spec.js +1 -2
- package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
- package/dist/test/properties/nodeProperty.spec.js +1 -1
- package/dist/test/properties/nodeProperty.spec.js.map +1 -1
- package/dist/test/properties/stringProperty.spec.js +6 -5
- package/dist/test/properties/stringProperty.spec.js.map +1 -1
- package/dist/test/properties/valueMapProperty.spec.js +8 -3
- package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
- package/dist/test/properties/valueProperty.spec.js +5 -1
- package/dist/test/properties/valueProperty.spec.js.map +1 -1
- package/dist/test/propertyFactory.spec.js +15 -10
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/utils.spec.js +13 -7
- package/dist/test/utils.spec.js.map +1 -1
- package/package.json +6 -5
|
@@ -142,7 +142,7 @@ describe("StringProperty", function () {
|
|
|
142
142
|
expect(testString.getValue()).to.equal("ABBAAAA");
|
|
143
143
|
});
|
|
144
144
|
it("Should report dirtiness correctly when introducing a modification in certain order", function () {
|
|
145
|
-
testString = PropertyFactory.create("String");
|
|
145
|
+
var testString = PropertyFactory.create("String");
|
|
146
146
|
let newValue = "test";
|
|
147
147
|
const node = PropertyFactory.create("NodeProperty");
|
|
148
148
|
node.insert("stringProp", testString);
|
|
@@ -574,10 +574,11 @@ describe("StringProperty", function () {
|
|
|
574
574
|
if (in_isCollection && changeSet2.modify) {
|
|
575
575
|
changeSet2 = changeSet2.modify;
|
|
576
576
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
577
|
+
var combinedSerialized = combinedChangeSet.getSerializedChangeSet();
|
|
578
|
+
combinedChangeSet =
|
|
579
|
+
in_isCollection && combinedSerialized.insert
|
|
580
|
+
? combinedSerialized.insert
|
|
581
|
+
: combinedSerialized;
|
|
581
582
|
in_options.checkResult(conflicts, changeSet2, combinedChangeSet);
|
|
582
583
|
}
|
|
583
584
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/stringProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview In this file, we will test the string property object described in /src/properties/stringProperty.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\n\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst deepCopy = _.cloneDeep;\n\ndescribe(\"StringProperty\", function () {\n\tvar changeSetWithEntries, removalChangeSet;\n\tvar myStringProp;\n\n\tbefore(function () {\n\t\t// Register a template with a set property for the tests\n\t\tvar SimpleStringTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tPropertyFactory._reregister(SimpleStringTestPropertyTemplate);\n\n\t\tmyStringProp = PropertyFactory.create(\"String\");\n\t});\n\n\t// Inserts a char into the string\n\tvar insertText = function (stringProp) {\n\t\tstringProp.insertRange(0, \"x\");\n\t};\n\n\t// Removes the first char from the string\n\tvar removeText = function (stringProp) {\n\t\tstringProp.removeRange(0, 1);\n\t};\n\n\t// Modifies the text\n\tvar modifyText = function (stringProp) {\n\t\tstringProp.setRange(0, \"y\");\n\t};\n\n\t// set the text to a given string\n\tvar setText = function (stringProp) {\n\t\tstringProp.value = \"s\";\n\t};\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(myStringProp.value).to.equal(\"\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"\");\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"\");\n\t\t});\n\n\t\tit(\"should be possible to insert into the string\", function () {\n\t\t\t// Text insertion\n\t\t\tmyStringProp.insertRange(0, \"abef\");\n\t\t\texpect(myStringProp.value).to.equal(\"abef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abef\");\n\t\t\tmyStringProp.insertRange(2, \"cd\");\n\t\t\texpect(myStringProp.value).to.equal(\"abcdef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcdef\");\n\t\t\tchangeSetWithEntries = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"abcdef\");\n\t\t\tvar CS = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(CS.insert && CS.insert[0] && CS.insert[0][1] === \"abcdef\").to.be.ok;\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmyStringProp.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\tmyStringProp.removeRange(3, 2);\n\t\t\texpect(myStringProp.value).to.equal(\"abcf\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcf\");\n\t\t\tremovalChangeSet = myStringProp._serialize(\n\t\t\t\ttrue,\n\t\t\t\tfalse,\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t);\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(1);\n\t\t\texpect(removalChangeSet.remove[0]).to.deep.equal([3, 2]);\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"String\");\n\t\t\tvar deserializedChanges1 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithEntries);\n\n\t\t\tvar deserializedChanges2 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(ChangeSet.isEmptyChangeSet(deserializedChanges2)).to.be.ok;\n\n\t\t\tvar deserializedChanges3 = deserializedNode.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal({ remove: [[0, 6]] });\n\n\t\t\tdeserializedNode.deserialize(changeSetWithEntries); // refill\n\t\t\tvar deserializedChanges4 = deserializedNode.deserialize(\"\");\n\t\t\texpect(deserializedChanges4).to.deep.equal(\"\");\n\t\t});\n\n\t\tit(\"inserting at a bad position should throw an exception\", function () {\n\t\t\texpect(function () {\n\t\t\t\tmyStringProp.insertRange(2242, \"x\");\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"A\";\n\t\t\ttestString.insertRange(0, \"B\");\n\t\t\texpect(testString.value).to.equal(\"BA\");\n\t\t\texpect(testString.getValue()).to.equal(\"BA\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"BA\");\n\t\t});\n\n\t\tit(\"remove after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.value).to.equal(\"AD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AD\");\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.setRange(1, \"XY\");\n\t\t\texpect(testString.value).to.equal(\"AXYD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AXYD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AXYD\");\n\t\t});\n\n\t\tit(\"set must stay a set\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"ABCD\");\n\t\t\ttestString.cleanDirty();\n\t\t\ttestString.value = \"XY\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XY\");\n\t\t\ttestString.insertRange(2, \"Z\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XYZ\");\n\t\t});\n\n\t\tit(\".get should return a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.get(2)).to.equal(\"C\");\n\t\t});\n\n\t\tit(\".getFullTypeid should return a string of the typeid\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getFullTypeid()).to.equal(\"String\");\n\t\t});\n\n\t\tit(\".insert should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insert(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\"Should report dirtiness correctly when introducing a modification in certain order\", function () {\n\t\t\ttestString = PropertyFactory.create(\"String\");\n\t\t\tlet newValue = \"test\";\n\t\t\tconst node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnode.insert(\"stringProp\", testString);\n\t\t\t// Ignore insert changeset\n\t\t\tnode.cleanDirty();\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\tnode.cleanDirty();\n\t\t\tlet oldValue = newValue;\n\t\t\tnewValue = \"test1\";\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"${oldValue}\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\texpect(Object.keys(node._serialize(true, false, 2))).to.have.length(1);\n\t\t});\n\n\t\tit(\".insertRange should also accept an array with a single string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"BC\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should join an array with more than one string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"B\", \"C\", \"D\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCDAAAA\");\n\t\t});\n\n\t\tit(\".push should add a string to the end of the original string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.push(\"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAABB\");\n\t\t\texpect(testString.push(\"CC\")).to.equal(9);\n\t\t});\n\t});\n\n\tdescribe(\"inherited API methods\", function () {\n\t\tit(\".clear should remove all values from the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAA\");\n\t\t\ttestString.clear();\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getEntriesReadOnly()).to.equal(\"AAAAA\");\n\t\t});\n\n\t\tit(\".getIds should return an array of string ids\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getIds()).to.deep.equal([\"0\", \"1\", \"2\", \"3\", \"4\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getLength()).to.equal(0);\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getLength()).to.equal(5);\n\t\t});\n\n\t\tit(\".pop should remove the last letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.pop();\n\t\t\texpect(testString.getValue()).to.equal(\"ABCD\");\n\t\t});\n\n\t\tit(\".remove should remove a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.remove(2);\n\t\t\texpect(testString.getValue()).to.equal(\"ABDE\");\n\t\t\texpect(testString.remove(1)).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"removeRange should remove a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.getValue()).to.equal(\"ADEFG\");\n\t\t\texpect(testString.removeRange(2, 3)).to.equal(\"EFG\");\n\t\t});\n\n\t\tit('@regression removeRange should clear a value longer than the special value \"setAsLiteral\"', function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAAAAAAAAAAAAAAA\");\n\t\t\ttestString.removeRange(0, testString.getValue().length);\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\"set should set a single character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.set(3, \"x\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxEFG\");\n\t\t});\n\n\t\tit(\"set should not allow setting more than one character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(0, \"ab\");\n\t\t\t}).to.throw(MSG.STRING_SET_ONE_CHAR);\n\t\t});\n\n\t\tit(\"set should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(\"test\", \"a\");\n\t\t\t}).to.throw(MSG.STRING_SET_NEEDS_INDEX);\n\t\t});\n\n\t\tit(\"setRange should replace a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.setRange(3, \"xx\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxxFG\");\n\t\t});\n\n\t\tit(\"setRange should throw if trying to set out of range\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(5, \"xxxxxx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw();\n\t\t});\n\n\t\tit(\"setRange should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(\"test\", \"xx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\"shift should remove a single letter at the beginning of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.shift();\n\t\t\texpect(testString.getValue()).to.equal(\"BCDEFG\");\n\t\t\texpect(testString.shift()).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"unshift should add letters at the beginning of a string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABC\");\n\t\t\ttestString.unshift(\"DE\");\n\t\t\texpect(testString.getValue()).to.equal(\"DEABC\");\n\t\t\texpect(testString.unshift(\"FGH\")).to.equal(8);\n\t\t});\n\t});\n\n\tdescribe(\"change set specification should be met\", function () {\n\t\tit(\"Should handle inserts correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.insert(2, \"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[2, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle push correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.push(\"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[4, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle modifies correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.setRange(1, \"_x_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tmodify: [[1, \"_x_\"]],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t// Helper function to test the squashing for different containers\n\t\tvar innerTestChangeSetSquashing = function (\n\t\t\tio_testProperty,\n\t\t\tio_stringProperty,\n\t\t\tio_initialChangeset,\n\t\t\tin_options,\n\t\t\tin_collection,\n\t\t) {\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\tio_testProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](io_stringProperty);\n\t\t\t\tvar changes = io_testProperty.serialize({ dirtyOnly: true });\n\t\t\t\tio_testProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tvar SC = squashedChangeset.getSerializedChangeSet();\n\t\t\t\tif (in_collection && SC.modify) {\n\t\t\t\t\tSC = SC.modify;\n\t\t\t\t}\n\t\t\t\tin_options.post(SC);\n\t\t\t}\n\t\t\tio_initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t};\n\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tvar testProperty = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\t);\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInMapProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInMapProperty);\n\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty._properties.stringProperty);\n\t\t\t\tin_options.pre(stringInNodeProperty);\n\t\t\t\tin_options.pre(stringInMapProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize());\n\t\t\tinitialChangeset.setIsNormalized(true);\n\t\t\tvar initialChangesetNode = new ChangeSet(nodeTestProperty.serialize());\n\t\t\tinitialChangesetNode.setIsNormalized(true);\n\t\t\tvar initialChangesetMap = new ChangeSet(mapTestProperty.serialize());\n\t\t\tinitialChangesetMap.setIsNormalized(true);\n\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\ttestProperty,\n\t\t\t\ttestProperty._properties.stringProperty,\n\t\t\t\tinitialChangeset,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tnodeTestProperty,\n\t\t\t\tstringInNodeProperty,\n\t\t\t\tinitialChangesetNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tmapTestProperty,\n\t\t\t\tstringInMapProperty,\n\t\t\t\tinitialChangesetMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tif (!initialChangeset.getSerializedChangeSet().String) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(testProperty.serialize().String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar initialChangesetString =\n\t\t\t\t\tinitialChangeset.getSerializedChangeSet().String.stringProperty;\n\t\t\t\tif (!_.isString(initialChangesetString)) {\n\t\t\t\t\tinitialChangesetString = initialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(initialChangesetString).to.deep.equal(\n\t\t\t\t\ttestProperty.serialize().String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetNode.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(nodeTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar nodeInitialChangesetString =\n\t\t\t\t\tinitialChangesetNode.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(nodeInitialChangesetString)) {\n\t\t\t\t\tnodeInitialChangesetString = nodeInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(nodeInitialChangesetString).to.deep.equal(\n\t\t\t\t\tnodeTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetMap.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(mapTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar mapInitialChangesetString =\n\t\t\t\t\tinitialChangesetMap.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(mapInitialChangesetString)) {\n\t\t\t\t\tmapInitialChangesetString = mapInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(mapInitialChangesetString).to.deep.equal(\n\t\t\t\t\tmapTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({ callbacks: [insertText, insertText, insertText] });\n\t\t});\n\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, insertText, removeText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for mixed modifies and inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, insertText, modifyText],\n\t\t\t});\n\t\t});\n\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [modifyText, modifyText],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [modifyText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"y\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"set after pre-insert and insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, insertText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"xs\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"ys\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify, set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Rebasing\", function () {\n\t\tvar createPropertyForRebaseTestByTemplate = function () {\n\t\t\treturn PropertyFactory.create(\"autodesk.tests:SimpleStringTestProperty-1.0.0\");\n\t\t};\n\n\t\tvar createNodePropertyForRebase = function () {\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn nodeTestProperty;\n\t\t};\n\n\t\tvar createMapPropertyForRebase = function () {\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn mapTestProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromNode = function (in_testProperty) {\n\t\t\treturn in_testProperty._properties.stringProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromMap = function (in_testProperty) {\n\t\t\treturn in_testProperty.get(\"stringProperty\");\n\t\t};\n\n\t\tvar testRebasingInner = function (\n\t\t\tin_creator,\n\t\t\tin_getInnerProperty,\n\t\t\tin_options,\n\t\t\tin_isCollection,\n\t\t) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = in_creator();\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = in_creator();\n\t\t\tbaseProperty2.deserialize(baseProperty1._serialize(false));\n\t\t\tvar baseProperty3 = in_creator();\n\t\t\tbaseProperty3.deserialize(baseProperty1._serialize(false));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1._serialize(false);\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty2));\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1._serialize(true));\n\t\t\tvar changeSet2 = baseProperty2._serialize(true);\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.setIsNormalized(true);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3._serialize(false);\n\t\t\t\tif (in_isCollection && finalChangeSet.insert) {\n\t\t\t\t\tfinalChangeSet = finalChangeSet.insert;\n\t\t\t\t}\n\n\t\t\t\tvar combinedSerialized = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tif (in_isCollection && combinedSerialized.insert) {\n\t\t\t\t\tcombinedSerialized = combinedSerialized.insert;\n\t\t\t\t}\n\n\t\t\t\tif (!combinedSerialized.String) {\n\t\t\t\t\t// empty changeset\n\t\t\t\t\texpect(finalChangeSet.String.stringProperty).to.equal(\"\");\n\t\t\t\t} else {\n\t\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\t\tvar combinedChangeSetString = combinedSerialized.String.stringProperty;\n\t\t\t\t\tif (!_.isString(combinedChangeSetString)) {\n\t\t\t\t\t\tcombinedChangeSetString = combinedChangeSetString.insert[0][1];\n\t\t\t\t\t}\n\t\t\t\t\texpect(combinedChangeSetString).to.deep.equal(finalChangeSet.String.stringProperty);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tif (in_isCollection && changeSet2.modify) {\n\t\t\t\t\tchangeSet2 = changeSet2.modify;\n\t\t\t\t}\n\t\t\t\tcombinedChangeSet = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tif (in_isCollection && combinedChangeSet.insert) {\n\t\t\t\t\tcombinedChangeSet = combinedChangeSet.insert;\n\t\t\t\t}\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tvar testRebasing = function (in_options) {\n\t\t\ttestRebasingInner(\n\t\t\t\tcreatePropertyForRebaseTestByTemplate,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateNodePropertyForRebase,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateMapPropertyForRebase,\n\t\t\t\tgetStringPropertyFromMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tinsertText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.removeRange(1, 1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.removeRange(0, 1);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: removeText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: removeText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two independent modifies should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insertRange(0, \"ab\");\n\t\t\t\t},\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.setRange(1, \"z\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\t// TODO: test with the same value\n\t\tit(\"with two conflicting modifies should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (stringProp) {\n\t\t\t\t\tstringProp.setRange(0, \"j\");\n\t\t\t\t},\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(changeSet.String.stringProperty.modify[0][1]).to.equal(\"y\");\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove + insert followed by modify should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting remove and insert should keep the insert and move it to the correct position\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 5);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"t\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(0);\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"t\"]] } },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with touching remove and insert should not report conflict and keep them\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 3);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"b\");\n\t\t\t\t\tp.insertRange(2, \"a\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, rebasedCS2, combinedChangeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(0);\n\t\t\t\t\texpect(rebasedCS2).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"ab\"]] } },\n\t\t\t\t\t});\n\t\t\t\t\texpect(combinedChangeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: \"01ab56\" },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting set and insert should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: setText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting insert and set should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: setText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should correctly handle boundary cases\", function () {\n\t\t\tvar testChangeSet = function (in_CS, in_CS2) {\n\t\t\t\tvar root = PropertyFactory.create(\"NodeProperty\");\n\t\t\t\tvar initialString = PropertyFactory.create(\"String\");\n\t\t\t\troot.insert(\"str\", initialString);\n\t\t\t\tinitialString.value = \"AAAAAA\";\n\t\t\t\troot.applyChangeSet(in_CS);\n\t\t\t\tif (in_CS2) {\n\t\t\t\t\troot.applyChangeSet(in_CS2);\n\t\t\t\t}\n\t\t\t\treturn initialString.value;\n\t\t\t};\n\n\t\t\tvar CS1 = new ChangeSet({ modify: { String: { str: { remove: [[2, 2]] } } } });\n\t\t\tvar CS2 = new ChangeSet({\n\t\t\t\tmodify: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tstr: {\n\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t[2, \"-\"],\n\t\t\t\t\t\t\t\t[4, \"-\"],\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet())).to.equal(\"AAAA\");\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet())).to.equal(\"AA-AA-AA\");\n\n\t\t\tvar conflicts = [];\n\t\t\tvar rebasedCS1 = CS2._rebaseChangeSet(deepCopy(CS1.getSerializedChangeSet()), conflicts);\n\t\t\tvar rebasedCS2 = CS1._rebaseChangeSet(deepCopy(CS2.getSerializedChangeSet()), conflicts);\n\n\t\t\texpect(rebasedCS1.modify.String.str.remove.length).to.equal(1);\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet(), rebasedCS1)).to.equal(\"AA--AA\");\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet(), rebasedCS2)).to.equal(\"AA--AA\");\n\t\t});\n\t});\n\n\tit('field \"length\" in schema should be ignored', function () {\n\t\tvar SchemaStringWithLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: 4 }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n\n\tit.skip('@bugfix field \"length\" not a number in schema should be ignored', function () {\n\t\tvar SchemaStringWithStringLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithStringLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: \"4\" }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithStringLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithStringLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"stringProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/stringProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview In this file, we will test the string property object described in /src/properties/stringProperty.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\n\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst deepCopy = _.cloneDeep;\n\ndescribe(\"StringProperty\", function () {\n\tvar changeSetWithEntries, removalChangeSet;\n\tvar myStringProp;\n\n\tbefore(function () {\n\t\t// Register a template with a set property for the tests\n\t\tvar SimpleStringTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tPropertyFactory._reregister(SimpleStringTestPropertyTemplate);\n\n\t\tmyStringProp = PropertyFactory.create(\"String\");\n\t});\n\n\t// Inserts a char into the string\n\tvar insertText = function (stringProp) {\n\t\tstringProp.insertRange(0, \"x\");\n\t};\n\n\t// Removes the first char from the string\n\tvar removeText = function (stringProp) {\n\t\tstringProp.removeRange(0, 1);\n\t};\n\n\t// Modifies the text\n\tvar modifyText = function (stringProp) {\n\t\tstringProp.setRange(0, \"y\");\n\t};\n\n\t// set the text to a given string\n\tvar setText = function (stringProp) {\n\t\tstringProp.value = \"s\";\n\t};\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(myStringProp.value).to.equal(\"\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"\");\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"\");\n\t\t});\n\n\t\tit(\"should be possible to insert into the string\", function () {\n\t\t\t// Text insertion\n\t\t\tmyStringProp.insertRange(0, \"abef\");\n\t\t\texpect(myStringProp.value).to.equal(\"abef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abef\");\n\t\t\tmyStringProp.insertRange(2, \"cd\");\n\t\t\texpect(myStringProp.value).to.equal(\"abcdef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcdef\");\n\t\t\tchangeSetWithEntries = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"abcdef\");\n\t\t\tvar CS = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(CS.insert && CS.insert[0] && CS.insert[0][1] === \"abcdef\").to.be.ok;\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmyStringProp.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\tmyStringProp.removeRange(3, 2);\n\t\t\texpect(myStringProp.value).to.equal(\"abcf\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcf\");\n\t\t\tremovalChangeSet = myStringProp._serialize(\n\t\t\t\ttrue,\n\t\t\t\tfalse,\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t);\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(1);\n\t\t\texpect(removalChangeSet.remove[0]).to.deep.equal([3, 2]);\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"String\");\n\t\t\tvar deserializedChanges1 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithEntries);\n\n\t\t\tvar deserializedChanges2 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(ChangeSet.isEmptyChangeSet(deserializedChanges2)).to.be.ok;\n\n\t\t\tvar deserializedChanges3 = deserializedNode.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal({ remove: [[0, 6]] });\n\n\t\t\tdeserializedNode.deserialize(changeSetWithEntries); // refill\n\t\t\tvar deserializedChanges4 = deserializedNode.deserialize(\"\");\n\t\t\texpect(deserializedChanges4).to.deep.equal(\"\");\n\t\t});\n\n\t\tit(\"inserting at a bad position should throw an exception\", function () {\n\t\t\texpect(function () {\n\t\t\t\tmyStringProp.insertRange(2242, \"x\");\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"A\";\n\t\t\ttestString.insertRange(0, \"B\");\n\t\t\texpect(testString.value).to.equal(\"BA\");\n\t\t\texpect(testString.getValue()).to.equal(\"BA\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"BA\");\n\t\t});\n\n\t\tit(\"remove after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.value).to.equal(\"AD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AD\");\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.setRange(1, \"XY\");\n\t\t\texpect(testString.value).to.equal(\"AXYD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AXYD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AXYD\");\n\t\t});\n\n\t\tit(\"set must stay a set\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"ABCD\");\n\t\t\ttestString.cleanDirty();\n\t\t\ttestString.value = \"XY\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XY\");\n\t\t\ttestString.insertRange(2, \"Z\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XYZ\");\n\t\t});\n\n\t\tit(\".get should return a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.get(2)).to.equal(\"C\");\n\t\t});\n\n\t\tit(\".getFullTypeid should return a string of the typeid\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getFullTypeid()).to.equal(\"String\");\n\t\t});\n\n\t\tit(\".insert should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insert(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\"Should report dirtiness correctly when introducing a modification in certain order\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\tlet newValue = \"test\";\n\t\t\tconst node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnode.insert(\"stringProp\", testString);\n\t\t\t// Ignore insert changeset\n\t\t\tnode.cleanDirty();\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\tnode.cleanDirty();\n\t\t\tlet oldValue = newValue;\n\t\t\tnewValue = \"test1\";\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"${oldValue}\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\texpect(Object.keys(node._serialize(true, false, 2))).to.have.length(1);\n\t\t});\n\n\t\tit(\".insertRange should also accept an array with a single string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"BC\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should join an array with more than one string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"B\", \"C\", \"D\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCDAAAA\");\n\t\t});\n\n\t\tit(\".push should add a string to the end of the original string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.push(\"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAABB\");\n\t\t\texpect(testString.push(\"CC\")).to.equal(9);\n\t\t});\n\t});\n\n\tdescribe(\"inherited API methods\", function () {\n\t\tit(\".clear should remove all values from the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAA\");\n\t\t\ttestString.clear();\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getEntriesReadOnly()).to.equal(\"AAAAA\");\n\t\t});\n\n\t\tit(\".getIds should return an array of string ids\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getIds()).to.deep.equal([\"0\", \"1\", \"2\", \"3\", \"4\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getLength()).to.equal(0);\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getLength()).to.equal(5);\n\t\t});\n\n\t\tit(\".pop should remove the last letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.pop();\n\t\t\texpect(testString.getValue()).to.equal(\"ABCD\");\n\t\t});\n\n\t\tit(\".remove should remove a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.remove(2);\n\t\t\texpect(testString.getValue()).to.equal(\"ABDE\");\n\t\t\texpect(testString.remove(1)).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"removeRange should remove a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.getValue()).to.equal(\"ADEFG\");\n\t\t\texpect(testString.removeRange(2, 3)).to.equal(\"EFG\");\n\t\t});\n\n\t\tit('@regression removeRange should clear a value longer than the special value \"setAsLiteral\"', function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAAAAAAAAAAAAAAA\");\n\t\t\ttestString.removeRange(0, testString.getValue().length);\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\"set should set a single character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.set(3, \"x\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxEFG\");\n\t\t});\n\n\t\tit(\"set should not allow setting more than one character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(0, \"ab\");\n\t\t\t}).to.throw(MSG.STRING_SET_ONE_CHAR);\n\t\t});\n\n\t\tit(\"set should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(\"test\", \"a\");\n\t\t\t}).to.throw(MSG.STRING_SET_NEEDS_INDEX);\n\t\t});\n\n\t\tit(\"setRange should replace a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.setRange(3, \"xx\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxxFG\");\n\t\t});\n\n\t\tit(\"setRange should throw if trying to set out of range\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(5, \"xxxxxx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw();\n\t\t});\n\n\t\tit(\"setRange should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(\"test\", \"xx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\"shift should remove a single letter at the beginning of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.shift();\n\t\t\texpect(testString.getValue()).to.equal(\"BCDEFG\");\n\t\t\texpect(testString.shift()).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"unshift should add letters at the beginning of a string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABC\");\n\t\t\ttestString.unshift(\"DE\");\n\t\t\texpect(testString.getValue()).to.equal(\"DEABC\");\n\t\t\texpect(testString.unshift(\"FGH\")).to.equal(8);\n\t\t});\n\t});\n\n\tdescribe(\"change set specification should be met\", function () {\n\t\tit(\"Should handle inserts correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.insert(2, \"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[2, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle push correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.push(\"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[4, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle modifies correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.setRange(1, \"_x_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tmodify: [[1, \"_x_\"]],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t// Helper function to test the squashing for different containers\n\t\tvar innerTestChangeSetSquashing = function (\n\t\t\tio_testProperty,\n\t\t\tio_stringProperty,\n\t\t\tio_initialChangeset,\n\t\t\tin_options,\n\t\t\tin_collection,\n\t\t) {\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\tio_testProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](io_stringProperty);\n\t\t\t\tvar changes = io_testProperty.serialize({ dirtyOnly: true });\n\t\t\t\tio_testProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tvar SC = squashedChangeset.getSerializedChangeSet();\n\t\t\t\tif (in_collection && SC.modify) {\n\t\t\t\t\tSC = SC.modify;\n\t\t\t\t}\n\t\t\t\tin_options.post(SC);\n\t\t\t}\n\t\t\tio_initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t};\n\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tvar testProperty = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\t);\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInMapProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInMapProperty);\n\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty._properties.stringProperty);\n\t\t\t\tin_options.pre(stringInNodeProperty);\n\t\t\t\tin_options.pre(stringInMapProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize());\n\t\t\tinitialChangeset.setIsNormalized(true);\n\t\t\tvar initialChangesetNode = new ChangeSet(nodeTestProperty.serialize());\n\t\t\tinitialChangesetNode.setIsNormalized(true);\n\t\t\tvar initialChangesetMap = new ChangeSet(mapTestProperty.serialize());\n\t\t\tinitialChangesetMap.setIsNormalized(true);\n\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\ttestProperty,\n\t\t\t\ttestProperty._properties.stringProperty,\n\t\t\t\tinitialChangeset,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tnodeTestProperty,\n\t\t\t\tstringInNodeProperty,\n\t\t\t\tinitialChangesetNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tmapTestProperty,\n\t\t\t\tstringInMapProperty,\n\t\t\t\tinitialChangesetMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tif (!initialChangeset.getSerializedChangeSet().String) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(testProperty.serialize().String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar initialChangesetString =\n\t\t\t\t\tinitialChangeset.getSerializedChangeSet().String.stringProperty;\n\t\t\t\tif (!_.isString(initialChangesetString)) {\n\t\t\t\t\tinitialChangesetString = initialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(initialChangesetString).to.deep.equal(\n\t\t\t\t\ttestProperty.serialize().String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetNode.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(nodeTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar nodeInitialChangesetString =\n\t\t\t\t\tinitialChangesetNode.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(nodeInitialChangesetString)) {\n\t\t\t\t\tnodeInitialChangesetString = nodeInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(nodeInitialChangesetString).to.deep.equal(\n\t\t\t\t\tnodeTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetMap.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(mapTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar mapInitialChangesetString =\n\t\t\t\t\tinitialChangesetMap.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(mapInitialChangesetString)) {\n\t\t\t\t\tmapInitialChangesetString = mapInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(mapInitialChangesetString).to.deep.equal(\n\t\t\t\t\tmapTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({ callbacks: [insertText, insertText, insertText] });\n\t\t});\n\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, insertText, removeText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for mixed modifies and inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, insertText, modifyText],\n\t\t\t});\n\t\t});\n\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [modifyText, modifyText],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [modifyText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"y\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"set after pre-insert and insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, insertText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"xs\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"ys\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify, set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Rebasing\", function () {\n\t\tvar createPropertyForRebaseTestByTemplate = function () {\n\t\t\treturn PropertyFactory.create(\"autodesk.tests:SimpleStringTestProperty-1.0.0\");\n\t\t};\n\n\t\tvar createNodePropertyForRebase = function () {\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn nodeTestProperty;\n\t\t};\n\n\t\tvar createMapPropertyForRebase = function () {\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn mapTestProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromNode = function (in_testProperty) {\n\t\t\treturn in_testProperty._properties.stringProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromMap = function (in_testProperty) {\n\t\t\treturn in_testProperty.get(\"stringProperty\");\n\t\t};\n\n\t\tvar testRebasingInner = function (\n\t\t\tin_creator,\n\t\t\tin_getInnerProperty,\n\t\t\tin_options,\n\t\t\tin_isCollection,\n\t\t) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = in_creator();\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = in_creator();\n\t\t\tbaseProperty2.deserialize(baseProperty1._serialize(false));\n\t\t\tvar baseProperty3 = in_creator();\n\t\t\tbaseProperty3.deserialize(baseProperty1._serialize(false));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1._serialize(false);\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty2));\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1._serialize(true));\n\t\t\tvar changeSet2 = baseProperty2._serialize(true);\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.setIsNormalized(true);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3._serialize(false);\n\t\t\t\tif (in_isCollection && finalChangeSet.insert) {\n\t\t\t\t\tfinalChangeSet = finalChangeSet.insert;\n\t\t\t\t}\n\n\t\t\t\tvar combinedSerialized = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tif (in_isCollection && combinedSerialized.insert) {\n\t\t\t\t\tcombinedSerialized = combinedSerialized.insert;\n\t\t\t\t}\n\n\t\t\t\tif (!combinedSerialized.String) {\n\t\t\t\t\t// empty changeset\n\t\t\t\t\texpect(finalChangeSet.String.stringProperty).to.equal(\"\");\n\t\t\t\t} else {\n\t\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\t\tvar combinedChangeSetString = combinedSerialized.String.stringProperty;\n\t\t\t\t\tif (!_.isString(combinedChangeSetString)) {\n\t\t\t\t\t\tcombinedChangeSetString = combinedChangeSetString.insert[0][1];\n\t\t\t\t\t}\n\t\t\t\t\texpect(combinedChangeSetString).to.deep.equal(finalChangeSet.String.stringProperty);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tif (in_isCollection && changeSet2.modify) {\n\t\t\t\t\tchangeSet2 = changeSet2.modify;\n\t\t\t\t}\n\t\t\t\tvar combinedSerialized = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tcombinedChangeSet =\n\t\t\t\t\tin_isCollection && combinedSerialized.insert\n\t\t\t\t\t\t? combinedSerialized.insert\n\t\t\t\t\t\t: combinedSerialized;\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tvar testRebasing = function (in_options) {\n\t\t\ttestRebasingInner(\n\t\t\t\tcreatePropertyForRebaseTestByTemplate,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateNodePropertyForRebase,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateMapPropertyForRebase,\n\t\t\t\tgetStringPropertyFromMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tinsertText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.removeRange(1, 1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.removeRange(0, 1);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: removeText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: removeText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two independent modifies should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insertRange(0, \"ab\");\n\t\t\t\t},\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.setRange(1, \"z\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\t// TODO: test with the same value\n\t\tit(\"with two conflicting modifies should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (stringProp) {\n\t\t\t\t\tstringProp.setRange(0, \"j\");\n\t\t\t\t},\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(changeSet.String.stringProperty.modify[0][1]).to.equal(\"y\");\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove + insert followed by modify should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top2: modifyText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting remove and insert should keep the insert and move it to the correct position\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 5);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"t\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(0);\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"t\"]] } },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with touching remove and insert should not report conflict and keep them\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 3);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"b\");\n\t\t\t\t\tp.insertRange(2, \"a\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, rebasedCS2, combinedChangeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(0);\n\t\t\t\t\texpect(rebasedCS2).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"ab\"]] } },\n\t\t\t\t\t});\n\t\t\t\t\texpect(combinedChangeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: \"01ab56\" },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting set and insert should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: setText,\n\t\t\t\top2: insertText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting insert and set should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: setText,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should correctly handle boundary cases\", function () {\n\t\t\tvar testChangeSet = function (in_CS, in_CS2) {\n\t\t\t\tvar root = PropertyFactory.create(\"NodeProperty\");\n\t\t\t\tvar initialString = PropertyFactory.create(\"String\");\n\t\t\t\troot.insert(\"str\", initialString);\n\t\t\t\tinitialString.value = \"AAAAAA\";\n\t\t\t\troot.applyChangeSet(in_CS);\n\t\t\t\tif (in_CS2) {\n\t\t\t\t\troot.applyChangeSet(in_CS2);\n\t\t\t\t}\n\t\t\t\treturn initialString.value;\n\t\t\t};\n\n\t\t\tvar CS1 = new ChangeSet({ modify: { String: { str: { remove: [[2, 2]] } } } });\n\t\t\tvar CS2 = new ChangeSet({\n\t\t\t\tmodify: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tstr: {\n\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t[2, \"-\"],\n\t\t\t\t\t\t\t\t[4, \"-\"],\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet())).to.equal(\"AAAA\");\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet())).to.equal(\"AA-AA-AA\");\n\n\t\t\tvar conflicts = [];\n\t\t\tvar rebasedCS1 = CS2._rebaseChangeSet(deepCopy(CS1.getSerializedChangeSet()), conflicts);\n\t\t\tvar rebasedCS2 = CS1._rebaseChangeSet(deepCopy(CS2.getSerializedChangeSet()), conflicts);\n\n\t\t\texpect(rebasedCS1.modify.String.str.remove.length).to.equal(1);\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet(), rebasedCS1)).to.equal(\"AA--AA\");\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet(), rebasedCS2)).to.equal(\"AA--AA\");\n\t\t});\n\t});\n\n\tit('field \"length\" in schema should be ignored', function () {\n\t\tvar SchemaStringWithLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: 4 }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n\n\tit.skip('@bugfix field \"length\" not a number in schema should be ignored', function () {\n\t\tvar SchemaStringWithStringLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithStringLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: \"4\" }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithStringLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithStringLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n});\n"]}
|
|
@@ -142,7 +142,9 @@ describe("ValueMapProperty", function () {
|
|
|
142
142
|
value2: 2,
|
|
143
143
|
value3: 3,
|
|
144
144
|
});
|
|
145
|
-
expect(Uint32Map.getAsArray()).to.include(1
|
|
145
|
+
expect(Uint32Map.getAsArray()).to.include(1);
|
|
146
|
+
expect(Uint32Map.getAsArray()).to.include(2);
|
|
147
|
+
expect(Uint32Map.getAsArray()).to.include(3);
|
|
146
148
|
expect(Uint32Map.has("value1")).to.be.ok;
|
|
147
149
|
expect(Uint32Map.has("value2")).to.be.ok;
|
|
148
150
|
expect(Uint32Map.has("value3")).to.be.ok;
|
|
@@ -153,10 +155,13 @@ describe("ValueMapProperty", function () {
|
|
|
153
155
|
it("should be possible to remove entries", function () {
|
|
154
156
|
Uint32Map.remove("value1");
|
|
155
157
|
expect(Uint32Map.has("value1")).to.be.not.ok;
|
|
158
|
+
expect(Uint32Map.has("value2")).to.be.ok;
|
|
159
|
+
expect(Uint32Map.has("value3")).to.be.ok;
|
|
156
160
|
Uint32Map.remove("value2");
|
|
157
|
-
expect(Uint32Map.has("
|
|
161
|
+
expect(Uint32Map.has("value2")).to.be.not.ok;
|
|
162
|
+
expect(Uint32Map.has("value3")).to.be.ok;
|
|
158
163
|
Uint32Map.remove("value3");
|
|
159
|
-
expect(Uint32Map.has("
|
|
164
|
+
expect(Uint32Map.has("value3")).to.be.not.ok;
|
|
160
165
|
expect(ChangeSet.isEmptyChangeSet(Uint32Map.serialize())).to.be.ok;
|
|
161
166
|
});
|
|
162
167
|
it("a remove followed by an insert should become a modify", function () {
|