UNPKG

ember-material-icons

Version:

Google Material icons for your ember-cli app

1,373 lines (1,049 loc) 2.89 MB
;(function() { /*! * @overview Ember - JavaScript Application Framework * @copyright Copyright 2011-2017 Tilde Inc. and contributors * Portions Copyright 2006-2011 Strobe Inc. * Portions Copyright 2008-2011 Apple Inc. All rights reserved. * @license Licensed under MIT license * See https://raw.github.com/emberjs/ember.js/master/LICENSE * @version 2.13.2 */ var enifed, requireModule, Ember; var mainContext = this; // Used in ember-environment/lib/global.js (function() { var isNode = typeof window === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; if (!isNode) { Ember = this.Ember = this.Ember || {}; } if (typeof Ember === 'undefined') { Ember = {}; } if (typeof Ember.__loader === 'undefined') { var registry = {}; var seen = {}; enifed = function(name, deps, callback) { var value = { }; if (!callback) { value.deps = []; value.callback = deps; } else { value.deps = deps; value.callback = callback; } registry[name] = value; }; requireModule = function(name) { return internalRequire(name, null); }; // setup `require` module requireModule['default'] = requireModule; requireModule.has = function registryHas(moduleName) { return !!registry[moduleName] || !!registry[moduleName + '/index']; }; function missingModule(name, referrerName) { if (referrerName) { throw new Error('Could not find module ' + name + ' required by: ' + referrerName); } else { throw new Error('Could not find module ' + name); } } function internalRequire(_name, referrerName) { var name = _name; var mod = registry[name]; if (!mod) { name = name + '/index'; mod = registry[name]; } var exports = seen[name]; if (exports !== undefined) { return exports; } exports = seen[name] = {}; if (!mod) { missingModule(_name, referrerName); } var deps = mod.deps; var callback = mod.callback; var reified = new Array(deps.length); for (var i = 0; i < deps.length; i++) { if (deps[i] === 'exports') { reified[i] = exports; } else if (deps[i] === 'require') { reified[i] = requireModule; } else { reified[i] = internalRequire(deps[i], name); } } callback.apply(this, reified); return exports; } requireModule._eak_seen = registry; Ember.__loader = { define: enifed, require: requireModule, registry: registry }; } else { enifed = Ember.__loader.define; requireModule = Ember.__loader.require; } })(); function classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : defaults(subClass, superClass); } function taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; } function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function createClass(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; } function interopExportWildcard(obj, defaults) { var newObj = defaults({}, obj); delete newObj['default']; return newObj; } function defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } var babelHelpers = { classCallCheck: classCallCheck, inherits: inherits, taggedTemplateLiteralLoose: taggedTemplateLiteralLoose, slice: Array.prototype.slice, createClass: createClass, interopExportWildcard: interopExportWildcard, defaults: defaults }; enifed('container/container.lint-test', ['exports'], function (exports) { 'use strict'; QUnit.module('ESLint | container/container.js'); QUnit.test('should pass ESLint', function (assert) { assert.expect(1); assert.ok(true, 'container/container.js should pass ESLint\n\n'); }); }); enifed('container/index.lint-test', ['exports'], function (exports) { 'use strict'; QUnit.module('ESLint | container/index.js'); QUnit.test('should pass ESLint', function (assert) { assert.expect(1); assert.ok(true, 'container/index.js should pass ESLint\n\n'); }); }); enifed('container/registry.lint-test', ['exports'], function (exports) { 'use strict'; QUnit.module('ESLint | container/registry.js'); QUnit.test('should pass ESLint', function (assert) { assert.expect(1); assert.ok(true, 'container/registry.js should pass ESLint\n\n'); }); }); enifed('container/tests/container_test', ['exports', 'ember-utils', 'ember-environment', 'ember-metal', 'container/index', 'internal-test-helpers', 'ember-debug', 'container'], function (exports, _emberUtils, _emberEnvironment, _emberMetal, _containerIndex, _internalTestHelpers, _emberDebug, _container) { 'use strict'; QUnit.module('Container'); function lookupFactory(name, container, options) { return container[_container.LOOKUP_FACTORY](name, options); } QUnit.test('A registered factory returns the same instance each time', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var postController = container.lookup('controller:post'); ok(postController instanceof PostController, 'The lookup is an instance of the factory'); equal(postController, container.lookup('controller:post')); }); QUnit.test('A registered factory is returned from lookupFactory', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var PostControllerFactory = lookupFactory('controller:post', container); 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 _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var Post1 = lookupFactory('controller:post', container); var Post2 = lookupFactory('controller:post', container); deepEqual(Post1, Post2, 'The return of lookupFactory is always the same'); }); QUnit.test('A factory returned from lookupFactory has a debugkey', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var PostFactory = lookupFactory('controller:post', container); equal(PostFactory._debugContainerKey, 'controller:post', 'factory instance receives _debugContainerKey'); }); QUnit.test('uses create time injections if factory has no extend', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var AppleController = _internalTestHelpers.factory(); var PostController = _internalTestHelpers.factory(); PostController.extend = undefined; // remove extend registry.register('controller:apple', AppleController); registry.register('controller:post', PostController); registry.injection('controller:post', 'apple', 'controller:apple'); var postController = container.lookup('controller:post'); 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 _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var instance = undefined; registry.register('controller:post', PostController); instance = lookupFactory('controller:post', container).create(); equal(instance._debugContainerKey, 'controller:post', 'factory instance receives _debugContainerKey'); ok(instance instanceof PostController, 'factory instance is instance of factory'); }); QUnit.test('A registered factory returns a fresh instance if singleton: false is passed as an option', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.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'); 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'); notEqual(postController2.toString(), postController3.toString(), 'Two factories looked up with singleton: false are not equal'); notEqual(postController3.toString(), postController4.toString(), 'A singleton factory looked up after a factory called with singleton: false is not equal'); ok(postController1 instanceof PostController, 'All instances are instances of the registered factory'); ok(postController2 instanceof PostController, 'All instances are instances of the registered factory'); ok(postController3 instanceof PostController, 'All instances are instances of the registered factory'); ok(postController4 instanceof PostController, 'All instances are instances of the registered factory'); }); QUnit.test('A factory type with a registered injection\'s instances receive that injection', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var Store = _internalTestHelpers.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'); equal(postController.store, store); }); QUnit.test('An individual factory with a registered injection receives the injection', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var Store = _internalTestHelpers.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'); equal(postController.store, store, 'has the correct store injected'); }); QUnit.test('A factory with both type and individual injections', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var Store = _internalTestHelpers.factory(); var Router = _internalTestHelpers.factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); registry.register('router:main', Router); 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'); equal(postController.store, store); equal(postController.router, router); }); QUnit.test('A factory with both type and individual factoryInjections', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var Store = _internalTestHelpers.factory(); var Router = _internalTestHelpers.factory(); registry.register('controller:post', PostController); registry.register('store:main', Store); registry.register('router:main', Router); registry.factoryInjection('controller:post', 'store', 'store:main'); registry.factoryTypeInjection('controller', 'router', 'router:main'); var PostControllerFactory = lookupFactory('controller:post', container); var store = container.lookup('store:main'); var 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 _containerIndex.Registry(); var container = registry.container(); var PostView = _internalTestHelpers.factory(); registry.register('view:post', PostView, { singleton: false }); var postView1 = container.lookup('view:post'); var 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 _containerIndex.Registry(); var container = registry.container(); var 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 _containerIndex.Registry(); var container = registry.container(); equal(container.lookup('doesnot:exist'), undefined); }); QUnit.test('An invalid factory throws an error', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); registry.register('controller:foo', {}); throws(function () { container.lookup('controller:foo'); }, /Failed to create an instance of \'controller:foo\'/); }); QUnit.test('Injecting a failed lookup raises an error', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var fooInstance = {}; var fooFactory = {}; var Foo = { create: function (args) { return fooInstance; }, extend: function (args) { return fooFactory; } }; registry.register('model:foo', Foo); registry.injection('model:foo', 'store', 'store:main'); throws(function () { container.lookup('model:foo'); }); }); QUnit.test('Injecting a falsy value does not raise an error', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var ApplicationController = _internalTestHelpers.factory(); registry.register('controller:application', ApplicationController); registry.register('user:current', null, { instantiate: false }); registry.injection('controller:application', 'currentUser', 'user:current'); strictEqual(container.lookup('controller:application').currentUser, null); }); QUnit.test('The container returns same value each time even if the value is falsy', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); registry.register('falsy:value', null, { instantiate: false }); strictEqual(container.lookup('falsy:value'), container.lookup('falsy:value')); }); QUnit.test('Destroying the container destroys any cached singletons', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var PostView = _internalTestHelpers.factory(); var template = function () {}; registry.register('controller:post', PostController); registry.register('view:post', PostView, { singleton: false }); registry.register('template:post', template, { instantiate: false }); registry.injection('controller:post', 'postView', 'view:post'); var postController = container.lookup('controller:post'); var postView = postController.postView; ok(postView instanceof PostView, 'The non-singleton was injected'); container.destroy(); ok(postController.isDestroyed, 'Singletons are destroyed'); ok(!postView.isDestroyed, 'Non-singletons are not destroyed'); }); QUnit.test('The container can use a registry hook to resolve factories lazily', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.resolver = { resolve: function (fullName) { if (fullName === 'controller:post') { return PostController; } } }; var 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 _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.normalizeFullName = function (fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); var 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 _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.normalizeFullName = function (fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); var fact = lookupFactory('controller:normalized', container); 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 _containerIndex.Registry(); var container = registry.container(); var PostView = _internalTestHelpers.factory(); registry.resolver = { resolve: function (fullName) { if (fullName === 'view:post') { return PostView; } } }; registry.options('view:post', { instantiate: true, singleton: false }); var postView1 = container.lookup('view:post'); var postView2 = container.lookup('view:post'); ok(postView1 instanceof PostView, 'The correct factory was provided'); ok(postView2 instanceof PostView, 'The correct factory was provided'); ok(postView1 !== postView2, 'The two lookups are different'); }); QUnit.test('Options can be registered that should be applied to all factories for a given type', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostView = _internalTestHelpers.factory(); registry.resolver = { resolve: function (fullName) { if (fullName === 'view:post') { return PostView; } } }; registry.optionsForType('view', { singleton: false }); var postView1 = container.lookup('view:post'); var postView2 = container.lookup('view:post'); ok(postView1 instanceof PostView, 'The correct factory was provided'); ok(postView2 instanceof PostView, 'The correct factory was provided'); ok(postView1 !== postView2, 'The two lookups are different'); }); QUnit.test('An injected non-singleton instance is never cached', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostView = _internalTestHelpers.factory(); var PostViewHelper = _internalTestHelpers.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'); ok(postView1.viewHelper !== postView2.viewHelper, 'Injected non-singletons are not cached'); }); QUnit.test('Factory resolves are cached', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var resolveWasCalled = []; registry.resolve = function (fullName) { resolveWasCalled.push(fullName); return PostController; }; deepEqual(resolveWasCalled, []); lookupFactory('controller:post', container); deepEqual(resolveWasCalled, ['controller:post']); lookupFactory('controller:post', container); deepEqual(resolveWasCalled, ['controller:post']); }); QUnit.test('factory for non extendables (MODEL) resolves are cached', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); var resolveWasCalled = []; registry.resolve = function (fullName) { resolveWasCalled.push(fullName); return PostController; }; deepEqual(resolveWasCalled, []); lookupFactory('model:post', container); deepEqual(resolveWasCalled, ['model:post']); lookupFactory('model:post', container); deepEqual(resolveWasCalled, ['model:post']); }); QUnit.test('factory for non extendables resolves are cached', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = {}; var resolveWasCalled = []; registry.resolve = function (fullName) { resolveWasCalled.push(fullName); return PostController; }; deepEqual(resolveWasCalled, []); lookupFactory('foo:post', container); deepEqual(resolveWasCalled, ['foo:post']); lookupFactory('foo:post', container); deepEqual(resolveWasCalled, ['foo:post']); }); QUnit.test('The `_onLookup` hook is called on factories when looked up the first time', function () { expect(2); var registry = new _containerIndex.Registry(); var container = registry.container(); var Apple = _internalTestHelpers.factory(); Apple.reopenClass({ _onLookup: function (fullName) { equal(fullName, 'apple:main', 'calls lazy injection method with the lookup full name'); equal(this, Apple, 'calls lazy injection method in the factory context'); } }); registry.register('apple:main', Apple); lookupFactory('apple:main', container); lookupFactory('apple:main', container); }); QUnit.test('A factory\'s lazy injections are validated when first instantiated', function () { var registry = new _containerIndex.Registry(); var container = registry.container(); var Apple = _internalTestHelpers.factory(); var Orange = _internalTestHelpers.factory(); Apple.reopenClass({ _lazyInjections: function () { return ['orange:main', 'banana:main']; } }); registry.register('apple:main', Apple); registry.register('orange:main', Orange); throws(function () { container.lookup('apple:main'); }, /Attempting to inject an unknown injection: 'banana:main'/); }); QUnit.test('Lazy injection validations are cached', function () { expect(1); var registry = new _containerIndex.Registry(); var container = registry.container(); var Apple = _internalTestHelpers.factory(); var Orange = _internalTestHelpers.factory(); Apple.reopenClass({ _lazyInjections: function () { ok(true, 'should call lazy injection method'); return ['orange:main']; } }); registry.register('apple:main', Apple); registry.register('orange:main', Orange); container.lookup('apple:main'); container.lookup('apple:main'); }); QUnit.test('An object with its owner pre-set should be returned from ownerInjection', function () { var owner = {}; var registry = new _containerIndex.Registry(); var container = registry.container({ owner: owner }); var result = container.ownerInjection(); equal(result[_emberUtils.OWNER], owner, 'owner is properly included'); }); QUnit.test('A deprecated `container` property is appended to every object instantiated from an extendable factory', function () { var owner = {}; var registry = new _containerIndex.Registry(); var container = owner.__container__ = registry.container({ owner: owner }); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var postController = container.lookup('controller:post'); expectDeprecation(function () { _emberMetal.get(postController, 'container'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); expectDeprecation(function () { var 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.'); }); // This is testing that container was passed as an option QUnit.test('A deprecated `container` property is appended to every object instantiated from a non-extendable factory, and a fake container is available during instantiation.', function () { if (!true) { expect(8); } else { expect(1); ok(true, '[SKIPPED] This will be removed when `factoryFor` lands.'); } var owner = {}; var registry = new _containerIndex.Registry(); var container = registry.container({ owner: owner }); // Define a simple non-extendable factory 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 () { 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 () { 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.'); // non-deprecated usage of `lookup` and `_lookupFactory` owner.lookup = function (fullName) { equal(fullName, 'abc:one', 'lookup on owner called properly'); }; owner._lookupFactory = function (fullName) { equal(fullName, 'abc:two', '_lookupFactory on owner called properly'); }; var foundOwner = _emberUtils.getOwner(options); foundOwner.lookup('abc:one'); foundOwner._lookupFactory('abc:two'); return new PostController(options); }; registry.register('controller:post', PostController); if (!true) { (function () { var postController = container.lookup('controller:post'); expectDeprecation(function () { _emberMetal.get(postController, 'container'); }, 'Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.'); expectDeprecation(function () { var 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.'); })(); } }); QUnit.test('An extendable factory can provide `container` upon create, with a deprecation', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); registry.register('controller:post', _internalTestHelpers.factory()); var PostController = lookupFactory('controller:post', container); var postController = undefined; expectDeprecation(function () { 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 () { var 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.'); }); QUnit.test('lookupFactory passes options through to expandlocallookup', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); registry.expandLocalLookup = function (fullName, options) { assert.ok(true, 'expandLocalLookup was called'); assert.equal(fullName, 'foo:bar'); assert.deepEqual(options, { source: 'baz:qux' }); return 'controller:post'; }; var PostControllerFactory = lookupFactory('foo:bar', container, { source: 'baz:qux' }); assert.ok(PostControllerFactory.create() instanceof PostController, 'The return of factory.create is an instance of PostController'); }); QUnit.test('lookup passes options through to expandlocallookup', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); registry.expandLocalLookup = function (fullName, options) { assert.ok(true, 'expandLocalLookup was called'); assert.equal(fullName, 'foo:bar'); assert.deepEqual(options, { source: 'baz:qux' }); return 'controller:post'; }; var PostControllerLookupResult = container.lookup('foo:bar', { source: 'baz:qux' }); assert.ok(PostControllerLookupResult instanceof PostController); }); QUnit.test('#[FACTORY_FOR] class is the injected factory', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); var factoryManager = container[_container.FACTORY_FOR]('component:foo-bar'); if (true) { assert.deepEqual(factoryManager.class, Component, 'No double extend'); } else { assert.deepEqual(factoryManager.class, lookupFactory('component:foo-bar', container), 'Double extended class'); } }); if (true) { QUnit.test('#factoryFor must supply a fullname', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); assert.throws(function () { container.factoryFor('chad-bar'); }, /Invalid Fullname, expected: 'type:name' got: chad-bar/); }); QUnit.test('#factoryFor returns a factory manager', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); var factoryManager = container.factoryFor('component:foo-bar'); assert.ok(factoryManager.create); assert.ok(factoryManager.class); }); QUnit.test('#factoryFor returns a cached factory manager for the same type', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); registry.register('component:baz-bar', Component); var factoryManager1 = container.factoryFor('component:foo-bar'); var factoryManager2 = container.factoryFor('component:foo-bar'); var factoryManager3 = container.factoryFor('component:baz-bar'); assert.equal(factoryManager1, factoryManager2, 'cache hit'); assert.notEqual(factoryManager1, factoryManager3, 'cache miss'); }); QUnit.test('#factoryFor class returns the factory function', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); var factoryManager = container.factoryFor('component:foo-bar'); assert.deepEqual(factoryManager.class, Component, 'No double extend'); }); QUnit.test('#factoryFor instance have a common parent', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); var factoryManager1 = container.factoryFor('component:foo-bar'); var factoryManager2 = container.factoryFor('component:foo-bar'); var instance1 = factoryManager1.create({ foo: 'foo' }); var instance2 = factoryManager2.create({ bar: 'bar' }); assert.deepEqual(instance1.constructor, instance2.constructor); }); QUnit.test('#factoryFor created instances come with instance injections', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); var Ajax = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); registry.register('util:ajax', Ajax); registry.injection('component:foo-bar', 'ajax', 'util:ajax'); var componentFactory = container.factoryFor('component:foo-bar'); var component = componentFactory.create(); assert.ok(component.ajax); assert.ok(component.ajax instanceof Ajax); }); QUnit.test('#factoryFor options passed to create clobber injections', function (assert) { var registry = new _containerIndex.Registry(); var container = registry.container(); var Component = _internalTestHelpers.factory(); var Ajax = _internalTestHelpers.factory(); registry.register('component:foo-bar', Component); registry.register('util:ajax', Ajax); registry.injection('component:foo-bar', 'ajax', 'util:ajax'); var componentFactory = container.factoryFor('component:foo-bar'); var instrance = componentFactory.create({ ajax: 'fetch' }); assert.equal(instrance.ajax, 'fetch'); }); QUnit.test('#factoryFor does not add properties to the object being instantiated when _initFactory is present', function (assert) { var owner = {}; var registry = new _containerIndex.Registry(); var container = registry.container(); var factory = undefined; var Component = (function () { function Component() { babelHelpers.classCallCheck(this, Component); } Component._initFactory = function _initFactory(_factory) { factory = _factory; }; Component.create = function create(options) { var instance = new this(); _emberUtils.assign(instance, options); return instance; }; return Component; })(); registry.register('component:foo-bar', Component); var componentFactory = container.factoryFor('component:foo-bar'); var instance = componentFactory.create(); // note: _guid and isDestroyed are being set in the `factory` constructor // not via registry/container shenanigans assert.deepEqual(Object.keys(instance), []); }); // this is skipped until templates and the glimmer environment do not require `OWNER` to be // passed in as constructor args QUnit.skip('#factoryFor does not add properties to the object being instantiated', function (assert) { var owner = {}; var registry = new _containerIndex.Registry(); var container = registry.container(); var factory = undefined; var Component = (function () { function Component() { babelHelpers.classCallCheck(this, Component); } Component.create = function create(options) { var instance = new this(); _emberUtils.assign(instance, options); return instance; }; return Component; })(); registry.register('component:foo-bar', Component); var componentFactory = container.factoryFor('component:foo-bar'); var instance = componentFactory.create(); // note: _guid and isDestroyed are being set in the `factory` constructor // not via registry/container shenanigans assert.deepEqual(Object.keys(instance), []); }); } }); enifed('container/tests/container_test.lint-test', ['exports'], function (exports) { 'use strict'; QUnit.module('ESLint | container/tests/container_test.js'); QUnit.test('should pass ESLint', function (assert) { assert.expect(1); assert.ok(true, 'container/tests/container_test.js should pass ESLint\n\n'); }); }); enifed('container/tests/owner_test', ['exports', 'ember-utils'], function (exports, _emberUtils) { 'use strict'; QUnit.module('Owner', {}); QUnit.test('An owner can be set with `setOwner` and retrieved with `getOwner`', function () { var owner = {}; var obj = {}; strictEqual(_emberUtils.getOwner(obj), undefined, 'owner has not been set'); _emberUtils.setOwner(obj, owner); strictEqual(_emberUtils.getOwner(obj), owner, 'owner has been set'); strictEqual(obj[_emberUtils.OWNER], owner, 'owner has been set to the OWNER symbol'); }); }); enifed('container/tests/owner_test.lint-test', ['exports'], function (exports) { 'use strict'; QUnit.module('ESLint | container/tests/owner_test.js'); QUnit.test('should pass ESLint', function (assert) { assert.expect(1); assert.ok(true, 'container/tests/owner_test.js should pass ESLint\n\n'); }); }); enifed('container/tests/registry_test', ['exports', 'container/index', 'internal-test-helpers'], function (exports, _containerIndex, _internalTestHelpers) { 'use strict'; QUnit.module('Registry'); QUnit.test('A registered factory is returned from resolve', function () { var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); var 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 _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); deepEqual(registry.resolve('controller:post'), registry.resolve('controller:post'), 'The return of resolve is always the same'); }); QUnit.test('The registered value returned from resolve is the same value each time even if the value is falsy', function () { var registry = new _containerIndex.Registry(); registry.register('falsy:value', null, { instantiate: false }); strictEqual(registry.resolve('falsy:value'), registry.resolve('falsy:value'), 'The return of resolve is always the same'); }); QUnit.test('The value returned from resolver is the same value as the original value even if the value is falsy', function () { var resolver = { resolve: function (fullName) { if (fullName === 'falsy:value') { return null; } } }; var registry = new _containerIndex.Registry({ resolver: resolver }); strictEqual(registry.resolve('falsy:value'), null); }); QUnit.test('A registered factory returns true for `has` if an item is registered', function () { var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); equal(registry.has('controller:post'), true, 'The `has` method returned true for registered factories'); equal(registry.has('controller:posts'), false, 'The `has` method returned false for unregistered factories'); }); QUnit.test('Throw exception when trying to inject `type:thing` on all type(s)', function () { var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.register('controller:post', PostController); throws(function () { registry.typeInjection('controller', 'injected', 'controller:post'); }, /Cannot inject a 'controller:post' on other controller\(s\)\./); }); QUnit.test('The registry can take a hook to resolve factories lazily', function () { var PostController = _internalTestHelpers.factory(); var resolver = { resolve: function (fullName) { if (fullName === 'controller:post') { return PostController; } } }; var registry = new _containerIndex.Registry({ resolver: resolver }); strictEqual(registry.resolve('controller:post'), PostController, 'The correct factory was provided'); }); QUnit.test('The registry respects the resolver hook for `has`', function () { var PostController = _internalTestHelpers.factory(); var resolver = { resolve: function (fullName) { if (fullName === 'controller:post') { return PostController; } } }; var registry = new _containerIndex.Registry({ resolver: resolver }); ok(registry.has('controller:post'), 'the `has` method uses the resolver hook'); }); QUnit.test('The registry normalizes names when resolving', function () { var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.normalizeFullName = function (fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); var 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 _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.normalizeFullName = function (fullName) { return fullName === 'controller:normalized' ? 'controller:post' : fullName; }; registry.register('controller:post', PostController); var isPresent = registry.has('controller:normalized'); equal(isPresent, true, 'Normalizes the name when checking if the factory or instance is present'); }); QUnit.test('validateFullName throws an error if name is incorrect', function () { expect(2); var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); registry.normalize = function (fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); throws(function () { registry.validateFullName('post'); }, /TypeError: Invalid Fullname, expected: 'type:name' got: post/); throws(function () { registry.validateFullName('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 _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); var user = { name: 'Stef' }; registry.normalize = function (fullName) { return 'controller:post'; }; registry.register('controller:post', PostController); registry.register('user:post', user, { instantiate: false }); registry.injection('controller:post', 'user', 'controller:normalized'); deepEqual(registry.resolve('controller:post'), user, 'Normalizes the name when injecting'); }); QUnit.test('cannot register an `undefined` factory', function () { var registry = new _containerIndex.Registry(); throws(function () { registry.register('controller:apple', undefined); }, ''); }); QUnit.test('can re-register a factory', function () { var registry = new _containerIndex.Registry(); var FirstApple = _internalTestHelpers.factory('first'); var SecondApple = _internalTestHelpers.factory('second'); registry.register('controller:apple', FirstApple); registry.register('controller:apple', SecondApple); ok(registry.resolve('controller:apple').create() instanceof SecondApple); }); QUnit.test('cannot re-register a factory if it has been resolved', function () { var registry = new _containerIndex.Registry(); var FirstApple = _internalTestHelpers.factory('first'); var SecondApple = _internalTestHelpers.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\./); strictEqual(registry.resolve('controller:apple'), FirstApple); }); 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 _containerIndex.Registry(); var FirstApple = _internalTestHelpers.factory('first'); var SecondApple = _internalTestHelpers.factory('second'); SecondApple.extend = function (a, b, c) { ok(false, 'should not extend or touch the injected model, merely to inspect existence of another'); }; registry.register('controller:apple', FirstApple); registry.register('controller:second-apple', SecondApple); registry.injection('controller:apple', 'badApple', 'controller:second-apple'); ok(registry.has('controller:apple')); }); QUnit.test('registry.has should not error for invalid fullNames)', function () { expect(1); var registry = new _containerIndex.Registry(); ok(!registry.has('foo:bar:baz')); }); QUnit.test('once resolved, always return the same result', function () { expect(1); var registry = new _containerIndex.Registry(); registry.resolver = { resolve: function () { return 'bar'; } }; var Bar = registry.resolve('models:bar'); registry.resolver = { resolve: function () { return 'not bar'; } }; equal(registry.resolve('models:bar'), Bar); }); QUnit.test('factory resolves are cached', function () { var registry = new _containerIndex.Registry(); var PostController = _internalTestHelpers.factory(); var resolveWasCalled = []; registry.resolver = { resolve: function (fullName) { resolveWasCalled.push(fullName); return PostController; } }; deepEqual(resolveWasCalled, []); registry.resolve('controller:post'); deepEqual(resolveWasCalled, ['controller:post']); registry.resolve('controller:post'); deepEqual(resolveWasCalled, ['controller:post']); }); QUnit.test('factory for non extendables (MODEL) resolves are cached', function () { var registry = new _containerIndex.Registry(); var Po