Files
gruvbox/node_modules/is-subset/test.js

208 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import test from 'tape-catch';
import isSubset from './module';
test('Detects shallow subsets.', (is) => {
is.ok(isSubset(
{},
{}
), 'with empty objects'
);
is.ok(isSubset(
{a: 1},
{}
), 'with an empty subset'
);
is.ok(isSubset(
{a: 1, b: 2},
{a: 1, b: 2}
), 'with deep-equal objects'
);
is.ok(isSubset(
{a: 1, b: true, c: null, d: 'D', e: undefined, 'F-': 'anything'},
{a: 1, b: true, c: null, d: 'D', e: undefined, 'F-': 'anything'}
), 'with deep-equal objects of different kinds of values'
);
is.ok(isSubset(
{a: 1, b: 2},
{a: 1}
), 'with simple subsets'
);
is.end();
});
test('Detects shallow non-subsets.', (is) => {
is.notOk(isSubset(
{},
{a: 1}
), 'with an empty superset'
);
is.notOk(isSubset(
{a: 1},
{a: 2}
), 'with differences in values'
);
is.notOk(isSubset(
{a: 1},
{b: 1}
), 'with differences in keys'
);
is.notOk(isSubset(
{a: 1},
{a: 1, b: 2}
), 'with different sizes'
);
is.notOk(isSubset(
{a: 0},
{a: false}
), 'seeing the difference between falsey values'
);
is.notOk(isSubset(
{a: null},
{a: undefined}
), 'seeing the difference between null and undefined'
);
is.notOk(isSubset(
{a: 1},
{a: 1, b: undefined}
), 'seeing the difference between undefined reference and undefined value'
);
is.end();
});
test('Detects deep subsets.', (is) => {
is.ok(isSubset(
{a: {}},
{a: {}}
), 'with nested empty objects'
);
is.ok(isSubset(
{a: {}},
{}
), 'with an empty subset'
);
is.ok(isSubset(
{a: {b: 2}},
{a: {}}
), 'with a nested empty subset'
);
is.ok(isSubset(
{a: {b: 2}},
{a: {b: 2}}
), 'with deep-equal objects'
);
is.ok(isSubset(
{a: 1, b: true, c: null, d: 'D', e: undefined, 'F-': 'anything'},
{a: 1, b: true, c: null, d: 'D', e: undefined, 'F-': 'anything'}
), 'with deep-equal objects of different kinds of values'
);
is.ok(isSubset(
{a: 1, b: {c: 3, d: 4}, e: {f: {g: 7, h: {i: 9}}}},
{a: 1, b: {d: 4}, e: {f: {g: 7}}}
), 'with multiple levels of nesting'
);
is.end();
});
test('Detects deep non-subsets.', (is) => {
is.notOk(isSubset(
{a: {}},
{a: {b: 1}}
), 'with an empty object in the superset'
);
is.notOk(isSubset(
{a: {b: 2}},
{a: {b: 3}}
), 'with differences in values in a nested object'
);
is.notOk(isSubset(
{z: {a: 1}},
{z: {b: 1}}
), 'with differences in keys in a nested object'
);
is.notOk(isSubset(
{z: {a: 1}},
{z: {a: 1, b: 2}}
), 'with different sizes of a nested object'
);
is.end();
});
test('Works with array values.', (is) => {
is.ok(isSubset(
{a: []},
{a: []}
), 'treating empty arrays as equal'
);
is.ok(isSubset(
{a: [1]},
{a: [1]}
), 'treating equal arrays as equal'
);
is.notOk(isSubset(
{a: [1]},
{a: [1, 2]}
), 'detecting differences in length'
);
is.notOk(isSubset(
{a: [1]},
{a: [2]}
), 'detecting differences in values'
);
is.ok(isSubset(
{a: [1, 2, 3]},
{a: [1, 2]}
), 'treating array subsets as subsets'
);
is.notOk(isSubset(
{a: [1, 2, 3]},
{a: [1, 3]}
), ' only if the order is identical'
);
is.end();
});
test('Returns false for non-object “objects”.', (is) => {
is.notOk(isSubset(
'a',
{}
), 'for the superset'
);
is.notOk(isSubset(
{},
'a'
), 'for the subset'
);
is.end();
});