UNPKG

@novo-learning/novo-sdk

Version:

SDK for the Novolanguage Speech Analysis API

139 lines 4.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const merge_deep_1 = require("./merge-deep"); const mergeSource = Object.freeze({ level1: true, sibling: 10, inner: { level2: true, sibling: 100, }, }); describe('Merge deep merges properties', () => { const cases = [ [{ source: mergeSource, changes: [] }, mergeSource], [{ source: mergeSource, changes: [{}] }, mergeSource], [ { source: mergeSource, changes: [{ sibling: 20 }] }, { level1: true, sibling: 20, inner: { level2: true, sibling: 100, }, }, ], [ { source: mergeSource, changes: [{ inner: { sibling: 200 } }] }, { level1: true, sibling: 10, inner: { level2: true, sibling: 200, }, }, ], [ { source: mergeSource, changes: [{ inner: { sibling: 200 }, sibling: 20 }] }, { level1: true, sibling: 20, inner: { level2: true, sibling: 200, }, }, ], [ { source: mergeSource, changes: [{ inner: { sibling: 300 } }, { sibling: 30 }] }, { level1: true, sibling: 30, inner: { level2: true, sibling: 300, }, }, ], [ { source: mergeSource, changes: [{ extra: true }] }, { ...mergeSource, extra: true, }, ], [ { source: mergeSource, changes: [{ inner: { extra: true } }] }, { ...mergeSource, inner: { ...mergeSource.inner, extra: true }, }, ], ]; test.each(cases)('merge deep', ({ source, changes }, expectedResult) => { const target = structuredClone(source); const result = (0, merge_deep_1.mergeDeep)(target, ...changes); expect(result).toEqual(expectedResult); expect(target).toEqual(expectedResult); }); const casesPrototype = [ [ { source: mergeSource, changes: [ { constructor: () => { console.error(''); }, }, ], }, mergeSource, ], [{ source: mergeSource, changes: [{ __proto__: { test: true } }] }, mergeSource], [{ source: mergeSource, changes: [{ prototype: { test: true } }] }, mergeSource], [ { source: mergeSource, changes: [{ sibling: 20, __proto__: { test: true } }] }, { level1: true, sibling: 20, inner: { level2: true, sibling: 100, }, }, ], [ { source: mergeSource, changes: [ { sibling: 20, inner: { constructor: () => { console.error(''); }, }, }, ], }, { level1: true, sibling: 20, inner: { level2: true, sibling: 100, }, }, ], ]; test.each(casesPrototype)('merge deep does not pollute prototype', ({ source, changes }, expectedResult) => { const target = structuredClone(source); const result = (0, merge_deep_1.mergeDeep)(target, ...changes); expect(result).toEqual(expectedResult); expect(target).toEqual(expectedResult); }); }); //# sourceMappingURL=merge-deep.spec.js.map