Blob Blame History Raw
/*!
 * extend-shallow <https://github.com/jonschlinkert/extend-shallow>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */

'use strict';

/* deps: mocha */
var path = require('path');
var argv = require('minimist')(process.argv.slice(2));
var extend = require('./');
require('should');

if (argv && argv.lib) {
  extend = require(path.resolve('benchmark/code', argv.lib));
}

describe('extend', function () {
  it('should extend the first object with the properties of the other objects.', function () {
    extend({a: 'b'}, {c: 'd'}).should.eql({a: 'b', c: 'd'});
    extend({a: 'b', c: 'd'}, {c: 'e'}).should.eql({a: 'b', c: 'e'});
  });

  it('should skip over non-plain objects.', function () {
    extend({a: 'b'}, 'foo', {c: 'd'}).should.eql({a: 'b', c: 'd'});
    extend({a: 'b'}, null, {c: 'd'}).should.eql({a: 'b', c: 'd'});
    extend({a: 'b'}, new Date(), {c: 'd'}).should.eql({a: 'b', c: 'd'});
    extend({a: 'b', c: 'd'}, 'bar', {c: 'e'}).should.eql({a: 'b', c: 'e'});
  });

  it('should extend a regex.', function () {
    var fixture = /foo/;
    extend(fixture, {a: 'b'}, new Date(), {c: 'd'});
    fixture.a.should.equal('b');
    fixture.c.should.equal('d');
  });

  it('should extend a function.', function () {
    var fixture = function() {};
    extend(fixture, {a: 'b'}, new Date(), {c: 'd'});
    fixture.a.should.equal('b');
    fixture.c.should.equal('d');
  });

  it('should extend an array.', function () {
    var arr = [];
    extend(arr, {a: 'b'}, new Date(), {c: 'd'});
    arr.a.should.equal('b');
    arr.c.should.equal('d');
  });

  it('should return an empty object when args are undefined.', function () {
    extend(null).should.eql({});
    extend(undefined).should.eql({});
  });

  describe('.extend():', function () {
    it('should extend object a with object b:', function () {
      extend({a: {b: 'b'}}, {b: {c: 'c'}}).should.eql({a: {b: 'b'}, b: {c: 'c'}});
    });

    it('should return an empty object when args are undefined:', function () {
      extend().should.eql({});
    });
  });
});