From 1466f35fb99f2ba6cfc50bf6d2377881f895fe3c Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Fri, 19 Aug 2016 13:23:35 +0200 Subject: [PATCH 1/4] Reify that extendDeepNoArrays doesn't deep-copy typed arrays (cherry picked from commit db1b6f0) --- test/jasmine/tests/extend_test.js | 37 +++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/extend_test.js b/test/jasmine/tests/extend_test.js index 0fc54661a5c..c70b02a59e5 100644 --- a/test/jasmine/tests/extend_test.js +++ b/test/jasmine/tests/extend_test.js @@ -454,10 +454,26 @@ describe('extendDeepAll', function() { }); }); -describe('extendDeepNoArrays', function() { +describe('array by reference vs deep-copy', function() { 'use strict'; - it('does not copy arrays', function() { + it('extendDeep DOES deep-copy untyped source arrays', function() { + var src = {foo: {bar: [1, 2, 3], baz: [5, 4, 3]}}; + var tar = {foo: {bar: [4, 5, 6], bop: [8, 2, 1]}}; + var ext = extendDeep(tar, src); + + expect(ext).not.toBe(src); + expect(ext).toBe(tar); + + expect(ext.foo).not.toBe(src.foo); + expect(ext.foo).toBe(tar.foo); + + expect(ext.foo.bar).not.toBe(src.foo.bar); + expect(ext.foo.baz).not.toBe(src.foo.baz); + expect(ext.foo.bop).toBe(tar.foo.bop); // what comes from the target isn't deep copied + }); + + it('extendDeepNoArrays includes by reference untyped arrays from source', function() { var src = {foo: {bar: [1, 2, 3], baz: [5, 4, 3]}}; var tar = {foo: {bar: [4, 5, 6], bop: [8, 2, 1]}}; var ext = extendDeepNoArrays(tar, src); @@ -472,4 +488,21 @@ describe('extendDeepNoArrays', function() { expect(ext.foo.baz).toBe(src.foo.baz); expect(ext.foo.bop).toBe(tar.foo.bop); }); + + it('extendDeepNoArrays includes by reference typed arrays from source', function() { + var src = {foo: {bar: new Int32Array([1, 2, 3]), baz: new Float32Array([5, 4, 3])}}; + var tar = {foo: {bar: new Int16Array([4, 5, 6]), bop: new Float64Array([8, 2, 1])}}; + var ext = extendDeepNoArrays(tar, src); + + expect(ext).not.toBe(src); + expect(ext).toBe(tar); + + expect(ext.foo).not.toBe(src.foo); + expect(ext.foo).toBe(tar.foo); + + expect(ext.foo.bar).toBe(src.foo.bar); + expect(ext.foo.baz).toBe(src.foo.baz); + expect(ext.foo.bop).toBe(tar.foo.bop); + }); + }); From 0948e58040e3d073d24981af117186ec6a7bb74f Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Fri, 19 Aug 2016 13:24:00 +0200 Subject: [PATCH 2/4] Reify that regular extendDeep doesn't deep-copy typed arrays (cherry picked from commit 65aeac5) --- test/jasmine/tests/extend_test.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/jasmine/tests/extend_test.js b/test/jasmine/tests/extend_test.js index c70b02a59e5..7c4b50ce0a1 100644 --- a/test/jasmine/tests/extend_test.js +++ b/test/jasmine/tests/extend_test.js @@ -505,4 +505,20 @@ describe('array by reference vs deep-copy', function() { expect(ext.foo.bop).toBe(tar.foo.bop); }); + it('extendDeep ALSO includes by reference typed arrays from source', function() { + var src = {foo: {bar: new Int32Array([1, 2, 3]), baz: new Float32Array([5, 4, 3])}}; + var tar = {foo: {bar: new Int16Array([4, 5, 6]), bop: new Float64Array([8, 2, 1])}}; + var ext = extendDeep(tar, src); + + expect(ext).not.toBe(src); + expect(ext).toBe(tar); + + expect(ext.foo).not.toBe(src.foo); + expect(ext.foo).toBe(tar.foo); + + expect(ext.foo.bar).toBe(src.foo.bar); + expect(ext.foo.baz).toBe(src.foo.baz); + expect(ext.foo.bop).toBe(tar.foo.bop); + }); + }); From ba311fd295f2582fff6f7d03d4da2496cdf65cd7 Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Fri, 19 Aug 2016 15:00:55 +0200 Subject: [PATCH 3/4] Let eslint pass --- test/jasmine/tests/extend_test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/jasmine/tests/extend_test.js b/test/jasmine/tests/extend_test.js index 7c4b50ce0a1..c0e2ebbfe5b 100644 --- a/test/jasmine/tests/extend_test.js +++ b/test/jasmine/tests/extend_test.js @@ -1,3 +1,5 @@ +/*global Float32Array, Float64Array, Int16Array, Int32Array */ + var extendModule = require('@src/lib/extend.js'); var extendFlat = extendModule.extendFlat; var extendDeep = extendModule.extendDeep; From 7151c1200234c934077d06a0a32bc93e5267c772 Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Fri, 19 Aug 2016 16:04:40 +0200 Subject: [PATCH 4/4] Add permitted globals to the test root directory --- test/jasmine/.eslintrc | 6 +++++- test/jasmine/tests/extend_test.js | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/test/jasmine/.eslintrc b/test/jasmine/.eslintrc index 5108feda8dd..c0556b986f3 100644 --- a/test/jasmine/.eslintrc +++ b/test/jasmine/.eslintrc @@ -5,6 +5,10 @@ "jasmine": true }, "globals": { - "Promise": true + "Promise": true, + "Float32Array": true, + "Float64Array": true, + "Int16Array": true, + "Int32Array": true } } diff --git a/test/jasmine/tests/extend_test.js b/test/jasmine/tests/extend_test.js index c0e2ebbfe5b..7c4b50ce0a1 100644 --- a/test/jasmine/tests/extend_test.js +++ b/test/jasmine/tests/extend_test.js @@ -1,5 +1,3 @@ -/*global Float32Array, Float64Array, Int16Array, Int32Array */ - var extendModule = require('@src/lib/extend.js'); var extendFlat = extendModule.extendFlat; var extendDeep = extendModule.extendDeep;