|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
-
- /* test dependencies */
-
- var clone = require('..');
- var expect = require('expect.js');
-
- /* tests */
-
- describe('clone', function(){
-
- it('date', function(){
- var obj = new Date;
- var cloned = clone(obj);
- expect(cloned.getTime()).to.be(obj.getTime());
- expect(cloned).not.to.be(obj);
- });
-
- it('regexp', function(){
- var obj = /hello/i;
- var cloned = clone(obj);
- expect(cloned.toString()).to.be(obj.toString());
- expect(cloned).not.to.be(obj);
- });
-
- it('array', function(){
- var obj = [1, 2, 3, '4'];
- var cloned = clone(obj);
- expect(cloned).to.eql(obj);
- expect(cloned).not.to.be(obj);
- });
-
- it('object', function(){
- var obj = {
- a: 1,
- b: 2,
- c: 3
- };
- var cloned = clone(obj);
- expect(cloned).to.eql(obj);
- expect(cloned).not.to.be(obj);
- });
-
- it('object combined', function(){
- var date = new Date;
- var obj = {
- a: {
- b: [1, 2, date, { hello: 'world' }]
- }
- };
- var cloned = clone(obj);
- expect(cloned).to.eql(obj);
- expect(cloned.a).not.to.be(obj.a);
- expect(cloned.a.b).not.to.be(obj.a.b);
- expect(cloned.a.b[2]).not.to.be(obj.a.b[2]);
- expect(cloned.a.b[2].getTime()).to.be(obj.a.b[2].getTime());
- expect(cloned.a.b[3]).to.eql(obj.a.b[3]);
- expect(cloned.a.b[3]).not.to.be(obj.a.b[3]);
- });
-
- it('object with functions', function() {
- var func = function () { return 'original'; };
- var host = { fluent: func };
- var cloned = clone(host);
-
- // cloned function matches original
-
- expect(cloned.fluent).to.be(func);
-
- // change cloned function (no longer matches original)
-
- cloned.fluent = function () { return 'updated'; };
- expect(cloned.fluent).not.to.be(func);
- expect(cloned.fluent()).to.be('updated');
-
- // original function is still in place
-
- expect(func()).to.be('original');
- });
-
- });
|