From 4dd1f53413263536599483f5c459b5d9c61b34d6 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Thu, 28 Apr 2016 21:56:00 +0200 Subject: [PATCH 1/5] squash --- README.md | 3 +- index.js | 1 + lib/squash.js | 56 +++++ test/squash_same_path.js | 530 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 588 insertions(+), 2 deletions(-) create mode 100644 lib/squash.js create mode 100644 test/squash_same_path.js diff --git a/README.md b/README.md index 2a8b18c..07cc6ac 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,7 @@ Because `buildRevertPatch + apply` offers more flexibility over `revert` it is p * use [pack/unpack](#patch-size) with the result of `buildRevertPatch` making it ideal for storage or transport * reverse a revert (and so on...) with `{reversible: true}` * [diff](#diff) between reverts -* merge multiple reverts into one -* rebase reverts +* concat, squash, rebase multiple reverts [↑](#json8-patch) diff --git a/index.js b/index.js index 0abf2d4..dca1b57 100644 --- a/index.js +++ b/index.js @@ -31,3 +31,4 @@ module.exports.unpack = require('./lib/unpack') // Utilities module.exports.concat = require('./lib/concat') +module.exports.squash = require('./lib/squash') diff --git a/lib/squash.js b/lib/squash.js new file mode 100644 index 0000000..fc50730 --- /dev/null +++ b/lib/squash.js @@ -0,0 +1,56 @@ +'use strict' + +function wasModified(patch, path) { + for (var i = 0; i < patch.length; i++) { + var op = patch[i] + if (op.path !== path) continue + if (op.op === 'add' || op.op === 'replace' || op.op === 'remove' || op.op === 'move' || op.op === 'copy') return true + } + return false +} + +module.exports = function squash(patch) { + var squashed = [] + + var push = true + + patch.forEach(function(op) { + // if current op overrides previous operations, remove them + if (['add', 'replace', 'remove', 'move', 'copy'].indexOf(op.op) !== -1) { + squashed.forEach(function(prev, idx) { + if (prev.op === 'test') return + if (prev.path === op.path) { // same path - FIXME children/parents ? + if (wasModified(squashed, op.path)) { + squashed[idx] = undefined + } + + // the path was created in the patch, the remove operation shouldn't be included + // example + // {"path": "/foo", "op": "add", "value": "foo"}, + // {"path": "/foo", "op": "remove"} + if (op.op === 'remove') { + push = false + } + // the path was created in the patch, replace op requires the target to exist + // example + // {"path": "/foo", "op": "add", "value": "foo"}, + // {"path": "/foo", "op": "replace", "value": "bar"} + else if (op.op === 'replace') { + // push = false + op = {"path": op.path, "op": "add", "value": op.value} + } + } + }) + } + + if (push) { + squashed.push(op) + } + }) + + var foo = [] + squashed.forEach(function(op) { + if (op !== undefined) foo.push(op) + }) + return foo +} diff --git a/test/squash_same_path.js b/test/squash_same_path.js new file mode 100644 index 0000000..c85c5b0 --- /dev/null +++ b/test/squash_same_path.js @@ -0,0 +1,530 @@ +'use strict' + +import assert from 'assert' +import squash from '../lib/squash' + +/* eslint comma-dangle: 0 */ + +function equal(obj1, obj2) { + return assert.deepEqual(squash(obj1), obj2) +} + +/* + * add + */ +// add - add +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// add - remove +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "remove"} + ], + [] +) +// add - replace +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// add - move to +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "foo"}] +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// add - copy to +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// add - copy from +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// add - test +equal( + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) + +/* + * remove + */ +// remove - add +equal( + [ + {"path": "/foo", "op": "remove"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// // remove - remove // FIXME invalid patch ... +// equal( +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/foo", "op": "remove"} +// ], +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/foo", "op": "remove"} +// ] +// ) +// // remove - replace // FIXME invalid patch ... +// equal( +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/foo", "op": "replace", "value": "bar"} +// ], +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/foo", "op": "replace", "value": "bar"} +// ] +// ) +// remove - move to +equal( + [ + {"path": "/foo", "op": "remove"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// // remove - move from // FIXME invalid patch +// equal( +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/bar", "op": "move", "from": "/foo"} +// ], +// [ +// {"path": "/foo", "op": "move", "from": "/bar"} +// ] +// ) +// remove - copy to +equal( + [ + {"path": "/foo", "op": "remove"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// // remove - copy from // FIXME invalid patch +// equal( +// [ +// {"path": "/foo", "op": "remove"}, +// {"path": "/bar", "op": "copy", "from": "/foo"} +// ], +// [ +// {"path": "/foo", "op": "add", "value": "foo"}, +// {"path": "/bar", "op": "copy", "from": "/foo"} +// ] +// ) +// remove - test // FIXME invalid patch +equal( + [ + {"path": "/foo", "op": "remove"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "remove"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) + +/* + * replace + */ +// replace - add +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// replace - remove +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "remove"} + ], + [] +) +// replace - replace +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// replace - move to +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// replace - move from +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// replace - copy to +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// replace - copy from +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// replace - test +equal( + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) + +/* + * move // FIXME maybe add move from/to for each + */ +// move - add +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// move - remove +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "remove"} + ], + [] +) +// move - replace +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// move - move to +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// move - move from // FIXME this could resolve to [] but that's a pretty edge case +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// move - copy to // FIXME invalid patch +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// move - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// move - test +equal( + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) + +/* + * copy // FIXME maybe add copy from/to for each + */ +// copy - add +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// copy - remove +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "remove"} + ], + [] +) +// copy - replace +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// copy - move to +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// copy - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// copy - copy to +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// copy - copy from // FIXME this could resolve to [] but that's a pretty edge case +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// copy - test +equal( + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "copy", "from": "/bar"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) + +/* + * test + */ +// test - add +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// test - remove +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "remove"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "remove"} + ] +) +// test - replace +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ] +) +// test - move to +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// test - move from +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// test - copy to +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// test - copy from +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// test - test +equal( + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ], + [ + {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "foo"} + ] +) From 9d021bacfe110d84d87c17edac256fde71c85a23 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Fri, 29 Apr 2016 21:41:11 +0200 Subject: [PATCH 2/5] copyto/copyfrom moveto/movefrom --- test/squash_same_path.js | 318 ++++++++++++++++++++++++++++++--------- 1 file changed, 248 insertions(+), 70 deletions(-) diff --git a/test/squash_same_path.js b/test/squash_same_path.js index c85c5b0..beec1da 100644 --- a/test/squash_same_path.js +++ b/test/squash_same_path.js @@ -15,7 +15,7 @@ function equal(obj1, obj2) { // add - add equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} ], [ @@ -25,7 +25,7 @@ equal( // add - remove equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "remove"} ], [] @@ -33,7 +33,7 @@ equal( // add - replace equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} ], [ @@ -43,28 +43,28 @@ equal( // add - move to equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} ], [ {"path": "/foo", "op": "move", "from": "/bar"} ] ) -// // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "foo"}] +// // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "lulz"}] equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ], [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ] ) // add - copy to equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} ], [ @@ -74,23 +74,23 @@ equal( // add - copy from equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ], [ - {"path": "/foo", "op": "add", "value": "foo"}, + {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ] ) // add - test equal( [ - {"path": "/foo", "op": "add", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "add", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ], [ - {"path": "/foo", "op": "add", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "add", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ] ) @@ -166,7 +166,7 @@ equal( // {"path": "/bar", "op": "copy", "from": "/foo"} // ], // [ -// {"path": "/foo", "op": "add", "value": "foo"}, +// {"path": "/foo", "op": "add", "value": "lulz"}, // {"path": "/bar", "op": "copy", "from": "/foo"} // ] // ) @@ -174,11 +174,11 @@ equal( equal( [ {"path": "/foo", "op": "remove"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} ], [ {"path": "/foo", "op": "remove"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} ] ) @@ -188,7 +188,7 @@ equal( // replace - add equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} ], [ @@ -198,7 +198,7 @@ equal( // replace - remove equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "remove"} ], [] @@ -206,7 +206,7 @@ equal( // replace - replace equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} ], [ @@ -216,7 +216,7 @@ equal( // replace - move to equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} ], [ @@ -226,18 +226,18 @@ equal( // replace - move from equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ], [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ] ) // replace - copy to equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} ], [ @@ -247,30 +247,30 @@ equal( // replace - copy from equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ], [ - {"path": "/foo", "op": "replace", "value": "foo"}, + {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ] ) // replace - test equal( [ - {"path": "/foo", "op": "replace", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "replace", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ], [ - {"path": "/foo", "op": "replace", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "replace", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ] ) /* - * move // FIXME maybe add move from/to for each + * move to */ -// move - add +// move to - add equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -280,7 +280,7 @@ equal( {"path": "/foo", "op": "add", "value": "bar"} ] ) -// move - remove +// move to - remove equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -288,7 +288,7 @@ equal( ], [] ) -// move - replace +// move to - replace equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -298,7 +298,7 @@ equal( {"path": "/foo", "op": "add", "value": "bar"} ] ) -// move - move to +// move to - move to equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -308,7 +308,7 @@ equal( {"path": "/foo", "op": "move", "from": "/bar"} ] ) -// move - move from // FIXME this could resolve to [] but that's a pretty edge case +// move to - move from // FIXME this could resolve to [] but that's a pretty edge case equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -319,7 +319,7 @@ equal( {"path": "/bar", "op": "move", "from": "/foo"} ] ) -// move - copy to // FIXME invalid patch +// move to - copy to // FIXME invalid patch equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -329,7 +329,7 @@ equal( {"path": "/foo", "op": "copy", "from": "/bar"} ] ) -// move - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +// move to - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -340,22 +340,110 @@ equal( {"path": "/bar", "op": "copy", "from": "/foo"} ] ) -// move - test +// move to - test equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} ], [ {"path": "/foo", "op": "move", "from": "/bar"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} ] ) /* - * copy // FIXME maybe add copy from/to for each + * move from */ -// copy - add +// move from - add +equal( + [ + {"path": "/bar", "op": "move", "from": "/foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/bar", "op": "move", "from": "/foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// // move from - remove // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/foo", "op": "remove"} +// ], +// [] +// ) +// // move from - replace // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/foo", "op": "replace", "value": "bar"} +// ], +// [ +// {"path": "/foo", "op": "add", "value": "bar"} +// ] +// ) +// // move from - move to // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/foo", "op": "move", "from": "/bar"} +// ], +// [ +// {"path": "/foo", "op": "move", "from": "/bar"} +// ] +// ) +// // move from - move from // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/bar", "op": "move", "from": "/foo"} +// ], +// [ +// {"path": "/foo", "op": "move", "from": "/bar"}, +// {"path": "/bar", "op": "move", "from": "/foo"} +// ] +// ) +// move from - copy to // FIXME this could resolve to [{"op": "copy", "path": "/bar", "from": "/foo"}] +equal( + [ + {"path": "/bar", "op": "move", "from": "/foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/bar", "op": "move", "from": "/foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// // move from - copy from // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/bar", "op": "copy", "from": "/foo"} +// ], +// [ +// {"path": "/foo", "op": "move", "from": "/bar"}, +// {"path": "/bar", "op": "copy", "from": "/foo"} +// ] +// ) +// // move from - test // FIXME invalid patch +// equal( +// [ +// {"path": "/bar", "op": "move", "from": "/foo"}, +// {"path": "/foo", "op": "test", "value": "lulz"} +// ], +// [ +// {"path": "/foo", "op": "move", "from": "/bar"}, +// {"path": "/foo", "op": "test", "value": "lulz"} +// ] +// ) + + +/* + * copy to + */ +// copy to - add equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -365,7 +453,7 @@ equal( {"path": "/foo", "op": "add", "value": "bar"} ] ) -// copy - remove +// copy to - remove equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -373,7 +461,7 @@ equal( ], [] ) -// copy - replace +// copy to - replace equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -383,7 +471,7 @@ equal( {"path": "/foo", "op": "add", "value": "bar"} ] ) -// copy - move to +// copy to - move to equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -393,7 +481,7 @@ equal( {"path": "/foo", "op": "move", "from": "/bar"} ] ) -// copy - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +// copy to - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -404,7 +492,7 @@ equal( {"path": "/bar", "op": "move", "from": "/foo"} ] ) -// copy - copy to +// copy to - copy to equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -414,7 +502,7 @@ equal( {"path": "/foo", "op": "copy", "from": "/bar"} ] ) -// copy - copy from // FIXME this could resolve to [] but that's a pretty edge case +// copy to - copy from // FIXME this could resolve to [] but that's a pretty edge case equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -425,15 +513,105 @@ equal( {"path": "/bar", "op": "copy", "from": "/foo"} ] ) -// copy - test +// copy to - test equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} ], [ {"path": "/foo", "op": "copy", "from": "/bar"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"} + ] +) + +/* + * copy from + */ +// copy from - add +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "add", "value": "bar"} + ] +) +// copy from - remove +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "remove"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "remove"} + ] +) +// copy from - replace +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "replace", "value": "bar"} + ] +) +// copy from - move to // FIXME this could resolve to [] +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "move", "from": "/bar"} + ] +) +// copy from - move from +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/bar", "op": "move", "from": "/foo"} + ], + [ + {"path": "/bar", "op": "move", "from": "/foo"} + ] +) +// copy from - copy to // FIXME this chould resolve to [{"path": "/bar", "op": "copy", "from": "/foo"}] +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "copy", "from": "/bar"} + ] +) +// copy from - copy from +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/bar", "op": "copy", "from": "/foo"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"} + ] +) +// copy from - test +equal( + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "test", "value": "lulz"} + ], + [ + {"path": "/bar", "op": "copy", "from": "/foo"}, + {"path": "/foo", "op": "test", "value": "lulz"} ] ) @@ -443,88 +621,88 @@ equal( // test - add equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} ] ) // test - remove equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "remove"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "remove"} ] ) // test - replace equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} ] ) // test - move to equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} ] ) // test - move from equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} ] ) // test - copy to equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} ] ) // test - copy from equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, + {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} ] ) // test - test equal( [ - {"path": "/foo", "op": "test", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ], [ - {"path": "/foo", "op": "test", "value": "foo"}, - {"path": "/foo", "op": "test", "value": "foo"} + {"path": "/foo", "op": "test", "value": "lulz"}, + {"path": "/foo", "op": "test", "value": "lulz"} ] ) From 260424e7f54ccb26ae09a6bd51b67e5c66427a27 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Fri, 29 Apr 2016 21:46:08 +0200 Subject: [PATCH 3/5] remove edge case comments --- test/squash_same_path.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/squash_same_path.js b/test/squash_same_path.js index beec1da..95da078 100644 --- a/test/squash_same_path.js +++ b/test/squash_same_path.js @@ -308,7 +308,7 @@ equal( {"path": "/foo", "op": "move", "from": "/bar"} ] ) -// move to - move from // FIXME this could resolve to [] but that's a pretty edge case +// move to - move from // FIXME this could resolve to [] equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -329,7 +329,7 @@ equal( {"path": "/foo", "op": "copy", "from": "/bar"} ] ) -// move to - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +// move to - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] equal( [ {"path": "/foo", "op": "move", "from": "/bar"}, @@ -481,7 +481,7 @@ equal( {"path": "/foo", "op": "move", "from": "/bar"} ] ) -// copy to - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] but that's a pretty edge case +// copy to - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, @@ -502,7 +502,7 @@ equal( {"path": "/foo", "op": "copy", "from": "/bar"} ] ) -// copy to - copy from // FIXME this could resolve to [] but that's a pretty edge case +// copy to - copy from // FIXME this could resolve to [] equal( [ {"path": "/foo", "op": "copy", "from": "/bar"}, From d354fdad491b4d2102a9d6ad10c3556efed2cf98 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Fri, 29 Apr 2016 21:52:51 +0200 Subject: [PATCH 4/5] rename test --- test/squash_same_path.js | 130 +++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/test/squash_same_path.js b/test/squash_same_path.js index 95da078..1bf5186 100644 --- a/test/squash_same_path.js +++ b/test/squash_same_path.js @@ -5,7 +5,7 @@ import squash from '../lib/squash' /* eslint comma-dangle: 0 */ -function equal(obj1, obj2) { +function test(obj1, obj2) { return assert.deepEqual(squash(obj1), obj2) } @@ -13,7 +13,7 @@ function equal(obj1, obj2) { * add */ // add - add -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -23,7 +23,7 @@ equal( ] ) // add - remove -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "remove"} @@ -31,7 +31,7 @@ equal( [] ) // add - replace -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -41,7 +41,7 @@ equal( ] ) // add - move to -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -51,7 +51,7 @@ equal( ] ) // // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "lulz"}] -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -62,7 +62,7 @@ equal( ] ) // add - copy to -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -72,7 +72,7 @@ equal( ] ) // add - copy from -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -83,7 +83,7 @@ equal( ] ) // add - test -equal( +test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -98,7 +98,7 @@ equal( * remove */ // remove - add -equal( +test( [ {"path": "/foo", "op": "remove"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -108,7 +108,7 @@ equal( ] ) // // remove - remove // FIXME invalid patch ... -// equal( +// test( // [ // {"path": "/foo", "op": "remove"}, // {"path": "/foo", "op": "remove"} @@ -119,7 +119,7 @@ equal( // ] // ) // // remove - replace // FIXME invalid patch ... -// equal( +// test( // [ // {"path": "/foo", "op": "remove"}, // {"path": "/foo", "op": "replace", "value": "bar"} @@ -130,7 +130,7 @@ equal( // ] // ) // remove - move to -equal( +test( [ {"path": "/foo", "op": "remove"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -140,7 +140,7 @@ equal( ] ) // // remove - move from // FIXME invalid patch -// equal( +// test( // [ // {"path": "/foo", "op": "remove"}, // {"path": "/bar", "op": "move", "from": "/foo"} @@ -150,7 +150,7 @@ equal( // ] // ) // remove - copy to -equal( +test( [ {"path": "/foo", "op": "remove"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -160,7 +160,7 @@ equal( ] ) // // remove - copy from // FIXME invalid patch -// equal( +// test( // [ // {"path": "/foo", "op": "remove"}, // {"path": "/bar", "op": "copy", "from": "/foo"} @@ -171,7 +171,7 @@ equal( // ] // ) // remove - test // FIXME invalid patch -equal( +test( [ {"path": "/foo", "op": "remove"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -186,7 +186,7 @@ equal( * replace */ // replace - add -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -196,7 +196,7 @@ equal( ] ) // replace - remove -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "remove"} @@ -204,7 +204,7 @@ equal( [] ) // replace - replace -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -214,7 +214,7 @@ equal( ] ) // replace - move to -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -224,7 +224,7 @@ equal( ] ) // replace - move from -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -235,7 +235,7 @@ equal( ] ) // replace - copy to -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -245,7 +245,7 @@ equal( ] ) // replace - copy from -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -256,7 +256,7 @@ equal( ] ) // replace - test -equal( +test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -271,7 +271,7 @@ equal( * move to */ // move to - add -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -281,7 +281,7 @@ equal( ] ) // move to - remove -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "remove"} @@ -289,7 +289,7 @@ equal( [] ) // move to - replace -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -299,7 +299,7 @@ equal( ] ) // move to - move to -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -309,7 +309,7 @@ equal( ] ) // move to - move from // FIXME this could resolve to [] -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -320,7 +320,7 @@ equal( ] ) // move to - copy to // FIXME invalid patch -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -330,7 +330,7 @@ equal( ] ) // move to - copy from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -341,7 +341,7 @@ equal( ] ) // move to - test -equal( +test( [ {"path": "/foo", "op": "move", "from": "/bar"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -356,7 +356,7 @@ equal( * move from */ // move from - add -equal( +test( [ {"path": "/bar", "op": "move", "from": "/foo"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -367,7 +367,7 @@ equal( ] ) // // move from - remove // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/foo", "op": "remove"} @@ -375,7 +375,7 @@ equal( // [] // ) // // move from - replace // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/foo", "op": "replace", "value": "bar"} @@ -385,7 +385,7 @@ equal( // ] // ) // // move from - move to // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/foo", "op": "move", "from": "/bar"} @@ -395,7 +395,7 @@ equal( // ] // ) // // move from - move from // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/bar", "op": "move", "from": "/foo"} @@ -406,7 +406,7 @@ equal( // ] // ) // move from - copy to // FIXME this could resolve to [{"op": "copy", "path": "/bar", "from": "/foo"}] -equal( +test( [ {"path": "/bar", "op": "move", "from": "/foo"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -417,7 +417,7 @@ equal( ] ) // // move from - copy from // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/bar", "op": "copy", "from": "/foo"} @@ -428,7 +428,7 @@ equal( // ] // ) // // move from - test // FIXME invalid patch -// equal( +// test( // [ // {"path": "/bar", "op": "move", "from": "/foo"}, // {"path": "/foo", "op": "test", "value": "lulz"} @@ -444,7 +444,7 @@ equal( * copy to */ // copy to - add -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -454,7 +454,7 @@ equal( ] ) // copy to - remove -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "remove"} @@ -462,7 +462,7 @@ equal( [] ) // copy to - replace -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -472,7 +472,7 @@ equal( ] ) // copy to - move to -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -482,7 +482,7 @@ equal( ] ) // copy to - move from // FIXME this could resolve to [{"op": "copy", "path": "/bar" from: "/foo"}] -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -493,7 +493,7 @@ equal( ] ) // copy to - copy to -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -503,7 +503,7 @@ equal( ] ) // copy to - copy from // FIXME this could resolve to [] -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -514,7 +514,7 @@ equal( ] ) // copy to - test -equal( +test( [ {"path": "/foo", "op": "copy", "from": "/bar"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -529,7 +529,7 @@ equal( * copy from */ // copy from - add -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -540,7 +540,7 @@ equal( ] ) // copy from - remove -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "remove"} @@ -551,7 +551,7 @@ equal( ] ) // copy from - replace -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -562,7 +562,7 @@ equal( ] ) // copy from - move to // FIXME this could resolve to [] -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -573,7 +573,7 @@ equal( ] ) // copy from - move from -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -583,7 +583,7 @@ equal( ] ) // copy from - copy to // FIXME this chould resolve to [{"path": "/bar", "op": "copy", "from": "/foo"}] -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -594,7 +594,7 @@ equal( ] ) // copy from - copy from -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -604,7 +604,7 @@ equal( ] ) // copy from - test -equal( +test( [ {"path": "/bar", "op": "copy", "from": "/foo"}, {"path": "/foo", "op": "test", "value": "lulz"} @@ -619,7 +619,7 @@ equal( * test */ // test - add -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "add", "value": "bar"} @@ -630,7 +630,7 @@ equal( ] ) // test - remove -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "remove"} @@ -641,7 +641,7 @@ equal( ] ) // test - replace -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "replace", "value": "bar"} @@ -652,7 +652,7 @@ equal( ] ) // test - move to -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "move", "from": "/bar"} @@ -663,7 +663,7 @@ equal( ] ) // test - move from -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} @@ -674,7 +674,7 @@ equal( ] ) // test - copy to -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "copy", "from": "/bar"} @@ -685,7 +685,7 @@ equal( ] ) // test - copy from -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} @@ -696,7 +696,7 @@ equal( ] ) // test - test -equal( +test( [ {"path": "/foo", "op": "test", "value": "lulz"}, {"path": "/foo", "op": "test", "value": "lulz"} From 277ec1535bd012dfb5fd1eb2844819c5f84b27c9 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Sat, 30 Apr 2016 16:19:09 +0200 Subject: [PATCH 5/5] start adding doc and expected to sqush tests --- test/squash_same_path.js | 72 +++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/test/squash_same_path.js b/test/squash_same_path.js index 1bf5186..a2e34d0 100644 --- a/test/squash_same_path.js +++ b/test/squash_same_path.js @@ -2,11 +2,23 @@ import assert from 'assert' import squash from '../lib/squash' +import apply from '../lib/apply' +import {clone} from 'json8' /* eslint comma-dangle: 0 */ -function test(obj1, obj2) { - return assert.deepEqual(squash(obj1), obj2) +function test(patch, squashed, doc, expected) { + assert.deepEqual(squash(patch), squashed) + + + if (doc) { + assert.deepEqual(apply(clone(doc), patch).doc, apply(clone(doc), squashed).doc) + } + + if (expected) { + assert.deepEqual(apply(clone(doc), patch).doc, expected) + assert.deepEqual(apply(clone(doc), squashed).doc, expected) + } } /* @@ -20,7 +32,9 @@ test( ], [ {"path": "/foo", "op": "add", "value": "bar"} - ] + ], + {}, + {"foo": "bar"} ) // add - remove test( @@ -28,7 +42,9 @@ test( {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "remove"} ], - [] + [], + {}, + {} ) // add - replace test( @@ -38,7 +54,9 @@ test( ], [ {"path": "/foo", "op": "add", "value": "bar"} - ] + ], + {}, + {"foo": "bar"} ) // add - move to test( @@ -48,7 +66,9 @@ test( ], [ {"path": "/foo", "op": "move", "from": "/bar"} - ] + ], + {"bar": "lulz"}, + {"foo": "lulz"} ) // // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "lulz"}] test( @@ -59,7 +79,9 @@ test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "move", "from": "/foo"} - ] + ], + {}, + {"bar": "lulz"} ) // add - copy to test( @@ -69,7 +91,9 @@ test( ], [ {"path": "/foo", "op": "copy", "from": "/bar"} - ] + ], + {"bar": "lulz"}, + {"bar": "lulz", "foo": "lulz"} ) // add - copy from test( @@ -80,7 +104,9 @@ test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/bar", "op": "copy", "from": "/foo"} - ] + ], + {}, + {"foo": "lulz", "bar": "lulz"} ) // add - test test( @@ -91,7 +117,9 @@ test( [ {"path": "/foo", "op": "add", "value": "lulz"}, {"path": "/foo", "op": "test", "value": "lulz"} - ] + ], + {}, + {"foo": "lulz"} ) /* @@ -105,7 +133,9 @@ test( ], [ {"path": "/foo", "op": "add", "value": "bar"} - ] + ], + {"foo": "lulz"}, + {"foo": "bar"} ) // // remove - remove // FIXME invalid patch ... // test( @@ -137,7 +167,9 @@ test( ], [ {"path": "/foo", "op": "move", "from": "/bar"} - ] + ], + {"foo": "cat", "bar": "dog"}, + {"foo": "dog"} ) // // remove - move from // FIXME invalid patch // test( @@ -157,7 +189,9 @@ test( ], [ {"path": "/foo", "op": "copy", "from": "/bar"} - ] + ], + {"foo": "turtle", "bar": "dog"}, + {"foo": "dog", "bar": "dog"} ) // // remove - copy from // FIXME invalid patch // test( @@ -193,15 +227,21 @@ test( ], [ {"path": "/foo", "op": "add", "value": "bar"} - ] + ], + {"foo": "cat"}, + {"foo": "bar"} ) -// replace - remove +// replace - remove // FIXAAAAAAAAAAA test( [ {"path": "/foo", "op": "replace", "value": "lulz"}, {"path": "/foo", "op": "remove"} ], - [] + [ + {"path": "/foo", "op": "remove"} + ], + {"foo": "cat"}, + {} ) // replace - replace test(