art-standard-lib
Version:
The Standard Library for JavaScript that aught to be.
161 lines (135 loc) • 3.47 kB
text/coffeescript
{
merge
mergeWithoutNulls
mergeInto
mergeIntoUnless
pureMerge
deepMerge
} = require './StandardImport'
module.exports = suite:
mergeWithoutNulls: ->
test "vs normal merge", ->
assert.eq
a: 1, c: 3
mergeWithoutNulls
a: 1
b: 2
{
b: null
c: 3
}
assert.eq
a: 1, b: null, c: 3
merge
a: 1
b: 2
{
b: null
c: 3
}
merge: ->
test "merge a, b", ->
a = foo:1
b = bar:2
res = merge a, b
assert.eq res, foo: 1, bar: 2
assert.eq a, foo:1
assert.eq b, bar:2
assert.neq a, res
assert.neq b, res
test "merge a, b, c", ->
a = foo:1
b = foo:2
c = foo:3
res = merge a, b, c
assert.eq res, foo:3
test "merge a, [b, c]", ->
a = foo:1
b = foo:2
c = foo:3
res = merge a, [b, c]
assert.eq res, foo:3
test "merge a, null, c", ->
a = foo:1
b = null
c = foo:3
res = merge a, b, c
assert.eq res, foo:3
test "merge()", ->
res = merge()
assert.eq res, {}
test "merge [a, b]", ->
a = foo:1
b = bar:2
res = merge [a, b]
assert.eq res, foo: 1, bar: 2
test "merge a:123, {a: undefined}", ->
assert.eq a: 123, merge a:123, {a: undefined}
mergeInto: ->
test "mergeInto()", ->
assert.eq null, mergeInto()
test "mergeInto null, b", ->
assert.eq bar: 2, mergeInto null, bar: 2
test "mergeInto a, b", ->
a = foo:1
b = bar:2
res = mergeInto a, b
assert.eq res, foo: 1, bar: 2
assert.eq a, res
assert.eq b, bar:2
mergeIntoUnless: ->
test "{a: undefined}, a: 123", ->
out = mergeIntoUnless v = {a: undefined}, a: 123
assert.equal v, out
assert.eq v, a: 123
test "{a: 456}, a: 123", ->
out = mergeIntoUnless v = {a: 456}, a: 123
assert.equal v, out
assert.eq v, a: 456
test "{a: 456}, b: 123", ->
out = mergeIntoUnless v = {a: 456}, b: 123
assert.equal v, out
assert.eq v, a: 456, b: 123
pureMerge: ->
test "pureMerge()", ->
assert.eq null, pureMerge()
test "pureMerge a", ->
a = foo:1
res = pureMerge a
assert.eq true, res == a
test "pureMerge(a, b) when b shadows a", ->
a = foo:1
b = foo:2
res = pureMerge a, b
assert.eq true, res == b
test "pureMerge(a, b) when b doesn't shadow a", ->
a = foo:1
b = bar:2
res = pureMerge a, b
assert.eq res, foo:1, bar:2
assert.neq a, res
assert.neq b, res
deepMerge: ->
test "same as merge", ->
a = foo: 1, bar: 2
b = bar: 3, baz: 4
assert.eq deepMerge(a, b), merge(a, b)
test "nested objects with the same key get merged", ->
a = foo: 1, bar: {one: 1, two: 2}
b = bad: "wolf"
c = bar: {two: 200, three: 3}, baz: 4
assert.neq deepMerge(a, b, c), merge(a, b, c)
assert.eq deepMerge(a, b, c),
foo: 1
bar: one: 1, two: 200, three: 3
baz: 4
bad: "wolf"
test "three level test", ->
a = bad: "wolf"
b = foo: 1, bar: baz: a: 123
c = foo: 1, bar: baz: b: 123
assert.neq deepMerge(a, b, c), merge(a, b, c)
assert.eq deepMerge(a, b, c),
bad: "wolf"
foo: 1
bar: baz: a: 123, b: 123