ts-prime
Version:
A utility library for JavaScript and Typescript.
290 lines (289 loc) • 8.22 kB
JavaScript
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);
};
import { deepMergeLeft, deepMergeRight } from './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(deepMergeLeft(data1, data2)).toEqual({
a: 1,
d: {
d: fn,
e: {
a: 5,
},
},
b: 3,
});
expect(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(deepMergeLeft(d1, d2)).toEqual({
a: [1, 2, 3, { a: 1 }, 7, { a: 1 }, { a: 2 }],
});
expect(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(deepMergeLeft(data1, data2)).toEqual({
a: data1,
});
expect(deepMergeRight(data1, data2)).toEqual({
a: 5,
});
});
test('Testing cycle arrays', function () {
var data1 = {
a: [],
};
data1.a = [data1]; // Creating cycle
var data2 = {
a: [5],
};
expect(deepMergeLeft(data1, data2)).toEqual({
a: [data1],
});
expect(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(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);
});
});