|
286 | 286 | assert.strictEqual(_.clone(null), null, 'non objects should not be changed by clone');
|
287 | 287 | });
|
288 | 288 |
|
| 289 | + QUnit.test('cloneDeep', function(assert) { |
| 290 | + var source = { |
| 291 | + str: 'str', |
| 292 | + num: 1, |
| 293 | + bool: false, |
| 294 | + list: [1, 2, 3], |
| 295 | + obj: {a: 'a', b: 'b'}, |
| 296 | + nu: null, |
| 297 | + und: void 0 |
| 298 | + }; |
| 299 | + var clone = _.cloneDeep(source); |
| 300 | + assert.strictEqual(clone.str, 'str', 'can clone string value from source'); |
| 301 | + assert.strictEqual(clone.num, 1, 'can clone number value from source'); |
| 302 | + assert.strictEqual(clone.bool, false, 'can clone boolean value from source'); |
| 303 | + assert.deepEqual(clone.list, [1, 2, 3], 'can clone array from source'); |
| 304 | + assert.deepEqual(clone.obj, {a: 'a', b: 'b'}, 'can clone object from source'); |
| 305 | + assert.deepEqual(clone.nu, null, 'can clone null value from source'); |
| 306 | + assert.deepEqual(clone.und, void 0, 'can clone undefined value from source'); |
| 307 | + |
| 308 | + assert.notStrictEqual(clone.list, source.list, 'refers to a copy of the original array'); |
| 309 | + assert.notStrictEqual(clone.obj, source.obj, 'refers to a copy of the original object'); |
| 310 | + |
| 311 | + function F() {} |
| 312 | + F.prototype = {a: 'a'}; |
| 313 | + var subObj = new F(); |
| 314 | + subObj.b = 'b'; |
| 315 | + clone = _.cloneDeep(subObj); |
| 316 | + assert.deepEqual(clone, {a: 'a', b: 'b'}, 'copies all properties from source'); |
| 317 | + |
| 318 | + source = {a: 'a'}; |
| 319 | + source.obj = source; |
| 320 | + clone = _.cloneDeep(source); |
| 321 | + assert.deepEqual(clone.obj.a, 'a', 'can deal with circular references cases'); |
| 322 | + }); |
| 323 | + |
289 | 324 | QUnit.test('create', function(assert) {
|
290 | 325 | var Parent = function() {};
|
291 | 326 | Parent.prototype = {foo: function() {}, bar: 2};
|
|
0 commit comments