| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- var merge = require('../')
- var test = require('tap').test
- test('add keys in target that do not exist at the root', function (t) {
- var src = { key1: 'value1', key2: 'value2' }
- target = {}
- var res = merge(target, src)
- t.deepEqual(target, {}, 'merge should be immutable')
- t.deepEqual(res, src)
- t.end()
- })
- test('merge existing simple keys in target at the roots', function (t) {
- var src = { key1: 'changed', key2: 'value2' }
- var target = { key1: 'value1', key3: 'value3' }
- var expected = {
- key1: 'changed',
- key2: 'value2',
- key3: 'value3'
- }
- t.deepEqual(target, { key1: 'value1', key3: 'value3' })
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
- test('merge nested objects into target', function (t) {
- var src = {
- key1: {
- subkey1: 'changed',
- subkey3: 'added'
- }
- }
- var target = {
- key1: {
- subkey1: 'value1',
- subkey2: 'value2'
- }
- }
- var expected = {
- key1: {
- subkey1: 'changed',
- subkey2: 'value2',
- subkey3: 'added'
- }
- }
- t.deepEqual(target, {
- key1: {
- subkey1: 'value1',
- subkey2: 'value2'
- }
- })
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
- test('replace simple key with nested object in target', function (t) {
- var src = {
- key1: {
- subkey1: 'subvalue1',
- subkey2: 'subvalue2'
- }
- }
- var target = {
- key1: 'value1',
- key2: 'value2'
- }
- var expected = {
- key1: {
- subkey1: 'subvalue1',
- subkey2: 'subvalue2'
- },
- key2: 'value2'
- }
- t.deepEqual(target, { key1: 'value1', key2: 'value2' })
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
- test('should add nested object in target', function(t) {
- var src = {
- "b": {
- "c": {}
- }
- }
- var target = {
- "a": {}
- }
- var expected = {
- "a": {},
- "b": {
- "c": {}
- }
- }
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
- test('should replace object with simple key in target', function (t) {
- var src = { key1: 'value1' }
- var target = {
- key1: {
- subkey1: 'subvalue1',
- subkey2: 'subvalue2'
- },
- key2: 'value2'
- }
- var expected = { key1: 'value1', key2: 'value2' }
- t.deepEqual(target, {
- key1: {
- subkey1: 'subvalue1',
- subkey2: 'subvalue2'
- },
- key2: 'value2'
- })
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
- test('should work on simple array', function (t) {
- var src = ['one', 'three']
- var target = ['one', 'two']
- var expected = ['one', 'two', 'three']
- t.deepEqual(target, ['one', 'two'])
- t.deepEqual(merge(target, src), expected)
- t.ok(Array.isArray(merge(target, src)))
- t.end()
- })
- test('should work on another simple array', function(t) {
- var target = ["a1","a2","c1","f1","p1"];
- var src = ["t1","s1","c2","r1","p2","p3"];
- var expected = ["a1", "a2", "c1", "f1", "p1", "t1", "s1", "c2", "r1", "p2", "p3"]
- t.deepEqual(target, ["a1", "a2", "c1", "f1", "p1"])
- t.deepEqual(merge(target, src), expected)
- t.ok(Array.isArray(merge(target, src)))
- t.end()
- })
- test('should work on array properties', function (t) {
- var src = {
- key1: ['one', 'three'],
- key2: ['four']
- }
- var target = {
- key1: ['one', 'two']
- }
- var expected = {
- key1: ['one', 'two', 'three'],
- key2: ['four']
- }
- t.deepEqual(target, {
- key1: ['one', 'two']
- })
- t.deepEqual(merge(target, src), expected)
- t.ok(Array.isArray(merge(target, src).key1))
- t.ok(Array.isArray(merge(target, src).key2))
- t.end()
- })
- test('should work on array of objects', function (t) {
- var src = [
- { key1: ['one', 'three'], key2: ['one'] },
- { key3: ['five'] }
- ]
- var target = [
- { key1: ['one', 'two'] },
- { key3: ['four'] }
- ]
- var expected = [
- { key1: ['one', 'two', 'three'], key2: ['one'] },
- { key3: ['four', 'five'] }
- ]
- t.deepEqual(target, [
- { key1: ['one', 'two'] },
- { key3: ['four'] }
- ])
- t.deepEqual(merge(target, src), expected)
- t.ok(Array.isArray(merge(target, src)), 'result should be an array')
- t.ok(Array.isArray(merge(target, src)[0].key1), 'subkey should be an array too')
- t.end()
- })
- test('should work on arrays of nested objects', function(t) {
- var target = [
- { key1: { subkey: 'one' }}
- ]
- var src = [
- { key1: { subkey: 'two' }},
- { key2: { subkey: 'three' }}
- ]
- var expected = [
- { key1: { subkey: 'two' }},
- { key2: { subkey: 'three' }}
- ]
- t.deepEqual(merge(target, src), expected)
- t.end()
- })
|