Blame SOURCES/test.js

323025
'use strict';
323025
/* eslint-env mocha */
323025
var assert = require('assert');
323025
323025
Object.assign = undefined;
323025
var objectAssign = require('./');
323025
323025
it('should have the correct length', function () {
323025
	assert.equal(objectAssign.length, 2);
323025
});
323025
323025
it('should throw when target is not an object', function () {
323025
	assert.throws(function () {
323025
		objectAssign(null);
323025
	}, TypeError);
323025
	assert.throws(function () {
323025
		objectAssign(undefined);
323025
	}, TypeError);
323025
});
323025
323025
it('should objectAssign own enumerable properties from source to target object', function () {
323025
	assert.deepEqual(objectAssign({foo: 0}, {bar: 1}), {
323025
		foo: 0,
323025
		bar: 1
323025
	});
323025
	assert.deepEqual(objectAssign({foo: 0}, null, undefined), {foo: 0});
323025
	assert.deepEqual(objectAssign({foo: 0}, null, undefined, {bar: 1}, null), {
323025
		foo: 0,
323025
		bar: 1
323025
	});
323025
});
323025
323025
it('should throw on null/undefined target', function () {
323025
	assert.throws(function () {
323025
		objectAssign(null, {});
323025
	});
323025
323025
	assert.throws(function () {
323025
		objectAssign(undefined, {});
323025
	});
323025
323025
	assert.throws(function () {
323025
		objectAssign(undefined, undefined);
323025
	});
323025
});
323025
323025
it('should not throw on null/undefined sources', function () {
323025
	assert.doesNotThrow(function () {
323025
		objectAssign({}, null);
323025
	});
323025
323025
	assert.doesNotThrow(function () {
323025
		objectAssign({}, undefined);
323025
	});
323025
323025
	assert.doesNotThrow(function () {
323025
		objectAssign({}, undefined, null);
323025
	});
323025
});
323025
323025
it('should support multiple sources', function () {
323025
	assert.deepEqual(objectAssign({foo: 0}, {bar: 1}, {bar: 2}), {
323025
		foo: 0,
323025
		bar: 2
323025
	});
323025
	assert.deepEqual(objectAssign({}, {}, {foo: 1}), {foo: 1});
323025
});
323025
323025
it('should only iterate own keys', function () {
323025
	var Unicorn = function () {};
323025
	Unicorn.prototype.rainbows = 'many';
323025
	var unicorn = new Unicorn();
323025
	unicorn.bar = 1;
323025
323025
	assert.deepEqual(objectAssign({foo: 1}, unicorn), {
323025
		foo: 1,
323025
		bar: 1
323025
	});
323025
});
323025
323025
it('should return the modified target object', function () {
323025
	var target = {};
323025
	var returned = objectAssign(target, {a: 1});
323025
	assert.equal(returned, target);
323025
});
323025
323025
it('should support `Object.create(null)` objects', function () {
323025
	var obj = Object.create(null);
323025
	obj.foo = true;
323025
	assert.deepEqual(objectAssign({}, obj), {foo: true});
323025
});
323025
323025
it('should preserve property order', function () {
323025
	var letters = 'abcdefghijklmnopqrst';
323025
	var source = {};
323025
	letters.split('').forEach(function (letter) {
323025
		source[letter] = letter;
323025
	});
323025
	var target = objectAssign({}, source);
323025
	assert.equal(Object.keys(target).join(''), letters);
323025
});
323025
323025
it('should accept primitives as target', function () {
323025
	var target = objectAssign('abcdefg', {foo: 'bar'});
323025
	var strObj = Object('abcdefg');
323025
	strObj.foo = 'bar';
323025
	assert.deepEqual(target, strObj);
323025
});
323025
323025
if (typeof Symbol !== 'undefined') {
323025
	it('should support symbol properties', function () {
323025
		var target = {};
323025
		var source = {};
323025
		var sym = Symbol('foo');
323025
		source[sym] = 'bar';
323025
		objectAssign(target, source);
323025
		assert.equal(target[sym], 'bar');
323025
	});
323025
323025
	it('should only copy enumerable symbols', function () {
323025
		var target = {};
323025
		var source = {};
323025
		var sym = Symbol('foo');
323025
		Object.defineProperty(source, sym, {
323025
			enumerable: false,
323025
			value: 'bar'
323025
		});
323025
		objectAssign(target, source);
323025
		assert.equal(target[sym], undefined);
323025
	});
323025
}