Files
update-immutable/t/basic.js

148 lines
2.4 KiB
JavaScript

var update = require("../dist/update").default;
function clone(a) {
return JSON.parse(JSON.stringify(a));
}
function apply_update(test, desc, input, update_v, expected) {
var orig = clone(input);
var output = update(input, update_v);
test.deepEqual(output, expected, "update applied correctly: " + desc);
test.ok(input != output, "new structure created: " + desc);
test.deepEqual(input, orig, "original not modified: " + desc);
}
exports.testUpdate = function(test){
// set
apply_update(test,
"simple set",
{},
{ a: { $set: 1} },
{ a: 1 }
);
apply_update(test,
"nested set",
{ a: { b: 1 }, c: 2 },
{ a: { b: { '$set': 5 } } },
{ a: { b: 5 }, c: 2 }
);
apply_update(test,
"set, auto-vivify",
{ c: 2 },
{ a: { b: { '$set': 5 } } },
{ a: { b: 5 }, c: 2 }
);
// unset
apply_update(test,
"unset",
{ a: { b: 1, z: 2 }, c: 2 },
{ a: { '$unset': 'b' } },
{ a: { z: 2 }, c: 2 }
);
apply_update(test,
"unset auto-vivify",
{},
{ a: { '$unset': 'b' } },
{ a: {} }
);
// merge
apply_update(test,
"merge",
{ a: 1, b: 2 },
{ '$merge': { c: 3, d: { e: 4 } } },
{ a: 1, b: 2, c: 3, d: { e: 4 } }
);
apply_update(test,
"merge overwrites",
{ a: 1, b: 2, c: 9 },
{ '$merge': { c: 3, d: { e: 4 } } },
{ a: 1, b: 2, c: 3, d: { e: 4 } }
);
apply_update(test,
"merge auto-vivify",
{},
{ a: { b: { '$merge': { c: 1 } } } },
{ a: { b: { c: 1 } } }
);
// push
apply_update(test,
"push",
{ a: [ 0, ], },
{ a: { '$push': [ 1, 2 ] } },
{ a: [ 0, 1, 2 ] }
);
apply_update(test,
"push auto-vivify",
{},
{ a: { '$push': [ 1, 2 ] } },
{ a: [ 1, 2 ] }
);
// unshift
apply_update(test,
"unshift",
{ a: [ 0 ] },
{ a: { '$unshift': [ 1, 2 ] } },
{ a: [ 1, 2, 0 ] }
);
apply_update(test,
"unshift auto-vivify",
{},
{ a: { '$unshift': [ 1, 2 ] } },
{ a: [ 1, 2 ] }
);
// splice
apply_update(test,
"splice add",
{ a: [ 0, 1 ], },
{ a: { '$splice': [ [ 1, 0, 8, 9 ] ] } },
{ a: [ 0, 8, 9, 1 ] }
);
apply_update(test,
"splice del",
{ a: [ 0, 1, 2 ] },
{ a: { '$splice': [ [ 1, 1, 8, 9 ] ] } },
{ a: [ 0, 8, 9, 2 ] }
);
apply_update(test,
"splice multi",
{ a: [ 0, 1, 2 ] },
{ a: { '$splice': [ [ 1, 1, 8, 9 ], [ 0, 2, 6, {a: 1} ] ] } },
{ a: [ 6, { a: 1 }, 9, 2 ] }
);
apply_update(test,
"splice auto-vivify",
{},
{ a: { '$splice': [ [ 0, 0, 8, 9 ] ] } },
{ a: [ 8, 9 ] }
);
test.done();
};