handy
Version:
Common utility functions
244 lines (236 loc) • 7.51 kB
JavaScript
var handy=require('..');
var assert=require('assert');
// verify object functions
// - getType
// - isArrayEqual
// - isObjectEqual
// - merge
// - deepMerge
describe('object', function() {
before(function(done) {
done();
});
// -- getType
describe('getType', function() {
it('object', function(done) {
assert.equal(handy.getType({}), 'object');
assert.equal(handy.getType({'a':5}), 'object');
assert.equal(handy.getType({'a':[1,2,3]}), 'object');
var tmp={"alpha":"beta"};
assert.equal(handy.getType(tmp), 'object');
done();
});
it('array', function(done) {
assert.equal(handy.getType([]), 'array');
assert.equal(handy.getType([{'a':5}]), 'array');
assert.equal(handy.getType([1,2,3]), 'array');
var tmp=[{"alpha":"beta"}];
assert.equal(handy.getType(tmp), 'array');
done();
});
it('regex', function(done) {
assert.equal(handy.getType(/./), 'regexp');
assert.equal(handy.getType(/[{'a':5}]/), 'regexp');
done();
});
it('regex', function(done) {
assert.equal(handy.getType(123), 'number');
assert.equal(handy.getType(123+45), 'number');
done();
});
});
// -- isArrayEqual
describe('isArrayEqual', function() {
it('non array', function(done) {
var x = {}, y=123;
assert.equal(handy.isArrayEqual(x,y), false);
done();
});
it('one array', function(done) {
var x = [123], y=123;
assert.equal(handy.isArrayEqual(x,y), false);
done();
});
it('different sizes', function(done) {
var x = [123], y=[1,123];
assert.equal(handy.isArrayEqual(x,y), false);
done();
});
// validity test cases
it('empty equal', function(done) {
var x = [], y=[];
assert.equal(handy.isArrayEqual(x,y), true);
done();
});
it('ordered equal', function(done) {
var x = [1,2,7], y=[1,2,7];
assert.equal(handy.isArrayEqual(x,y), true);
done();
});
it('not ordered equal', function(done) {
var x = [1,2,7], y=[7, 1,2];
assert.equal(handy.isArrayEqual(x,y), true);
done();
});
it('not equal', function(done) {
var x = [1,2,7], y=[7,5,2];
assert.equal(handy.isArrayEqual(x,y), false);
done();
});
});
// -- isObjectEqual
describe('isObjectEqual', function() {
it('object and number', function(done) {
var x = {}, y=123;
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
it('array and number', function(done) {
var x = [123], y=123;
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
it('two objects with different keys', function(done) {
var x = {b:'a'}, y={a:'a'};
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
it('two objects with same values but different types', function(done) {
var x = {b:'5'}, y={b:5};
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
it('two objects with same values but different types - 2', function(done) {
var x = {b:'5'}, y={b:['5']};
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
it('two objects with different order of arrays (but same values)', function(done) {
var x = {b:[1,2,3]}, y={b:[2,3,1]};
assert.equal(handy.isObjectEqual(x,y), false);
done();
});
// validity test cases
it('empty equal', function(done) {
var x = {}, y={};
assert.equal(handy.isObjectEqual(x,y), true);
done();
});
it('ordered equality', function(done) {
var x = {a:'a',b:12}, y={a:'a',b:12};
assert.equal(handy.isObjectEqual(x,y), true);
done();
});
it('not ordered equal', function(done) {
var x = {a:'a',b:12,c:[1,2]}, y={c:[1,2],a:'a',b:12};
assert.equal(handy.isObjectEqual(x,y), true);
done();
});
it('deep order mismatch', function(done) {
var x = {a:'a',b:12,c:{c1:'a',c2:[1,2]}}, y={b:12,c:{c2:[1,2],c1:'a'},a:'a'};
assert.equal(handy.isObjectEqual(x,y), true);
done();
});
});
// -- merge
describe('merge - shallow', function() {
it('one empty', function(done) {
var x = {}, y={a:'hi'};
assert.deepEqual(handy.merge(x,y), y);
done();
});
it('both empty', function(done) {
var x = {}, y={};
assert.deepEqual(handy.merge(x,y), y);
done();
});
it('invalid objects', function(done) {
var x = {}, y=[1,2,3];
assert.deepEqual(handy.merge(x,y), {0:1,1:2,2:3});
done();
});
it('array objects', function(done) {
var x = {}, y=[1,2,3];
assert.deepEqual(handy.merge(y,x), y);
done();
});
it('array merge', function(done) {
var x = [4,5,6,7], y=[1,2,3];
assert.deepEqual(handy.merge(x,y), [1,2,3,7]);
done();
});
it('replace string', function(done) {
var x = {a:'hi'}, y={a:'there'};
assert.deepEqual(handy.merge(x,y), y);
done();
});
it('replace object', function(done) {
var x = {a:{x:34}}, y={a:{a:'there',b:'hi'}};
assert.deepEqual(handy.merge(x,y), y);
done();
});
it('replace array', function(done) {
var x = {a:[1,2,3]}, y={a:[4,5]};
assert.deepEqual(handy.merge(x,y), y);
done();
});
it('merge object', function(done) {
var x = {a:'123', b:33}, y={a:12, x:45}, z={a:12,b:33,x:45};
assert.deepEqual(handy.merge(x,y), z);
done();
});
it('three objects - replace', function(done) {
var x = {a:'123', b:33}, y={a:12}, z={a:19,b:15,x:45};
assert.deepEqual(handy.merge(x,y,z), z);
done();
});
it('three objects - merge', function(done) {
var x = {a:'123', b:33}, y={a:12, c:4}, z={y:34,p:4}, r={a:12,b:33,c:4,y:34,p:4};
assert.deepEqual(handy.merge(x,y,z), r);
done();
});
});
// -- deepMerge
describe('deepMerge', function() {
it('one empty', function(done) {
var x = {}, y={a:'hi'};
assert.deepEqual(handy.deepMerge(x,y), handy.merge(x,y));
done();
});
it('first level check', function(done) {
var x = {a:1,b:3}, y={a:'hi'};
assert.deepEqual(handy.deepMerge(x,y), {a:'hi',b:3});
done();
});
it('second level check - replace', function(done) {
var x = {a:1,lvl2:{a:3,b:5}}, y={lvl2:{a:45}};
var r = {a:1,lvl2:{a:45,b:5}};
assert.deepEqual(handy.deepMerge(x,y), r);
done();
});
it('second level check - addition', function(done) {
var x = {a:1,lvl2:{a:3,b:5}}, y={lvl2:{c:45}};
var r = {a:1,lvl2:{a:3,b:5,c:45}};
assert.deepEqual(handy.deepMerge(x,y), r);
done();
});
it('second level check - array replace', function(done) {
var x = {a:1,lvl2:{a:3,b:5,c:[1,2,3]}}, y={lvl2:{c:[4,5],d:'hi'}};
var r = {a:1,lvl2:{a:3,b:5,c:[4,5],d:'hi'}};
assert.deepEqual(handy.deepMerge(x,y), r);
done();
});
it('third level check - replace', function(done) {
var x = {a:1,lvl2:{a:3,b:5,lvl3:{p:9,q:8}}}, y={lvl2:{lvl3:{q:1}}};
var r = {a:1,lvl2:{a:3,b:5,lvl3:{p:9,q:1}}};
assert.deepEqual(handy.deepMerge(x,y), r);
done();
});
it('third level check - addition', function(done) {
var x = {a:1,lvl2:{a:3,b:5,lvl3:{p:9,q:8}}}, y={lvl2:{lvl3:{z:'new a'}}};
var r = {a:1,lvl2:{a:3,b:5,lvl3:{p:9,q:8,z:'new a'}}};
assert.deepEqual(handy.deepMerge(x,y), r);
done();
});
});
});