47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
|
// Copyright 2021 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import { assert } from 'chai';
|
||
|
|
||
|
import { areObjectEntriesEqual } from '../../util/areObjectEntriesEqual';
|
||
|
|
||
|
describe('areObjectEntriesEqual', () => {
|
||
|
type TestObject = { foo?: number; bar?: number };
|
||
|
|
||
|
const empty: TestObject = {};
|
||
|
const foo: TestObject = { foo: 1 };
|
||
|
const bar: TestObject = { bar: 2 };
|
||
|
const undefinedEntries: TestObject = { foo: undefined, bar: undefined };
|
||
|
|
||
|
it('returns true for an empty list of keys', () => {
|
||
|
assert.isTrue(areObjectEntriesEqual({}, {}, []));
|
||
|
assert.isTrue(areObjectEntriesEqual(foo, foo, []));
|
||
|
assert.isTrue(areObjectEntriesEqual(foo, bar, []));
|
||
|
});
|
||
|
|
||
|
it('returns true for empty objects', () => {
|
||
|
assert.isTrue(areObjectEntriesEqual(empty, empty, ['foo']));
|
||
|
});
|
||
|
|
||
|
it('considers missing keys equal to undefined keys', () => {
|
||
|
assert.isTrue(
|
||
|
areObjectEntriesEqual(empty, undefinedEntries, ['foo', 'bar'])
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it('ignores unspecified properties', () => {
|
||
|
assert.isTrue(areObjectEntriesEqual({ x: 1, y: 2 }, { x: 1, y: 3 }, ['x']));
|
||
|
});
|
||
|
|
||
|
it('returns false for different objects', () => {
|
||
|
assert.isFalse(areObjectEntriesEqual({ x: 1 }, { x: 2 }, ['x']));
|
||
|
assert.isFalse(
|
||
|
areObjectEntriesEqual({ x: 1, y: 2 }, { x: 1, y: 3 }, ['x', 'y'])
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it('only performs a shallow check', () => {
|
||
|
assert.isFalse(areObjectEntriesEqual({ x: [1, 2] }, { x: [1, 2] }, ['x']));
|
||
|
});
|
||
|
});
|