diff --git a/packages/@ember/-internals/runtime/lib/mixins/array.js b/packages/@ember/-internals/runtime/lib/mixins/array.js index 443d9123343..054636b24fe 100644 --- a/packages/@ember/-internals/runtime/lib/mixins/array.js +++ b/packages/@ember/-internals/runtime/lib/mixins/array.js @@ -1641,12 +1641,36 @@ let A; if (ENV.EXTEND_PROTOTYPES.Array) { NativeArray.apply(Array.prototype); - A = arr => arr || []; + + A = function(arr) { + deprecate( + '`new A()` has been deprecated, please update to calling A as a function: `A()`', + !(this instanceof A), + { + id: 'array.new-array-wrapper', + until: '3.9.0', + url: 'https://emberjs.com/deprecations/v3.x#toc_array-new-array-wrapper', + } + ); + + return arr || []; + }; } else { - A = arr => { + A = function(arr) { + deprecate( + '`new A()` has been deprecated, please update to calling A as a function: `A()`', + !(this instanceof A), + { + id: 'array.new-array-wrapper', + until: '3.9.0', + url: 'https://emberjs.com/deprecations/v3.x#toc_array-new-array-wrapper', + } + ); + if (!arr) { arr = []; } + return ArrayMixin.detect(arr) ? arr : NativeArray.apply(arr); }; } diff --git a/packages/@ember/-internals/runtime/tests/system/native_array/a_test.js b/packages/@ember/-internals/runtime/tests/system/native_array/a_test.js index c2f8de2946e..85d7e614680 100644 --- a/packages/@ember/-internals/runtime/tests/system/native_array/a_test.js +++ b/packages/@ember/-internals/runtime/tests/system/native_array/a_test.js @@ -12,5 +12,15 @@ moduleFor( assert.ok(EmberArray.detect(A()), 'returned an ember array'); assert.ok(EmberArray.detect(A([1, 2])), 'returned an ember array'); } + + ['@test new Ember.A'](assert) { + expectDeprecation(() => { + assert.deepEqual(new A([1, 2]), [1, 2], 'array values were not be modified'); + assert.deepEqual(new A(), [], 'returned an array with no arguments'); + assert.deepEqual(new A(null), [], 'returned an array with a null argument'); + assert.ok(EmberArray.detect(new A()), 'returned an ember array'); + assert.ok(EmberArray.detect(new A([1, 2])), 'returned an ember array'); + }); + } } );