|
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();
|
|
});
|