1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
var merge = require('../')
var test = require('tape')
test('custom merge array', function(t) {
var mergeFunctionCalled = false
function overwriteMerge(target, source, options) {
mergeFunctionCalled = true
t.equal(options.arrayMerge, overwriteMerge)
return source
}
const destination = {
someArray: [ 1, 2 ],
someObject: { what: 'yes' },
}
const source = {
someArray: [ 1, 2, 3 ],
}
const actual = merge(destination, source, { arrayMerge: overwriteMerge })
const expected = {
someArray: [ 1, 2, 3 ],
someObject: { what: 'yes' },
}
t.ok(mergeFunctionCalled)
t.deepEqual(actual, expected)
t.end()
})
test('merge top-level arrays', function(t) {
function overwriteMerge(a, b) {
return b
}
var actual = merge([ 1, 2 ], [ 1, 2 ], { arrayMerge: overwriteMerge })
var expected = [ 1, 2 ]
t.deepEqual(actual, expected)
t.end()
})
test('cloner function is available for merge functions to use', function(t) {
var customMergeWasCalled = false
function cloneMerge(target, source, options) {
customMergeWasCalled = true
t.ok(options.cloneUnlessOtherwiseSpecified, 'cloner function is available')
return target.concat(source).map(function(element) {
return options.cloneUnlessOtherwiseSpecified(element, options)
})
}
var src = {
key1: [ 'one', 'three' ],
key2: [ 'four' ],
}
var target = {
key1: [ 'one', 'two' ],
}
var expected = {
key1: [ 'one', 'two', 'one', 'three' ],
key2: [ 'four' ],
}
t.deepEqual(merge(target, src, { arrayMerge: cloneMerge }), expected)
t.ok(customMergeWasCalled)
t.ok(Array.isArray(merge(target, src).key1))
t.ok(Array.isArray(merge(target, src).key2))
t.end()
})
|