This commit is contained in:
sentsin
2017-08-21 08:50:25 +08:00
parent 06c11ba9cd
commit 7feaa4eca0
1899 changed files with 181363 additions and 22513 deletions

240
node_modules/deap/test/clone.test.js generated vendored Normal file
View File

@@ -0,0 +1,240 @@
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]);
});
});
});

53
node_modules/deap/test/deap.test.js generated vendored Normal file
View File

@@ -0,0 +1,53 @@
var assert = require('chai').assert,
deap = require('../index'),
lib = require('../lib/deap');
describe('deap', function() {
it('should have clone defined', function() {
assert.isFunction(deap.clone);
assert.deepEqual(deap.clone, lib.clone);
});
it('should have cloneShallow defined', function() {
assert.isFunction(deap.cloneShallow);
assert.deepEqual(deap.cloneShallow, lib.cloneShallow);
});
it('should have extend exposed as a top level function', function() {
assert.isFunction(deap);
assert.equal(deap, lib.extend);
});
it('should have extend defined', function() {
assert.isFunction(deap.extend);
assert.deepEqual(deap.extend, lib.extend);
});
it('should have extendShallow defined', function() {
assert.isFunction(deap.extendShallow);
assert.deepEqual(deap.extendShallow, lib.extendShallow);
});
it('should have update defined', function() {
assert.isFunction(deap.update);
assert.deepEqual(deap.update, lib.update);
});
it('should have updateShallow defined', function() {
assert.isFunction(deap.updateShallow);
assert.deepEqual(deap.updateShallow, lib.updateShallow);
});
it('should have merge defined', function() {
assert.isFunction(deap.merge);
assert.deepEqual(deap.merge, lib.merge);
});
it('should have mergeShallow defined', function() {
assert.isFunction(deap.mergeShallow);
assert.deepEqual(deap.mergeShallow, lib.mergeShallow);
});
});

155
node_modules/deap/test/extend.test.js generated vendored Normal file
View File

@@ -0,0 +1,155 @@
var assert = require('chai').assert,
lib = require('../lib/deap');
describe('shallow extend', function() {
var shallow = lib.extendShallow;
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = shallow(a, b);
assert.strictEqual(result, a);
});
it('should copy simple values', function() {
var a = {},
b = { s: 'string', n: 1, b: false, a: [], o: {}};
var c = shallow(a, b);
assert.deepEqual(c, a);
assert.equal(c.s, b.s);
assert.equal(c.n, b.n);
assert.equal(c.b, b.b);
assert.strictEqual(c.a, b.a);
assert.strictEqual(c.o, b.o);
});
it('should only alter first param', function() {
var a = { doom: 'song' },
b = { burp: 'adurp' },
c = { grr: 'argh' };
var result = shallow({}, a, b, c);
assert.deepEqual(a, { doom: 'song' });
assert.deepEqual(b, { burp: 'adurp' });
assert.deepEqual(c, { grr: 'argh' });
assert.sameMembers(Object.keys(result), ['doom', 'burp', 'grr']);
assert.equal(result.doom, a.doom);
assert.equal(result.burp, b.burp);
assert.equal(result.grr, c.grr);
});
it('should preserve object references', function() {
var deep = { foo: 'bar' },
a = { burp: 'adurp' , nested: deep };
var 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 not pick up non-enumberable properties', function() {
var result = shallow({}, function() {});
assert.deepEqual(result, {});
assert.equal(Object.keys(result).length, 0);
assert.equal(Object.getOwnPropertyNames(result).length, 0);
});
});
describe('deep extend', function() {
var deepExtend = lib.extend;
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = deepExtend(a, b);
assert.strictEqual(result, a);
});
it('should not preserve object references', function() {
var deeper = { boo: 'far' },
deep = { foo: 'bar', nested: deeper },
a = { burp: 'adurp' , nested: deep };
var result = deepExtend({}, 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 = deepExtend({}, 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 = deepExtend({}, 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 = deepExtend({}, 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]);
});
});

134
node_modules/deap/test/merge.test.js generated vendored Normal file
View File

@@ -0,0 +1,134 @@
var lib = require('../lib/deap'),
assert = require('chai').assert;
describe('shallow merge', function() {
var shallowMerge = lib.mergeShallow;
it('should merge everything into an empty object', function() {
var a = { foo: 'bar' },
result = shallowMerge({}, a);
assert.deepEqual(result, a);
});
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = shallowMerge(a, b);
assert.strictEqual(result, a);
});
it('should not replace existing values', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = shallowMerge(a, b);
assert.deepEqual(result, { burp: 'adurp', grr: 'arghh' });
assert.equal(result.burp, a.burp);
});
});
describe('deep merge', function() {
var deepMerge = lib.merge;
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = deepMerge(a, b);
assert.strictEqual(result, a);
});
it('should merge a nested object one level deep', function() {
var a = { foo: 'bar', deep: { foo: 'bar', baz: 'buzz' }},
b = { foo: 'bop', deep: { foo: 'beep', biz: 'baz' } };
var result = deepMerge(a, b);
assert.equal(result.foo, 'bar');
assert.equal(result.deep.foo, 'bar');
assert.equal(result.deep.baz, 'buzz');
assert.equal(result.deep.biz, 'baz');
});
it('should merge a nested object two levels deep', function() {
var a = { foo: 'bar', deep: { hi: 'hello', deeper: { foo: 'bar', baz: 'buzz' }}},
b = { foo: 'baz', deep: { hi: 'bye', bye: 'hi', deeper: { foo: 'beep', bop: 'boop' } } };
var result = deepMerge({}, a, b);
assert.equal(result.foo, a.foo);
assert.isObject(result.deep);
assert.equal(result.deep.hi, a.deep.hi);
assert.equal(result.deep.bye, b.deep.bye);
assert.isObject(result.deep.deeper);
assert.equal(result.deep.deeper.foo, a.deep.deeper.foo);
assert.equal(result.deep.deeper.baz, a.deep.deeper.baz);
assert.equal(result.deep.deeper.bop, b.deep.deeper.bop);
});
it('should merge properties from multiple objects', function() {
var a = { foo: ['one'], boo: 'far', poo: 'tar' },
b = { foo: ['two', 'three'], zoo: 'car' },
c = { boo: 'star', two: 'czar' };
var result = deepMerge({}, a, b, c);
assert.deepEqual(result, {
foo: a.foo,
boo: a.boo,
poo: a.poo,
zoo: b.zoo,
two: c.two
});
});
it('should not preserve nested object references', function() {
var a = { foo: 'bar' },
nested = { grr: 'argh' },
newFoo = { burp: nested },
b = { foo: newFoo, foo2: newFoo };
var result = deepMerge(a, b);
assert.equal(a.foo, 'bar');
assert.deepEqual(a.foo2.burp, b.foo2.burp);
assert.notStrictEqual(a.foo2.burp, nested);
});
it('should not override a string with an object', function() {
var a = { foo: 'bar' },
b = { foo: { biz: 'baz' } };
var result = deepMerge(a, b);
assert.deepEqual(a, { foo: 'bar' });
});
it('should preserve array references', function() {
var a = { nested: [{ foo: 'bar' }] },
b = { nested: [{ boo: 'far' }] },
deep = a.nested;
var result = deepMerge(a, b);
assert.deepEqual(result.nested, a.nested);
assert.notStrictEqual(result.nested, b.nested);
assert.strictEqual(result.nested, deep);
});
it('should not preserve references in arrays', function() {
var a = { nested: [{ foo: 'bar' }] },
b = { nested: [{ boo: 'far' }] },
deeper = a.nested[0];
var result = deepMerge({}, a, b);
assert.deepEqual(result.nested, a.nested);
assert.notStrictEqual(result.nested[0], deeper);
});
});

24
node_modules/deap/test/shallow.test.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
var assert = require('chai').assert,
lib = require('../lib/deap'),
shallow = require('../shallow');
describe('shallow', function() {
it('should be defined correctly', function() {
assert.isFunction(shallow);
assert.isFunction(shallow.extend);
assert.isFunction(shallow.update);
assert.isFunction(shallow.merge);
assert.isFunction(shallow.clone);
});
it('should have shallow functions', function() {
assert.equal(shallow, lib.extendShallow);
assert.equal(shallow.extend, lib.extendShallow);
assert.equal(shallow.update, lib.updateShallow);
assert.equal(shallow.merge, lib.mergeShallow);
assert.equal(shallow.clone, lib.cloneShallow);
});
});

136
node_modules/deap/test/update.test.js generated vendored Normal file
View File

@@ -0,0 +1,136 @@
var lib = require('../lib/deap'),
assert = require('chai').assert;
describe('shallow update', function() {
var shallowUpdate = lib.updateShallow;
it('should not update anything into an empty object', function() {
var result = shallowUpdate({}, { foo: 'bar' });
assert.deepEqual(result, {});
});
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = shallowUpdate(a, b);
assert.strictEqual(result, a);
});
it('should replace existing values only', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = shallowUpdate(a, b);
assert.deepEqual(result, a);
assert.equal(a.burp, b.burp);
assert.isUndefined(a.grr);
});
});
describe('deep update', function() {
var deepUpdate = lib.update;
it('should return a reference to the first argument', function() {
var a = { burp: 'adurp' },
b = { burp: 'zing', grr: 'arghh' };
var result = deepUpdate(a, b);
assert.strictEqual(result, a);
});
it('should update a nested object one level deep', function() {
var a = { foo: 'bar', deep: { foo: 'bar', baz: 'buzz' }},
b = { deep: { foo: 'beep' } };
var result = deepUpdate(a, b);
assert.equal(result.foo, a.foo);
assert.equal(result.deep.foo, b.deep.foo);
assert.equal(result.deep.baz, a.deep.baz);
});
it('should update a nested object two levels deep', function() {
var a = { foo: 'bar', deep: { hi: 'hello', deeper: { foo: 'bar', baz: 'buzz' }}},
b = { deep: { deeper: { foo: 'beep' } } };
var result = deepUpdate(a, b);
assert.equal(result.foo, a.foo);
assert.isObject(result.deep);
assert.equal(result.deep.hi, a.deep.hi);
assert.isObject(result.deep.deeper);
assert.equal(result.deep.deeper.foo, b.deep.deeper.foo);
assert.equal(result.deep.deeper.baz, a.deep.deeper.baz);
});
it('should update properties from multiple objects', function() {
var a = { foo: ['one'], boo: 'far', poo: 'tar' },
b = { foo: ['two', 'three'], zoo: 'car' },
c = { boo: 'star', two: 'czar' };
var result = deepUpdate(a, b, c);
assert.deepEqual(result, {
foo: b.foo,
boo: c.boo,
poo: a.poo
});
});
it('should not update properties that are not on the first argument', function() {
var a = { foo: 'bar', deep: { deeper: { foo: 'bar' } } },
b = { boo: 'far', deep: { hi: 'hello', deeper: { foo: 'beep', baz: 'buzz' } } };
var result = deepUpdate(a, b);
assert.isUndefined(result.boo);
assert.isObject(result.deep);
assert.isUndefined(result.deep.hi);
assert.isObject(result.deep.deeper);
assert.isUndefined(result.deep.deeper.baz);
assert.equal(result.deep.deeper.foo, b.deep.deeper.foo);
});
it('should not preserve nested object references', function() {
var a = { foo: 'bar' },
nested = { grr: 'argh' },
newFoo = { burp: nested },
b = { foo: newFoo };
var result = deepUpdate(a, b);
assert.deepEqual(a.foo.burp, b.foo.burp);
assert.notStrictEqual(a.foo.burp, nested);
});
it('should preserve array references', function() {
var a = { nested: [{ foo: 'bar' }] },
b = { nested: [{ boo: 'far' }] },
deep = a.nested;
var result = deepUpdate(a, b);
assert.deepEqual(result.nested, b.nested);
assert.notStrictEqual(result.nested, b.nested);
assert.strictEqual(result.nested, a.nested);
assert.strictEqual(result.nested, deep);
});
it('should not preserve references in arrays', function() {
var a = { nested: [{ foo: 'bar' }] },
b = { nested: [{ boo: 'far' }] },
deeper = a.nested[0];
var result = deepUpdate(a, b);
assert.deepEqual(result.nested, b.nested);
assert.notStrictEqual(result.nested[0], deeper);
});
});