| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import {expect} from 'chai';
- import {isDeepEqual} from './is-deep-equal.js';
- const check = (a, b, expected) => {
- expect(isDeepEqual(a, b)).to.be.eq(expected);
- expect(isDeepEqual(b, a)).to.be.eq(expected);
- };
- describe('isDeepEqual', function () {
- describe('string', function () {
- it('a non-empty string', function () {
- check('str', 'str', true);
- check('str', '', false);
- check('str', 10, false);
- check('str', 0, false);
- check('str', -10, false);
- check('str', true, false);
- check('str', false, false);
- check('str', undefined, false);
- check('str', null, false);
- check('str', {foo: 'bar'}, false);
- check('str', {}, false);
- check('str', [1, 2, 3], false);
- check('str', [], false);
- });
- it('an empty string', function () {
- check('', 'str', false);
- check('', '', true);
- check('', 10, false);
- check('', 0, false);
- check('', -10, false);
- check('', true, false);
- check('', false, false);
- check('', undefined, false);
- check('', null, false);
- check('', {foo: 'bar'}, false);
- check('', {}, false);
- check('', [1, 2, 3], false);
- check('', [], false);
- });
- });
- describe('number', function () {
- it('a positive number', function () {
- check(10, 'str', false);
- check(10, '', false);
- check(10, 10, true);
- check(10, 0, false);
- check(10, -10, false);
- check(10, true, false);
- check(10, false, false);
- check(10, undefined, false);
- check(10, null, false);
- check(10, {foo: 'bar'}, false);
- check(10, {}, false);
- check(10, [1, 2, 3], false);
- check(10, [], false);
- });
- it('zero', function () {
- check(0, 'str', false);
- check(0, '', false);
- check(0, 10, false);
- check(0, 0, true);
- check(0, -10, false);
- check(0, true, false);
- check(0, false, false);
- check(0, undefined, false);
- check(0, null, false);
- check(0, {foo: 'bar'}, false);
- check(0, {}, false);
- check(0, [1, 2, 3], false);
- check(0, [], false);
- });
- it('a negative number', function () {
- check(-10, 'str', false);
- check(-10, '', false);
- check(-10, 10, false);
- check(-10, 0, false);
- check(-10, -10, true);
- check(-10, true, false);
- check(-10, false, false);
- check(-10, undefined, false);
- check(-10, null, false);
- check(-10, {foo: 'bar'}, false);
- check(-10, {}, false);
- check(-10, [1, 2, 3], false);
- check(-10, [], false);
- });
- });
- describe('boolean', function () {
- it('true', function () {
- check(true, 'str', false);
- check(true, '', false);
- check(true, 10, false);
- check(true, 0, false);
- check(true, -10, false);
- check(true, true, true);
- check(true, false, false);
- check(true, undefined, false);
- check(true, null, false);
- check(true, {foo: 'bar'}, false);
- check(true, {}, false);
- check(true, [1, 2, 3], false);
- check(true, [], false);
- });
- it('false', function () {
- check(false, 'str', false);
- check(false, '', false);
- check(false, 10, false);
- check(false, 0, false);
- check(false, -10, false);
- check(false, true, false);
- check(false, false, true);
- check(false, undefined, false);
- check(false, null, false);
- check(false, {foo: 'bar'}, false);
- check(false, {}, false);
- check(false, [1, 2, 3], false);
- check(false, [], false);
- });
- });
- describe('array', function () {
- it('an array of numbers', function () {
- check([1, 2, 3], 'str', false);
- check([1, 2, 3], '', false);
- check([1, 2, 3], 10, false);
- check([1, 2, 3], 0, false);
- check([1, 2, 3], -10, false);
- check([1, 2, 3], true, false);
- check([1, 2, 3], false, false);
- check([1, 2, 3], undefined, false);
- check([1, 2, 3], null, false);
- check([1, 2, 3], {foo: 'bar'}, false);
- check([1, 2, 3], {}, false);
- check([1, 2, 3], [1, 2, 3], true);
- check([1, 2, 3], [], false);
- });
- it('an empty array', function () {
- check([], 'str', false);
- check([], '', false);
- check([], 10, false);
- check([], 0, false);
- check([], -10, false);
- check([], true, false);
- check([], false, false);
- check([], undefined, false);
- check([], null, false);
- check([], {foo: 'bar'}, false);
- check([], {}, false);
- check([], [1, 2, 3], false);
- check([], [], true);
- });
- });
- describe('object', function () {
- it('string key and string value', function () {
- check({foo: 'bar'}, 'str', false);
- check({foo: 'bar'}, '', false);
- check({foo: 'bar'}, 10, false);
- check({foo: 'bar'}, 0, false);
- check({foo: 'bar'}, -10, false);
- check({foo: 'bar'}, true, false);
- check({foo: 'bar'}, false, false);
- check({foo: 'bar'}, undefined, false);
- check({foo: 'bar'}, null, false);
- check({foo: 'bar'}, {foo: 'bar'}, true);
- check({foo: 'bar'}, {}, false);
- check({foo: 'bar'}, [1, 2, 3], false);
- check({foo: 'bar'}, [], false);
- });
- it('an empty object', function () {
- check({}, 'str', false);
- check({}, '', false);
- check({}, 10, false);
- check({}, 0, false);
- check({}, -10, false);
- check({}, true, false);
- check({}, false, false);
- check({}, undefined, false);
- check({}, null, false);
- check({}, {foo: 'bar'}, false);
- check({}, {}, true);
- check({}, [1, 2, 3], false);
- check({}, [], false);
- });
- it('null', function () {
- check(null, 'str', false);
- check(null, '', false);
- check(null, 10, false);
- check(null, 0, false);
- check(null, -10, false);
- check(null, true, false);
- check(null, false, false);
- check(null, undefined, false);
- check(null, null, true);
- check(null, {foo: 'bar'}, false);
- check(null, {}, false);
- check(null, [1, 2, 3], false);
- check(null, [], false);
- });
- it('circular reference to itself', function () {
- const a = {foo: 'bar'};
- const b = {baz: 'qux'};
- const c = {foo: 'bar'};
- a.itself = a;
- b.itself = b;
- c.itself = c;
- check(a, b, false);
- check(a, c, true);
- });
- });
- it('undefined', function () {
- check(undefined, 'str', false);
- check(undefined, '', false);
- check(undefined, 10, false);
- check(undefined, 0, false);
- check(undefined, -10, false);
- check(undefined, true, false);
- check(undefined, false, false);
- check(undefined, undefined, true);
- check(undefined, null, false);
- check(undefined, {foo: 'bar'}, false);
- check(undefined, {}, false);
- check(undefined, [1, 2, 3], false);
- check(undefined, [], false);
- });
- });
|