renovate/lib/util/clone.spec.ts

57 lines
1.2 KiB
TypeScript

import { clone } from './clone';
describe('util/clone', () => {
test.each`
input | expected
${undefined} | ${undefined}
${null} | ${null}
${true} | ${true}
${false} | ${false}
${0} | ${0}
${1} | ${1}
${NaN} | ${NaN}
${Infinity} | ${Infinity}
${-Infinity} | ${-Infinity}
${''} | ${''}
${'string'} | ${'string'}
${[]} | ${[]}
${[1, 2, 3]} | ${[1, 2, 3]}
${{}} | ${{}}
${{ a: 1 }} | ${{ a: 1 }}
`('returns $expected when input is $input', ({ input, expected }) => {
const res = clone(input);
expect(res).toStrictEqual(expected);
});
it('maintains same order', () => {
const obj: any = {
b: 'foo',
a: 'bar',
c: 'baz',
};
const res = clone(obj);
expect(Object.entries(res)).toMatchObject([
['b', 'foo'],
['a', 'bar'],
['c', 'baz'],
]);
});
it('assigns "[Circular]" to circular references', () => {
const obj: any = {
name: 'object',
type: 'object',
isObject: true,
};
obj.circular = obj;
expect(clone(obj)).toMatchObject({
circular: '[Circular]',
isObject: true,
name: 'object',
type: 'object',
});
});
});