forked from angus-c/just
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
86 lines (77 loc) · 2.23 KB
/
Copy pathindex.js
File metadata and controls
86 lines (77 loc) · 2.23 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var test = require('../util/test')(__filename);
var merge = require('../../packages/object-merge');
test('shallow merge merges properties', function(t) {
t.plan(2);
var src = {a: 3, b: 5};
t.deepEqual(merge(src, {a: 4, c: 8}), {a: 4, b: 5, c: 8});
t.deepEqual(src, {a: 4, b: 5, c: 8});
t.end();
});
test('shallow merge merges into new object', function(t) {
t.plan(2);
var src = {};
t.deepEqual(merge(src, {a: 3, b: 5}, {a: 4, c: 8}), {a: 4, b: 5, c: 8});
t.deepEqual(src, {a: 4, b: 5, c: 8});
t.end();
});
test('shallow merge does not clone child objects', function(t) {
t.plan(5);
var obj = {p: 4};
var src2 = {a: 3, b: 5};
t.deepEqual(merge(src2, {c: obj}), {a: 3, b: 5, c: {p: 4}});
obj.p = 9;
t.deepEqual(src2, {a: 3, b: 5, c: {p: 9}});
var arrInner = [1, 2, 3];
var arrOuter = ['a', 'b', arrInner];
var src1 = {a: 3, b: 5};
t.deepEqual(merge(src1, {c: arrOuter}), {a: 3, b: 5, c: ['a', 'b', [1, 2, 3]]});
t.equal(arrOuter, src1.c);
t.equal(arrInner, src1.c[2]);
});
test('null values are copied', function(t) {
t.plan(2);
var src = {a: 3, b: 5};
t.deepEqual(merge(src, {a: null, c: null}), {a: null, b: 5, c: null});
t.deepEqual(src, {a: null, b: 5, c: null});
t.end();
});
test('explicitly undefined values are copied', function(t) {
t.plan(2);
var src = {a: 3, b: 5};
t.deepEqual(merge(src, {a: undefined, c: undefined}), {a: undefined, b: 5, c: undefined});
t.deepEqual(src, {a: undefined, b: 5, c: undefined});
t.end();
});
test('when no extendee, extenders is returned unmutated', function(t) {
t.plan(3);
var src = {a: 3, b: 5};
var srcRef = src;
t.deepEqual(src, merge(src));
t.equal(srcRef, src);
t.equal(srcRef, src);
t.end();
});
test('extendee and extenders can be functions', function(t) {
t.plan(2);
var fn = function() {};
var result = merge(fn, {a: 4});
t.ok(typeof result == 'function');
t.ok(result.a === 4);
t.end();
});
test('extendee and extenders must be objects', function(t) {
t.plan(4);
t.throws(function() {
merge(3, {a: 4, b: 5});
});
t.throws(function() {
merge({a: 4, b: 5}, 3);
});
t.throws(function() {
merge({a: 4, b: 5}, true);
});
t.throws(function() {
merge({a: 4, b: 5}, {b: 4, c: 5}, 'c');
});
t.end();
});