File: custom-array-merge.js

package info (click to toggle)
node-deepmerge 4.3.1%2B~1.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 276 kB
  • sloc: javascript: 917; makefile: 4
file content (70 lines) | stat: -rw-r--r-- 1,660 bytes parent folder | download | duplicates (3)
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()
})