ember-source 2.13.0.beta.2 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.13.0-beta.2
9
+ * @version 2.13.0
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -7246,22 +7246,16 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
7246
7246
  }
7247
7247
  }
7248
7248
 
7249
- function finishChains(obj) {
7250
- // We only create meta if we really have to
7251
- var m = _emberMetalMeta.peekMeta(obj);
7252
- if (m !== undefined) {
7253
- m = _emberMetalMeta.meta(obj);
7254
-
7255
- // finish any current chains node watchers that reference obj
7256
- var chainWatchers = m.readableChainWatchers();
7257
- if (chainWatchers !== undefined) {
7258
- chainWatchers.revalidateAll();
7259
- }
7260
- // ensure that if we have inherited any chains they have been
7261
- // copied onto our own meta.
7262
- if (m.readableChains() !== undefined) {
7263
- m.writableChains(_emberMetalWatch_path.makeChainNode);
7264
- }
7249
+ function finishChains(meta) {
7250
+ // finish any current chains node watchers that reference obj
7251
+ var chainWatchers = meta.readableChainWatchers();
7252
+ if (chainWatchers !== undefined) {
7253
+ chainWatchers.revalidateAll();
7254
+ }
7255
+ // ensure that if we have inherited any chains they have been
7256
+ // copied onto our own meta.
7257
+ if (meta.readableChains() !== undefined) {
7258
+ meta.writableChains(_emberMetalWatch_path.makeChainNode);
7265
7259
  }
7266
7260
  }
7267
7261
 
@@ -8029,7 +8023,7 @@ enifed('ember-metal/error_handler', ['exports', 'ember-console', 'ember-debug'],
8029
8023
  var stack = error.stack;
8030
8024
  var message = error.message;
8031
8025
 
8032
- if (stack && !stack.includes(message)) {
8026
+ if (stack && stack.indexOf(message) === -1) {
8033
8027
  stack = message + '\n' + stack;
8034
8028
  }
8035
8029
 
@@ -8622,6 +8616,7 @@ enifed('ember-metal/index', ['exports', 'ember-metal/core', 'ember-metal/compute
8622
8616
  exports.PROPERTY_DID_CHANGE = _emberMetalProperty_events.PROPERTY_DID_CHANGE;
8623
8617
  exports.defineProperty = _emberMetalProperties.defineProperty;
8624
8618
  exports.Descriptor = _emberMetalProperties.Descriptor;
8619
+ exports._hasCachedComputedProperties = _emberMetalProperties._hasCachedComputedProperties;
8625
8620
  exports.watchKey = _emberMetalWatch_key.watchKey;
8626
8621
  exports.unwatchKey = _emberMetalWatch_key.unwatchKey;
8627
8622
  exports.ChainNode = _emberMetalChains.ChainNode;
@@ -9882,6 +9877,7 @@ enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/meta_listener
9882
9877
  this._chains = undefined;
9883
9878
  this._tag = undefined;
9884
9879
  this._tags = undefined;
9880
+ this._factory = undefined;
9885
9881
 
9886
9882
  // initial value for all flags right now is false
9887
9883
  // see FLAGS const for detailed list of flags used
@@ -10130,6 +10126,15 @@ enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/meta_listener
10130
10126
  }
10131
10127
  };
10132
10128
 
10129
+ babelHelpers.createClass(Meta, [{
10130
+ key: 'factory',
10131
+ set: function (factory) {
10132
+ this._factory = factory;
10133
+ },
10134
+ get: function () {
10135
+ return this._factory;
10136
+ }
10137
+ }]);
10133
10138
  return Meta;
10134
10139
  })();
10135
10140
 
@@ -11797,6 +11802,7 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
11797
11802
  exports.DEFAULT_GETTER_FUNCTION = DEFAULT_GETTER_FUNCTION;
11798
11803
  exports.INHERITING_GETTER_FUNCTION = INHERITING_GETTER_FUNCTION;
11799
11804
  exports.defineProperty = defineProperty;
11805
+ exports._hasCachedComputedProperties = _hasCachedComputedProperties;
11800
11806
 
11801
11807
  // ..........................................................
11802
11808
  // DESCRIPTOR
@@ -11919,24 +11925,20 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
11919
11925
  */
11920
11926
 
11921
11927
  function defineProperty(obj, keyName, desc, data, meta) {
11922
- var possibleDesc = undefined,
11923
- existingDesc = undefined,
11924
- watching = undefined,
11925
- value = undefined;
11926
-
11927
11928
  if (!meta) {
11928
11929
  meta = _emberMetalMeta.meta(obj);
11929
11930
  }
11930
11931
  var watchEntry = meta.peekWatching(keyName);
11931
- possibleDesc = obj[keyName];
11932
- existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
11932
+ var possibleDesc = obj[keyName];
11933
+ var existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
11933
11934
 
11934
- watching = watchEntry !== undefined && watchEntry > 0;
11935
+ var watching = watchEntry !== undefined && watchEntry > 0;
11935
11936
 
11936
11937
  if (existingDesc) {
11937
11938
  existingDesc.teardown(obj, keyName);
11938
11939
  }
11939
11940
 
11941
+ var value = undefined;
11940
11942
  if (desc instanceof Descriptor) {
11941
11943
  value = desc;
11942
11944
  if (true) {
@@ -11953,7 +11955,10 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
11953
11955
  } else {
11954
11956
  obj[keyName] = value;
11955
11957
  }
11956
- if (desc.setup) {
11958
+
11959
+ didDefineComputedProperty(obj.constructor);
11960
+
11961
+ if (typeof desc.setup === 'function') {
11957
11962
  desc.setup(obj, keyName);
11958
11963
  }
11959
11964
  } else {
@@ -11998,13 +12003,30 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
11998
12003
 
11999
12004
  // The `value` passed to the `didDefineProperty` hook is
12000
12005
  // either the descriptor or data, whichever was passed.
12001
- if (obj.didDefineProperty) {
12006
+ if (typeof obj.didDefineProperty === 'function') {
12002
12007
  obj.didDefineProperty(obj, keyName, value);
12003
12008
  }
12004
12009
 
12005
12010
  return this;
12006
12011
  }
12007
12012
 
12013
+ var hasCachedComputedProperties = false;
12014
+
12015
+ function _hasCachedComputedProperties() {
12016
+ hasCachedComputedProperties = true;
12017
+ }
12018
+
12019
+ function didDefineComputedProperty(constructor) {
12020
+ if (hasCachedComputedProperties === false) {
12021
+ return;
12022
+ }
12023
+ var cache = _emberMetalMeta.meta(constructor).readableCache();
12024
+
12025
+ if (cache && cache._computedProperties !== undefined) {
12026
+ cache._computedProperties = undefined;
12027
+ }
12028
+ }
12029
+
12008
12030
  function handleBrokenPhantomDefineProperty(obj, keyName, desc) {
12009
12031
  // https://github.com/ariya/phantomjs/issues/11856
12010
12032
  Object.defineProperty(obj, keyName, { configurable: true, writable: true, value: 'iCry' });
@@ -16113,13 +16135,40 @@ enifed('ember-utils/to-string', ['exports'], function (exports) {
16113
16135
  exports.default = toString;
16114
16136
  var objectToString = Object.prototype.toString;
16115
16137
 
16138
+ function isNone(obj) {
16139
+ return obj === null || obj === undefined;
16140
+ }
16141
+
16116
16142
  /*
16117
16143
  A `toString` util function that supports objects without a `toString`
16118
16144
  method, e.g. an object created with `Object.create(null)`.
16119
16145
  */
16120
16146
 
16121
16147
  function toString(obj) {
16122
- if (obj && typeof obj.toString === 'function') {
16148
+ var type = typeof obj;
16149
+ if (type === "string") {
16150
+ return obj;
16151
+ }
16152
+
16153
+ if (Array.isArray(obj)) {
16154
+ // Reimplement Array.prototype.join according to spec (22.1.3.13)
16155
+ // Changing ToString(element) with this safe version of ToString.
16156
+ var len = obj.length;
16157
+ var sep = ',';
16158
+ var r = '';
16159
+
16160
+ for (var k = 0; k < len; k++) {
16161
+ if (k > 0) {
16162
+ r += ',';
16163
+ }
16164
+
16165
+ if (!isNone(obj[k])) {
16166
+ r += toString(obj[k]);
16167
+ }
16168
+ }
16169
+
16170
+ return r;
16171
+ } else if (obj != null && typeof obj.toString === 'function') {
16123
16172
  return obj.toString();
16124
16173
  } else {
16125
16174
  return objectToString.call(obj);
@@ -16151,7 +16200,7 @@ enifed("ember/features", ["exports"], function (exports) {
16151
16200
  enifed("ember/version", ["exports"], function (exports) {
16152
16201
  "use strict";
16153
16202
 
16154
- exports.default = "2.13.0-beta.2";
16203
+ exports.default = "2.13.0";
16155
16204
  });
16156
16205
  enifed("handlebars", ["exports"], function (exports) {
16157
16206
  /* istanbul ignore next */
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.13.0-beta.2
9
+ * @version 2.13.0
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -1841,6 +1841,9 @@ enifed('ember-testing/test/waiters', ['exports', 'ember-debug'], function (expor
1841
1841
  return array;
1842
1842
  }
1843
1843
  });
1844
- requireModule("ember-testing");
1845
-
1844
+ var testing = requireModule('ember-testing');
1845
+ Ember.Test = testing.Test;
1846
+ Ember.Test.Adapter = testing.Adapter;
1847
+ Ember.Test.QUnitAdapter = testing.QUnitAdapter;
1848
+ Ember.setupForTesting = testing.setupForTesting;
1846
1849
  }());
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.13.0-beta.2
9
+ * @version 2.13.0
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -279,7 +279,7 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
279
279
  equal(PostFactory._debugContainerKey, 'controller:post', 'factory instance receives _debugContainerKey');
280
280
  });
281
281
 
282
- QUnit.test('fallback for to create time injections if factory has no extend', function () {
282
+ QUnit.test('uses create time injections if factory has no extend', function () {
283
283
  var registry = new _containerIndex.Registry();
284
284
  var container = registry.container();
285
285
  var AppleController = _internalTestHelpers.factory();
@@ -293,7 +293,6 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
293
293
 
294
294
  var postController = container.lookup('controller:post');
295
295
 
296
- equal(postController._debugContainerKey, 'controller:post', 'instance receives _debugContainerKey');
297
296
  ok(postController.apple instanceof AppleController, 'instance receives an apple of instance AppleController');
298
297
  });
299
298
 
@@ -365,9 +364,6 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
365
364
  var postController = container.lookup('controller:post');
366
365
  var store = container.lookup('store:main');
367
366
 
368
- equal(store._debugContainerKey, 'store:main');
369
-
370
- equal(postController._debugContainerKey, 'controller:post');
371
367
  equal(postController.store, store, 'has the correct store injected');
372
368
  });
373
369
 
@@ -766,8 +762,9 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
766
762
  });
767
763
 
768
764
  QUnit.test('A deprecated `container` property is appended to every object instantiated from an extendable factory', function () {
765
+ var owner = {};
769
766
  var registry = new _containerIndex.Registry();
770
- var container = registry.container();
767
+ var container = owner.__container__ = registry.container({ owner: owner });
771
768
  var PostController = _internalTestHelpers.factory();
772
769
  registry.register('controller:post', PostController);
773
770
  var postController = container.lookup('controller:post');
@@ -1010,11 +1007,78 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
1010
1007
  registry.injection('component:foo-bar', 'ajax', 'util:ajax');
1011
1008
 
1012
1009
  var componentFactory = container.factoryFor('component:foo-bar');
1013
-
1014
1010
  var instrance = componentFactory.create({ ajax: 'fetch' });
1015
1011
 
1016
1012
  assert.equal(instrance.ajax, 'fetch');
1017
1013
  });
1014
+
1015
+ QUnit.test('#factoryFor does not add properties to the object being instantiated when _initFactory is present', function (assert) {
1016
+ var owner = {};
1017
+ var registry = new _containerIndex.Registry();
1018
+ var container = registry.container();
1019
+
1020
+ var factory = undefined;
1021
+
1022
+ var Component = (function () {
1023
+ function Component() {
1024
+ babelHelpers.classCallCheck(this, Component);
1025
+ }
1026
+
1027
+ Component._initFactory = function _initFactory(_factory) {
1028
+ factory = _factory;
1029
+ };
1030
+
1031
+ Component.create = function create(options) {
1032
+ var instance = new this();
1033
+ _emberUtils.assign(instance, options);
1034
+ return instance;
1035
+ };
1036
+
1037
+ return Component;
1038
+ })();
1039
+
1040
+ registry.register('component:foo-bar', Component);
1041
+
1042
+ var componentFactory = container.factoryFor('component:foo-bar');
1043
+ var instance = componentFactory.create();
1044
+
1045
+ // note: _guid and isDestroyed are being set in the `factory` constructor
1046
+ // not via registry/container shenanigans
1047
+ assert.deepEqual(Object.keys(instance), []);
1048
+ });
1049
+
1050
+ // this is skipped until templates and the glimmer environment do not require `OWNER` to be
1051
+ // passed in as constructor args
1052
+ QUnit.skip('#factoryFor does not add properties to the object being instantiated', function (assert) {
1053
+ var owner = {};
1054
+ var registry = new _containerIndex.Registry();
1055
+ var container = registry.container();
1056
+
1057
+ var factory = undefined;
1058
+
1059
+ var Component = (function () {
1060
+ function Component() {
1061
+ babelHelpers.classCallCheck(this, Component);
1062
+ }
1063
+
1064
+ Component.create = function create(options) {
1065
+ var instance = new this();
1066
+ _emberUtils.assign(instance, options);
1067
+ return instance;
1068
+ };
1069
+
1070
+ return Component;
1071
+ })();
1072
+
1073
+ registry.register('component:foo-bar', Component);
1074
+
1075
+ var componentFactory = container.factoryFor('component:foo-bar');
1076
+ var instance = componentFactory.create();
1077
+
1078
+ // note: _guid and isDestroyed are being set in the `factory` constructor
1079
+ // not via registry/container shenanigans
1080
+ assert.deepEqual(Object.keys(instance), []);
1081
+ });
1018
1082
  }
1019
1083
  });
1020
1084
  enifed('container/tests/container_test.lint-test', ['exports'], function (exports) {
@@ -39627,8 +39691,13 @@ enifed('ember-metal/tests/chains_test', ['exports', 'ember-metal/observer', 'emb
39627
39691
  _emberMetalObserver.addObserver(obj, 'foo.bar', null, didChange);
39628
39692
 
39629
39693
  var childObj = Object.create(obj);
39630
- _emberMetalChains.finishChains(childObj);
39631
- ok(_emberMetalMeta.peekMeta(obj) !== _emberMetalMeta.peekMeta(childObj).readableChains(), 'The chains object is copied');
39694
+
39695
+ var parentMeta = _emberMetalMeta.meta(obj);
39696
+ var childMeta = _emberMetalMeta.meta(childObj);
39697
+
39698
+ _emberMetalChains.finishChains(childMeta);
39699
+
39700
+ ok(parentMeta.readableChains() !== childMeta.readableChains(), 'The chains object is copied');
39632
39701
  });
39633
39702
 
39634
39703
  QUnit.test('does not observe primative values', function (assert) {
@@ -67782,6 +67851,13 @@ enifed('ember-utils/tests/to-string-test', ['exports', 'ember-utils/index'], fun
67782
67851
 
67783
67852
  strictEqual(_emberUtilsIndex.toString(obj), ({}).toString());
67784
67853
  });
67854
+
67855
+ QUnit.test('toString does not fail when called on Arrays with objects without toString method', function () {
67856
+ var obj = Object.create(null);
67857
+ var arr = [obj, 2];
67858
+
67859
+ strictEqual(_emberUtilsIndex.toString(arr), ({}).toString() + ',2');
67860
+ });
67785
67861
  });
67786
67862
  enifed('ember-utils/tests/to-string-test.lint-test', ['exports'], function (exports) {
67787
67863
  'use strict';
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.13.0-beta.2
9
+ * @version 2.13.0
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -268,7 +268,7 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
268
268
  equal(PostFactory._debugContainerKey, 'controller:post', 'factory instance receives _debugContainerKey');
269
269
  });
270
270
 
271
- QUnit.test('fallback for to create time injections if factory has no extend', function () {
271
+ QUnit.test('uses create time injections if factory has no extend', function () {
272
272
  var registry = new _containerIndex.Registry();
273
273
  var container = registry.container();
274
274
  var AppleController = _internalTestHelpers.factory();
@@ -282,7 +282,6 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
282
282
 
283
283
  var postController = container.lookup('controller:post');
284
284
 
285
- equal(postController._debugContainerKey, 'controller:post', 'instance receives _debugContainerKey');
286
285
  ok(postController.apple instanceof AppleController, 'instance receives an apple of instance AppleController');
287
286
  });
288
287
 
@@ -354,9 +353,6 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
354
353
  var postController = container.lookup('controller:post');
355
354
  var store = container.lookup('store:main');
356
355
 
357
- equal(store._debugContainerKey, 'store:main');
358
-
359
- equal(postController._debugContainerKey, 'controller:post');
360
356
  equal(postController.store, store, 'has the correct store injected');
361
357
  });
362
358
 
@@ -755,8 +751,9 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
755
751
  });
756
752
 
757
753
  QUnit.test('A deprecated `container` property is appended to every object instantiated from an extendable factory', function () {
754
+ var owner = {};
758
755
  var registry = new _containerIndex.Registry();
759
- var container = registry.container();
756
+ var container = owner.__container__ = registry.container({ owner: owner });
760
757
  var PostController = _internalTestHelpers.factory();
761
758
  registry.register('controller:post', PostController);
762
759
  var postController = container.lookup('controller:post');
@@ -999,11 +996,74 @@ enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-envir
999
996
  registry.injection('component:foo-bar', 'ajax', 'util:ajax');
1000
997
 
1001
998
  var componentFactory = container.factoryFor('component:foo-bar');
1002
-
1003
999
  var instrance = componentFactory.create({ ajax: 'fetch' });
1004
1000
 
1005
1001
  assert.equal(instrance.ajax, 'fetch');
1006
1002
  });
1003
+
1004
+ QUnit.test('#factoryFor does not add properties to the object being instantiated when _initFactory is present', function (assert) {
1005
+ var owner = {};
1006
+ var registry = new _containerIndex.Registry();
1007
+ var container = registry.container();
1008
+
1009
+ var factory = undefined;
1010
+
1011
+ var Component = (function () {
1012
+ function Component() {}
1013
+
1014
+ Component._initFactory = function _initFactory(_factory) {
1015
+ factory = _factory;
1016
+ };
1017
+
1018
+ Component.create = function create(options) {
1019
+ var instance = new this();
1020
+ _emberUtils.assign(instance, options);
1021
+ return instance;
1022
+ };
1023
+
1024
+ return Component;
1025
+ })();
1026
+
1027
+ registry.register('component:foo-bar', Component);
1028
+
1029
+ var componentFactory = container.factoryFor('component:foo-bar');
1030
+ var instance = componentFactory.create();
1031
+
1032
+ // note: _guid and isDestroyed are being set in the `factory` constructor
1033
+ // not via registry/container shenanigans
1034
+ assert.deepEqual(Object.keys(instance), []);
1035
+ });
1036
+
1037
+ // this is skipped until templates and the glimmer environment do not require `OWNER` to be
1038
+ // passed in as constructor args
1039
+ QUnit.skip('#factoryFor does not add properties to the object being instantiated', function (assert) {
1040
+ var owner = {};
1041
+ var registry = new _containerIndex.Registry();
1042
+ var container = registry.container();
1043
+
1044
+ var factory = undefined;
1045
+
1046
+ var Component = (function () {
1047
+ function Component() {}
1048
+
1049
+ Component.create = function create(options) {
1050
+ var instance = new this();
1051
+ _emberUtils.assign(instance, options);
1052
+ return instance;
1053
+ };
1054
+
1055
+ return Component;
1056
+ })();
1057
+
1058
+ registry.register('component:foo-bar', Component);
1059
+
1060
+ var componentFactory = container.factoryFor('component:foo-bar');
1061
+ var instance = componentFactory.create();
1062
+
1063
+ // note: _guid and isDestroyed are being set in the `factory` constructor
1064
+ // not via registry/container shenanigans
1065
+ assert.deepEqual(Object.keys(instance), []);
1066
+ });
1007
1067
  }
1008
1068
  });
1009
1069
  enifed('container/tests/container_test.lint-test', ['exports'], function (exports) {
@@ -39261,8 +39321,13 @@ enifed('ember-metal/tests/chains_test', ['exports', 'ember-metal/observer', 'emb
39261
39321
  _emberMetalObserver.addObserver(obj, 'foo.bar', null, didChange);
39262
39322
 
39263
39323
  var childObj = Object.create(obj);
39264
- _emberMetalChains.finishChains(childObj);
39265
- ok(_emberMetalMeta.peekMeta(obj) !== _emberMetalMeta.peekMeta(childObj).readableChains(), 'The chains object is copied');
39324
+
39325
+ var parentMeta = _emberMetalMeta.meta(obj);
39326
+ var childMeta = _emberMetalMeta.meta(childObj);
39327
+
39328
+ _emberMetalChains.finishChains(childMeta);
39329
+
39330
+ ok(parentMeta.readableChains() !== childMeta.readableChains(), 'The chains object is copied');
39266
39331
  });
39267
39332
 
39268
39333
  QUnit.test('does not observe primative values', function (assert) {
@@ -67388,6 +67453,13 @@ enifed('ember-utils/tests/to-string-test', ['exports', 'ember-utils/index'], fun
67388
67453
 
67389
67454
  strictEqual(_emberUtilsIndex.toString(obj), ({}).toString());
67390
67455
  });
67456
+
67457
+ QUnit.test('toString does not fail when called on Arrays with objects without toString method', function () {
67458
+ var obj = Object.create(null);
67459
+ var arr = [obj, 2];
67460
+
67461
+ strictEqual(_emberUtilsIndex.toString(arr), ({}).toString() + ',2');
67462
+ });
67391
67463
  });
67392
67464
  enifed('ember-utils/tests/to-string-test.lint-test', ['exports'], function (exports) {
67393
67465
  'use strict';