1 var test = require("tape")
2 var extend = require("./")
3 var mutableExtend = require("./mutable")
5 test("merge", function(assert) {
9 assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
13 test("replace", function(assert) {
17 assert.deepEqual(extend(a, b), { a: "bar" })
21 test("undefined", function(assert) {
22 var a = { a: undefined }
25 assert.deepEqual(extend(a, b), { a: undefined, b: "foo" })
26 assert.deepEqual(extend(b, a), { a: undefined, b: "foo" })
30 test("handle 0", function(assert) {
31 var a = { a: "default" }
34 assert.deepEqual(extend(a, b), { a: 0 })
35 assert.deepEqual(extend(b, a), { a: "default" })
39 test("is immutable", function (assert) {
42 extend(record, { foo: "bar" })
43 assert.equal(record.foo, undefined)
47 test("null as argument", function (assert) {
48 var a = { foo: "bar" }
52 assert.deepEqual(extend(b, a, c), { foo: "bar" })
56 test("mutable", function (assert) {
57 var a = { foo: "bar" }
59 mutableExtend(a, { bar: "baz" })
61 assert.equal(a.bar, "baz")
65 test("null prototype", function(assert) {
67 var b = Object.create(null)
70 assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
74 test("null prototype mutable", function (assert) {
75 var a = { foo: "bar" }
76 var b = Object.create(null)
81 assert.equal(a.bar, "baz")
85 test("prototype pollution", function (assert) {
87 var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
89 assert.strictEqual(a.oops, undefined)
90 extend({}, maliciousPayload)
91 assert.strictEqual(a.oops, undefined)
95 test("prototype pollution mutable", function (assert) {
97 var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
99 assert.strictEqual(a.oops, undefined)
100 mutableExtend({}, maliciousPayload)
101 assert.strictEqual(a.oops, undefined)