From 1d3d240533f1ea8d1555ae61436c64ee16c1af41 Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Sun, 12 Jun 2016 12:45:37 -0700 Subject: [PATCH 1/2] cleanup packages/container/ --- packages/container/lib/container.js | 92 +++--- packages/container/lib/owner.js | 1 - packages/container/lib/registry.js | 127 ++++---- packages/container/tests/container_test.js | 308 +++++++++--------- packages/container/tests/registry_test.js | 158 ++++----- .../container/tests/test-helpers/factory.js | 19 +- packages/ember-runtime/tests/inject_test.js | 2 +- 7 files changed, 351 insertions(+), 356 deletions(-) diff --git a/packages/container/lib/container.js b/packages/container/lib/container.js index 69eba5b403b..f76b26e164a 100644 --- a/packages/container/lib/container.js +++ b/packages/container/lib/container.js @@ -20,7 +20,7 @@ const CONTAINER_OVERRIDE = symbol('CONTAINER_OVERRIDE'); @private @class Container */ -function Container(registry, options) { +export default function Container(registry, options) { this.registry = registry; this.owner = options && options.owner ? options.owner : null; this.cache = dictionary(options && options.cache ? options.cache : null); @@ -28,6 +28,7 @@ function Container(registry, options) { this.validationCache = dictionary(options && options.validationCache ? options.validationCache : null); this._fakeContainerToInject = buildFakeContainerWithDeprecations(this); this[CONTAINER_OVERRIDE] = undefined; + this.isDestroyed = false; } Container.prototype = { @@ -75,17 +76,17 @@ Container.prototype = { to all have their own locally scoped singletons. ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('api:twitter', Twitter); - var twitter = container.lookup('api:twitter'); + let twitter = container.lookup('api:twitter'); twitter instanceof Twitter; // => true // by default the container will return singletons - var twitter2 = container.lookup('api:twitter'); + let twitter2 = container.lookup('api:twitter'); twitter2 instanceof Twitter; // => true twitter === twitter2; //=> true @@ -94,13 +95,13 @@ Container.prototype = { If singletons are not wanted, an optional flag can be provided at lookup. ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('api:twitter', Twitter); - var twitter = container.lookup('api:twitter', { singleton: false }); - var twitter2 = container.lookup('api:twitter', { singleton: false }); + let twitter = container.lookup('api:twitter', { singleton: false }); + let twitter2 = container.lookup('api:twitter', { singleton: false }); twitter === twitter2; //=> false ``` @@ -140,7 +141,7 @@ Container.prototype = { @method destroy */ destroy() { - eachDestroyable(this, function(item) { + eachDestroyable(this, item => { if (item.destroy) { item.destroy(); } @@ -193,7 +194,7 @@ function lookup(container, fullName, options = {}) { return container.cache[fullName]; } - var value = instantiate(container, fullName); + let value = instantiate(container, fullName); if (value === undefined) { return; } @@ -213,14 +214,14 @@ function areInjectionsDynamic(injections) { } function buildInjections(/* container, ...injections */) { - var hash = {}; + let hash = {}; if (arguments.length > 1) { - var container = arguments[0]; - var injections = []; - var injection; + let container = arguments[0]; + let injections = []; + let injection; - for (var i = 1; i < arguments.length; i++) { + for (let i = 1; i < arguments.length; i++) { if (arguments[i]) { injections = injections.concat(arguments[i]); } @@ -228,7 +229,7 @@ function buildInjections(/* container, ...injections */) { container.registry.validateInjections(injections); - for (i = 0; i < injections.length; i++) { + for (let i = 0; i < injections.length; i++) { injection = injections[i]; hash[injection.property] = lookup(container, injection.fullName); if (!isSingleton(container, injection.fullName)) { @@ -250,14 +251,14 @@ function factoryFor(container, fullName, options = {}) { if (!fullName) { return; } } - var cache = container.factoryCache; + let cache = container.factoryCache; if (cache[fullName]) { return cache[fullName]; } - var factory = registry.resolve(fullName); + let factory = registry.resolve(fullName); if (factory === undefined) { return; } - var type = fullName.split(':')[0]; + let type = fullName.split(':')[0]; if (!factory || typeof factory.extend !== 'function' || (!ENV.MODEL_FACTORY_INJECTIONS && type === 'model')) { if (factory && typeof factory._onLookup === 'function') { factory._onLookup(fullName); @@ -268,13 +269,13 @@ function factoryFor(container, fullName, options = {}) { cache[fullName] = factory; return factory; } else { - var injections = injectionsFor(container, fullName); - var factoryInjections = factoryInjectionsFor(container, fullName); - var cacheable = !areInjectionsDynamic(injections) && !areInjectionsDynamic(factoryInjections); + let injections = injectionsFor(container, fullName); + let factoryInjections = factoryInjectionsFor(container, fullName); + let cacheable = !areInjectionsDynamic(injections) && !areInjectionsDynamic(factoryInjections); factoryInjections._toString = registry.makeToString(factory, fullName); - var injectedFactory = factory.extend(injections); + let injectedFactory = factory.extend(injections); // TODO - remove all `container` injections when Ember reaches v3.0.0 injectDeprecatedContainer(injectedFactory.prototype, container); @@ -293,11 +294,11 @@ function factoryFor(container, fullName, options = {}) { } function injectionsFor(container, fullName) { - var registry = container.registry; - var splitName = fullName.split(':'); - var type = splitName[0]; + let registry = container.registry; + let splitName = fullName.split(':'); + let type = splitName[0]; - var injections = buildInjections(container, + let injections = buildInjections(container, registry.getTypeInjections(type), registry.getInjections(fullName)); injections._debugContainerKey = fullName; @@ -308,11 +309,11 @@ function injectionsFor(container, fullName) { } function factoryInjectionsFor(container, fullName) { - var registry = container.registry; - var splitName = fullName.split(':'); - var type = splitName[0]; + let registry = container.registry; + let splitName = fullName.split(':'); + let type = splitName[0]; - var factoryInjections = buildInjections(container, + let factoryInjections = buildInjections(container, registry.getFactoryTypeInjections(type), registry.getFactoryInjections(fullName)); factoryInjections._debugContainerKey = fullName; @@ -321,8 +322,8 @@ function factoryInjectionsFor(container, fullName) { } function instantiate(container, fullName) { - var factory = factoryFor(container, fullName); - var lazyInjections, validationCache; + let factory = factoryFor(container, fullName); + let lazyInjections, validationCache; if (container.registry.getOption(fullName, 'instantiate') === false) { return factory; @@ -330,13 +331,13 @@ function instantiate(container, fullName) { if (factory) { if (typeof factory.create !== 'function') { - throw new Error('Failed to create an instance of \'' + fullName + '\'. ' + - 'Most likely an improperly defined class or an invalid module export.'); + throw new Error(`Failed to create an instance of '${fullName}'. Most likely an improperly defined class or` + + ` an invalid module export.`); } validationCache = container.validationCache; - runInDebug(function() { + runInDebug(() => { // Ensure that all lazy injections are valid at instantiation time if (!validationCache[fullName] && typeof factory._lazyInjections === 'function') { lazyInjections = factory._lazyInjections(); @@ -403,13 +404,12 @@ function injectDeprecatedContainer(object, container) { } function eachDestroyable(container, callback) { - var cache = container.cache; - var keys = Object.keys(cache); - var key, value; + let cache = container.cache; + let keys = Object.keys(cache); - for (var i = 0; i < keys.length; i++) { - key = keys[i]; - value = cache[key]; + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let value = cache[key]; if (container.registry.getOption(key, 'instantiate') !== false) { callback(value); @@ -418,7 +418,7 @@ function eachDestroyable(container, callback) { } function resetCache(container) { - eachDestroyable(container, function(value) { + eachDestroyable(container, (value) => { if (value.destroy) { value.destroy(); } @@ -428,7 +428,7 @@ function resetCache(container) { } function resetMember(container, fullName) { - var member = container.cache[fullName]; + let member = container.cache[fullName]; delete container.factoryCache[fullName]; @@ -440,5 +440,3 @@ function resetMember(container, fullName) { } } } - -export default Container; diff --git a/packages/container/lib/owner.js b/packages/container/lib/owner.js index 68bc247225d..771c7971825 100644 --- a/packages/container/lib/owner.js +++ b/packages/container/lib/owner.js @@ -7,7 +7,6 @@ import symbol from 'ember-metal/symbol'; export const OWNER = symbol('OWNER'); - /** Framework objects in an Ember application (components, services, routes, etc.) are created via a factory and dependency injection system. Each of these diff --git a/packages/container/lib/registry.js b/packages/container/lib/registry.js index 6ffc3651e94..de55f7083b2 100644 --- a/packages/container/lib/registry.js +++ b/packages/container/lib/registry.js @@ -4,7 +4,7 @@ import EmptyObject from 'ember-metal/empty_object'; import assign from 'ember-metal/assign'; import Container from './container'; -var VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/; +const VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/; /** A registry used to store factory and option information keyed @@ -19,7 +19,7 @@ var VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/; @class Registry @since 1.11.0 */ -function Registry(options) { +export default function Registry(options) { this.fallback = options && options.fallback ? options.fallback : null; if (options && options.resolver) { @@ -154,7 +154,7 @@ Registry.prototype = { Example: ```javascript - var registry = new Registry(); + let registry = new Registry(); registry.register('model:user', Person, {singleton: false }); registry.register('fruit:favorite', Orange); @@ -171,13 +171,13 @@ Registry.prototype = { assert('fullName must be a proper full name', this.validateFullName(fullName)); if (factory === undefined) { - throw new TypeError('Attempting to register an unknown factory: `' + fullName + '`'); + throw new TypeError(`Attempting to register an unknown factory: '${fullName}'`); } - var normalizedName = this.normalize(fullName); + let normalizedName = this.normalize(fullName); if (this._resolveCache[normalizedName]) { - throw new Error('Cannot re-register: `' + fullName + '`, as it has already been resolved.'); + throw new Error(`Cannot re-register: '${fullName}', as it has already been resolved.`); } delete this._failCache[normalizedName]; @@ -189,7 +189,7 @@ Registry.prototype = { Unregister a fullName ```javascript - var registry = new Registry(); + let registry = new Registry(); registry.register('model:user', User); registry.resolve('model:user').create() instanceof User //=> true @@ -205,7 +205,7 @@ Registry.prototype = { unregister(fullName) { assert('fullName must be a proper full name', this.validateFullName(fullName)); - var normalizedName = this.normalize(fullName); + let normalizedName = this.normalize(fullName); this._localLookupCache = new EmptyObject(); @@ -222,7 +222,7 @@ Registry.prototype = { the registry. ```javascript - var registry = new Registry(); + let registry = new Registry(); registry.register('api:twitter', Twitter); registry.resolve('api:twitter') // => Twitter @@ -234,7 +234,7 @@ Registry.prototype = { to the registry. ```javascript - var registry = new Registry(); + let registry = new Registry(); registry.resolver = function(fullName) { // lookup via the module system of choice }; @@ -357,8 +357,8 @@ Registry.prototype = { Allow registering options for all factories of a type. ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); // if all of type `connection` must not be singletons registry.optionsForType('connection', { singleton: false }); @@ -366,13 +366,13 @@ Registry.prototype = { registry.register('connection:twitter', TwitterConnection); registry.register('connection:facebook', FacebookConnection); - var twitter = container.lookup('connection:twitter'); - var twitter2 = container.lookup('connection:twitter'); + let twitter = container.lookup('connection:twitter'); + let twitter2 = container.lookup('connection:twitter'); twitter === twitter2; // => false - var facebook = container.lookup('connection:facebook'); - var facebook2 = container.lookup('connection:facebook'); + let facebook = container.lookup('connection:facebook'); + let facebook2 = container.lookup('connection:facebook'); facebook === facebook2; // => false ``` @@ -387,7 +387,7 @@ Registry.prototype = { }, getOptionsForType(type) { - var optionsForType = this._typeOptions[type]; + let optionsForType = this._typeOptions[type]; if (optionsForType === undefined && this.fallback) { optionsForType = this.fallback.getOptionsForType(type); } @@ -401,13 +401,14 @@ Registry.prototype = { @param {Object} options */ options(fullName, options = {}) { - var normalizedName = this.normalize(fullName); + let normalizedName = this.normalize(fullName); this._options[normalizedName] = options; }, getOptions(fullName) { - var normalizedName = this.normalize(fullName); - var options = this._options[normalizedName]; + let normalizedName = this.normalize(fullName); + let options = this._options[normalizedName]; + if (options === undefined && this.fallback) { options = this.fallback.getOptions(fullName); } @@ -415,13 +416,13 @@ Registry.prototype = { }, getOption(fullName, optionName) { - var options = this._options[fullName]; + let options = this._options[fullName]; if (options && options[optionName] !== undefined) { return options[optionName]; } - var type = fullName.split(':')[0]; + let type = fullName.split(':')[0]; options = this._typeOptions[type]; if (options && options[optionName] !== undefined) { @@ -442,8 +443,8 @@ Registry.prototype = { one would do the following: ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('router:main', Router); registry.register('controller:user', UserController); @@ -451,8 +452,8 @@ Registry.prototype = { registry.typeInjection('controller', 'router', 'router:main'); - var user = container.lookup('controller:user'); - var post = container.lookup('controller:post'); + let user = container.lookup('controller:user'); + let post = container.lookup('controller:post'); user.router instanceof Router; //=> true post.router instanceof Router; //=> true @@ -470,13 +471,12 @@ Registry.prototype = { typeInjection(type, property, fullName) { assert('fullName must be a proper full name', this.validateFullName(fullName)); - var fullNameType = fullName.split(':')[0]; + let fullNameType = fullName.split(':')[0]; if (fullNameType === type) { - throw new Error('Cannot inject a `' + fullName + - '` on other ' + type + '(s).'); + throw new Error(`Cannot inject a '${fullName}' on other ${type}(s).`); } - var injections = this._typeInjections[type] || + let injections = this._typeInjections[type] || (this._typeInjections[type] = []); injections.push({ @@ -499,8 +499,8 @@ Registry.prototype = { Example: ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('source:main', Source); registry.register('model:user', User); @@ -513,8 +513,8 @@ Registry.prototype = { // injecting one fullName on another type registry.injection('model', 'source', 'source:main'); - var user = container.lookup('model:user'); - var post = container.lookup('model:post'); + let user = container.lookup('model:user'); + let post = container.lookup('model:post'); user.source instanceof Source; //=> true post.source instanceof Source; //=> true @@ -533,16 +533,16 @@ Registry.prototype = { */ injection(fullName, property, injectionName) { this.validateFullName(injectionName); - var normalizedInjectionName = this.normalize(injectionName); + let normalizedInjectionName = this.normalize(injectionName); if (fullName.indexOf(':') === -1) { return this.typeInjection(fullName, property, normalizedInjectionName); } assert('fullName must be a proper full name', this.validateFullName(fullName)); - var normalizedName = this.normalize(fullName); + let normalizedName = this.normalize(fullName); - var injections = this._injections[normalizedName] || + let injections = this._injections[normalizedName] || (this._injections[normalizedName] = []); injections.push({ @@ -563,14 +563,14 @@ Registry.prototype = { one would do the following: ```javascript - var registry = new Registry(); + let registry = new Registry(); registry.register('store:main', SomeStore); registry.factoryTypeInjection('model', 'store', 'store:main'); - var store = registry.lookup('store:main'); - var UserFactory = registry.lookupFactory('model:user'); + let store = registry.lookup('store:main'); + let UserFactory = registry.lookupFactory('model:user'); UserFactory.store instanceof SomeStore; //=> true ``` @@ -582,7 +582,7 @@ Registry.prototype = { @param {String} fullName */ factoryTypeInjection(type, property, fullName) { - var injections = this._factoryTypeInjections[type] || + let injections = this._factoryTypeInjections[type] || (this._factoryTypeInjections[type] = []); injections.push({ @@ -608,8 +608,8 @@ Registry.prototype = { Example: ```javascript - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('store:main', Store); registry.register('store:secondary', OtherStore); @@ -622,9 +622,9 @@ Registry.prototype = { // injecting one fullName on another fullName registry.factoryInjection('model:post', 'secondaryStore', 'store:secondary'); - var UserFactory = container.lookupFactory('model:user'); - var PostFactory = container.lookupFactory('model:post'); - var store = container.lookup('store:main'); + let UserFactory = container.lookupFactory('model:user'); + let PostFactory = container.lookupFactory('model:post'); + let store = container.lookup('store:main'); UserFactory.store instanceof Store; //=> true UserFactory.secondaryStore instanceof OtherStore; //=> false @@ -643,8 +643,8 @@ Registry.prototype = { @param {String} injectionName */ factoryInjection(fullName, property, injectionName) { - var normalizedName = this.normalize(fullName); - var normalizedInjectionName = this.normalize(injectionName); + let normalizedName = this.normalize(fullName); + let normalizedInjectionName = this.normalize(injectionName); this.validateFullName(injectionName); @@ -652,7 +652,7 @@ Registry.prototype = { return this.factoryTypeInjection(normalizedName, property, normalizedInjectionName); } - var injections = this._factoryInjections[normalizedName] || (this._factoryInjections[normalizedName] = []); + let injections = this._factoryInjections[normalizedName] || (this._factoryInjections[normalizedName] = []); injections.push({ property: property, @@ -692,7 +692,7 @@ Registry.prototype = { validateFullName(fullName) { if (!this.isValidFullName(fullName)) { - throw new TypeError('Invalid Fullname, expected: `type:name` got: ' + fullName); + throw new TypeError(`Invalid Fullname, expected: 'type:name' got: ${fullName}`); } return true; @@ -705,23 +705,23 @@ Registry.prototype = { validateInjections(injections) { if (!injections) { return; } - var fullName; + let fullName; - for (var i = 0; i < injections.length; i++) { + for (let i = 0; i < injections.length; i++) { fullName = injections[i].fullName; if (!this.has(fullName)) { - throw new Error('Attempting to inject an unknown injection: `' + fullName + '`'); + throw new Error(`Attempting to inject an unknown injection: '${fullName}'`); } } }, normalizeInjectionsHash(hash) { - var injections = []; + let injections = []; - for (var key in hash) { + for (let key in hash) { if (hash.hasOwnProperty(key)) { - assert('Expected a proper full name, given \'' + hash[key] + '\'', this.validateFullName(hash[key])); + assert(`Expected a proper full name, given '${hash[key]}'`, this.validateFullName(hash[key])); injections.push({ property: key, @@ -734,7 +734,7 @@ Registry.prototype = { }, getInjections(fullName) { - var injections = this._injections[fullName] || []; + let injections = this._injections[fullName] || []; if (this.fallback) { injections = injections.concat(this.fallback.getInjections(fullName)); } @@ -742,7 +742,7 @@ Registry.prototype = { }, getTypeInjections(type) { - var injections = this._typeInjections[type] || []; + let injections = this._typeInjections[type] || []; if (this.fallback) { injections = injections.concat(this.fallback.getTypeInjections(type)); } @@ -750,7 +750,7 @@ Registry.prototype = { }, getFactoryInjections(fullName) { - var injections = this._factoryInjections[fullName] || []; + let injections = this._factoryInjections[fullName] || []; if (this.fallback) { injections = injections.concat(this.fallback.getFactoryInjections(fullName)); } @@ -758,7 +758,7 @@ Registry.prototype = { }, getFactoryTypeInjections(type) { - var injections = this._factoryTypeInjections[type] || []; + let injections = this._factoryTypeInjections[type] || []; if (this.fallback) { injections = injections.concat(this.fallback.getFactoryTypeInjections(type)); } @@ -780,7 +780,7 @@ function deprecateResolverFunction(registry) { fullName. Used to allow for local lookup. ```javascript - var registry = new Registry(); + let registry = new Registry(); // the twitter factory is added to the module system registry.expandLocalLookup('component:post-title', { source: 'template:post' }) // => component:post/post-title @@ -837,7 +837,7 @@ function resolve(registry, normalizedName, options) { if (!normalizedName) { return; } } - var cached = registry._resolveCache[normalizedName]; + let cached = registry._resolveCache[normalizedName]; if (cached !== undefined) { return cached; } if (registry._failCache[normalizedName]) { return; } @@ -877,6 +877,3 @@ export function privatize([fullName]) { let [type, rawName] = fullName.split(':'); return privateNames[fullName] = intern(`${type}:${rawName}-${privateSuffix}`); } - - -export default Registry; diff --git a/packages/container/tests/container_test.js b/packages/container/tests/container_test.js index 692e47e0ec1..837ec09fefb 100644 --- a/packages/container/tests/container_test.js +++ b/packages/container/tests/container_test.js @@ -4,7 +4,7 @@ import Registry from 'container/registry'; import factory from 'container/tests/test-helpers/factory'; import { getOwner, OWNER } from 'container/owner'; -var originalModelInjections; +let originalModelInjections; QUnit.module('Container', { setup() { @@ -16,13 +16,13 @@ QUnit.module('Container', { }); QUnit.test('A registered factory returns the same instance each time', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.register('controller:post', PostController); - var postController = container.lookup('controller:post'); + let postController = container.lookup('controller:post'); ok(postController instanceof PostController, 'The lookup is an instance of the factory'); @@ -30,22 +30,22 @@ QUnit.test('A registered factory returns the same instance each time', function( }); QUnit.test('A registered factory is returned from lookupFactory', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.register('controller:post', PostController); - var PostControllerFactory = container.lookupFactory('controller:post'); + let PostControllerFactory = container.lookupFactory('controller:post'); ok(PostControllerFactory, 'factory is returned'); ok(PostControllerFactory.create() instanceof PostController, 'The return of factory.create is an instance of PostController'); }); QUnit.test('A registered factory is returned from lookupFactory is the same factory each time', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.register('controller:post', PostController); @@ -53,20 +53,20 @@ QUnit.test('A registered factory is returned from lookupFactory is the same fact }); QUnit.test('A factory returned from lookupFactory has a debugkey', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.register('controller:post', PostController); - var PostFactory = container.lookupFactory('controller:post'); + let PostFactory = container.lookupFactory('controller:post'); equal(PostFactory._debugContainerKey, 'controller:post', 'factory instance receives _debugContainerKey'); }); QUnit.test('fallback for to create time injections if factory has no extend', function() { - var registry = new Registry(); - var container = registry.container(); - var AppleController = factory(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let AppleController = factory(); + let PostController = factory(); PostController.extend = undefined; // remove extend @@ -74,17 +74,17 @@ QUnit.test('fallback for to create time injections if factory has no extend', fu registry.register('controller:post', PostController); registry.injection('controller:post', 'apple', 'controller:apple'); - var postController = container.lookup('controller:post'); + let postController = container.lookup('controller:post'); equal(postController._debugContainerKey, 'controller:post', 'instance receives _debugContainerKey'); ok(postController.apple instanceof AppleController, 'instance receives an apple of instance AppleController'); }); QUnit.test('The descendants of a factory returned from lookupFactory have a container and debugkey', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var instance; + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let instance; registry.register('controller:post', PostController); instance = container.lookupFactory('controller:post').create(); @@ -95,16 +95,16 @@ QUnit.test('The descendants of a factory returned from lookupFactory have a cont }); QUnit.test('A registered factory returns a fresh instance if singleton: false is passed as an option', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.register('controller:post', PostController); - var postController1 = container.lookup('controller:post'); - var postController2 = container.lookup('controller:post', { singleton: false }); - var postController3 = container.lookup('controller:post', { singleton: false }); - var postController4 = container.lookup('controller:post'); + let postController1 = container.lookup('controller:post'); + let postController2 = container.lookup('controller:post', { singleton: false }); + let postController3 = container.lookup('controller:post', { singleton: false }); + let postController4 = container.lookup('controller:post'); equal(postController1.toString(), postController4.toString(), 'Singleton factories looked up normally return the same value'); notEqual(postController1.toString(), postController2.toString(), 'Singleton factories are not equal to factories looked up with singleton: false'); @@ -118,35 +118,35 @@ QUnit.test('A registered factory returns a fresh instance if singleton: false is }); QUnit.test('A factory type with a registered injection\'s instances receive that injection', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var Store = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let Store = factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); registry.typeInjection('controller', 'store', 'store:main'); - var postController = container.lookup('controller:post'); - var store = container.lookup('store:main'); + let postController = container.lookup('controller:post'); + let store = container.lookup('store:main'); equal(postController.store, store); }); QUnit.test('An individual factory with a registered injection receives the injection', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var Store = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let Store = factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); registry.injection('controller:post', 'store', 'store:main'); - var postController = container.lookup('controller:post'); - var store = container.lookup('store:main'); + let postController = container.lookup('controller:post'); + let store = container.lookup('store:main'); equal(store._debugContainerKey, 'store:main'); @@ -155,11 +155,11 @@ QUnit.test('An individual factory with a registered injection receives the injec }); QUnit.test('A factory with both type and individual injections', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var Store = factory(); - var Router = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let Store = factory(); + let Router = factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); @@ -168,20 +168,20 @@ QUnit.test('A factory with both type and individual injections', function() { registry.injection('controller:post', 'store', 'store:main'); registry.typeInjection('controller', 'router', 'router:main'); - var postController = container.lookup('controller:post'); - var store = container.lookup('store:main'); - var router = container.lookup('router:main'); + let postController = container.lookup('controller:post'); + let store = container.lookup('store:main'); + let router = container.lookup('router:main'); equal(postController.store, store); equal(postController.router, router); }); QUnit.test('A factory with both type and individual factoryInjections', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var Store = factory(); - var Router = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let Store = factory(); + let Router = factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); @@ -190,50 +190,50 @@ QUnit.test('A factory with both type and individual factoryInjections', function registry.factoryInjection('controller:post', 'store', 'store:main'); registry.factoryTypeInjection('controller', 'router', 'router:main'); - var PostControllerFactory = container.lookupFactory('controller:post'); - var store = container.lookup('store:main'); - var router = container.lookup('router:main'); + let PostControllerFactory = container.lookupFactory('controller:post'); + let store = container.lookup('store:main'); + let router = container.lookup('router:main'); equal(PostControllerFactory.store, store, 'PostControllerFactory has the instance of store'); equal(PostControllerFactory.router, router, 'PostControllerFactory has the route instance'); }); QUnit.test('A non-singleton instance is never cached', function() { - var registry = new Registry(); - var container = registry.container(); - var PostView = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostView = factory(); registry.register('view:post', PostView, { singleton: false }); - var postView1 = container.lookup('view:post'); - var postView2 = container.lookup('view:post'); + let postView1 = container.lookup('view:post'); + let postView2 = container.lookup('view:post'); ok(postView1 !== postView2, 'Non-singletons are not cached'); }); QUnit.test('A non-instantiated property is not instantiated', function() { - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); - var template = function() {}; + let template = function() {}; registry.register('template:foo', template, { instantiate: false }); equal(container.lookup('template:foo'), template); }); QUnit.test('A failed lookup returns undefined', function() { - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); equal(container.lookup('doesnot:exist'), undefined); }); QUnit.test('An invalid factory throws an error', function() { - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); registry.register('controller:foo', {}); - throws(function() { + throws(() => { container.lookup('controller:foo'); }, /Failed to create an instance of \'controller:foo\'/); }); @@ -241,13 +241,13 @@ QUnit.test('An invalid factory throws an error', function() { QUnit.test('Injecting a failed lookup raises an error', function() { ENV.MODEL_FACTORY_INJECTIONS = true; - var registry = new Registry(); - var container = registry.container(); + let registry = new Registry(); + let container = registry.container(); - var fooInstance = {}; - var fooFactory = {}; + let fooInstance = {}; + let fooFactory = {}; - var Foo = { + let Foo = { create(args) { return fooInstance; }, extend(args) { return fooFactory; } }; @@ -255,15 +255,15 @@ QUnit.test('Injecting a failed lookup raises an error', function() { registry.register('model:foo', Foo); registry.injection('model:foo', 'store', 'store:main'); - throws(function() { + throws(() => { container.lookup('model:foo'); }); }); QUnit.test('Injecting a falsy value does not raise an error', function() { - var registry = new Registry(); - var container = registry.container(); - var ApplicationController = factory(); + let registry = new Registry(); + let container = registry.container(); + let ApplicationController = factory(); registry.register('controller:application', ApplicationController); registry.register('user:current', null, { instantiate: false }); @@ -282,11 +282,11 @@ QUnit.test('The container returns same value each time even if the value is fals }); QUnit.test('Destroying the container destroys any cached singletons', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var PostView = factory(); - var template = function() {}; + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let PostView = factory(); + let template = function() {}; registry.register('controller:post', PostController); registry.register('view:post', PostView, { singleton: false }); @@ -294,8 +294,8 @@ QUnit.test('Destroying the container destroys any cached singletons', function() registry.injection('controller:post', 'postView', 'view:post'); - var postController = container.lookup('controller:post'); - var postView = postController.postView; + let postController = container.lookup('controller:post'); + let postView = postController.postView; ok(postView instanceof PostView, 'The non-singleton was injected'); @@ -306,9 +306,9 @@ QUnit.test('Destroying the container destroys any cached singletons', function() }); QUnit.test('The container can use a registry hook to resolve factories lazily', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.resolver = { resolve(fullName) { @@ -318,45 +318,45 @@ QUnit.test('The container can use a registry hook to resolve factories lazily', } }; - var postController = container.lookup('controller:post'); + let postController = container.lookup('controller:post'); ok(postController instanceof PostController, 'The correct factory was provided'); }); QUnit.test('The container normalizes names before resolving', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.normalizeFullName = function(fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); - var postController = container.lookup('controller:normalized'); + let postController = container.lookup('controller:normalized'); ok(postController instanceof PostController, 'Normalizes the name before resolving'); }); QUnit.test('The container normalizes names when looking factory up', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); registry.normalizeFullName = function(fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); - var fact = container.lookupFactory('controller:normalized'); + let fact = container.lookupFactory('controller:normalized'); equal(fact.toString() === PostController.extend().toString(), true, 'Normalizes the name when looking factory up'); }); QUnit.test('Options can be registered that should be applied to a given factory', function() { - var registry = new Registry(); - var container = registry.container(); - var PostView = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostView = factory(); registry.resolver = { resolve(fullName) { @@ -368,8 +368,8 @@ QUnit.test('Options can be registered that should be applied to a given factory' registry.options('view:post', { instantiate: true, singleton: false }); - var postView1 = container.lookup('view:post'); - var postView2 = container.lookup('view:post'); + let postView1 = container.lookup('view:post'); + let postView2 = container.lookup('view:post'); ok(postView1 instanceof PostView, 'The correct factory was provided'); ok(postView2 instanceof PostView, 'The correct factory was provided'); @@ -378,9 +378,9 @@ QUnit.test('Options can be registered that should be applied to a given factory' }); QUnit.test('Options can be registered that should be applied to all factories for a given type', function() { - var registry = new Registry(); - var container = registry.container(); - var PostView = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostView = factory(); registry.resolver = { resolve(fullName) { @@ -392,8 +392,8 @@ QUnit.test('Options can be registered that should be applied to all factories fo registry.optionsForType('view', { singleton: false }); - var postView1 = container.lookup('view:post'); - var postView2 = container.lookup('view:post'); + let postView1 = container.lookup('view:post'); + let postView2 = container.lookup('view:post'); ok(postView1 instanceof PostView, 'The correct factory was provided'); ok(postView2 instanceof PostView, 'The correct factory was provided'); @@ -402,26 +402,26 @@ QUnit.test('Options can be registered that should be applied to all factories fo }); QUnit.test('An injected non-singleton instance is never cached', function() { - var registry = new Registry(); - var container = registry.container(); - var PostView = factory(); - var PostViewHelper = factory(); + let registry = new Registry(); + let container = registry.container(); + let PostView = factory(); + let PostViewHelper = factory(); registry.register('view:post', PostView, { singleton: false }); registry.register('view_helper:post', PostViewHelper, { singleton: false }); registry.injection('view:post', 'viewHelper', 'view_helper:post'); - var postView1 = container.lookup('view:post'); - var postView2 = container.lookup('view:post'); + let postView1 = container.lookup('view:post'); + let postView2 = container.lookup('view:post'); ok(postView1.viewHelper !== postView2.viewHelper, 'Injected non-singletons are not cached'); }); QUnit.test('Factory resolves are cached', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var resolveWasCalled = []; + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let resolveWasCalled = []; registry.resolve = function(fullName) { resolveWasCalled.push(fullName); return PostController; @@ -436,10 +436,10 @@ QUnit.test('Factory resolves are cached', function() { }); QUnit.test('factory for non extendables (MODEL) resolves are cached', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = factory(); - var resolveWasCalled = []; + let registry = new Registry(); + let container = registry.container(); + let PostController = factory(); + let resolveWasCalled = []; registry.resolve = function(fullName) { resolveWasCalled.push(fullName); return PostController; @@ -454,10 +454,10 @@ QUnit.test('factory for non extendables (MODEL) resolves are cached', function() }); QUnit.test('factory for non extendables resolves are cached', function() { - var registry = new Registry(); - var container = registry.container(); - var PostController = {}; - var resolveWasCalled = []; + let registry = new Registry(); + let container = registry.container(); + let PostController = {}; + let resolveWasCalled = []; registry.resolve = function(fullName) { resolveWasCalled.push(fullName); @@ -475,9 +475,9 @@ QUnit.test('factory for non extendables resolves are cached', function() { QUnit.test('The `_onLookup` hook is called on factories when looked up the first time', function() { expect(2); - var registry = new Registry(); - var container = registry.container(); - var Apple = factory(); + let registry = new Registry(); + let container = registry.container(); + let Apple = factory(); Apple.reopenClass({ _onLookup(fullName) { @@ -493,10 +493,10 @@ QUnit.test('The `_onLookup` hook is called on factories when looked up the first }); QUnit.test('A factory\'s lazy injections are validated when first instantiated', function() { - var registry = new Registry(); - var container = registry.container(); - var Apple = factory(); - var Orange = factory(); + let registry = new Registry(); + let container = registry.container(); + let Apple = factory(); + let Orange = factory(); Apple.reopenClass({ _lazyInjections() { @@ -507,18 +507,18 @@ QUnit.test('A factory\'s lazy injections are validated when first instantiated', registry.register('apple:main', Apple); registry.register('orange:main', Orange); - throws(function() { + throws(() => { container.lookup('apple:main'); - }, /Attempting to inject an unknown injection: `banana:main`/); + }, /Attempting to inject an unknown injection: 'banana:main'/); }); QUnit.test('Lazy injection validations are cached', function() { expect(1); - var registry = new Registry(); - var container = registry.container(); - var Apple = factory(); - var Orange = factory(); + let registry = new Registry(); + let container = registry.container(); + let Apple = factory(); + let Orange = factory(); Apple.reopenClass({ _lazyInjections() { @@ -536,8 +536,8 @@ QUnit.test('Lazy injection validations are cached', function() { QUnit.test('An object with its owner pre-set should be returned from ownerInjection', function() { let owner = { }; - var registry = new Registry(); - var container = registry.container({ owner }); + let registry = new Registry(); + let container = registry.container({ owner }); let result = container.ownerInjection(); @@ -551,11 +551,11 @@ QUnit.test('A deprecated `container` property is appended to every object instan registry.register('controller:post', PostController); let postController = container.lookup('controller:post'); - expectDeprecation(function() { + expectDeprecation(() => { get(postController, 'container'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); - expectDeprecation(function() { + expectDeprecation(() => { let c = postController.container; strictEqual(c, container); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); @@ -569,18 +569,18 @@ QUnit.test('A deprecated `container` property is appended to every object instan let container = registry.container({ owner }); // Define a simple non-extendable factory - let PostController = function(options) { + function PostController(options) { this.container = options.container; - }; + } PostController.create = function(options) { ok(options.container, 'fake container has been injected and is available during `create`.'); - expectDeprecation(function() { + expectDeprecation(() => { options.container.lookup('abc:one'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper to access the owner of this object and then call `lookup` instead.'); - expectDeprecation(function() { + expectDeprecation(() => { options.container.lookupFactory('abc:two'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper to access the owner of this object and then call `_lookupFactory` instead.'); @@ -601,11 +601,11 @@ QUnit.test('A deprecated `container` property is appended to every object instan registry.register('controller:post', PostController); let postController = container.lookup('controller:post'); - expectDeprecation(function() { + expectDeprecation(() => { get(postController, 'container'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); - expectDeprecation(function() { + expectDeprecation(() => { let c = postController.container; strictEqual(c, container, 'Injected container is now regular (not fake) container, but access is still deprecated.'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); @@ -661,13 +661,13 @@ QUnit.test('An extendable factory can provide `container` upon create, with a de let postController; - expectDeprecation(function() { + expectDeprecation(() => { postController = PostController.create({ container: 'foo' }); }, /Providing the \`container\` property to .+ is deprecated. Please use \`Ember.setOwner\` or \`owner.ownerInjection\(\)\` instead to provide an owner to the instance being created/); - expectDeprecation(function() { + expectDeprecation(() => { let c = postController.container; assert.equal(c, 'foo', 'the `container` provided to `.create`was used'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); diff --git a/packages/container/tests/registry_test.js b/packages/container/tests/registry_test.js index 48c1355c49d..4db8cec845f 100644 --- a/packages/container/tests/registry_test.js +++ b/packages/container/tests/registry_test.js @@ -4,20 +4,20 @@ import factory from 'container/tests/test-helpers/factory'; QUnit.module('Registry'); QUnit.test('A registered factory is returned from resolve', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.register('controller:post', PostController); - var PostControllerFactory = registry.resolve('controller:post'); + let PostControllerFactory = registry.resolve('controller:post'); ok(PostControllerFactory, 'factory is returned'); ok(PostControllerFactory.create() instanceof PostController, 'The return of factory.create is an instance of PostController'); }); QUnit.test('The registered factory returned from resolve is the same factory each time', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.register('controller:post', PostController); @@ -46,8 +46,8 @@ QUnit.test('The value returned from resolver is the same value as the original v }); QUnit.test('A registered factory returns true for `has` if an item is registered', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.register('controller:post', PostController); @@ -56,14 +56,14 @@ QUnit.test('A registered factory returns true for `has` if an item is registered }); QUnit.test('Throw exception when trying to inject `type:thing` on all type(s)', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.register('controller:post', PostController); - throws(function() { + throws(() => { registry.typeInjection('controller', 'injected', 'controller:post'); - }, /Cannot inject a `controller:post` on other controller\(s\)\./); + }, /Cannot inject a 'controller:post' on other controller\(s\)\./); }); QUnit.test('The registry can take a hook to resolve factories lazily', function() { @@ -95,29 +95,29 @@ QUnit.test('The registry respects the resolver hook for `has`', function() { }); QUnit.test('The registry normalizes names when resolving', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.normalizeFullName = function(fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); - var type = registry.resolve('controller:normalized'); + let type = registry.resolve('controller:normalized'); strictEqual(type, PostController, 'Normalizes the name when resolving'); }); QUnit.test('The registry normalizes names when checking if the factory is registered', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.normalizeFullName = function(fullName) { return fullName === 'controller:normalized' ? 'controller:post' : fullName; }; registry.register('controller:post', PostController); - var isPresent = registry.has('controller:normalized'); + let isPresent = registry.has('controller:normalized'); equal(isPresent, true, 'Normalizes the name when checking if the factory or instance is present'); }); @@ -125,27 +125,27 @@ QUnit.test('The registry normalizes names when checking if the factory is regist QUnit.test('validateFullName throws an error if name is incorrect', function() { expect(2); - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.normalize = function(fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); - throws(function() { + throws(() => { registry.validateFullName('post'); - }, /TypeError: Invalid Fullname, expected: `type:name` got: post/); + }, /TypeError: Invalid Fullname, expected: 'type:name' got: post/); - throws(function() { + throws(() => { registry.validateFullName('route:http://foo.bar.com/baz'); - }, /TypeError: Invalid Fullname, expected: `type:name` got: route:http:\/\/foo.bar.com\/baz/); + }, /TypeError: Invalid Fullname, expected: 'type:name' got: route:http:\/\/foo.bar.com\/baz/); }); QUnit.test('The registry normalizes names when injecting', function() { - var registry = new Registry(); - var PostController = factory(); - var user = { name: 'Stef' }; + let registry = new Registry(); + let PostController = factory(); + let user = { name: 'Stef' }; registry.normalize = function(fullName) { return 'controller:post'; @@ -159,17 +159,17 @@ QUnit.test('The registry normalizes names when injecting', function() { }); QUnit.test('cannot register an `undefined` factory', function() { - var registry = new Registry(); + let registry = new Registry(); - throws(function() { + throws(() => { registry.register('controller:apple', undefined); }, ''); }); QUnit.test('can re-register a factory', function() { - var registry = new Registry(); - var FirstApple = factory('first'); - var SecondApple = factory('second'); + let registry = new Registry(); + let FirstApple = factory('first'); + let SecondApple = factory('second'); registry.register('controller:apple', FirstApple); registry.register('controller:apple', SecondApple); @@ -178,16 +178,16 @@ QUnit.test('can re-register a factory', function() { }); QUnit.test('cannot re-register a factory if it has been resolved', function() { - var registry = new Registry(); - var FirstApple = factory('first'); - var SecondApple = factory('second'); + let registry = new Registry(); + let FirstApple = factory('first'); + let SecondApple = factory('second'); registry.register('controller:apple', FirstApple); strictEqual(registry.resolve('controller:apple'), FirstApple); throws(function() { registry.register('controller:apple', SecondApple); - }, /Cannot re-register: `controller:apple`, as it has already been resolved\./); + }, /Cannot re-register: 'controller:apple', as it has already been resolved\./); strictEqual(registry.resolve('controller:apple'), FirstApple); }); @@ -195,9 +195,9 @@ QUnit.test('cannot re-register a factory if it has been resolved', function() { QUnit.test('registry.has should not accidentally cause injections on that factory to be run. (Mitigate merely on observing)', function() { expect(1); - var registry = new Registry(); - var FirstApple = factory('first'); - var SecondApple = factory('second'); + let registry = new Registry(); + let FirstApple = factory('first'); + let SecondApple = factory('second'); SecondApple.extend = function(a, b, c) { ok(false, 'should not extend or touch the injected model, merely to inspect existence of another'); @@ -213,7 +213,7 @@ QUnit.test('registry.has should not accidentally cause injections on that factor QUnit.test('registry.has should not error for invalid fullNames)', function() { expect(1); - var registry = new Registry(); + let registry = new Registry(); ok(!registry.has('foo:bar:baz')); }); @@ -221,7 +221,7 @@ QUnit.test('registry.has should not error for invalid fullNames)', function() { QUnit.test('once resolved, always return the same result', function() { expect(1); - var registry = new Registry(); + let registry = new Registry(); registry.resolver = { resolve() { @@ -229,7 +229,7 @@ QUnit.test('once resolved, always return the same result', function() { } }; - var Bar = registry.resolve('models:bar'); + let Bar = registry.resolve('models:bar'); registry.resolver = { resolve() { @@ -241,9 +241,9 @@ QUnit.test('once resolved, always return the same result', function() { }); QUnit.test('factory resolves are cached', function() { - var registry = new Registry(); - var PostController = factory(); - var resolveWasCalled = []; + let registry = new Registry(); + let PostController = factory(); + let resolveWasCalled = []; registry.resolver = { resolve(fullName) { @@ -261,9 +261,9 @@ QUnit.test('factory resolves are cached', function() { }); QUnit.test('factory for non extendables (MODEL) resolves are cached', function() { - var registry = new Registry(); - var PostController = factory(); - var resolveWasCalled = []; + let registry = new Registry(); + let PostController = factory(); + let resolveWasCalled = []; registry.resolver = { resolve(fullName) { @@ -281,9 +281,9 @@ QUnit.test('factory for non extendables (MODEL) resolves are cached', function() }); QUnit.test('factory for non extendables resolves are cached', function() { - var registry = new Registry(); - var PostController = {}; - var resolveWasCalled = []; + let registry = new Registry(); + let PostController = {}; + let resolveWasCalled = []; registry.resolver = { resolve(fullName) { @@ -301,12 +301,12 @@ QUnit.test('factory for non extendables resolves are cached', function() { }); QUnit.test('registry.container creates a container', function() { - var registry = new Registry(); - var PostController = factory(); + let registry = new Registry(); + let PostController = factory(); registry.register('controller:post', PostController); - var container = registry.container(); - var postController = container.lookup('controller:post'); + let container = registry.container(); + let postController = container.lookup('controller:post'); ok(postController instanceof PostController, 'The lookup is an instance of the registered factory'); }); @@ -390,24 +390,24 @@ QUnit.test('`makeToString` will be handled by the resolver, then by the fallback }); QUnit.test('`resolve` can be handled by a fallback registry', function() { - var fallback = new Registry(); + let fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); - var PostController = factory(); + let registry = new Registry({ fallback: fallback }); + let PostController = factory(); fallback.register('controller:post', PostController); - var PostControllerFactory = registry.resolve('controller:post'); + let PostControllerFactory = registry.resolve('controller:post'); ok(PostControllerFactory, 'factory is returned'); ok(PostControllerFactory.create() instanceof PostController, 'The return of factory.create is an instance of PostController'); }); QUnit.test('`has` can be handled by a fallback registry', function() { - var fallback = new Registry(); + let fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); - var PostController = factory(); + let registry = new Registry({ fallback: fallback }); + let PostController = factory(); fallback.register('controller:post', PostController); @@ -415,8 +415,8 @@ QUnit.test('`has` can be handled by a fallback registry', function() { }); QUnit.test('`getInjections` includes injections from a fallback registry', function() { - var fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); + let fallback = new Registry(); + let registry = new Registry({ fallback: fallback }); equal(registry.getInjections('model:user').length, 0, 'No injections in the primary registry'); @@ -426,8 +426,8 @@ QUnit.test('`getInjections` includes injections from a fallback registry', funct }); QUnit.test('`getTypeInjections` includes type injections from a fallback registry', function() { - var fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); + let fallback = new Registry(); + let registry = new Registry({ fallback: fallback }); equal(registry.getTypeInjections('model').length, 0, 'No injections in the primary registry'); @@ -437,8 +437,8 @@ QUnit.test('`getTypeInjections` includes type injections from a fallback registr }); QUnit.test('`getFactoryInjections` includes factory injections from a fallback registry', function() { - var fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); + let fallback = new Registry(); + let registry = new Registry({ fallback: fallback }); equal(registry.getFactoryInjections('model:user').length, 0, 'No factory injections in the primary registry'); @@ -449,8 +449,8 @@ QUnit.test('`getFactoryInjections` includes factory injections from a fallback r QUnit.test('`getFactoryTypeInjections` includes factory type injections from a fallback registry', function() { - var fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); + let fallback = new Registry(); + let registry = new Registry({ fallback: fallback }); equal(registry.getFactoryTypeInjections('model').length, 0, 'No factory type injections in the primary registry'); @@ -474,8 +474,8 @@ QUnit.test('`knownForType` contains keys for each item of a given type', functio }); QUnit.test('`knownForType` includes fallback registry results', function() { - var fallback = new Registry(); - var registry = new Registry({ fallback: fallback }); + let fallback = new Registry(); + let registry = new Registry({ fallback: fallback }); registry.register('foo:bar-baz', 'baz'); registry.register('foo:qux-fez', 'fez'); @@ -502,7 +502,7 @@ QUnit.test('`knownForType` is called on the resolver if present', function() { } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); registry.register('foo:bar-baz', 'baz'); @@ -520,7 +520,7 @@ QUnit.test('A registry can be created with a deprecated `resolver` function inst let registry; - expectDeprecation(function() { + expectDeprecation(() => { registry = new Registry({ resolver(fullName) { return `${fullName}-resolved`; @@ -534,7 +534,7 @@ QUnit.test('A registry can be created with a deprecated `resolver` function inst QUnit.test('resolver.expandLocalLookup is not required', function(assert) { assert.expect(1); - var registry = new Registry({ + let registry = new Registry({ resolver: { } }); @@ -558,7 +558,7 @@ QUnit.test('expandLocalLookup is called on the resolver if present', function(as } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); @@ -636,7 +636,7 @@ QUnit.test('resolver.expandLocalLookup result is cached', function(assert) { } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); @@ -665,7 +665,7 @@ QUnit.test('resolver.expandLocalLookup cache is busted when any unregister is ca } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); @@ -698,7 +698,7 @@ QUnit.test('resolve calls expandLocallookup when it receives options.source', fu } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); @@ -730,7 +730,7 @@ QUnit.test('has uses expandLocalLookup', function(assert) { } }; - var registry = new Registry({ + let registry = new Registry({ resolver }); diff --git a/packages/container/tests/test-helpers/factory.js b/packages/container/tests/test-helpers/factory.js index 06d2f848442..18ab9402864 100644 --- a/packages/container/tests/test-helpers/factory.js +++ b/packages/container/tests/test-helpers/factory.js @@ -1,20 +1,21 @@ -var setProperties = function(object, properties) { - for (var key in properties) { +function setProperties(object, properties) { + for (let key in properties) { if (properties.hasOwnProperty(key)) { object[key] = properties[key]; } } -}; +} -var guids = 0; +let guids = 0; export default function factory() { /*jshint validthis: true */ - var Klass = function(options) { + function Klass(options) { setProperties(this, options); this._guid = guids++; - }; + this.isDestroyed = false; + } Klass.prototype.constructor = Klass; Klass.prototype.destroy = function() { @@ -41,11 +42,11 @@ export default function factory() { } function extend(options) { - var Child = function(options) { + function Child(options) { Klass.call(this, options); - }; + } - var Parent = this; + let Parent = this; Child.prototype = new Parent(); Child.prototype.constructor = Child; diff --git a/packages/ember-runtime/tests/inject_test.js b/packages/ember-runtime/tests/inject_test.js index 72580366ec6..ea25190c37a 100644 --- a/packages/ember-runtime/tests/inject_test.js +++ b/packages/ember-runtime/tests/inject_test.js @@ -47,7 +47,7 @@ if (!EmberDev.runningProdBuild) { throws(function() { owner.lookup('foo:main'); - }, /Attempting to inject an unknown injection: `bar:baz`/); + }, /Attempting to inject an unknown injection: 'bar:baz'/); }); } From 62b235f128ab8ced67906769dcb68699562e3d65 Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Sun, 12 Jun 2016 14:20:33 -0700 Subject: [PATCH 2/2] Reduce entropy reduction, concat rather then multiply --- packages/container/lib/registry.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/container/lib/registry.js b/packages/container/lib/registry.js index de55f7083b2..bb1b05a1b9f 100644 --- a/packages/container/lib/registry.js +++ b/packages/container/lib/registry.js @@ -868,7 +868,7 @@ import { intern } from 'ember-metal/utils'; import dict from 'ember-metal/dictionary'; const privateNames = dict(null); -const privateSuffix = Math.floor(Math.random() * new Date()) + ''; +const privateSuffix = `${Math.random()}${Date.now()}`; export function privatize([fullName]) { let name = privateNames[fullName];