signal-desktop/ts/test-both/util/areObjectEntriesEqual_test.ts
2021-10-29 18:19:44 -05:00

46 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']));
});
});