UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

292 lines (291 loc) 8.39 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var deepMerge_1 = require("./deepMerge"); describe('mergeDeepLeft and mergeRight tests', function () { test('basic', function () { var data1 = { a: 1, d: { e: { a: 5, }, }, }; var fn = function () { return; }; var data2 = { a: 2, b: 3, d: { d: fn, e: { a: 4, }, }, }; expect(deepMerge_1.deepMergeLeft(data1, data2)).toEqual({ a: 1, d: { d: fn, e: { a: 5, }, }, b: 3, }); expect(deepMerge_1.deepMergeRight(data1, data2)).toEqual({ a: 2, d: { d: fn, e: { a: 4, }, }, b: 3, }); }); var d1 = { a: [1, 2, 3, { a: 1 }], }; var d2 = { a: [7, 2, 3, { a: 1 }, { a: 2 }], }; test('Expecting correctly merged arrays', function () { expect(deepMerge_1.deepMergeLeft(d1, d2)).toEqual({ a: [1, 2, 3, { a: 1 }, 7, { a: 1 }, { a: 2 }], }); expect(deepMerge_1.deepMergeRight(d1, d2)).toEqual({ a: [7, 2, 3, { a: 1 }, { a: 2 }, 1, { a: 1 }], }); }); test('Testing cycle objects', function () { var data1 = { a: null, }; data1.a = data1; // Creating cycle var data2 = { a: 5, }; expect(deepMerge_1.deepMergeLeft(data1, data2)).toEqual({ a: data1, }); expect(deepMerge_1.deepMergeRight(data1, data2)).toEqual({ a: 5, }); }); test('Testing cycle arrays', function () { var data1 = { a: [], }; data1.a = [data1]; // Creating cycle var data2 = { a: [5], }; expect(deepMerge_1.deepMergeLeft(data1, data2)).toEqual({ a: [data1], }); expect(deepMerge_1.deepMergeRight(data1, data2)).toEqual({ a: [5, data1], }); }); test('Complicated example', function () { var source1 = { propS1: 'str1', propS2: 'str2', propN1: 1, propN2: 2, propA1: [1, 2, 3], propA2: [], propB1: true, propB2: false, propU1: null, propU2: null, propD1: undefined, propD2: undefined, propO1: { subS1: 'sub11', subS2: 'sub12', subN1: 11, subN2: 12, subA1: [11, 12, 13], subA2: [], subB1: false, subB2: true, subU1: null, subU2: null, subD1: undefined, subD2: undefined, propX1Deep: { a: { subS1: 'sub11', subS2: 'sub12', subN1: 11, subN2: 12, subA1: [11, 12, 13], subA2: [], subB1: false, subB2: true, subU1: null, subU2: null, subD1: undefined, subD2: undefined, }, }, }, propO2: { subS1: 'sub21', subS2: 'sub22', subN1: 21, subN2: 22, subA1: [21, 22, 23], subA2: [], subB1: false, subB2: true, subU1: null, subU2: null, subD1: undefined, subD2: undefined, }, }; var clone = __assign({}, source1); var source2 = { propS2: 'str2', propS3: 'str3', propN2: -2, propN3: 3, propA2: [2, 2], propA3: [3, 2, 1], propB2: true, propB3: false, propU2: 'not null', propU3: null, propD2: 'defined', propD3: undefined, propO2: { subS2: 'inv22', subS3: 'sub23', subN2: -22, subN3: 23, subA2: [5, 5, 5], subA3: [31, 32, 33], subB2: false, subB3: true, subU2: 'not null --- ', subU3: null, subD2: ' not undefined ----', subD3: undefined, }, propO3: { subS1: 'sub31', subS2: 'sub32', subN1: 31, subN2: 32, subA1: [31, 32, 33], subA2: [], subB1: false, subB2: true, subU1: null, subU2: null, subD1: undefined, subD2: undefined, }, }; expect(deepMerge_1.deepMergeLeft(source1, source2)).toEqual({ propA1: [1, 2, 3], propA2: [2], propA3: [3, 2, 1], propB1: true, propB2: false, propB3: false, propD1: undefined, propD2: 'defined', propD3: undefined, propN1: 1, propN2: 2, propN3: 3, propO1: { propX1Deep: { a: { subA1: [11, 12, 13], subA2: [], subB1: false, subB2: true, subD1: undefined, subD2: undefined, subN1: 11, subN2: 12, subS1: 'sub11', subS2: 'sub12', subU1: null, subU2: null, }, }, subA1: [11, 12, 13], subA2: [], subB1: false, subB2: true, subD1: undefined, subD2: undefined, subN1: 11, subN2: 12, subS1: 'sub11', subS2: 'sub12', subU1: null, subU2: null, }, propO2: { subA1: [21, 22, 23], subA2: [5], subA3: [31, 32, 33], subB1: false, subB2: true, subB3: true, subD1: undefined, subD2: ' not undefined ----', subD3: undefined, subN1: 21, subN2: 22, subN3: 23, subS1: 'sub21', subS2: 'sub22', subS3: 'sub23', subU1: undefined, subU2: 'not null --- ', subU3: null, }, propO3: { subA1: [31, 32, 33], subA2: [], subB1: false, subB2: true, subD1: undefined, subD2: undefined, subN1: 31, subN2: 32, subS1: 'sub31', subS2: 'sub32', subU1: null, subU2: null, }, propS1: 'str1', propS2: 'str2', propS3: 'str3', propU1: undefined, propU2: 'not null', propU3: null, }); expect(source1).toEqual(clone); }); });