241 lines
5.9 KiB
JavaScript
241 lines
5.9 KiB
JavaScript
var lib = require('../lib/deap'),
|
|
assert = require('chai').assert;
|
|
|
|
describe('shallow clone', function() {
|
|
var shallow = lib.cloneShallow;
|
|
|
|
it('should not return a reference to the first argument', function() {
|
|
var a = { burp: 'adurp' },
|
|
result = shallow(a);
|
|
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should copy simple values', function() {
|
|
var a = { s: 'string', n: 1, b: false, a: [], o: {}},
|
|
b = shallow(a);
|
|
|
|
assert.deepEqual(b, a);
|
|
assert.equal(b.s, a.s);
|
|
assert.equal(b.n, a.n);
|
|
assert.equal(b.b, a.b);
|
|
assert.strictEqual(b.a, a.a);
|
|
assert.strictEqual(b.o, a.o);
|
|
});
|
|
|
|
it('should preserve object references', function() {
|
|
var deep = { foo: 'bar' },
|
|
a = { burp: 'adurp' , nested: deep },
|
|
result = shallow(a);
|
|
|
|
assert.strictEqual(result.nested, deep);
|
|
});
|
|
|
|
it('should preserve date references', function() {
|
|
var a = { burp: 'adurp', date: new Date() },
|
|
date = a.date;
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.strictEqual(result.date, date);
|
|
});
|
|
|
|
it('should preserve regexp references', function() {
|
|
var a = { burp: 'adurp', regexp: /foo/g },
|
|
regexp = a.regexp;
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.strictEqual(result.regexp, regexp);
|
|
});
|
|
|
|
it('should preserve array references', function() {
|
|
var a = { burp: 'adurp', array: [] },
|
|
array = a.array;
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.strictEqual(result.array, array);
|
|
});
|
|
|
|
it('should clone Date objects', function() {
|
|
var a = new Date();
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.equal(result.toString(), a.toString());
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should clone RegExp objects', function() {
|
|
var a = /foo/;
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.equal(result.toString(), a.toString());
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should work for multiple arguments', function() {
|
|
var a = { doom: 'song' },
|
|
b = { burp: 'adurp' },
|
|
c = { grr: { doh: 'argh' } };
|
|
|
|
var result = shallow(a, b, c);
|
|
|
|
assert.deepEqual(a, { doom: 'song' });
|
|
assert.deepEqual(b, { burp: 'adurp' });
|
|
assert.deepEqual(c, { grr: { doh: 'argh' } });
|
|
assert.sameMembers(Object.keys(result), ['doom', 'burp', 'grr']);
|
|
assert.equal(result.doom, a.doom);
|
|
assert.equal(result.burp, b.burp);
|
|
assert.deepEqual(result.grr, c.grr);
|
|
assert.strictEqual(result.grr, c.grr);
|
|
});
|
|
|
|
describe('on an array', function() {
|
|
|
|
it('should preserve references', function() {
|
|
var a = ['string', 1, false, [], {}];
|
|
|
|
var result = shallow(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.equal(result[0], a[0]);
|
|
assert.equal(result[1], a[1]);
|
|
assert.equal(result[2], a[2]);
|
|
assert.strictEqual(result[3], a[3]);
|
|
assert.strictEqual(result[4], a[4]);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
describe('clone', function() {
|
|
var clone = lib.clone;
|
|
|
|
it('should not return a reference to the first argument', function() {
|
|
var a = { burp: 'adurp' },
|
|
result = clone(a);
|
|
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should copy simple values', function() {
|
|
var a = { s: 'string', n: 1, b: false, a: [], o: {}},
|
|
b = clone(a);
|
|
|
|
assert.deepEqual(b, a);
|
|
assert.equal(b.s, a.s);
|
|
assert.equal(b.n, a.n);
|
|
assert.equal(b.b, a.b);
|
|
assert.deepEqual(b.a, a.a);
|
|
assert.deepEqual(b.o, a.o);
|
|
});
|
|
|
|
it('should not preserve object references', function() {
|
|
var deeper = { boo: 'far' },
|
|
deep = { foo: 'bar', nested: deeper },
|
|
a = { burp: 'adurp' , nested: deep };
|
|
|
|
var result = clone(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.notStrictEqual(result.nested, deep);
|
|
assert.notStrictEqual(result.nested.nested, deeper);
|
|
});
|
|
|
|
it('should not preserve date references', function() {
|
|
var a = { burp: 'adurp', date: new Date() },
|
|
date = a.date;
|
|
|
|
var result = clone(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.equal(result.date.getTime(), date.getTime()); // added this because deepEqual doesn't work with dates
|
|
assert.notStrictEqual(result.date, date);
|
|
});
|
|
|
|
it('should not preserve regexp references', function() {
|
|
var a = { burp: 'adurp', regexp: /foo/g },
|
|
regexp = a.regexp;
|
|
|
|
var result = clone(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.notStrictEqual(result.regexp, regexp);
|
|
});
|
|
|
|
it('should not preserve array references', function() {
|
|
var deeper = { boo: 'far' },
|
|
deep = { foo: 'bar', nested: deeper },
|
|
a = { burp: 'adurp' , nested: [deep, deeper] };
|
|
|
|
var result = clone(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.notStrictEqual(result.nested, a.nested);
|
|
assert.notStrictEqual(result.nested[0], deep);
|
|
assert.notStrictEqual(result.nested[0].nested, deeper);
|
|
assert.notStrictEqual(result.nested[1], deeper);
|
|
|
|
assert.deepEqual(result.nested[0].nested, result.nested[1]);
|
|
assert.notStrictEqual(result.nested[0].nested, result.nested[1]);
|
|
});
|
|
|
|
it('should clone Date objects', function() {
|
|
var a = new Date();
|
|
|
|
var result = clone(a);
|
|
|
|
assert.equal(result.toString(), a.toString());
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should clone RegExp objects', function() {
|
|
var a = /foo/;
|
|
|
|
var result = clone(a);
|
|
|
|
assert.equal(result.toString(), a.toString());
|
|
assert.notStrictEqual(result, a);
|
|
});
|
|
|
|
it('should work for multiple arguments', function() {
|
|
var a = { doom: 'song' },
|
|
b = { burp: 'adurp' },
|
|
c = { grr: { doh: 'argh' } };
|
|
|
|
var result = clone(a, b, c);
|
|
|
|
assert.deepEqual(a, { doom: 'song' });
|
|
assert.deepEqual(b, { burp: 'adurp' });
|
|
assert.deepEqual(c, { grr: { doh: 'argh' } });
|
|
assert.sameMembers(Object.keys(result), ['doom', 'burp', 'grr']);
|
|
assert.equal(result.doom, a.doom);
|
|
assert.equal(result.burp, b.burp);
|
|
assert.deepEqual(result.grr, c.grr);
|
|
assert.notStrictEqual(result.grr, c.grr);
|
|
});
|
|
|
|
describe('on an array', function() {
|
|
|
|
it('should not preserve references', function() {
|
|
var a = ['string', 1, false, [], {}];
|
|
|
|
var result = clone(a);
|
|
|
|
assert.deepEqual(result, a);
|
|
assert.equal(result[0], a[0]);
|
|
assert.equal(result[1], a[1]);
|
|
assert.equal(result[2], a[2]);
|
|
assert.notStrictEqual(result[3], a[3]);
|
|
assert.notStrictEqual(result[4], a[4]);
|
|
});
|
|
|
|
});
|
|
|
|
});
|