/ node_modules / xtend / test.js
test.js
  1  var test = require("tape")
  2  var extend = require("./")
  3  var mutableExtend = require("./mutable")
  4  
  5  test("merge", function(assert) {
  6      var a = { a: "foo" }
  7      var b = { b: "bar" }
  8  
  9      assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
 10      assert.end()
 11  })
 12  
 13  test("replace", function(assert) {
 14      var a = { a: "foo" }
 15      var b = { a: "bar" }
 16  
 17      assert.deepEqual(extend(a, b), { a: "bar" })
 18      assert.end()
 19  })
 20  
 21  test("undefined", function(assert) {
 22      var a = { a: undefined }
 23      var b = { b: "foo" }
 24  
 25      assert.deepEqual(extend(a, b), { a: undefined, b: "foo" })
 26      assert.deepEqual(extend(b, a), { a: undefined, b: "foo" })
 27      assert.end()
 28  })
 29  
 30  test("handle 0", function(assert) {
 31      var a = { a: "default" }
 32      var b = { a: 0 }
 33  
 34      assert.deepEqual(extend(a, b), { a: 0 })
 35      assert.deepEqual(extend(b, a), { a: "default" })
 36      assert.end()
 37  })
 38  
 39  test("is immutable", function (assert) {
 40      var record = {}
 41  
 42      extend(record, { foo: "bar" })
 43      assert.equal(record.foo, undefined)
 44      assert.end()
 45  })
 46  
 47  test("null as argument", function (assert) {
 48      var a = { foo: "bar" }
 49      var b = null
 50      var c = void 0
 51  
 52      assert.deepEqual(extend(b, a, c), { foo: "bar" })
 53      assert.end()
 54  })
 55  
 56  test("mutable", function (assert) {
 57      var a = { foo: "bar" }
 58  
 59      mutableExtend(a, { bar: "baz" })
 60  
 61      assert.equal(a.bar, "baz")
 62      assert.end()
 63  })
 64  
 65  test("null prototype", function(assert) {
 66      var a = { a: "foo" }
 67      var b = Object.create(null)
 68      b.b = "bar";
 69  
 70      assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
 71      assert.end()
 72  })
 73  
 74  test("null prototype mutable", function (assert) {
 75      var a = { foo: "bar" }
 76      var b = Object.create(null)
 77      b.bar = "baz";
 78  
 79      mutableExtend(a, b)
 80  
 81      assert.equal(a.bar, "baz")
 82      assert.end()
 83  })
 84  
 85  test("prototype pollution", function (assert) {
 86      var a = {}
 87      var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
 88  
 89      assert.strictEqual(a.oops, undefined)
 90      extend({}, maliciousPayload)
 91      assert.strictEqual(a.oops, undefined)
 92      assert.end()
 93  })
 94  
 95  test("prototype pollution mutable", function (assert) {
 96      var a = {}
 97      var maliciousPayload = '{"__proto__":{"oops":"It works!"}}'
 98  
 99      assert.strictEqual(a.oops, undefined)
100      mutableExtend({}, maliciousPayload)
101      assert.strictEqual(a.oops, undefined)
102      assert.end()
103  })