UNPKG

deep-match

Version:

Check if two values deeply match

102 lines (89 loc) 3.9 kB
const match = require('..'); const expect = require('unexpected'); describe('deep-match', () => { it('should match primitives', () => { expect(match('a', 'a'), 'to be true'); expect(match('a', 'b'), 'to be false'); expect(match('1', '1'), 'to be true'); expect(match('1', '2'), 'to be false'); expect(match(true, true), 'to be true'); expect(match(true, false), 'to be false'); expect(match(null, null), 'to be true'); }); it('should not coerce types', () => { expect(match('1', 1), 'to be false'); expect(match('true', true), 'to be false'); expect(match([], ''), 'to be false'); }); it('should compare properties', () => { expect(match({ a: 1, b: 2 }, { a: 1, b: 2 }), 'to be true'); expect(match({ a: 1, b: 2 }, { a: 2, b: 2 }), 'to be false'); }); it('should ignore extra properties', () => { expect(match({ a: 1, b: 2 }, { a: 1 }), 'to be true'); expect(match({ a: 1, b: 2 }, { a: 2 }), 'to be false'); }); it('should not match when properties are missing', () => { expect(match({ a: 1 }, { a: 1, b: 2 }), 'to be false'); }); it('should compare nested objects', () => { expect(match({ a: { b: 1, c: 2 } }, { a: { b: 1 } }), 'to be true'); expect(match({ a: { b: 1, c: 2 } }, { a: { b: 2 } }), 'to be false'); expect(match({ a: { b: { c: 1 } } }, { a: { b: { } } }), 'to be true'); expect(match({ a: { b: { c: 1 } } }, { a: { c: 2 } }), 'to be false'); }); it('should compare arrays', () => { expect(match([], []), 'to be true'); expect(match([1], []), 'to be true'); expect(match([], [1]), 'to be false'); expect(match([1, 2, 3], [3, 1]), 'to be true'); expect(match([1, 2, 3], [2, 4]), 'to be false'); }); it('should compare arrays inside objects', () => { expect(match({ a: [1, 2] }, { a: [1] }), 'to be true'); expect(match({ a: [1, 2] }, { a: [3] }), 'to be false'); }); it('should compare objects inside arrays', () => { expect(match([{ a: 1 }, { b: 2 }], [{ a: 1 }]), 'to be true'); expect(match([{ a: 1 }, { b: 2 }], [{ b: 2 }, { a: 1 }]), 'to be true'); expect(match([{ a: 1 }, { b: 2 }], []), 'to be true'); expect(match([{ a: 1 }, { b: 2 }], [{ b: 3 }]), 'to be false'); }); it('should handle undefined and null values', () => { expect(match(undefined, ''), 'to be false'); expect(match(undefined, {}), 'to be false'); expect(match(undefined, []), 'to be false'); expect(match(undefined, /undefined/), 'to be false'); expect(match(null, ''), 'to be false'); expect(match(null, {}), 'to be false'); expect(match(null, []), 'to be false'); expect(match(null, /null/), 'to be false'); expect(match('', undefined), 'to be false'); expect(match({}, undefined), 'to be false'); expect(match([], undefined), 'to be false'); expect(match(/u/, undefined), 'to be false'); expect(match('', null), 'to be false'); expect(match({}, null), 'to be false'); expect(match([], null), 'to be false'); expect(match(/u/, null), 'to be false'); }); it('should execute regular expressions', () => { expect(match('aaa', /a+/), 'to be true'); expect(match('aaa', /b+/), 'to be false'); expect(match(['aaa', 'bbb'], [/a+/]), 'to be true'); expect(match(['aaa', 'bbb'], [/a+/, /b+/]), 'to be true'); expect(match(['aaa', 'bbb'], [/a+/, /c+/]), 'to be false'); }); it('should execute functions', () => { function isOne(value) { return value === 1; } expect(match(1, isOne), 'to be true'); expect(match(2, isOne), 'to be false'); expect(match({ one: 1, two: 2 }, { one: isOne }), 'to be true'); expect(match({ one: 1, two: 2 }, { two: isOne }), 'to be false'); expect(match([2, 3], [isOne]), 'to be false'); expect(match([1, 2], [isOne]), 'to be true'); expect(match([2, 3], [isOne]), 'to be false'); }); });