'use strict'; var assert = require('assert'); var assign = require('./'); it('should have the correct length', function () { assert.equal(assign.length, 2); }); it('should throw when target is not an object', function () { assert.throws(function () { assign(null); }, TypeError); assert.throws(function () { assign(undefined); }, TypeError); }); it('should assign own enumerable properties from source to target object', function () { assert.deepEqual(assign({foo: 0}, {bar: 1}), {foo: 0, bar: 1}); assert.deepEqual(assign({foo: 0}, null, undefined), {foo: 0}); assert.deepEqual(assign({foo: 0}, null, undefined, {bar: 1}, null), {foo: 0, bar: 1}); }); it('should throw on null/undefined target', function () { assert.throws(function () { assign(null, {}); }); assert.throws(function () { assign(undefined, {}); }); assert.throws(function () { assign(undefined, undefined); }); }); it('should not throw on null/undefined sources', function () { assert.doesNotThrow(function () { assign({}, null); }); assert.doesNotThrow(function () { assign({}, undefined); }); assert.doesNotThrow(function () { assign({}, undefined, null); }); }); it('should support multiple sources', function () { assert.deepEqual(assign({foo: 0}, {bar: 1}, {bar: 2}), {foo: 0, bar: 2}); assert.deepEqual(assign({}, {}, {foo: 1}), {foo: 1}); }); it('should only iterate own keys', function () { var Unicorn = function () {}; Unicorn.prototype.rainbows = 'many'; var unicorn = new Unicorn(); unicorn.bar = 1; assert.deepEqual(assign({foo: 1}, unicorn), {foo: 1, bar: 1}); }); it('should return the modified target object', function () { var target = {}; var returned = assign(target, { a: 1 }); assert.equal(returned, target); });