'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'advice',
-
onDrugs: true,
doWellInSchool: 'Eat your vegetables'
});
@@ -317,12 +317,11 @@ QUnit.test('properties within an if statement should not fail on re-render', fun
});
QUnit.test('should update the block when object passed to #if helper changes', function() {
- registry.register('template:menu', compile('
{{#if view.inception}}{{view.INCEPTION}}{{/if}}
'));
+ owner.register('template:menu', compile('
{{#if view.inception}}{{view.INCEPTION}}{{/if}}
'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'menu',
-
INCEPTION: 'BOOOOOOOONG doodoodoodoodooodoodoodoo',
inception: 'OOOOoooooOOOOOOooooooo'
});
@@ -349,12 +348,11 @@ QUnit.test('should update the block when object passed to #if helper changes', f
});
QUnit.test('should update the block when object passed to #if helper changes and an inverse is supplied', function() {
- registry.register('template:menu', compile('
'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'advice',
-
onDrugs: true,
doWellInSchool: 'Eat your vegetables'
});
@@ -483,12 +480,11 @@ QUnit.test('properties within an if statement should not fail on re-render', fun
});
QUnit.test('should update the block when object passed to #if helper changes', function() {
- registry.register('template:menu', compile('
{{#if view.inception}}{{view.INCEPTION}}{{/if}}
'));
+ owner.register('template:menu', compile('
{{#if view.inception}}{{view.INCEPTION}}{{/if}}
'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'menu',
-
INCEPTION: 'BOOOOOOOONG doodoodoodoodooodoodoodoo',
inception: 'OOOOoooooOOOOOOooooooo'
});
@@ -515,12 +511,11 @@ QUnit.test('should update the block when object passed to #if helper changes', f
});
QUnit.test('should update the block when object passed to #if helper changes and an inverse is supplied', function() {
- registry.register('template:menu', compile('
'));
+ owner.register('template:child', compile('I can\'t believe it\'s not butter.'));
var ChildView = EmberView.extend({
- container: container,
templateName: 'child'
});
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
childView: ChildView,
templateName: 'parent'
});
@@ -753,13 +743,13 @@ QUnit.test('Child views created using the view helper and that have a viewName s
});
QUnit.test('{{view}} id attribute should set id on layer', function() {
- registry.register('template:foo', compile('{{#view view.idView id="bar"}}baz{{/view}}'));
+ owner.register('template:foo', compile('{{#view view.idView id="bar"}}baz{{/view}}'));
var IdView = EmberView;
view = EmberView.create({
+ [OWNER]: owner,
idView: IdView,
- container: container,
templateName: 'foo'
});
@@ -770,13 +760,13 @@ QUnit.test('{{view}} id attribute should set id on layer', function() {
});
QUnit.test('{{view}} tag attribute should set tagName of the view', function() {
- registry.register('template:foo', compile('{{#view view.tagView tag="span"}}baz{{/view}}'));
+ owner.register('template:foo', compile('{{#view view.tagView tag="span"}}baz{{/view}}'));
var TagView = EmberView;
view = EmberView.create({
+ [OWNER]: owner,
tagView: TagView,
- container: container,
templateName: 'foo'
});
@@ -787,13 +777,13 @@ QUnit.test('{{view}} tag attribute should set tagName of the view', function() {
});
QUnit.test('{{view}} class attribute should set class on layer', function() {
- registry.register('template:foo', compile('{{#view view.idView class="bar"}}baz{{/view}}'));
+ owner.register('template:foo', compile('{{#view view.idView class="bar"}}baz{{/view}}'));
var IdView = EmberView;
view = EmberView.create({
+ [OWNER]: owner,
idView: IdView,
- container: container,
templateName: 'foo'
});
@@ -868,13 +858,13 @@ QUnit.test('{{view}} should evaluate other attributes bindings set in the curren
});
QUnit.test('{{view}} should be able to bind class names to truthy properties', function() {
- registry.register('template:template', compile('{{#view view.classBindingView classBinding="view.number:is-truthy"}}foo{{/view}}'));
+ owner.register('template:template', compile('{{#view view.classBindingView classBinding="view.number:is-truthy"}}foo{{/view}}'));
var ClassBindingView = EmberView.extend();
view = EmberView.create({
+ [OWNER]: owner,
classBindingView: ClassBindingView,
- container: container,
number: 5,
templateName: 'template'
});
@@ -891,13 +881,13 @@ QUnit.test('{{view}} should be able to bind class names to truthy properties', f
});
QUnit.test('{{view}} should be able to bind class names to truthy or falsy properties', function() {
- registry.register('template:template', compile('{{#view view.classBindingView classBinding="view.number:is-truthy:is-falsy"}}foo{{/view}}'));
+ owner.register('template:template', compile('{{#view view.classBindingView classBinding="view.number:is-truthy:is-falsy"}}foo{{/view}}'));
var ClassBindingView = EmberView.extend();
view = EmberView.create({
+ [OWNER]: owner,
classBindingView: ClassBindingView,
- container: container,
number: 5,
templateName: 'template'
});
@@ -944,7 +934,7 @@ QUnit.test('a view helper\'s bindings are to the parent context', function() {
QUnit.test('should expose a controller keyword when present on the view', function() {
var templateString = '{{controller.foo}}{{#view}}{{controller.baz}}{{/view}}';
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
controller: EmberObject.create({
foo: 'bar',
baz: 'bang'
@@ -981,7 +971,8 @@ QUnit.test('should expose a controller keyword when present on the view', functi
QUnit.test('should expose a controller keyword that can be used in conditionals', function() {
var templateString = '{{#view}}{{#if controller}}{{controller.foo}}{{/if}}{{/view}}';
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
+
controller: EmberObject.create({
foo: 'bar'
}),
@@ -1007,7 +998,7 @@ QUnit.test('should expose a controller that can be used in the view instance', f
};
var childThingController;
view = EmberView.create({
- container,
+ [OWNER]: owner,
controller,
childThing: EmberView.extend({
@@ -1027,8 +1018,8 @@ QUnit.test('should expose a controller that can be used in the view instance', f
QUnit.test('should expose a controller keyword that persists through Ember.ContainerView', function() {
var templateString = '{{view view.containerView}}';
view = EmberView.create({
+ [OWNER]: owner,
containerView: ContainerView,
- container: container,
controller: EmberObject.create({
foo: 'bar'
}),
@@ -1240,12 +1231,12 @@ QUnit.test('{{view}} asserts that a view subclass instance is present off contro
});
QUnit.test('Specifying `id` to {{view}} is set on the view.', function() {
- registry.register('view:derp', EmberView.extend({
+ owner.register('view:derp', EmberView.extend({
template: compile('
{{view.id}}
{{view.elementId}}
')
}));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
foo: 'bar',
template: compile('{{view "derp" id=view.foo}}')
});
@@ -1258,12 +1249,12 @@ QUnit.test('Specifying `id` to {{view}} is set on the view.', function() {
});
QUnit.test('Specifying `id` to {{view}} does not allow bound id changes.', function() {
- registry.register('view:derp', EmberView.extend({
+ owner.register('view:derp', EmberView.extend({
template: compile('
{{view.id}}
{{view.elementId}}
')
}));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
foo: 'bar',
template: compile('{{view "derp" id=view.foo}}')
});
@@ -1278,16 +1269,16 @@ QUnit.test('Specifying `id` to {{view}} does not allow bound id changes.', funct
});
QUnit.test('using a bound view name does not change on view name property changes', function() {
- registry.register('view:foo', viewClass({
+ owner.register('view:foo', viewClass({
elementId: 'foo'
}));
- registry.register('view:bar', viewClass({
+ owner.register('view:bar', viewClass({
elementId: 'bar'
}));
view = EmberView.extend({
- container,
+ [OWNER]: owner,
elementId: 'parent',
viewName: 'foo',
template: compile('{{view view.viewName}}')
@@ -1306,8 +1297,7 @@ QUnit.test('using a bound view name does not change on view name property change
});
QUnit.test('should have the correct action target', function() {
- registry.register('component:x-outer', EmberComponent.extend({
- container,
+ owner.register('component:x-outer', EmberComponent.extend({
layout: compile('{{#x-middle}}{{view innerView dismiss="dismiss"}}{{/x-middle}}'),
actions: {
dismiss: function() {
@@ -1315,13 +1305,11 @@ QUnit.test('should have the correct action target', function() {
}
},
innerView: EmberComponent.extend({
- container,
elementId: 'x-inner'
})
}));
- registry.register('component:x-middle', EmberComponent.extend({
- container,
+ owner.register('component:x-middle', EmberComponent.extend({
actions: {
dismiss: function() {
throw new Error('action was not supposed to go here');
@@ -1330,7 +1318,7 @@ QUnit.test('should have the correct action target', function() {
}));
view = EmberView.extend({
- container,
+ [OWNER]: owner,
template: compile('{{x-outer}}')
}).create();
diff --git a/packages/ember-htmlbars/tests/helpers/yield_test.js b/packages/ember-htmlbars/tests/helpers/yield_test.js
index df92cd00148..47900455a84 100644
--- a/packages/ember-htmlbars/tests/helpers/yield_test.js
+++ b/packages/ember-htmlbars/tests/helpers/yield_test.js
@@ -2,7 +2,6 @@ import Ember from 'ember-metal/core';
import run from 'ember-metal/run_loop';
import EmberView from 'ember-views/views/view';
import { computed } from 'ember-metal/computed';
-import { Registry } from 'ember-runtime/system/container';
import { A as emberA } from 'ember-runtime/system/native_array';
import Component from 'ember-views/components/component';
import helpers from 'ember-htmlbars/helpers';
@@ -14,23 +13,25 @@ import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
-var view, registry, container, originalViewKeyword;
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-function setupContainer() {
- registry = new Registry();
- container = registry.container();
- registry.optionsForType('template', { instantiate: false });
- registry.register('component-lookup:main', ComponentLookup);
+var view, owner, originalViewKeyword;
+
+function commonSetup() {
+ owner = buildOwner();
+ owner.registerOptionsForType('template', { instantiate: false });
+ owner.register('component-lookup:main', ComponentLookup);
}
-function teardownContainer() {
- runDestroy(container);
- registry = container = view = null;
+function commonTeardown() {
+ runDestroy(owner);
+ owner = view = null;
}
QUnit.module('ember-htmlbars: Support for {{yield}} helper', {
setup() {
- setupContainer();
+ commonSetup();
originalViewKeyword = registerKeyword('view', viewKeyword);
},
teardown() {
@@ -38,7 +39,7 @@ QUnit.module('ember-htmlbars: Support for {{yield}} helper', {
Ember.TEMPLATES = {};
});
runDestroy(view);
- teardownContainer();
+ commonTeardown();
resetKeyword('view', originalViewKeyword);
}
});
@@ -59,16 +60,15 @@ QUnit.test('a view with a layout set renders its template where the {{yield}} he
});
QUnit.test('block should work properly even when templates are not hard-coded', function() {
- registry.register('template:nester', compile('
'));
expectAssertion(() => {
view = appendViewFor('');
@@ -1004,7 +1004,7 @@ if (isEnabled('ember-htmlbars-component-generation')) {
QUnit.test(`non-block without attributes replaced with ${style.name}`, function() {
// The whitespace is added intentionally to verify that the heuristic is not "a single node" but
// rather "a single non-whitespace, non-comment node"
- registry.register('template:components/non-block', compile(` <${style.tagName}>In layout${style.tagName}> `));
+ owner.register('template:components/non-block', compile(` <${style.tagName}>In layout${style.tagName}> `));
view = appendViewFor('');
@@ -1018,7 +1018,7 @@ if (isEnabled('ember-htmlbars-component-generation')) {
});
QUnit.test(`non-block with attributes replaced with ${style.name}`, function() {
- registry.register('template:components/non-block', compile(` <${style.tagName} such="{{attrs.stability}}">In layout${style.tagName}> `));
+ owner.register('template:components/non-block', compile(` <${style.tagName} such="{{attrs.stability}}">In layout${style.tagName}> `));
view = appendViewFor('', {
stability: 'stability'
@@ -1034,7 +1034,7 @@ if (isEnabled('ember-htmlbars-component-generation')) {
});
QUnit.test(`non-block replaced with ${style.name} (regression with single element in the root element)`, function() {
- registry.register('template:components/non-block', compile(` <${style.tagName} such="{{attrs.stability}}">
{{#with content as |person|}}{{#view}}{{person.firstName}} {{person.lastName}}{{/view}}{{/with}}
'));
var context = {
content: {
@@ -79,7 +78,7 @@ QUnit.test('views render their template in the context of the parent view\'s con
};
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'parent',
context: context
});
@@ -89,10 +88,10 @@ QUnit.test('views render their template in the context of the parent view\'s con
});
QUnit.test('views make a view keyword available that allows template to reference view context', function() {
- registry.register('template:parent', compile('
{{#with view.content as |person|}}{{#view person.subview}}{{view.firstName}} {{person.lastName}}{{/view}}{{/with}}
{{#with view.content as |person|}}{{#view person.subview}}{{view.firstName}} {{person.lastName}}{{/view}}{{/with}}
'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'parent',
content: {
diff --git a/packages/ember-htmlbars/tests/system/lookup-helper_test.js b/packages/ember-htmlbars/tests/system/lookup-helper_test.js
index b432ac5ad0a..fa2c791e7a9 100644
--- a/packages/ember-htmlbars/tests/system/lookup-helper_test.js
+++ b/packages/ember-htmlbars/tests/system/lookup-helper_test.js
@@ -1,24 +1,24 @@
import lookupHelper, { findHelper } from 'ember-htmlbars/system/lookup-helper';
import ComponentLookup from 'ember-views/component_lookup';
-import Registry from 'container/registry';
import Helper, { helper as makeHelper } from 'ember-htmlbars/helper';
+import { OWNER } from 'container/owner';
+import buildOwner from 'container/tests/test-helpers/build-owner';
-function generateEnv(helpers, container) {
+function generateEnv(helpers, owner) {
return {
- container: container,
+ owner: owner,
helpers: (helpers ? helpers : {}),
hooks: { keywords: {} },
knownHelpers: {}
};
}
-function generateContainer() {
- var registry = new Registry();
- var container = registry.container();
+function generateOwner() {
+ const owner = buildOwner();
- registry.register('component-lookup:main', ComponentLookup);
+ owner.register('component-lookup:main', ComponentLookup);
- return container;
+ return owner;
}
QUnit.module('ember-htmlbars: lookupHelper hook');
@@ -58,14 +58,14 @@ QUnit.test('does not lookup in the container if the name does not contain a dash
});
QUnit.test('does a lookup in the container if the name contains a dash (and helper is not found in env)', function() {
- var container = generateContainer();
- var env = generateEnv(null, container);
+ const owner = generateOwner();
+ var env = generateEnv(null, owner);
var view = {
- container: container
+ [OWNER]: owner
};
var someName = Helper.extend();
- view.container.registry.register('helper:some-name', someName);
+ owner.register('helper:some-name', someName);
var actual = lookupHelper('some-name', view, env);
@@ -73,15 +73,15 @@ QUnit.test('does a lookup in the container if the name contains a dash (and help
});
QUnit.test('does a lookup in the container if the name is found in knownHelpers', function() {
- var container = generateContainer();
- var env = generateEnv(null, container);
+ const owner = generateOwner();
+ var env = generateEnv(null, owner);
var view = {
- container: container
+ [OWNER]: owner
};
env.knownHelpers['t'] = true;
var t = Helper.extend();
- view.container.registry.register('helper:t', t);
+ owner.register('helper:t', t);
var actual = lookupHelper('t', view, env);
@@ -90,17 +90,17 @@ QUnit.test('does a lookup in the container if the name is found in knownHelpers'
QUnit.test('looks up a shorthand helper in the container', function() {
expect(2);
- var container = generateContainer();
- var env = generateEnv(null, container);
+ const owner = generateOwner();
+ var env = generateEnv(null, owner);
var view = {
- container: container
+ [OWNER]: owner
};
var called;
function someName() {
called = true;
}
- view.container.registry.register('helper:some-name', makeHelper(someName));
+ owner.register('helper:some-name', makeHelper(someName));
var actual = lookupHelper('some-name', view, env);
@@ -113,14 +113,14 @@ QUnit.test('looks up a shorthand helper in the container', function() {
QUnit.test('fails with a useful error when resolving a function', function() {
expect(1);
- var container = generateContainer();
- var env = generateEnv(null, container);
+ const owner = generateOwner();
+ var env = generateEnv(null, owner);
var view = {
- container: container
+ [OWNER]: owner
};
function someName() {}
- view.container.registry.register('helper:some-name', someName);
+ owner.register('helper:some-name', someName);
var actual;
expectAssertion(function() {
diff --git a/packages/ember-htmlbars/tests/system/render_env_test.js b/packages/ember-htmlbars/tests/system/render_env_test.js
index f3fd0b922d0..824c32d5058 100644
--- a/packages/ember-htmlbars/tests/system/render_env_test.js
+++ b/packages/ember-htmlbars/tests/system/render_env_test.js
@@ -1,34 +1,34 @@
import EmberView from 'ember-views/views/view';
-import Registry from 'container/registry';
import compile from 'ember-template-compiler/system/compile';
import ComponentLookup from 'ember-views/component_lookup';
import Component from 'ember-views/components/component';
import RenderEnv from 'ember-htmlbars/system/render-env';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import run from 'ember-metal/run_loop';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var registry, container, view, components;
+var owner, view, components;
function commonSetup() {
- registry = new Registry();
- container = registry.container();
- registry.optionsForType('component', { singleton: false });
- registry.optionsForType('view', { singleton: false });
- registry.optionsForType('template', { instantiate: false });
- registry.optionsForType('helper', { instantiate: false });
- registry.register('component-lookup:main', ComponentLookup);
+ owner = buildOwner();
+ owner.registerOptionsForType('component', { singleton: false });
+ owner.registerOptionsForType('view', { singleton: false });
+ owner.registerOptionsForType('template', { instantiate: false });
+ owner.registerOptionsForType('helper', { instantiate: false });
+ owner.register('component-lookup:main', ComponentLookup);
}
function commonTeardown() {
- runDestroy(container);
+ runDestroy(owner);
runDestroy(view);
- registry = container = view = null;
+ owner = view = null;
}
function appendViewFor(template, hash={}) {
let view = EmberView.extend({
- template: compile(template),
- container: container
+ [OWNER]: owner,
+ template: compile(template)
}).create(hash);
runAppend(view);
@@ -63,8 +63,8 @@ QUnit.module('ember-htmlbars: RenderEnv', {
QUnit.test('non-block component test', function() {
components = {};
- registry.register('component:non-block', constructComponent('nonblock'));
- registry.register('template:components/non-block', compile('In layout'));
+ owner.register('component:non-block', constructComponent('nonblock'));
+ owner.register('template:components/non-block', compile('In layout'));
view = appendViewFor('{{non-block}}');
@@ -80,8 +80,8 @@ QUnit.test('non-block component test', function() {
QUnit.test('block component test', function() {
components = {};
- registry.register('component:block-component', constructComponent('block'));
- registry.register('template:components/block-component', compile('In layout {{yield}}'));
+ owner.register('component:block-component', constructComponent('block'));
+ owner.register('template:components/block-component', compile('In layout {{yield}}'));
view = appendViewFor('{{#block-component}}content{{/block-component}}');
@@ -97,11 +97,11 @@ QUnit.test('block component test', function() {
QUnit.test('block component with child component test', function() {
components = {};
- registry.register('component:block-component', constructComponent('block'));
- registry.register('component:child-component', constructComponent('child'));
+ owner.register('component:block-component', constructComponent('block'));
+ owner.register('component:child-component', constructComponent('child'));
- registry.register('template:components/block-component', compile('In layout {{yield}}'));
- registry.register('template:components/child-component', compile('Child Component'));
+ owner.register('template:components/block-component', compile('In layout {{yield}}'));
+ owner.register('template:components/child-component', compile('Child Component'));
view = appendViewFor('{{#block-component}}{{child-component}}{{/block-component}}');
diff --git a/packages/ember-metal/lib/injected_property.js b/packages/ember-metal/lib/injected_property.js
index d77a7e3e72a..6c91b56c2eb 100644
--- a/packages/ember-metal/lib/injected_property.js
+++ b/packages/ember-metal/lib/injected_property.js
@@ -2,6 +2,7 @@ import { assert } from 'ember-metal/debug';
import { ComputedProperty } from 'ember-metal/computed';
import { AliasedProperty } from 'ember-metal/alias';
import { Descriptor } from 'ember-metal/properties';
+import { getOwner } from 'container/owner';
/**
Read-only property that returns the result of a container lookup.
@@ -24,11 +25,12 @@ function InjectedProperty(type, name) {
function injectedPropertyGet(keyName) {
var desc = this[keyName];
+ const owner = getOwner(this);
assert(`InjectedProperties should be defined with the Ember.inject computed property macros.`, desc && desc.isDescriptor && desc.type);
- assert(`Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.`, this.container);
+ assert(`Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.`, owner);
- return this.container.lookup(desc.type + ':' + (desc.name || keyName));
+ return owner.lookup(desc.type + ':' + (desc.name || keyName));
}
InjectedProperty.prototype = Object.create(Descriptor.prototype);
diff --git a/packages/ember-metal/tests/injected_property_test.js b/packages/ember-metal/tests/injected_property_test.js
index c94acbd8eb1..11fe2a184f0 100644
--- a/packages/ember-metal/tests/injected_property_test.js
+++ b/packages/ember-metal/tests/injected_property_test.js
@@ -5,6 +5,7 @@ import {
import { get } from 'ember-metal/property_get';
import { set } from 'ember-metal/property_set';
import InjectedProperty from 'ember-metal/injected_property';
+import { setOwner } from 'container/owner';
QUnit.module('InjectedProperty');
@@ -33,27 +34,29 @@ QUnit.test('getting on an object without a container should fail assertion', fun
QUnit.test('getting should return a lookup on the container', function() {
expect(2);
- var obj = {
- container: {
- lookup(key) {
- ok(true, 'should call container.lookup');
- return key;
- }
+ var obj = {};
+
+ setOwner(obj, {
+ lookup(key) {
+ ok(true, 'should call container.lookup');
+ return key;
}
- };
+ });
+
defineProperty(obj, 'foo', new InjectedProperty('type', 'name'));
equal(get(obj, 'foo'), 'type:name', 'should return the value of container.lookup');
});
QUnit.test('omitting the lookup name should default to the property name', function() {
- var obj = {
- container: {
- lookup(key) {
- return key;
- }
+ var obj = {};
+
+ setOwner(obj, {
+ lookup(key) {
+ return key;
}
- };
+ });
+
defineProperty(obj, 'foo', new InjectedProperty('type'));
equal(get(obj, 'foo'), 'type:foo', 'should lookup the type using the property name');
diff --git a/packages/ember-routing-htmlbars/lib/keywords/render.js b/packages/ember-routing-htmlbars/lib/keywords/render.js
index 60677825a8d..310f6764659 100644
--- a/packages/ember-routing-htmlbars/lib/keywords/render.js
+++ b/packages/ember-routing-htmlbars/lib/keywords/render.js
@@ -121,14 +121,14 @@ export default {
var name = params[0];
var context = params[1];
- var container = env.container;
+ var owner = env.owner;
// The render keyword presumes it can work without a router. This is really
// only to satisfy the test:
//
// {{view}} should not override class bindings defined on a child view"
//
- var router = container.lookup('router:main');
+ var router = owner.lookup('router:main');
assert(
'The second argument of {{render}} must be a path, e.g. {{render "post" post}}.',
@@ -150,16 +150,16 @@ export default {
assert(
'You used `{{render \'' + name + '\'}}`, but \'' + name + '\' can not be ' +
'found as either a template or a view.',
- container.registry.has('view:' + name) || container.registry.has(templateName) || !!template
+ owner.hasRegistration('view:' + name) || owner.hasRegistration(templateName) || !!template
);
- var view = container.lookup('view:' + name);
+ var view = owner.lookup('view:' + name);
if (!view) {
- view = container.lookup('view:default');
+ view = owner.lookup('view:default');
}
var viewHasTemplateSpecified = view && !!get(view, 'template');
if (!template && !viewHasTemplateSpecified) {
- template = container.lookup(templateName);
+ template = owner.lookup(templateName);
}
if (view) {
@@ -178,7 +178,7 @@ export default {
assert(
'The controller name you supplied \'' + controllerName + '\' ' +
'did not resolve to a controller.',
- container.registry.has(controllerFullName)
+ owner.hasRegistration(controllerFullName)
);
} else {
controllerName = name;
@@ -190,8 +190,8 @@ export default {
// choose name
if (params.length > 1) {
- var factory = container.lookupFactory(controllerFullName) ||
- generateControllerFactory(container, controllerName);
+ var factory = owner._lookupFactory(controllerFullName) ||
+ generateControllerFactory(owner, controllerName);
controller = factory.create({
model: read(context),
@@ -201,8 +201,8 @@ export default {
node.addDestruction(controller);
} else {
- controller = container.lookup(controllerFullName) ||
- generateController(container, controllerName);
+ controller = owner.lookup(controllerFullName) ||
+ generateController(owner, controllerName);
controller.setProperties({
target: parentController,
diff --git a/packages/ember-routing-htmlbars/tests/helpers/element_action_test.js b/packages/ember-routing-htmlbars/tests/helpers/element_action_test.js
index b67eee2c315..dd1b58f1c63 100644
--- a/packages/ember-routing-htmlbars/tests/helpers/element_action_test.js
+++ b/packages/ember-routing-htmlbars/tests/helpers/element_action_test.js
@@ -17,15 +17,16 @@ import { ActionHelper } from 'ember-routing-htmlbars/keywords/element-action';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
-import Registry from 'container/registry';
import ComponentLookup from 'ember-views/component_lookup';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
import {
runAppend,
runDestroy
} from 'ember-runtime/tests/utils';
-var dispatcher, view, originalViewKeyword, registry, container;
+var dispatcher, view, originalViewKeyword, owner;
var originalRegisterAction = ActionHelper.registerAction;
QUnit.module('ember-routing-htmlbars: action helper', {
@@ -1003,15 +1004,13 @@ QUnit.test('should respect preventDefault=false option if provided', function()
QUnit.module('ember-routing-htmlbars: action helper - action target without `controller`', {
setup() {
- registry = new Registry();
- registry.optionsForType('template', { instantiate: false });
- registry.optionsForType('component', { singleton: false });
- registry.register('component-lookup:main', ComponentLookup);
- registry.register('event_dispatcher:main', EventDispatcher);
+ owner = buildOwner();
+ owner.registerOptionsForType('template', { instantiate: false });
+ owner.registerOptionsForType('component', { singleton: false });
+ owner.register('component-lookup:main', ComponentLookup);
+ owner.register('event_dispatcher:main', EventDispatcher);
- container = registry.container();
-
- dispatcher = container.lookup('event_dispatcher:main');
+ dispatcher = owner.lookup('event_dispatcher:main');
dispatcher.setup();
this.originalLegacyControllerSupport = Ember.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT;
@@ -1024,7 +1023,7 @@ QUnit.module('ember-routing-htmlbars: action helper - action target without `con
teardown() {
runDestroy(view);
runDestroy(dispatcher);
- runDestroy(container);
+ runDestroy(owner);
Ember.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT = this.originalLegacyControllerSupport;
Ember.ENV._ENABLE_LEGACY_VIEW_SUPPORT = this.originalLegacyViewSupport;
@@ -1034,26 +1033,26 @@ QUnit.module('ember-routing-htmlbars: action helper - action target without `con
QUnit.test('should target the proper component when `action` is in yielded block [GH #12409]', function(assert) {
assert.expect(2);
- registry.register('template:components/x-outer', compile(`
+ owner.register('template:components/x-outer', compile(`
{{#x-middle}}
{{x-inner action="hey" }}
{{/x-middle}}
`));
- registry.register('template:components/x-middle', compile('{{yield}}'));
- registry.register('template:components/x-inner', compile(`
+ owner.register('template:components/x-middle', compile('{{yield}}'));
+ owner.register('template:components/x-inner', compile(`
{{yield}}
`));
- registry.register('component:x-inner', EmberComponent.extend({
+ owner.register('component:x-inner', EmberComponent.extend({
click() {
assert.ok(true, 'click was triggered');
this.sendAction();
}
}));
- registry.register('component:x-outer', EmberComponent.extend({
+ owner.register('component:x-outer', EmberComponent.extend({
actions: {
hey: function() {
assert.ok(true, 'action fired on proper target');
@@ -1062,7 +1061,7 @@ QUnit.test('should target the proper component when `action` is in yielded block
}));
view = EmberComponent.create({
- container,
+ [OWNER]: owner,
layout: compile('{{x-outer}}')
});
diff --git a/packages/ember-routing-htmlbars/tests/helpers/link-to_test.js b/packages/ember-routing-htmlbars/tests/helpers/link-to_test.js
index ab05f31c3b6..5ad74578e14 100644
--- a/packages/ember-routing-htmlbars/tests/helpers/link-to_test.js
+++ b/packages/ember-routing-htmlbars/tests/helpers/link-to_test.js
@@ -4,40 +4,40 @@ import EmberView from 'ember-views/views/view';
import compile from 'ember-template-compiler/system/compile';
import { set } from 'ember-metal/property_set';
import Controller from 'ember-runtime/controllers/controller';
-import { Registry } from 'ember-runtime/system/container';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import EmberObject from 'ember-runtime/system/object';
import ComponentLookup from 'ember-views/component_lookup';
import LinkComponent from 'ember-routing-views/components/link-to';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var view;
-var container;
-var registry = new Registry();
-
-// These tests don't rely on the routing service, but LinkComponent makes
-// some assumptions that it will exist. This small stub service ensures
-// that the LinkComponent can render without raising an exception.
-//
-// TODO: Add tests that test actual behavior. Currently, all behavior
-// is tested integration-style in the `ember` package.
-registry.register('service:-routing', EmberObject.extend({
- availableRoutes() { return ['index']; },
- hasRoute(name) { return name === 'index'; },
- isActiveForRoute() { return true; },
- generateURL() { return '/'; }
-}));
-
-registry.register('component-lookup:main', ComponentLookup);
-registry.register('component:link-to', LinkComponent);
-registry.register('component:custom-link-to', LinkComponent.extend());
+var owner, view;
QUnit.module('ember-routing-htmlbars: link-to helper', {
setup() {
- container = registry.container();
+ owner = buildOwner();
+
+ // These tests don't rely on the routing service, but LinkComponent makes
+ // some assumptions that it will exist. This small stub service ensures
+ // that the LinkComponent can render without raising an exception.
+ //
+ // TODO: Add tests that test actual behavior. Currently, all behavior
+ // is tested integration-style in the `ember` package.
+ owner.register('service:-routing', EmberObject.extend({
+ availableRoutes() { return ['index']; },
+ hasRoute(name) { return name === 'index'; },
+ isActiveForRoute() { return true; },
+ generateURL() { return '/'; }
+ }));
+
+ owner.register('component-lookup:main', ComponentLookup);
+ owner.register('component:link-to', LinkComponent);
+ owner.register('component:custom-link-to', LinkComponent.extend());
},
teardown() {
runDestroy(view);
+ runDestroy(owner);
}
});
@@ -45,8 +45,8 @@ QUnit.module('ember-routing-htmlbars: link-to helper', {
QUnit.test('should be able to be inserted in DOM when the router is not present', function() {
var template = '{{#link-to \'index\'}}Go to Index{{/link-to}}';
view = EmberView.create({
- template: compile(template),
- container: container
+ [OWNER]: owner,
+ template: compile(template)
});
runAppend(view);
@@ -57,12 +57,12 @@ QUnit.test('should be able to be inserted in DOM when the router is not present'
QUnit.test('re-renders when title changes', function() {
var template = '{{link-to title routeName}}';
view = EmberView.create({
+ [OWNER]: owner,
controller: {
title: 'foo',
routeName: 'index'
},
- template: compile(template),
- container: container
+ template: compile(template)
});
runAppend(view);
@@ -79,12 +79,12 @@ QUnit.test('re-renders when title changes', function() {
QUnit.test('can read bound title', function() {
var template = '{{link-to title routeName}}';
view = EmberView.create({
+ [OWNER]: owner,
controller: {
title: 'foo',
routeName: 'index'
},
- template: compile(template),
- container: container
+ template: compile(template)
});
runAppend(view);
@@ -94,9 +94,9 @@ QUnit.test('can read bound title', function() {
QUnit.test('escaped inline form (double curlies) escapes link title', function() {
view = EmberView.create({
+ [OWNER]: owner,
title: 'blah',
- template: compile('{{link-to view.title}}'),
- container: container
+ template: compile('{{link-to view.title}}')
});
runAppend(view);
@@ -106,9 +106,9 @@ QUnit.test('escaped inline form (double curlies) escapes link title', function()
QUnit.test('escaped inline form with (-html-safe) does not escape link title', function() {
view = EmberView.create({
+ [OWNER]: owner,
title: 'blah',
- template: compile('{{link-to (-html-safe view.title)}}'),
- container: container
+ template: compile('{{link-to (-html-safe view.title)}}')
});
runAppend(view);
@@ -118,9 +118,9 @@ QUnit.test('escaped inline form with (-html-safe) does not escape link title', f
QUnit.test('unescaped inline form (triple curlies) does not escape link title', function() {
view = EmberView.create({
+ [OWNER]: owner,
title: 'blah',
- template: compile('{{{link-to view.title}}}'),
- container: container
+ template: compile('{{{link-to view.title}}}')
});
runAppend(view);
@@ -132,12 +132,11 @@ QUnit.test('unwraps controllers', function() {
var template = '{{#link-to \'index\' view.otherController}}Text{{/link-to}}';
view = EmberView.create({
+ [OWNER]: owner,
otherController: Controller.create({
model: 'foo'
}),
-
- template: compile(template),
- container: container
+ template: compile(template)
});
expectDeprecation(function() {
@@ -149,9 +148,9 @@ QUnit.test('unwraps controllers', function() {
QUnit.test('able to safely extend the built-in component and use the normal path', function() {
view = EmberView.create({
+ [OWNER]: owner,
title: 'my custom link-to component',
- template: compile('{{custom-link-to view.title}}'),
- container: container
+ template: compile('{{custom-link-to view.title}}')
});
runAppend(view);
diff --git a/packages/ember-routing-htmlbars/tests/helpers/outlet_test.js b/packages/ember-routing-htmlbars/tests/helpers/outlet_test.js
index da62880af64..37c17c58ec6 100644
--- a/packages/ember-routing-htmlbars/tests/helpers/outlet_test.js
+++ b/packages/ember-routing-htmlbars/tests/helpers/outlet_test.js
@@ -1,32 +1,26 @@
import run from 'ember-metal/run_loop';
-
-import Namespace from 'ember-runtime/system/namespace';
import Controller from 'ember-runtime/controllers/controller';
import EmberView from 'ember-views/views/view';
import jQuery from 'ember-views/system/jquery';
-
import compile from 'ember-template-compiler/system/compile';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
-import { buildRegistry } from 'ember-routing-htmlbars/tests/utils';
+import { buildAppInstance } from 'ember-routing-htmlbars/tests/utils';
var trim = jQuery.trim;
-var registry, container, top;
+var appInstance, top;
QUnit.module('ember-routing-htmlbars: {{outlet}} helper', {
setup() {
- var namespace = Namespace.create();
- registry = buildRegistry(namespace);
- container = registry.container();
-
- var CoreOutlet = container.lookupFactory('view:core-outlet');
+ appInstance = buildAppInstance();
+ var CoreOutlet = appInstance._lookupFactory('view:core-outlet');
top = CoreOutlet.create();
},
teardown() {
- runDestroy(container);
+ runDestroy(appInstance);
runDestroy(top);
- registry = container = top = null;
+ appInstance = top = null;
}
});
@@ -48,7 +42,7 @@ QUnit.test('view should render the outlet when set after dom insertion', functio
});
QUnit.test('a top-level outlet should always be a view', function() {
- registry.register('view:toplevel', EmberView.extend({
+ appInstance.register('view:toplevel', EmberView.extend({
elementId: 'top-level'
}));
var routerState = withTemplate('
HI
{{outlet}}');
diff --git a/packages/ember-routing-htmlbars/tests/helpers/render_test.js b/packages/ember-routing-htmlbars/tests/helpers/render_test.js
index 51790b4d614..fbe70144172 100644
--- a/packages/ember-routing-htmlbars/tests/helpers/render_test.js
+++ b/packages/ember-routing-htmlbars/tests/helpers/render_test.js
@@ -3,8 +3,6 @@ import { set } from 'ember-metal/property_set';
import run from 'ember-metal/run_loop';
import { observer } from 'ember-metal/mixin';
-import Namespace from 'ember-runtime/system/namespace';
-
import EmberController from 'ember-runtime/controllers/controller';
import compile from 'ember-template-compiler/system/compile';
@@ -13,8 +11,9 @@ import EmberView from 'ember-views/views/view';
import jQuery from 'ember-views/system/jquery';
import ActionManager from 'ember-views/system/action_manager';
-import { buildRegistry } from 'ember-routing-htmlbars/tests/utils';
+import { buildAppInstance } from 'ember-routing-htmlbars/tests/utils';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
+import { OWNER } from 'container/owner';
function runSet(object, key, value) {
run(function() {
@@ -22,17 +21,15 @@ function runSet(object, key, value) {
});
}
-var view, container;
+var view, appInstance;
QUnit.module('ember-routing-htmlbars: {{render}} helper', {
setup() {
- var namespace = Namespace.create();
- var registry = buildRegistry(namespace);
- container = registry.container();
+ appInstance = buildAppInstance();
},
teardown() {
- runDestroy(container);
+ runDestroy(appInstance);
runDestroy(view);
Ember.TEMPLATES = {};
@@ -41,9 +38,10 @@ QUnit.module('ember-routing-htmlbars: {{render}} helper', {
QUnit.test('{{render}} helper should render given template', function() {
var template = '
HI
{{render \'home\'}}';
- var controller = EmberController.extend({ container: container });
+ var controller = EmberController.extend();
+
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller.create(),
template: compile(template)
});
@@ -55,14 +53,15 @@ QUnit.test('{{render}} helper should render given template', function() {
equal(view.$().text(), 'HIBYE');
// This is a poor assertion. What is really being tested is that
// a second render with the same name will throw an assert.
- ok(container.lookup('router:main')._lookupActiveComponentNode('home'), 'should register home as active view');
+ ok(appInstance.lookup('router:main')._lookupActiveComponentNode('home'), 'should register home as active view');
});
QUnit.test('{{render}} helper should render nested helpers', function() {
var template = '
HI
{{render \'foo\'}}';
- var controller = EmberController.extend({ container: container });
+ var controller = EmberController.extend();
+
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller.create(),
template: compile(template)
});
@@ -78,9 +77,10 @@ QUnit.test('{{render}} helper should render nested helpers', function() {
QUnit.test('{{render}} helper should have assertion if neither template nor view exists', function() {
var template = '
HI
{{render \'oops\'}}';
- var controller = EmberController.extend({ container: container });
+ var controller = EmberController.extend();
+
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller.create(),
template: compile(template)
});
@@ -92,10 +92,11 @@ QUnit.test('{{render}} helper should have assertion if neither template nor view
QUnit.test('{{render}} helper should not have assertion if template is supplied in block-form', function() {
var template = '
HI
{{#render \'good\'}} {{name}}{{/render}}';
- var controller = EmberController.extend({ container: container });
- container.registry.register('controller:good', EmberController.extend({ name: 'Rob' }));
+ var controller = EmberController.extend();
+ appInstance.register('controller:good', EmberController.extend({ name: 'Rob' }));
+
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller.create(),
template: compile(template)
});
@@ -107,14 +108,15 @@ QUnit.test('{{render}} helper should not have assertion if template is supplied
QUnit.test('{{render}} helper should not have assertion if view exists without a template', function() {
var template = '
HI
{{render \'oops\'}}';
- var controller = EmberController.extend({ container: container });
+ var controller = EmberController.extend();
+
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller.create(),
template: compile(template)
});
- container.registry.register('view:oops', EmberView.extend());
+ appInstance.register('view:oops', EmberView.extend());
runAppend(view);
@@ -128,15 +130,15 @@ QUnit.test('{{render}} helper should render given template with a supplied model
};
var Controller = EmberController.extend({
- container: container,
post: post
});
var controller = Controller.create({
+ [OWNER]: appInstance
});
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller,
template: compile(template)
});
@@ -148,7 +150,7 @@ QUnit.test('{{render}} helper should render given template with a supplied model
postController = this;
}
});
- container.registry.register('controller:post', PostController);
+ appInstance.register('controller:post', PostController);
Ember.TEMPLATES['post'] = compile('
{{model.title}}
');
@@ -168,13 +170,14 @@ QUnit.test('{{render}} helper with a supplied model should not fire observers on
var post = {
title: 'Rails is omakase'
};
+ const controller = EmberController.create({
+ [OWNER]: appInstance,
+ post: post
+ });
view = EmberView.create({
- container: container,
- controller: EmberController.create({
- container: container,
- post: post
- }),
+ [OWNER]: appInstance,
+ controller,
template: compile(template)
});
@@ -184,7 +187,7 @@ QUnit.test('{{render}} helper with a supplied model should not fire observers on
})
});
- container.registry.register('controller:post', PostController);
+ appInstance.register('controller:post', PostController);
Ember.TEMPLATES['post'] = compile('
{{title}}
');
@@ -194,12 +197,17 @@ QUnit.test('{{render}} helper with a supplied model should not fire observers on
});
QUnit.test('{{render}} helper should raise an error when a given controller name does not resolve to a controller', function() {
- var template = '
');
@@ -341,12 +360,14 @@ QUnit.test('{{render}} helper should not leak controllers', function() {
QUnit.test('{{render}} helper should not treat invocations with falsy contexts as context-less', function() {
var template = '
');
@@ -379,14 +400,15 @@ QUnit.test('{{render}} helper should render templates both with and without mode
};
var Controller = EmberController.extend({
- container: container,
post: post
});
- var controller = Controller.create();
+ var controller = Controller.create({
+ [OWNER]: appInstance
+ });
view = EmberView.create({
- container: container,
+ [OWNER]: appInstance,
controller: controller,
template: compile(template)
});
@@ -402,7 +424,7 @@ QUnit.test('{{render}} helper should render templates both with and without mode
}
}
});
- container.registry.register('controller:post', PostController, { singleton: false });
+ appInstance.register('controller:post', PostController, { singleton: false });
Ember.TEMPLATES['post'] = compile('
Title:{{model.title}}
');
@@ -419,11 +441,9 @@ QUnit.test('{{render}} helper should render templates both with and without mode
});
QUnit.test('{{render}} helper should link child controllers to the parent controller', function() {
- var parentTriggered = 0;
-
- var template = '
HI
{{render "posts"}}';
- var controller = EmberController.extend({
- container: container,
+ let parentTriggered = 0;
+ const template = '
HI
{{render "posts"}}';
+ const Controller = EmberController.extend({
actions: {
parentPlease() {
parentTriggered++;
@@ -431,12 +451,15 @@ QUnit.test('{{render}} helper should link child controllers to the parent contro
},
role: 'Mom'
});
+ const controller = Controller.create({
+ [OWNER]: appInstance
+ });
- container.registry.register('controller:posts', EmberController.extend());
+ appInstance.register('controller:posts', EmberController.extend());
view = EmberView.create({
- container: container,
- controller: controller.create(),
+ [OWNER]: appInstance,
+ controller,
template: compile(template)
});
@@ -457,10 +480,14 @@ QUnit.test('{{render}} helper should link child controllers to the parent contro
});
QUnit.test('{{render}} helper should be able to render a template again when it was removed', function() {
- var controller = EmberController.extend({ container: container });
- var CoreOutlet = container.lookupFactory('view:core-outlet');
+ const CoreOutlet = appInstance._lookupFactory('view:core-outlet');
+ const Controller = EmberController.extend();
+ const controller = Controller.create({
+ [OWNER]: appInstance
+ });
+
view = CoreOutlet.create({
- container: container
+ [OWNER]: appInstance
});
Ember.TEMPLATES['home'] = compile('
BYE
');
@@ -475,7 +502,7 @@ QUnit.test('{{render}} helper should be able to render a template again when it
run(function() {
liveRoutes.outlets.main = {
render: {
- controller: controller.create(),
+ controller,
template: compile('
1{{render \'home\'}}
')
}
};
@@ -488,7 +515,7 @@ QUnit.test('{{render}} helper should be able to render a template again when it
run(function() {
liveRoutes.outlets.main = {
render: {
- controller: controller.create(),
+ controller,
template: compile('
2{{render \'home\'}}
')
}
};
@@ -501,7 +528,10 @@ QUnit.test('{{render}} helper should be able to render a template again when it
QUnit.test('{{render}} works with dot notation', function() {
var template = '{{render "blog.post"}}';
- var ContextController = EmberController.extend({ container: container });
+ var ContextController = EmberController.extend();
+ var contextController = ContextController.create({
+ [OWNER]: appInstance
+ });
var controller;
var id = 0;
@@ -512,11 +542,11 @@ QUnit.test('{{render}} works with dot notation', function() {
this.uniqueId = id++;
}
});
- container.registry.register('controller:blog.post', BlogPostController);
+ appInstance.register('controller:blog.post', BlogPostController);
view = EmberView.create({
- container: container,
- controller: ContextController.create(),
+ [OWNER]: appInstance,
+ controller: contextController,
template: compile(template)
});
@@ -524,16 +554,19 @@ QUnit.test('{{render}} works with dot notation', function() {
runAppend(view);
- var singletonController = container.lookup('controller:blog.post');
+ var singletonController = appInstance.lookup('controller:blog.post');
equal(singletonController.uniqueId, view.$().html(), 'rendered with correct singleton controller');
});
QUnit.test('throws an assertion if {{render}} is called with an unquoted template name', function() {
var template = '
HI
{{render home}}';
- var controller = EmberController.extend({ container: container });
+ var Controller = EmberController.extend();
+ var controller = Controller.create({
+ [OWNER]: appInstance
+ });
+
view = EmberView.create({
- container: container,
- controller: controller.create(),
+ controller,
template: compile(template)
});
@@ -546,10 +579,14 @@ QUnit.test('throws an assertion if {{render}} is called with an unquoted templat
QUnit.test('throws an assertion if {{render}} is called with a literal for a model', function() {
var template = '
HI
{{render "home" "model"}}';
- var controller = EmberController.extend({ container: container });
+ var Controller = EmberController.extend();
+ var controller = Controller.create({
+ [OWNER]: appInstance
+ });
+
view = EmberView.create({
- container: container,
- controller: controller.create(),
+ [OWNER]: appInstance,
+ controller,
template: compile(template)
});
@@ -562,17 +599,21 @@ QUnit.test('throws an assertion if {{render}} is called with a literal for a mod
QUnit.test('{{render}} helper should let view provide its own template', function() {
var template = '{{render \'fish\'}}';
- var controller = EmberController.extend({ container: container });
+ var Controller = EmberController.extend();
+ var controller = Controller.create({
+ [OWNER]: appInstance
+ });
+
view = EmberView.create({
- container: container,
- controller: controller.create(),
+ [OWNER]: appInstance,
+ controller,
template: compile(template)
});
- container.registry.register('template:fish', compile('Hello fish!'));
- container.registry.register('template:other', compile('Hello other!'));
+ appInstance.register('template:fish', compile('Hello fish!'));
+ appInstance.register('template:other', compile('Hello other!'));
- container.registry.register('view:fish', EmberView.extend({
+ appInstance.register('view:fish', EmberView.extend({
templateName: 'other'
}));
@@ -583,16 +624,20 @@ QUnit.test('{{render}} helper should let view provide its own template', functio
QUnit.test('{{render}} helper should not require view to provide its own template', function() {
var template = '{{render \'fish\'}}';
- var controller = EmberController.extend({ container: container });
+ var Controller = EmberController.extend();
+ var controller = Controller.create({
+ [OWNER]: appInstance
+ });
+
view = EmberView.create({
- container: container,
- controller: controller.create(),
+ [OWNER]: appInstance,
+ controller,
template: compile(template)
});
- container.registry.register('template:fish', compile('Hello fish!'));
+ appInstance.register('template:fish', compile('Hello fish!'));
- container.registry.register('view:fish', EmberView.extend());
+ appInstance.register('view:fish', EmberView.extend());
runAppend(view);
diff --git a/packages/ember-routing-htmlbars/tests/utils.js b/packages/ember-routing-htmlbars/tests/utils.js
index 11a78d69378..3262f2d3135 100644
--- a/packages/ember-routing-htmlbars/tests/utils.js
+++ b/packages/ember-routing-htmlbars/tests/utils.js
@@ -1,12 +1,10 @@
import Ember from 'ember-metal/core';
import { get } from 'ember-metal/property_get';
-import { set } from 'ember-metal/property_set';
import {
classify,
decamelize
} from 'ember-runtime/system/string';
-import Registry from 'container/registry';
import Controller from 'ember-runtime/controllers/controller';
import EmberView from 'ember-views/views/view';
@@ -17,6 +15,10 @@ import {
} from 'ember-routing-views/views/outlet';
import HashLocation from 'ember-routing/location/hash_location';
+import EmberObject from 'ember-runtime/system/object';
+import Registry from 'container/registry';
+import RegistryProxy from 'ember-runtime/mixins/registry_proxy';
+import ContainerProxy from 'ember-runtime/mixins/container_proxy';
function resolverFor(namespace) {
return function(fullName) {
@@ -38,14 +40,22 @@ function resolverFor(namespace) {
};
}
-function buildRegistry(namespace) {
- var registry = new Registry();
+function buildAppInstance() {
+ let registry;
+ const App = EmberObject.extend(RegistryProxy, ContainerProxy, {
+ init() {
+ this._super(...arguments);
+ registry = this.__registry__ = new Registry();
+ this.__container__ = registry.container({ owner: this });
+ }
+ });
+ const appInstance = App.create();
+
+ registry.resolver = resolverFor(App);
- registry.set = set;
- registry.resolver = resolverFor(namespace);
registry.optionsForType('view', { singleton: false });
registry.optionsForType('template', { instantiate: false });
- registry.register('application:main', namespace, { instantiate: false });
+ registry.register('application:main', App, { instantiate: false });
registry.injection('router:main', 'namespace', 'application:main');
registry.register('location:hash', HashLocation);
@@ -59,10 +69,10 @@ function buildRegistry(namespace) {
registry.typeInjection('route', 'router', 'router:main');
- return registry;
+ return appInstance;
}
export {
resolverFor,
- buildRegistry
+ buildAppInstance
};
diff --git a/packages/ember-routing/lib/location/auto_location.js b/packages/ember-routing/lib/location/auto_location.js
index 85a3d202945..daa426135a4 100644
--- a/packages/ember-routing/lib/location/auto_location.js
+++ b/packages/ember-routing/lib/location/auto_location.js
@@ -2,6 +2,7 @@ import { assert } from 'ember-metal/debug';
import { get } from 'ember-metal/property_get';
import { set } from 'ember-metal/property_set';
import { tryInvoke } from 'ember-metal/utils';
+import { getOwner } from 'container/owner';
import EmberObject from 'ember-runtime/system/object';
import environment from 'ember-metal/environment';
@@ -133,7 +134,7 @@ export default EmberObject.extend({
implementation = 'none';
}
- var concrete = this.container.lookup(`location:${implementation}`);
+ var concrete = getOwner(this).lookup(`location:${implementation}`);
set(concrete, 'rootURL', rootURL);
assert(`Could not find location '${implementation}'.`, !!concrete);
diff --git a/packages/ember-routing/lib/system/generate_controller.js b/packages/ember-routing/lib/system/generate_controller.js
index 8bd4152f58a..39e9728d1d5 100644
--- a/packages/ember-routing/lib/system/generate_controller.js
+++ b/packages/ember-routing/lib/system/generate_controller.js
@@ -14,10 +14,10 @@ import { get } from 'ember-metal/property_get';
@private
*/
-export function generateControllerFactory(container, controllerName, context) {
+export function generateControllerFactory(owner, controllerName, context) {
var Factory, fullName;
- Factory = container.lookupFactory('controller:basic').extend({
+ Factory = owner._lookupFactory('controller:basic').extend({
isGenerated: true,
toString() {
return `(generated ${controllerName} controller)`;
@@ -26,7 +26,7 @@ export function generateControllerFactory(container, controllerName, context) {
fullName = `controller:${controllerName}`;
- container.registry.register(fullName, Factory);
+ owner.register(fullName, Factory);
return Factory;
}
@@ -44,11 +44,11 @@ export function generateControllerFactory(container, controllerName, context) {
@private
@since 1.3.0
*/
-export default function generateController(container, controllerName, context) {
- generateControllerFactory(container, controllerName, context);
+export default function generateController(owner, controllerName, context) {
+ generateControllerFactory(owner, controllerName, context);
var fullName = `controller:${controllerName}`;
- var instance = container.lookup(fullName);
+ var instance = owner.lookup(fullName);
if (get(instance, 'namespace.LOG_ACTIVE_GENERATION')) {
info(`generated -> ${fullName}`, { fullName: fullName });
diff --git a/packages/ember-routing/lib/system/route.js b/packages/ember-routing/lib/system/route.js
index 90cdef76a31..c8c020b11b6 100644
--- a/packages/ember-routing/lib/system/route.js
+++ b/packages/ember-routing/lib/system/route.js
@@ -29,6 +29,7 @@ import {
normalizeControllerQueryParams,
calculateCacheKey
} from 'ember-routing/utils';
+import { getOwner } from 'container/owner';
var slice = Array.prototype.slice;
@@ -117,7 +118,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
var controllerProto, combinedQueryParameterConfiguration;
var controllerName = this.controllerName || this.routeName;
- var definedControllerClass = this.container.lookupFactory(`controller:${controllerName}`);
+ var definedControllerClass = getOwner(this)._lookupFactory(`controller:${controllerName}`);
var queryParameterConfiguraton = get(this, 'queryParams');
var hasRouterDefinedQueryParams = !!Object.keys(queryParameterConfiguraton).length;
@@ -140,7 +141,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
} else if (hasRouterDefinedQueryParams) {
// the developer has not defined a controller but *has* supplied route query params.
// Generate a class for them so we can later insert default values
- var generatedControllerClass = generateControllerFactory(this.container, controllerName);
+ var generatedControllerClass = generateControllerFactory(getOwner(this), controllerName);
controllerProto = generatedControllerClass.proto();
combinedQueryParameterConfiguration = queryParameterConfiguraton;
}
@@ -321,7 +322,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@public
*/
paramsFor(name) {
- var route = this.container.lookup(`route:${name}`);
+ var route = getOwner(this).lookup(`route:${name}`);
if (!route) {
return {};
@@ -1528,13 +1529,13 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@private
*/
store: computed(function() {
- var container = this.container;
+ var owner = getOwner(this);
var routeName = this.routeName;
var namespace = get(this, 'router.namespace');
return {
find(name, value) {
- var modelClass = container.lookupFactory(`model:${name}`);
+ var modelClass = owner._lookupFactory(`model:${name}`);
assert(
`You used the dynamic segment ${name}_id in your route ${routeName}, but ${namespace}.${classify(name)} did not exist and you did not override your route's \`model\` hook.`, !!modelClass);
@@ -1693,15 +1694,15 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@public
*/
controllerFor(name, _skipAssert) {
- var container = this.container;
- var route = container.lookup(`route:${name}`);
+ var owner = getOwner(this);
+ var route = owner.lookup(`route:${name}`);
var controller;
if (route && route.controllerName) {
name = route.controllerName;
}
- controller = container.lookup(`controller:${name}`);
+ controller = owner.lookup(`controller:${name}`);
// NOTE: We're specifically checking that skipAssert is true, because according
// to the old API the second parameter was model. We do not want people who
@@ -1731,11 +1732,11 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@private
*/
generateController(name, model) {
- var container = this.container;
+ var owner = getOwner(this);
model = model || this.modelFor(name);
- return generateController(container, name, model);
+ return generateController(owner, name, model);
},
/**
@@ -1770,7 +1771,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@public
*/
modelFor(name) {
- var route = this.container.lookup(`route:${name}`);
+ var route = getOwner(this).lookup(`route:${name}`);
var transition = this.router ? this.router.router.activeTransition : null;
// If we are mid-transition, we want to try and look up
@@ -2111,15 +2112,15 @@ function buildRenderOptions(route, namePassed, isDefaultRender, name, options) {
if (!controller) {
if (namePassed) {
- controller = route.container.lookup(`controller:${name}`) || route.controllerName || route.routeName;
+ controller = getOwner(route).lookup(`controller:${name}`) || route.controllerName || route.routeName;
} else {
- controller = route.controllerName || route.container.lookup(`controller:${name}`);
+ controller = route.controllerName || getOwner(route).lookup(`controller:${name}`);
}
}
if (typeof controller === 'string') {
var controllerName = controller;
- controller = route.container.lookup(`controller:${controllerName}`);
+ controller = getOwner(route).lookup(`controller:${controllerName}`);
if (!controller) {
throw new EmberError(`You passed \`controller: '${controllerName}'\` into the \`render\` method, but no such controller could be found.`);
}
@@ -2133,9 +2134,10 @@ function buildRenderOptions(route, namePassed, isDefaultRender, name, options) {
controller.set('model', options.model);
}
+ const owner = getOwner(route);
viewName = options && options.view || namePassed && name || route.viewName || name;
- ViewClass = route.container.lookupFactory(`view:${viewName}`);
- template = route.container.lookup(`template:${templateName}`);
+ ViewClass = owner._lookupFactory(`view:${viewName}`);
+ template = owner.lookup(`template:${templateName}`);
var parent;
if (into && (parent = parentRoute(route)) && into === parentRoute(route).routeName) {
@@ -2154,7 +2156,7 @@ function buildRenderOptions(route, namePassed, isDefaultRender, name, options) {
let Component;
if (isEnabled('ember-routing-routable-components')) {
let componentName = options && options.component || namePassed && name || route.componentName || name;
- let componentLookup = route.container.lookup('component-lookup:main');
+ let componentLookup = owner.lookup('component-lookup:main');
Component = componentLookup.lookupFactory(componentName);
let isGlimmerComponent = Component && Component.proto().isGlimmerComponent;
if (!template && !ViewClass && Component && isGlimmerComponent) {
diff --git a/packages/ember-routing/lib/system/router.js b/packages/ember-routing/lib/system/router.js
index b6638cb7976..d9998349fa7 100644
--- a/packages/ember-routing/lib/system/router.js
+++ b/packages/ember-routing/lib/system/router.js
@@ -19,6 +19,7 @@ import {
calculateCacheKey
} from 'ember-routing/utils';
import RouterState from './router_state';
+import { getOwner } from 'container/owner';
/**
@module ember
@@ -246,9 +247,10 @@ var EmberRouter = EmberObject.extend(Evented, {
defaultParentState = ownState;
}
if (!this._toplevelView) {
- var OutletView = this.container.lookupFactory('view:-outlet');
+ const owner = getOwner(this);
+ var OutletView = owner._lookupFactory('view:-outlet');
this._toplevelView = OutletView.create();
- var instance = this.container.lookup('-application-instance:main');
+ var instance = owner.lookup('-application-instance:main');
instance.didCreateRootView(this._toplevelView);
}
this._toplevelView.setOutletState(liveRoutes);
@@ -447,9 +449,10 @@ var EmberRouter = EmberObject.extend(Evented, {
_setupLocation() {
var location = get(this, 'location');
var rootURL = get(this, 'rootURL');
+ const owner = getOwner(this);
- if ('string' === typeof location && this.container) {
- var resolvedLocation = this.container.lookup(`location:${location}`);
+ if ('string' === typeof location && owner) {
+ var resolvedLocation = owner.lookup(`location:${location}`);
if ('undefined' !== typeof resolvedLocation) {
location = set(this, 'location', resolvedLocation);
@@ -485,12 +488,12 @@ var EmberRouter = EmberObject.extend(Evented, {
_getHandlerFunction() {
var seen = new EmptyObject();
- var container = this.container;
- var DefaultRoute = container.lookupFactory('route:basic');
+ const owner = getOwner(this);
+ var DefaultRoute = owner._lookupFactory('route:basic');
return (name) => {
var routeName = 'route:' + name;
- var handler = container.lookup(routeName);
+ var handler = owner.lookup(routeName);
if (seen[name]) {
return handler;
@@ -499,8 +502,8 @@ var EmberRouter = EmberObject.extend(Evented, {
seen[name] = true;
if (!handler) {
- container.registry.register(routeName, DefaultRoute.extend());
- handler = container.lookup(routeName);
+ owner.register(routeName, DefaultRoute.extend());
+ handler = owner.lookup(routeName);
if (get(this, 'namespace.LOG_ACTIVE_GENERATION')) {
info(`generated -> ${routeName}`, { fullName: routeName });
@@ -841,9 +844,9 @@ function findChildRouteName(parentRoute, originatingChildRoute, name) {
}
function routeHasBeenDefined(router, name) {
- var container = router.container;
+ const owner = getOwner(router);
return router.hasRoute(name) &&
- (container.registry.has(`template:${name}`) || container.registry.has(`route:${name}`));
+ (owner.hasRegistration(`template:${name}`) || owner.hasRegistration(`route:${name}`));
}
function triggerEvent(handlerInfos, ignoreFailure, args) {
@@ -904,7 +907,7 @@ function updatePaths(router) {
set(router, 'currentPath', path);
set(router, 'currentRouteName', currentRouteName);
- let appController = router.container.lookup('controller:application');
+ let appController = getOwner(router).lookup('controller:application');
if (!appController) {
// appController might not exist when top-level loading/error
diff --git a/packages/ember-routing/tests/location/auto_location_test.js b/packages/ember-routing/tests/location/auto_location_test.js
index fd1ab094767..b25d9405a19 100644
--- a/packages/ember-routing/tests/location/auto_location_test.js
+++ b/packages/ember-routing/tests/location/auto_location_test.js
@@ -9,8 +9,8 @@ import {
import HistoryLocation from 'ember-routing/location/history_location';
import HashLocation from 'ember-routing/location/hash_location';
import NoneLocation from 'ember-routing/location/none_location';
-import Registry from 'container/registry';
-
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
function mockBrowserLocation(overrides) {
return assign({
@@ -36,18 +36,20 @@ function mockBrowserHistory(overrides) {
}
function createLocation(location, history) {
- var registry = new Registry();
+ const owner = buildOwner();
- registry.register('location:history', HistoryLocation);
- registry.register('location:hash', HashLocation);
- registry.register('location:none', NoneLocation);
+ owner.register('location:history', HistoryLocation);
+ owner.register('location:hash', HashLocation);
+ owner.register('location:none', NoneLocation);
- return AutoLocation.create({
- container: registry.container(),
+ const autolocation = AutoLocation.create({
+ [OWNER]: owner,
location: location,
history: history,
global: {}
});
+
+ return autolocation;
}
var location;
diff --git a/packages/ember-routing/tests/system/controller_for_test.js b/packages/ember-routing/tests/system/controller_for_test.js
index bdb2c2f7cae..36bbae28fb3 100644
--- a/packages/ember-routing/tests/system/controller_for_test.js
+++ b/packages/ember-routing/tests/system/controller_for_test.js
@@ -1,9 +1,6 @@
import Ember from 'ember-metal/core'; // A
import { get } from 'ember-metal/property_get';
-import { set } from 'ember-metal/property_set';
import run from 'ember-metal/run_loop';
-
-import Registry from 'container/registry';
import Namespace from 'ember-runtime/system/namespace';
import { classify } from 'ember-runtime/system/string';
import Controller from 'ember-runtime/controllers/controller';
@@ -12,20 +9,19 @@ import generateController from 'ember-routing/system/generate_controller';
import {
generateControllerFactory
} from 'ember-routing/system/generate_controller';
+import buildOwner from 'container/tests/test-helpers/build-owner';
-var buildContainer = function(namespace) {
- var registry = new Registry();
- var container = registry.container();
+var buildInstance = function(namespace) {
+ const owner = buildOwner();
- registry.set = set;
- registry.resolver = resolverFor(namespace);
- registry.optionsForType('view', { singleton: false });
+ owner.__registry__.resolver = resolverFor(namespace);
+ owner.registerOptionsForType('view', { singleton: false });
- registry.register('application:main', namespace, { instantiate: false });
+ owner.register('application:main', namespace, { instantiate: false });
- registry.register('controller:basic', Controller, { instantiate: false });
+ owner.register('controller:basic', Controller, { instantiate: false });
- return container;
+ return owner;
};
function resolverFor(namespace) {
@@ -44,25 +40,25 @@ function resolverFor(namespace) {
};
}
-var container, appController, namespace;
+var appInstance, appController, namespace;
QUnit.module('Ember.controllerFor', {
setup() {
namespace = Namespace.create();
- container = buildContainer(namespace);
- container.registry.register('controller:app', Controller.extend());
- appController = container.lookup('controller:app');
+ appInstance = buildInstance(namespace);
+ appInstance.register('controller:app', Controller.extend());
+ appController = appInstance.lookup('controller:app');
},
teardown() {
run(function () {
- container.destroy();
+ appInstance.destroy();
namespace.destroy();
});
}
});
QUnit.test('controllerFor should lookup for registered controllers', function() {
- var controller = controllerFor(container, 'app');
+ var controller = controllerFor(appInstance, 'app');
equal(appController, controller, 'should find app controller');
});
@@ -70,11 +66,11 @@ QUnit.test('controllerFor should lookup for registered controllers', function()
QUnit.module('Ember.generateController', {
setup() {
namespace = Namespace.create();
- container = buildContainer(namespace);
+ appInstance = buildInstance(namespace);
},
teardown() {
run(function () {
- container.destroy();
+ appInstance.destroy();
namespace.destroy();
});
}
@@ -86,7 +82,7 @@ QUnit.test('generateController and generateControllerFactory are properties on t
});
QUnit.test('generateController should create Ember.Controller', function() {
- var controller = generateController(container, 'home');
+ var controller = generateController(appInstance, 'home');
ok(controller instanceof Controller, 'should create controller');
});
@@ -96,7 +92,7 @@ QUnit.test('generateController should create App.Controller if provided', functi
var controller;
namespace.Controller = Controller.extend();
- controller = generateController(container, 'home');
+ controller = generateController(appInstance, 'home');
ok(controller instanceof namespace.Controller, 'should create controller');
});
diff --git a/packages/ember-routing/tests/system/dsl_test.js b/packages/ember-routing/tests/system/dsl_test.js
index cd282d83e7c..dff80487ad7 100644
--- a/packages/ember-routing/tests/system/dsl_test.js
+++ b/packages/ember-routing/tests/system/dsl_test.js
@@ -5,8 +5,6 @@ import {
registerHandler as registerWarnHandler
} from 'ember-debug/warn';
-
-
var Router, outerWarnHandler;
QUnit.module('Ember Router DSL', {
diff --git a/packages/ember-routing/tests/system/route_test.js b/packages/ember-routing/tests/system/route_test.js
index 7735178dc55..621fa340222 100644
--- a/packages/ember-routing/tests/system/route_test.js
+++ b/packages/ember-routing/tests/system/route_test.js
@@ -1,9 +1,10 @@
import { runDestroy } from 'ember-runtime/tests/utils';
-import Registry from 'container/registry';
import Service from 'ember-runtime/system/service';
import EmberObject from 'ember-runtime/system/object';
import EmberRoute from 'ember-routing/system/route';
import inject from 'ember-runtime/inject';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { setOwner } from 'container/owner';
var route, routeOne, routeTwo, lookupHash;
@@ -32,17 +33,17 @@ QUnit.test('default store utilizes the container to acquire the model factory',
}
});
- route.container = {
- has() {
+ setOwner(route, buildOwner({
+ hasRegistration() {
return true;
},
- lookupFactory(fullName) {
+ _lookupFactory(fullName) {
equal(fullName, 'model:post', 'correct factory was looked up');
return Post;
}
- };
+ }));
route.set('_qp', null);
@@ -54,8 +55,8 @@ QUnit.test('\'store\' can be injected by data persistence frameworks', function(
expect(8);
runDestroy(route);
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
+
var post = {
id: 1
};
@@ -69,12 +70,12 @@ QUnit.test('\'store\' can be injected by data persistence frameworks', function(
}
});
- registry.register('route:index', EmberRoute);
- registry.register('store:main', Store);
+ owner.register('route:index', EmberRoute);
+ owner.register('store:main', Store);
- registry.injection('route', 'store', 'store:main');
+ owner.inject('route', 'store', 'store:main');
- route = container.lookup('route:index');
+ route = owner.lookup('route:index');
equal(route.model({ post_id: 1 }), post, '#model returns the correct post');
equal(route.findModel('post', 1), post, '#findModel returns the correct post');
@@ -84,14 +85,13 @@ QUnit.test('assert if \'store.find\' method is not found', function() {
expect(1);
runDestroy(route);
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
var Post = EmberObject.extend();
- registry.register('route:index', EmberRoute);
- registry.register('model:post', Post);
+ owner.register('route:index', EmberRoute);
+ owner.register('model:post', Post);
- route = container.lookup('route:index');
+ route = owner.lookup('route:index');
expectAssertion(function() {
route.findModel('post', 1);
@@ -102,11 +102,10 @@ QUnit.test('asserts if model class is not found', function() {
expect(1);
runDestroy(route);
- var registry = new Registry();
- var container = registry.container();
- registry.register('route:index', EmberRoute);
+ const owner = buildOwner();
+ owner.register('route:index', EmberRoute);
- route = container.lookup('route:index');
+ route = owner.lookup('route:index');
expectAssertion(function() {
route.model({ post_id: 1 });
@@ -118,12 +117,11 @@ QUnit.test('\'store\' does not need to be injected', function() {
runDestroy(route);
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('route:index', EmberRoute);
+ owner.register('route:index', EmberRoute);
- route = container.lookup('route:index');
+ route = owner.lookup('route:index');
ignoreAssertion(function() {
route.model({ post_id: 1 });
@@ -133,23 +131,22 @@ QUnit.test('\'store\' does not need to be injected', function() {
});
QUnit.test('modelFor doesn\'t require the router', function() {
- var registry = new Registry();
- var container = registry.container();
- route.container = container;
+ expect(1);
- var foo = { name: 'foo' };
+ const owner = buildOwner();
+ setOwner(route, owner);
- var fooRoute = EmberRoute.extend({
- container: container,
+ const foo = { name: 'foo' };
+
+ const FooRoute = EmberRoute.extend({
currentModel: foo
});
- registry.register('route:foo', fooRoute);
+ owner.register('route:foo', FooRoute);
- equal(route.modelFor('foo'), foo);
+ strictEqual(route.modelFor('foo'), foo);
});
-
QUnit.test('.send just calls an action if the router is absent', function() {
expect(7);
var route = EmberRoute.extend({
@@ -275,14 +272,17 @@ QUnit.test('returns undefined if model is not set', function() {
QUnit.module('Ember.Route interaction', {
setup() {
- var container = {
+ var owner = {
lookup(fullName) {
return lookupHash[fullName];
}
};
- routeOne = EmberRoute.create({ container: container, routeName: 'one' });
- routeTwo = EmberRoute.create({ container: container, routeName: 'two' });
+ routeOne = EmberRoute.create({ routeName: 'one' });
+ routeTwo = EmberRoute.create({ routeName: 'two' });
+
+ setOwner(routeOne, owner);
+ setOwner(routeTwo, owner);
lookupHash = {
'route:one': routeOne,
@@ -308,17 +308,16 @@ QUnit.test('controllerFor uses route\'s controllerName if specified', function()
QUnit.module('Route injected properties');
QUnit.test('services can be injected into routes', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('route:application', EmberRoute.extend({
+ owner.register('route:application', EmberRoute.extend({
authService: inject.service('auth')
}));
- registry.register('service:auth', Service.extend());
+ owner.register('service:auth', Service.extend());
- var appRoute = container.lookup('route:application');
- var authService = container.lookup('service:auth');
+ var appRoute = owner.lookup('route:application');
+ var authService = owner.lookup('service:auth');
equal(authService, appRoute.get('authService'), 'service.auth is injected');
});
diff --git a/packages/ember-routing/tests/system/router_test.js b/packages/ember-routing/tests/system/router_test.js
index 552d9212b90..e0ca81bccd6 100644
--- a/packages/ember-routing/tests/system/router_test.js
+++ b/packages/ember-routing/tests/system/router_test.js
@@ -1,20 +1,25 @@
-import assign from 'ember-metal/assign';
-import Registry from 'container/registry';
import HashLocation from 'ember-routing/location/hash_location';
import HistoryLocation from 'ember-routing/location/history_location';
import AutoLocation from 'ember-routing/location/auto_location';
import NoneLocation from 'ember-routing/location/none_location';
import Router from 'ember-routing/system/router';
import { runDestroy } from 'ember-runtime/tests/utils';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { setOwner } from 'container/owner';
-var registry, container;
+var owner;
-function createRouter(overrides, disableSetup) {
- var opts = assign({ container: container }, overrides);
- var routerWithContainer = Router.extend();
- var router = routerWithContainer.create(opts);
+function createRouter(settings, options) {
+ options = options || {};
- if (!disableSetup) {
+ var CustomRouter = Router.extend();
+ var router = CustomRouter.create(settings);
+
+ if (!options.skipOwner) {
+ setOwner(router, owner);
+ }
+
+ if (!options.disableSetup) {
router.setupRouter();
}
@@ -23,35 +28,34 @@ function createRouter(overrides, disableSetup) {
QUnit.module('Ember Router', {
setup() {
- registry = new Registry();
- container = registry.container();
+ owner = buildOwner();
//register the HashLocation (the default)
- registry.register('location:hash', HashLocation);
- registry.register('location:history', HistoryLocation);
- registry.register('location:auto', AutoLocation);
- registry.register('location:none', NoneLocation);
+ owner.register('location:hash', HashLocation);
+ owner.register('location:history', HistoryLocation);
+ owner.register('location:auto', AutoLocation);
+ owner.register('location:none', NoneLocation);
},
teardown() {
- runDestroy(container);
- registry = container = null;
+ runDestroy(owner);
+ owner = null;
}
});
-QUnit.test('can create a router without a container', function() {
- createRouter({ container: null }, true);
+QUnit.test('can create a router without an owner', function() {
+ createRouter(null, { disableSetup: true, skipOwner: true });
ok(true, 'no errors were thrown when creating without a container');
});
QUnit.test('should not create a router.js instance upon init', function() {
- var router = createRouter(null, true);
+ var router = createRouter(null, { disableSetup: true });
ok(!router.router);
});
QUnit.test('should not reify location until setupRouter is called', function() {
- var router = createRouter(null, true);
+ var router = createRouter(null, { disableSetup: true });
equal(typeof router.location, 'string', 'location is specified as a string');
router.setupRouter();
@@ -59,11 +63,11 @@ QUnit.test('should not reify location until setupRouter is called', function() {
equal(typeof router.location, 'object', 'location is reified into an object');
});
-QUnit.test('should destroy its location upon destroying the routers container.', function() {
+QUnit.test('should destroy its location upon destroying the routers owner.', function() {
var router = createRouter();
var location = router.get('location');
- runDestroy(container);
+ runDestroy(owner);
ok(location.isDestroyed, 'location should be destroyed');
});
@@ -80,7 +84,7 @@ QUnit.test('should instantiate its location with its `rootURL`', function() {
QUnit.test('replacePath should be called with the right path', function() {
expect(1);
- var location = container.lookup('location:auto');
+ var location = owner.lookup('location:auto');
var browserLocation = {
href: 'http://test.com/rootdir/welcome',
@@ -139,10 +143,9 @@ QUnit.test('Router should cancel routing setup when the Location class says so v
create() { return this; }
};
- registry.register('location:fake', FakeLocation);
+ owner.register('location:fake', FakeLocation);
router = createRouter({
- container: container,
location: 'fake',
_setupRouter() {
@@ -156,7 +159,7 @@ QUnit.test('Router should cancel routing setup when the Location class says so v
QUnit.test('AutoLocation should replace the url when it\'s not in the preferred format', function() {
expect(1);
- var location = container.lookup('location:auto');
+ var location = owner.lookup('location:auto');
location.location = {
href: 'http://test.com/rootdir/welcome',
@@ -183,8 +186,6 @@ QUnit.test('Router#handleURL should remove any #hashes before doing URL transiti
expect(2);
var router = createRouter({
- container: container,
-
_doURLTransition(routerJsMethod, url) {
equal(routerJsMethod, 'handleURL');
equal(url, '/foo/bar?time=morphin');
diff --git a/packages/ember-runtime/lib/main.js b/packages/ember-runtime/lib/main.js
index fe90033c31e..90b1e5e2d87 100644
--- a/packages/ember-runtime/lib/main.js
+++ b/packages/ember-runtime/lib/main.js
@@ -12,7 +12,7 @@ import inject from 'ember-runtime/inject';
import Namespace from 'ember-runtime/system/namespace';
import EmberObject from 'ember-runtime/system/object';
-import { Container, Registry } from 'ember-runtime/system/container';
+import { Container, Registry, getOwner, setOwner } from 'ember-runtime/system/container';
import ArrayProxy from 'ember-runtime/system/array_proxy';
import ObjectProxy from 'ember-runtime/system/object_proxy';
import CoreObject from 'ember-runtime/system/core_object';
@@ -67,6 +67,8 @@ import 'ember-runtime/ext/string'; // just for side effect of extending String
import 'ember-runtime/ext/function'; // just for side effect of extending Function.prototype
import { isArray, typeOf } from 'ember-runtime/utils';
+
+import isEnabled from 'ember-metal/features';
// END IMPORTS
// BEGIN EXPORTS
@@ -117,6 +119,12 @@ Ember.String = EmberStringUtils;
Ember.Object = EmberObject;
Ember.Container = Container;
Ember.Registry = Registry;
+
+if (isEnabled('ember-container-inject-owner')) {
+ Ember.getOwner = getOwner;
+ Ember.setOwner = setOwner;
+}
+
Ember.Namespace = Namespace;
Ember.Enumerable = Enumerable;
Ember.ArrayProxy = ArrayProxy;
diff --git a/packages/ember-runtime/lib/mixins/controller.js b/packages/ember-runtime/lib/mixins/controller.js
index 0ab93efe933..6a2e8bfc981 100644
--- a/packages/ember-runtime/lib/mixins/controller.js
+++ b/packages/ember-runtime/lib/mixins/controller.js
@@ -34,8 +34,6 @@ export default Mixin.create(ActionHandler, ControllerContentModelAliasDeprecatio
*/
target: null,
- container: null,
-
parentController: null,
store: null,
diff --git a/packages/ember-runtime/lib/system/container.js b/packages/ember-runtime/lib/system/container.js
index ca969582880..d620d9fbe24 100644
--- a/packages/ember-runtime/lib/system/container.js
+++ b/packages/ember-runtime/lib/system/container.js
@@ -1,8 +1,9 @@
import { set } from 'ember-metal/property_set';
import Registry from 'container/registry';
import Container from 'container/container';
+import { getOwner, setOwner } from 'container/owner';
Registry.set = set;
Container.set = set;
-export { Registry, Container };
+export { Registry, Container, getOwner, setOwner };
diff --git a/packages/ember-runtime/tests/controllers/controller_test.js b/packages/ember-runtime/tests/controllers/controller_test.js
index c81a7260b9d..6eb47164f37 100644
--- a/packages/ember-runtime/tests/controllers/controller_test.js
+++ b/packages/ember-runtime/tests/controllers/controller_test.js
@@ -4,9 +4,9 @@ import Controller from 'ember-runtime/controllers/controller';
import Service from 'ember-runtime/system/service';
import Mixin from 'ember-metal/mixin';
import Object from 'ember-runtime/system/object';
-import { Registry } from 'ember-runtime/system/container';
import inject from 'ember-runtime/inject';
import { get } from 'ember-metal/property_get';
+import buildOwner from 'container/tests/test-helpers/build-owner';
QUnit.module('Controller event handling');
@@ -35,7 +35,7 @@ QUnit.test('Action can be handled by a function on actions object', function() {
}
}
});
- var controller = TestController.create({});
+ var controller = TestController.create();
controller.send('poke');
});
@@ -155,49 +155,45 @@ QUnit.module('Controller injected properties');
if (!EmberDev.runningProdBuild) {
QUnit.test('defining a controller on a non-controller should fail assertion', function() {
expectAssertion(function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
var AnObject = Object.extend({
- container: container,
foo: inject.controller('bar')
});
- registry.register('foo:main', AnObject);
+ owner.register('foo:main', AnObject);
- container.lookupFactory('foo:main');
+ owner._lookupFactory('foo:main');
}, /Defining an injected controller property on a non-controller is not allowed./);
});
}
QUnit.test('controllers can be injected into controllers', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('controller:post', Controller.extend({
+ owner.register('controller:post', Controller.extend({
postsController: inject.controller('posts')
}));
- registry.register('controller:posts', Controller.extend());
+ owner.register('controller:posts', Controller.extend());
- var postController = container.lookup('controller:post');
- var postsController = container.lookup('controller:posts');
+ var postController = owner.lookup('controller:post');
+ var postsController = owner.lookup('controller:posts');
equal(postsController, postController.get('postsController'), 'controller.posts is injected');
});
QUnit.test('services can be injected into controllers', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('controller:application', Controller.extend({
+ owner.register('controller:application', Controller.extend({
authService: inject.service('auth')
}));
- registry.register('service:auth', Service.extend());
+ owner.register('service:auth', Service.extend());
- var appController = container.lookup('controller:application');
- var authService = container.lookup('service:auth');
+ var appController = owner.lookup('controller:application');
+ var authService = owner.lookup('service:auth');
equal(authService, appController.get('authService'), 'service.auth is injected');
});
diff --git a/packages/ember-runtime/tests/inject_test.js b/packages/ember-runtime/tests/inject_test.js
index 4e8917f23a0..7a28c430c3a 100644
--- a/packages/ember-runtime/tests/inject_test.js
+++ b/packages/ember-runtime/tests/inject_test.js
@@ -5,8 +5,8 @@ import inject from 'ember-runtime/inject';
import {
createInjectionHelper
} from 'ember-runtime/inject';
-import { Registry } from 'ember-runtime/system/container';
import Object from 'ember-runtime/system/object';
+import buildOwner from 'container/tests/test-helpers/build-owner';
QUnit.module('inject');
@@ -26,32 +26,28 @@ if (!EmberDev.runningProdBuild) {
ok(true, 'should call validation method');
});
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
var AnObject = Object.extend({
- container: container,
bar: inject.foo(),
baz: inject.foo()
});
- registry.register('foo:main', AnObject);
- container.lookupFactory('foo:main');
+ owner.register('foo:main', AnObject);
+ owner._lookupFactory('foo:main');
});
}
QUnit.test('attempting to inject a nonexistent container key should error', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
var AnObject = Object.extend({
- container: container,
foo: new InjectedProperty('bar', 'baz')
});
- registry.register('foo:main', AnObject);
+ owner.register('foo:main', AnObject);
throws(function() {
- container.lookup('foo:main');
+ owner.lookup('foo:main');
}, /Attempting to inject an unknown injection: `bar:baz`/);
});
diff --git a/packages/ember-views/lib/component_lookup.js b/packages/ember-views/lib/component_lookup.js
index 43c2f95530e..43400afc46c 100644
--- a/packages/ember-views/lib/component_lookup.js
+++ b/packages/ember-views/lib/component_lookup.js
@@ -2,6 +2,7 @@ import Ember from 'ember-metal/core';
import { assert } from 'ember-metal/debug';
import EmberObject from 'ember-runtime/system/object';
import { CONTAINS_DASH_CACHE } from 'ember-htmlbars/system/lookup-helper';
+import { getOwner } from 'container/owner';
export default EmberObject.extend({
invalidName(name) {
@@ -11,45 +12,45 @@ export default EmberObject.extend({
}
},
- lookupFactory(name, container) {
- container = container || this.container;
+ lookupFactory(name, owner) {
+ owner = owner || getOwner(this);
var fullName = 'component:' + name;
var templateFullName = 'template:components/' + name;
- var templateRegistered = container && container.registry.has(templateFullName);
+ var templateRegistered = owner && owner.hasRegistration(templateFullName);
if (templateRegistered) {
- container.registry.injection(fullName, 'layout', templateFullName);
+ owner.inject(fullName, 'layout', templateFullName);
}
- var Component = container.lookupFactory(fullName);
+ var Component = owner._lookupFactory(fullName);
// Only treat as a component if either the component
// or a template has been registered.
if (templateRegistered || Component) {
if (!Component) {
- container.registry.register(fullName, Ember.Component);
- Component = container.lookupFactory(fullName);
+ owner.register(fullName, Ember.Component);
+ Component = owner._lookupFactory(fullName);
}
return Component;
}
},
- componentFor(name, container) {
+ componentFor(name, owner) {
if (this.invalidName(name)) {
return;
}
var fullName = 'component:' + name;
- return container.lookupFactory(fullName);
+ return owner._lookupFactory(fullName);
},
- layoutFor(name, container) {
+ layoutFor(name, owner) {
if (this.invalidName(name)) {
return;
}
var templateFullName = 'template:components/' + name;
- return container.lookup(templateFullName);
+ return owner.lookup(templateFullName);
}
});
diff --git a/packages/ember-views/lib/components/component.js b/packages/ember-views/lib/components/component.js
index 0da49c3baea..3796fe0b925 100644
--- a/packages/ember-views/lib/components/component.js
+++ b/packages/ember-views/lib/components/component.js
@@ -12,6 +12,8 @@ import { computed } from 'ember-metal/computed';
import { MUTABLE_CELL } from 'ember-views/compat/attrs-proxy';
+import { getOwner } from 'container/owner';
+
function validateAction(component, actionName) {
if (actionName && actionName[MUTABLE_CELL]) {
actionName = actionName.value;
@@ -136,7 +138,7 @@ var Component = View.extend(TargetActionSupport, {
set(this, 'controller', this);
set(this, 'context', this);
- if (!this.layout && this.layoutName && this.container) {
+ if (!this.layout && this.layoutName && getOwner(this)) {
let layoutName = get(this, 'layoutName');
this.layout = this.templateForName(layoutName);
diff --git a/packages/ember-views/lib/mixins/legacy_child_views_support.js b/packages/ember-views/lib/mixins/legacy_child_views_support.js
index c4fc6fe4501..e8d9844ad64 100644
--- a/packages/ember-views/lib/mixins/legacy_child_views_support.js
+++ b/packages/ember-views/lib/mixins/legacy_child_views_support.js
@@ -1,10 +1,11 @@
import { Mixin } from 'ember-metal/mixin';
import { get } from 'ember-metal/property_get';
import { set } from 'ember-metal/property_set';
+import { getOwner, setOwner } from 'container/owner';
export default Mixin.create({
linkChild(instance) {
- instance.container = this.container;
+ setOwner(instance, getOwner(this));
if (get(instance, 'parentView') !== this) {
// linkChild should be idempotent
set(instance, 'parentView', this);
diff --git a/packages/ember-views/lib/mixins/view_child_views_support.js b/packages/ember-views/lib/mixins/view_child_views_support.js
index 1b4cbfeac21..1ab265d02ab 100644
--- a/packages/ember-views/lib/mixins/view_child_views_support.js
+++ b/packages/ember-views/lib/mixins/view_child_views_support.js
@@ -8,6 +8,7 @@ import { get } from 'ember-metal/property_get';
import { set } from 'ember-metal/property_set';
import setProperties from 'ember-metal/set_properties';
import { A as emberA } from 'ember-runtime/system/native_array';
+import { getOwner, setOwner } from 'container/owner';
var EMPTY_ARRAY = [];
@@ -85,7 +86,9 @@ export default Mixin.create({
throw new TypeError('createChildViews first argument must exist');
}
- if (maybeViewClass.isView && maybeViewClass.parentView === this && maybeViewClass.container === this.container) {
+ const owner = getOwner(this);
+
+ if (maybeViewClass.isView && maybeViewClass.parentView === this && getOwner(maybeViewClass) === owner) {
return maybeViewClass;
}
@@ -97,7 +100,7 @@ export default Mixin.create({
attrs._viewRegistry = this._viewRegistry;
if (maybeViewClass.isViewFactory) {
- attrs.container = this.container;
+ setOwner(attrs, owner);
view = maybeViewClass.create(attrs);
@@ -106,7 +109,7 @@ export default Mixin.create({
}
} else if ('string' === typeof maybeViewClass) {
var fullName = 'view:' + maybeViewClass;
- var ViewKlass = this.container.lookupFactory(fullName);
+ var ViewKlass = owner._lookupFactory(fullName);
assert('Could not find view: \'' + fullName + '\'', !!ViewKlass);
@@ -115,7 +118,7 @@ export default Mixin.create({
view = maybeViewClass;
assert('You must pass instance or subclass of View', view.isView);
- attrs.container = this.container;
+ setOwner(attrs, owner);
setProperties(view, attrs);
}
@@ -125,7 +128,7 @@ export default Mixin.create({
},
linkChild(instance) {
- instance.container = this.container;
+ setOwner(instance, getOwner(this));
instance.parentView = this;
instance.ownerView = this.ownerView;
},
diff --git a/packages/ember-views/lib/mixins/view_support.js b/packages/ember-views/lib/mixins/view_support.js
index f3fdedc1152..b75cd161663 100644
--- a/packages/ember-views/lib/mixins/view_support.js
+++ b/packages/ember-views/lib/mixins/view_support.js
@@ -9,6 +9,7 @@ import { Mixin } from 'ember-metal/mixin';
import { POST_INIT } from 'ember-runtime/system/core_object';
import isEnabled from 'ember-metal/features';
import { symbol } from 'ember-metal/utils';
+import { getOwner } from 'container/owner';
const INIT_WAS_CALLED = symbol('INIT_WAS_CALLED');
@@ -117,13 +118,15 @@ export default Mixin.create({
if (!name) { return; }
assert('templateNames are not allowed to contain periods: ' + name, name.indexOf('.') === -1);
- if (!this.container) {
+ const owner = getOwner(this);
+
+ if (!owner) {
throw new EmberError('Container was not found when looking up a views template. ' +
'This is most likely due to manually instantiating an Ember.View. ' +
'See: http://git.io/EKPpnA');
}
- return this.container.lookup('template:' + name);
+ return owner.lookup('template:' + name);
},
/**
diff --git a/packages/ember-views/lib/streams/utils.js b/packages/ember-views/lib/streams/utils.js
index 6de4280857b..5ab3e569121 100644
--- a/packages/ember-views/lib/streams/utils.js
+++ b/packages/ember-views/lib/streams/utils.js
@@ -3,13 +3,13 @@ import { get } from 'ember-metal/property_get';
import { read, isStream } from 'ember-metal/streams/utils';
import ControllerMixin from 'ember-runtime/mixins/controller';
-export function readViewFactory(object, container) {
+export function readViewFactory(object, owner) {
var value = read(object);
var viewClass;
if (typeof value === 'string') {
- assert('View requires a container to resolve views not passed in through the context', !!container);
- viewClass = container.lookupFactory('view:' + value);
+ assert('View requires an owner to resolve views not passed in through the context', !!owner);
+ viewClass = owner._lookupFactory('view:' + value);
} else {
viewClass = value;
}
@@ -21,16 +21,16 @@ export function readViewFactory(object, container) {
return viewClass;
}
-export function readComponentFactory(nameOrStream, container) {
+export function readComponentFactory(nameOrStream, owner) {
var name = read(nameOrStream);
- var componentLookup = container.lookup('component-lookup:main');
+ var componentLookup = owner.lookup('component-lookup:main');
assert(
'Could not find \'component-lookup:main\' on the provided container, ' +
'which is necessary for performing component lookups',
componentLookup
);
- return componentLookup.lookupFactory(name, container);
+ return componentLookup.lookupFactory(name, owner);
}
export function readUnwrappedModel(object) {
diff --git a/packages/ember-views/lib/system/event_dispatcher.js b/packages/ember-views/lib/system/event_dispatcher.js
index bb7352d078b..2503a59817d 100644
--- a/packages/ember-views/lib/system/event_dispatcher.js
+++ b/packages/ember-views/lib/system/event_dispatcher.js
@@ -13,6 +13,7 @@ import jQuery from 'ember-views/system/jquery';
import ActionManager from 'ember-views/system/action_manager';
import View from 'ember-views/views/view';
import assign from 'ember-metal/assign';
+import { getOwner } from 'container/owner';
let ROOT_ELEMENT_CLASS = 'ember-application';
let ROOT_ELEMENT_SELECTOR = '.' + ROOT_ELEMENT_CLASS;
@@ -188,7 +189,9 @@ export default EmberObject.extend({
*/
setupHandler(rootElement, event, eventName) {
var self = this;
- var viewRegistry = this.container && this.container.lookup('-view-registry:main') || View.views;
+
+ const owner = getOwner(this);
+ const viewRegistry = owner && owner.lookup('-view-registry:main') || View.views;
if (eventName === null) {
return;
diff --git a/packages/ember-views/lib/system/lookup_partial.js b/packages/ember-views/lib/system/lookup_partial.js
index a1518dc9d41..abadf21a9e7 100644
--- a/packages/ember-views/lib/system/lookup_partial.js
+++ b/packages/ember-views/lib/system/lookup_partial.js
@@ -24,11 +24,11 @@ function templateFor(env, underscored, name) {
if (!name) { return; }
assert('templateNames are not allowed to contain periods: ' + name, name.indexOf('.') === -1);
- if (!env.container) {
+ if (!env.owner) {
throw new EmberError('Container was not found when looking up a views template. ' +
'This is most likely due to manually instantiating an Ember.View. ' +
'See: http://git.io/EKPpnA');
}
- return env.container.lookup('template:' + underscored) || env.container.lookup('template:' + name);
+ return env.owner.lookup('template:' + underscored) || env.owner.lookup('template:' + name);
}
diff --git a/packages/ember-views/lib/views/collection_view.js b/packages/ember-views/lib/views/collection_view.js
index d507a1b19c7..25a9ed15298 100644
--- a/packages/ember-views/lib/views/collection_view.js
+++ b/packages/ember-views/lib/views/collection_view.js
@@ -14,6 +14,7 @@ import { computed } from 'ember-metal/computed';
import { observer } from 'ember-metal/mixin';
import { readViewFactory } from 'ember-views/streams/utils';
import EmptyViewSupport from 'ember-views/mixins/empty_view_support';
+import { getOwner } from 'container/owner';
/**
`Ember.CollectionView` is an `Ember.View` descendent responsible for managing
@@ -311,7 +312,7 @@ var CollectionView = ContainerView.extend(EmptyViewSupport, {
itemViewProps = this._itemViewProps || {};
itemViewClass = this.getAttr('itemViewClass') || get(this, 'itemViewClass');
- itemViewClass = readViewFactory(itemViewClass, this.container);
+ itemViewClass = readViewFactory(itemViewClass, getOwner(this));
for (idx = start; idx < start + added; idx++) {
item = content.objectAt(idx);
diff --git a/packages/ember-views/tests/compat/attrs_proxy_test.js b/packages/ember-views/tests/compat/attrs_proxy_test.js
index 01127f58447..acf68a49850 100644
--- a/packages/ember-views/tests/compat/attrs_proxy_test.js
+++ b/packages/ember-views/tests/compat/attrs_proxy_test.js
@@ -1,40 +1,40 @@
import View from 'ember-views/views/view';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import compile from 'ember-template-compiler/system/compile';
-import Registry from 'container/registry';
import run from 'ember-metal/run_loop';
import { set } from 'ember-metal/property_set';
import { get } from 'ember-metal/property_get';
import { observer } from 'ember-metal/mixin';
import { on } from 'ember-metal/events';
-
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var view, registry, container, originalViewKeyword;
+var view, owner, originalViewKeyword;
QUnit.module('ember-views: attrs-proxy', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- registry = new Registry();
- container = registry.container();
+ owner = buildOwner();
},
teardown() {
runDestroy(view);
+ runDestroy(owner);
resetKeyword('view', originalViewKeyword);
}
});
QUnit.test('works with properties setup in root of view', function() {
- registry.register('view:foo', View.extend({
+ owner.register('view:foo', View.extend({
bar: 'qux',
template: compile('{{view.bar}}')
}));
view = View.extend({
- container: registry.container(),
+ [OWNER]: owner,
template: compile('{{view "foo" bar="baz"}}')
}).create();
@@ -48,7 +48,7 @@ QUnit.test('works with undefined attributes', function() {
// expectDeprecation();
var childView;
- registry.register('view:foo', View.extend({
+ owner.register('view:foo', View.extend({
init: function() {
this._super(...arguments);
@@ -59,8 +59,7 @@ QUnit.test('works with undefined attributes', function() {
}));
view = View.extend({
- container: registry.container(),
-
+ [OWNER]: owner,
template: compile('{{view "foo" bar=undefined}}')
}).create();
@@ -78,7 +77,7 @@ QUnit.test('works with undefined attributes', function() {
QUnit.test('an observer on an attribute in the root of the component is fired when attrs are set', function() {
expect(2);
- registry.register('view:foo', View.extend({
+ owner.register('view:foo', View.extend({
observerFiredCount: 0,
barObserver: on('init', observer('bar', function() {
@@ -90,7 +89,7 @@ QUnit.test('an observer on an attribute in the root of the component is fired wh
}));
view = View.extend({
- container: registry.container(),
+ [OWNER]: owner,
baz: 'baz',
template: compile('{{view "foo" bar=view.baz}}')
}).create();
diff --git a/packages/ember-views/tests/views/collection_test.js b/packages/ember-views/tests/views/collection_test.js
index 9a540d68db1..f5cc0f0d348 100644
--- a/packages/ember-views/tests/views/collection_test.js
+++ b/packages/ember-views/tests/views/collection_test.js
@@ -1,20 +1,22 @@
import Ember from 'ember-metal/core'; // Ember.A
import { set } from 'ember-metal/property_set';
import run from 'ember-metal/run_loop';
+import { runDestroy } from 'ember-runtime/tests/utils';
import { Mixin } from 'ember-metal/mixin';
import jQuery from 'ember-views/system/jquery';
import CollectionView, { DeprecatedCollectionView } from 'ember-views/views/collection_view';
import View from 'ember-views/views/view';
-import Registry from 'container/registry';
import compile from 'ember-template-compiler/system/compile';
import getElementStyle from 'ember-views/tests/test-helpers/get-element-style';
import { A as emberA } from 'ember-runtime/system/native_array';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
var trim = jQuery.trim;
-var registry;
+var owner;
var view;
var originalLookup, originalViewKeyword;
@@ -24,13 +26,12 @@ QUnit.module('CollectionView', {
CollectionView.CONTAINER_MAP.del = 'em';
originalViewKeyword = registerKeyword('view', viewKeyword);
originalLookup = Ember.lookup;
- registry = new Registry();
+ owner = buildOwner();
},
teardown() {
delete CollectionView.CONTAINER_MAP.del;
- run(function() {
- if (view) { view.destroy(); }
- });
+ runDestroy(view);
+ runDestroy(owner);
Ember.lookup = originalLookup;
resetKeyword('view', originalViewKeyword);
@@ -467,14 +468,15 @@ QUnit.test('should allow items to access to the CollectionView\'s current index
});
QUnit.test('should allow declaration of itemViewClass as a string', function() {
- registry.register('view:simple-view', View.extend());
+ owner.register('view:simple-view', View.extend());
view = CollectionView.create({
- container: registry.container(),
- content: emberA([1, 2, 3]),
+ [OWNER]: owner,
itemViewClass: 'simple-view'
});
+ view.set('content', emberA([1, 2, 3]));
+
run(function() {
view.appendTo('#qunit-fixture');
});
@@ -530,7 +532,6 @@ QUnit.test('when a collection view is emptied, deeply nested views elements are
itemViewClass: ChildView
});
-
run(function() {
view.append();
});
@@ -549,16 +550,15 @@ QUnit.test('when a collection view is emptied, deeply nested views elements are
});
QUnit.test('should render the emptyView if content array is empty and emptyView is given as string', function() {
- registry.register('view:custom-empty', View.extend({
+ owner.register('view:custom-empty', View.extend({
tagName: 'kbd',
template: compile('THIS IS AN EMPTY VIEW')
}));
view = CollectionView.create({
+ [OWNER]: owner,
tagName: 'del',
content: emberA(),
- container: registry.container(),
-
emptyView: 'custom-empty'
});
@@ -574,14 +574,15 @@ QUnit.test('should lookup against the container if itemViewClass is given as a s
template: compile('{{view.content}}')
});
- registry.register('view:item', ItemView);
+ owner.register('view:item', ItemView);
view = CollectionView.create({
- container: registry.container(),
- content: emberA([1, 2, 3, 4]),
+ [OWNER]: owner,
itemViewClass: 'item'
});
+ view.set('content', emberA([1, 2, 3, 4]));
+
run(function() {
view.appendTo('#qunit-fixture');
});
@@ -594,14 +595,15 @@ QUnit.test('should lookup only global path against the container if itemViewClas
template: compile('{{view.content}}')
});
- registry.register('view:top', ItemView);
+ owner.register('view:top', ItemView);
view = CollectionView.create({
- container: registry.container(),
- content: emberA(['hi']),
+ [OWNER]: owner,
itemViewClass: 'top'
});
+ view.set('content', emberA(['hi']));
+
run(function() {
view.appendTo('#qunit-fixture');
});
@@ -615,10 +617,10 @@ QUnit.test('should lookup against the container and render the emptyView if empt
template: compile('THIS IS AN EMPTY VIEW')
});
- registry.register('view:empty', EmptyView);
+ owner.register('view:empty', EmptyView);
view = CollectionView.create({
- container: registry.container(),
+ [OWNER]: owner,
tagName: 'del',
content: emberA(),
emptyView: 'empty'
@@ -636,10 +638,10 @@ QUnit.test('should lookup from only global path against the container if emptyVi
template: compile('EMPTY')
});
- registry.register('view:top', EmptyView);
+ owner.register('view:top', EmptyView);
view = CollectionView.create({
- container: registry.container(),
+ [OWNER]: owner,
content: emberA(),
emptyView: 'top'
});
diff --git a/packages/ember-views/tests/views/component_test.js b/packages/ember-views/tests/views/component_test.js
index 53e96518197..7afb298d532 100644
--- a/packages/ember-views/tests/views/component_test.js
+++ b/packages/ember-views/tests/views/component_test.js
@@ -2,7 +2,6 @@ import { set } from 'ember-metal/property_set';
import run from 'ember-metal/run_loop';
import EmberObject from 'ember-runtime/system/object';
import Service from 'ember-runtime/system/service';
-import { Registry } from 'ember-runtime/system/container';
import inject from 'ember-runtime/inject';
import { get } from 'ember-metal/property_get';
import Application from 'ember-application/system/application';
@@ -13,6 +12,7 @@ import EmberView from 'ember-views/views/view';
import Component from 'ember-views/components/component';
import { MUTABLE_CELL } from 'ember-views/compat/attrs-proxy';
+import buildOwner from 'container/tests/test-helpers/build-owner';
var a_slice = Array.prototype.slice;
@@ -231,17 +231,16 @@ QUnit.test('Calling sendAction on a component with multiple parameters', functio
QUnit.module('Ember.Component - injected properties');
QUnit.test('services can be injected into components', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('component:application', Component.extend({
+ owner.register('component:application', Component.extend({
profilerService: inject.service('profiler')
}));
- registry.register('service:profiler', Service.extend());
+ owner.register('service:profiler', Service.extend());
- var appComponent = container.lookup('component:application');
- var profilerService = container.lookup('service:profiler');
+ var appComponent = owner.lookup('component:application');
+ var profilerService = owner.lookup('service:profiler');
equal(profilerService, appComponent.get('profilerService'), 'service.profiler is injected');
});
diff --git a/packages/ember-views/tests/views/container_view_test.js b/packages/ember-views/tests/views/container_view_test.js
index 877ff010026..a3eaa7263b6 100644
--- a/packages/ember-views/tests/views/container_view_test.js
+++ b/packages/ember-views/tests/views/container_view_test.js
@@ -6,20 +6,20 @@ import Controller from 'ember-runtime/controllers/controller';
import jQuery from 'ember-views/system/jquery';
import View from 'ember-views/views/view';
import ContainerView, { DeprecatedContainerView } from 'ember-views/views/container_view';
-import Registry from 'container/registry';
import compile from 'ember-template-compiler/system/compile';
import getElementStyle from 'ember-views/tests/test-helpers/get-element-style';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { getOwner, OWNER } from 'container/owner';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
var trim = jQuery.trim;
-var container, registry, view, otherContainer, originalViewKeyword;
+var container, view, otherContainer, originalViewKeyword;
QUnit.module('Ember.ContainerView', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- registry = new Registry();
},
teardown() {
run(function() {
@@ -32,10 +32,12 @@ QUnit.module('Ember.ContainerView', {
});
QUnit.test('should be able to insert views after the DOM representation is created', function() {
+ const owner = buildOwner();
+
container = ContainerView.create({
+ [OWNER]: owner,
classNameBindings: ['name'],
- name: 'foo',
- container: registry.container()
+ name: 'foo'
});
run(function() {
@@ -50,7 +52,7 @@ QUnit.test('should be able to insert views after the DOM representation is creat
container.pushObject(view);
});
- equal(view.container, container.container, 'view gains its containerViews container');
+ equal(getOwner(view), owner, 'view gains its containerView\'s owner');
equal(view.parentView, container, 'view\'s parentView is the container');
equal(trim(container.$().text()), 'This is my moment');
@@ -84,15 +86,15 @@ QUnit.test('should be able to observe properties that contain child views', func
equal(container.get('displayIsDisplayed'), false, 'can bind to child view');
});
-QUnit.test('childViews inherit their parents iocContainer, and retain the original container even when moved', function() {
- var iocContainer = registry.container();
+QUnit.test('childViews inherit their parents owner, and retain the original container even when moved', function() {
+ const owner = buildOwner();
container = ContainerView.create({
- container: iocContainer
+ [OWNER]: owner
});
otherContainer = ContainerView.create({
- container: iocContainer
+ [OWNER]: owner
});
view = View.create();
@@ -100,16 +102,16 @@ QUnit.test('childViews inherit their parents iocContainer, and retain the origin
container.pushObject(view);
strictEqual(view.get('parentView'), container, 'sets the parent view after the childView is appended');
- strictEqual(get(view, 'container'), container.container, 'inherits its parentViews iocContainer');
+ strictEqual(getOwner(view), owner, 'inherits its parentViews owner');
container.removeObject(view);
- strictEqual(get(view, 'container'), container.container, 'leaves existing iocContainer alone');
+ strictEqual(getOwner(view), owner, 'leaves existing owner alone');
otherContainer.pushObject(view);
strictEqual(view.get('parentView'), otherContainer, 'sets the new parent view after the childView is appended');
- strictEqual(get(view, 'container'), container.container, 'still inherits its original parentViews iocContainer');
+ strictEqual(getOwner(view), owner, 'still inherits its original parentViews owner');
});
QUnit.test('should set the parentView property on views that are added to the child views array', function() {
@@ -460,7 +462,6 @@ var child, count;
QUnit.module('Ember.ContainerView - modify childViews', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- registry = new Registry();
container = ContainerView.create({
_viewRegistry: { }
});
@@ -620,7 +621,6 @@ QUnit.test('should be able to modify childViews then rerender again the Containe
QUnit.module('Ember.ContainerView', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- registry = new Registry();
},
teardown() {
run(function() {
diff --git a/packages/ember-views/tests/views/view/child_views_test.js b/packages/ember-views/tests/views/view/child_views_test.js
index dc2fcf42f2e..abd068517a0 100644
--- a/packages/ember-views/tests/views/view/child_views_test.js
+++ b/packages/ember-views/tests/views/view/child_views_test.js
@@ -6,6 +6,7 @@ import { A as emberA } from 'ember-runtime/system/native_array';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
+import { setOwner } from 'container/owner';
var originalViewKeyword;
var parentView, childView;
@@ -80,19 +81,6 @@ QUnit.test('should remove childViews inside {{if}} on destroy', function() {
var outerView = EmberView.extend({
component: 'my-thing',
value: false,
- container: {
- lookup() {
- return {
- componentFor() {
- return Component.extend();
- },
-
- layoutFor() {
- return null;
- }
- };
- }
- },
template: compile(`
{{#if view.value}}
{{component view.component value=view.value}}
@@ -100,6 +88,20 @@ QUnit.test('should remove childViews inside {{if}} on destroy', function() {
`)
}).create();
+ setOwner(outerView, {
+ lookup() {
+ return {
+ componentFor() {
+ return Component.extend();
+ },
+
+ layoutFor() {
+ return null;
+ }
+ };
+ }
+ });
+
run(outerView, 'append');
run(outerView, 'set', 'value', true);
@@ -121,19 +123,6 @@ QUnit.test('should remove childViews inside {{each}} on destroy', function() {
this._super(...arguments);
this.value = false;
},
- container: {
- lookup() {
- return {
- componentFor() {
- return Component.extend();
- },
-
- layoutFor() {
- return null;
- }
- };
- }
- },
template: compile(`
{{#if view.value}}
{{#each view.data as |item|}}
@@ -143,6 +132,20 @@ QUnit.test('should remove childViews inside {{each}} on destroy', function() {
`)
}).create();
+ setOwner(outerView, {
+ lookup() {
+ return {
+ componentFor() {
+ return Component.extend();
+ },
+
+ layoutFor() {
+ return null;
+ }
+ };
+ }
+ });
+
run(outerView, 'append');
equal(outerView.get('childViews.length'), 0);
diff --git a/packages/ember-views/tests/views/view/create_child_view_test.js b/packages/ember-views/tests/views/view/create_child_view_test.js
index b541490befa..1abf84a3a8c 100644
--- a/packages/ember-views/tests/views/view/create_child_view_test.js
+++ b/packages/ember-views/tests/views/view/create_child_view_test.js
@@ -6,16 +6,16 @@ import { observer } from 'ember-metal/mixin';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
+import { getOwner, OWNER } from 'container/owner';
-var view, myViewClass, newView, container, originalViewKeyword;
+var view, myViewClass, newView, owner, originalViewKeyword;
QUnit.module('EmberView#createChildView', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- container = { };
-
+ owner = {};
view = EmberView.create({
- container: container
+ [OWNER]: owner
});
myViewClass = EmberView.extend({ isMyView: true, foo: 'bar' });
@@ -37,7 +37,7 @@ QUnit.test('should create view from class with any passed attributes', function(
newView = view.createChildView(myViewClass, attrs);
- equal(newView.container, container, 'expects to share container with parent');
+ equal(getOwner(newView), owner, 'expects to share container with parent');
ok(get(newView, 'isMyView'), 'newView is instance of myView');
equal(get(newView, 'foo'), 'baz', 'view did get custom attributes');
});
@@ -67,7 +67,7 @@ QUnit.test('creating a childView, (via createChildView) should make parentView i
QUnit.test('should set newView.parentView to receiver', function() {
newView = view.createChildView(myViewClass);
- equal(newView.container, container, 'expects to share container with parent');
+ equal(getOwner(newView), owner, 'expects to share container with parent');
equal(get(newView, 'parentView'), view, 'newView.parentView == view');
});
@@ -77,7 +77,7 @@ QUnit.test('should create property on parentView to a childView instance if prov
};
newView = view.createChildView(myViewClass, attrs);
- equal(newView.container, container, 'expects to share container with parent');
+ equal(getOwner(newView), owner, 'expects to share container with parent');
equal(get(view, 'someChildView'), newView);
});
@@ -90,7 +90,7 @@ QUnit.test('should update a view instances attributes, including the parentView
var myView = myViewClass.create();
newView = view.createChildView(myView, attrs);
- equal(newView.container, container, 'expects to share container with parent');
+ equal(getOwner(newView), owner, 'expects to share container with parent');
equal(newView.parentView, view, 'expects to have the correct parent');
equal(get(newView, 'foo'), 'baz', 'view did get custom attributes');
@@ -101,25 +101,22 @@ QUnit.test('should create from string via container lookup', function() {
var ChildViewClass = EmberView.extend();
var fullName = 'view:bro';
- view.container.lookupFactory = function(viewName) {
+ owner._lookupFactory = function(viewName) {
equal(fullName, viewName);
- return ChildViewClass.extend({
- container: container
- });
+ return ChildViewClass.extend();
};
newView = view.createChildView('bro');
- equal(newView.container, container, 'expects to share container with parent');
+ equal(getOwner(newView), owner, 'expects to share container with parent');
equal(newView.parentView, view, 'expects to have the correct parent');
});
QUnit.test('should assert when trying to create childView from string, but no such view is registered', function() {
- view.container.lookupFactory = function() {};
+ owner._lookupFactory = function() {};
expectAssertion(function() {
view.createChildView('bro');
});
});
-
diff --git a/packages/ember-views/tests/views/view/inject_test.js b/packages/ember-views/tests/views/view/inject_test.js
index 7825fbfe984..1f7b87bccaa 100644
--- a/packages/ember-views/tests/views/view/inject_test.js
+++ b/packages/ember-views/tests/views/view/inject_test.js
@@ -1,22 +1,21 @@
import Service from 'ember-runtime/system/service';
-import { Registry } from 'ember-runtime/system/container';
import inject from 'ember-runtime/inject';
import View from 'ember-views/views/view';
+import buildOwner from 'container/tests/test-helpers/build-owner';
QUnit.module('EmberView - injected properties');
QUnit.test('services can be injected into views', function() {
- var registry = new Registry();
- var container = registry.container();
+ const owner = buildOwner();
- registry.register('view:application', View.extend({
+ owner.register('view:application', View.extend({
profilerService: inject.service('profiler')
}));
- registry.register('service:profiler', Service.extend());
+ owner.register('service:profiler', Service.extend());
- var appView = container.lookup('view:application');
- var profilerService = container.lookup('service:profiler');
+ var appView = owner.lookup('view:application');
+ var profilerService = owner.lookup('service:profiler');
equal(profilerService, appView.get('profilerService'), 'service.profiler is injected');
});
diff --git a/packages/ember-views/tests/views/view/layout_test.js b/packages/ember-views/tests/views/view/layout_test.js
index 30c2f8fea02..4ef1ef46f4d 100644
--- a/packages/ember-views/tests/views/view/layout_test.js
+++ b/packages/ember-views/tests/views/view/layout_test.js
@@ -1,32 +1,34 @@
-import Registry from 'container/registry';
import { get } from 'ember-metal/property_get';
import run from 'ember-metal/run_loop';
import EmberView from 'ember-views/views/view';
import { compile } from 'ember-template-compiler';
import { registerHelper } from 'ember-htmlbars/helpers';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var registry, container, view;
+var owner, view;
QUnit.module('EmberView - Layout Functionality', {
setup() {
- registry = new Registry();
- container = registry.container();
- registry.optionsForType('template', { instantiate: false });
+ owner = buildOwner();
+ owner.registerOptionsForType('template', { instantiate: false });
},
teardown() {
run(function() {
view.destroy();
- container.destroy();
+ owner.destroy();
});
- registry = container = view = null;
+ owner = view = null;
}
});
QUnit.test('Layout views return throw if their layout cannot be found', function() {
view = EmberView.create({
- layoutName: 'cantBeFound',
- container: { lookup() { } }
+ [OWNER]: {
+ lookup() { }
+ },
+ layoutName: 'cantBeFound'
});
expectAssertion(function() {
@@ -46,11 +48,11 @@ QUnit.test('should use the template of the associated layout', function() {
layoutCalled++;
});
- registry.register('template:template', compile('{{call-template}}'));
- registry.register('template:layout', compile('{{call-layout}}'));
+ owner.register('template:template', compile('{{call-template}}'));
+ owner.register('template:layout', compile('{{call-layout}}'));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
layoutName: 'layout',
templateName: 'template'
});
@@ -64,14 +66,13 @@ QUnit.test('should use the template of the associated layout', function() {
});
QUnit.test('should use the associated template with itself as the context', function() {
- registry.register('template:testTemplate', compile(
+ owner.register('template:testTemplate', compile(
'
template was called for {{personName}}
'
));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
layoutName: 'testTemplate',
-
context: {
personName: 'Tom DAAAALE'
}
diff --git a/packages/ember-views/tests/views/view/nested_view_ordering_test.js b/packages/ember-views/tests/views/view/nested_view_ordering_test.js
index 54c1b6d5d98..a5fba1b1fea 100644
--- a/packages/ember-views/tests/views/view/nested_view_ordering_test.js
+++ b/packages/ember-views/tests/views/view/nested_view_ordering_test.js
@@ -1,28 +1,26 @@
-import Registry from 'container/registry';
import run from 'ember-metal/run_loop';
-
import EmberView from 'ember-views/views/view';
import compile from 'ember-template-compiler/system/compile';
-
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var registry, container, view;
+var owner, view;
var originalViewKeyword;
QUnit.module('EmberView - Nested View Ordering', {
setup() {
originalViewKeyword = registerKeyword('view', viewKeyword);
- registry = new Registry();
- container = registry.container();
+ owner = buildOwner();
},
teardown() {
run(function() {
if (view) { view.destroy(); }
- container.destroy();
+ owner.destroy();
});
resetKeyword('view', originalViewKeyword);
- registry = container = view = null;
+ owner = view = null;
}
});
@@ -30,14 +28,14 @@ QUnit.test('should call didInsertElement on child views before parent', function
var insertedLast;
view = EmberView.create({
+ [OWNER]: owner,
didInsertElement() {
insertedLast = 'outer';
},
- container: container,
template: compile('{{view "inner"}}')
});
- registry.register('view:inner', EmberView.extend({
+ owner.register('view:inner', EmberView.extend({
didInsertElement() {
insertedLast = 'inner';
}
diff --git a/packages/ember-views/tests/views/view/template_test.js b/packages/ember-views/tests/views/view/template_test.js
index 0cd997b85fa..a6420c01e71 100644
--- a/packages/ember-views/tests/views/view/template_test.js
+++ b/packages/ember-views/tests/views/view/template_test.js
@@ -1,30 +1,32 @@
-import Registry from 'container/registry';
import { get } from 'ember-metal/property_get';
import run from 'ember-metal/run_loop';
import EmberView from 'ember-views/views/view';
import { compile } from 'ember-template-compiler';
+import buildOwner from 'container/tests/test-helpers/build-owner';
+import { OWNER } from 'container/owner';
-var registry, container, view;
+var owner, view;
QUnit.module('EmberView - Template Functionality', {
setup() {
- registry = new Registry();
- container = registry.container();
- registry.optionsForType('template', { instantiate: false });
+ owner = buildOwner();
+ owner.registerOptionsForType('template', { instantiate: false });
},
teardown() {
run(function() {
if (view) { view.destroy(); }
- container.destroy();
- registry = container = view = null;
+ owner.destroy();
+ owner = view = null;
});
}
});
QUnit.test('Template views return throw if their template cannot be found', function() {
view = EmberView.create({
- templateName: 'cantBeFound',
- container: { lookup() { } }
+ [OWNER]: {
+ lookup() {}
+ },
+ templateName: 'cantBeFound'
});
expectAssertion(function() {
@@ -33,12 +35,12 @@ QUnit.test('Template views return throw if their template cannot be found', func
});
QUnit.test('should call the function of the associated template', function() {
- registry.register('template:testTemplate', compile(
+ owner.register('template:testTemplate', compile(
'
template was called
'
));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'testTemplate'
});
@@ -50,14 +52,13 @@ QUnit.test('should call the function of the associated template', function() {
});
QUnit.test('should call the function of the associated template with itself as the context', function() {
- registry.register('template:testTemplate', compile(
+ owner.register('template:testTemplate', compile(
'
template was called for {{personName}}
'
));
view = EmberView.create({
- container: container,
+ [OWNER]: owner,
templateName: 'testTemplate',
-
context: {
personName: 'Tom DAAAALE'
}
@@ -111,17 +112,19 @@ QUnit.test('should not use defaultTemplate if template is provided', function()
});
QUnit.test('should not use defaultTemplate if template is provided', function() {
- registry.register('template:foobar', compile('foo'));
+ owner.register('template:foobar', compile('foo'));
var View = EmberView.extend({
- container: container,
templateName: 'foobar',
defaultTemplate: compile(
'
template was called for {{personName}}
'
)
});
- view = View.create();
+ view = View.create({
+ [OWNER]: owner
+ });
+
run(function() {
view.createElement();
});
diff --git a/packages/ember/tests/application_lifecycle_test.js b/packages/ember/tests/application_lifecycle_test.js
index 6474c8b55d7..24131f5360c 100644
--- a/packages/ember/tests/application_lifecycle_test.js
+++ b/packages/ember/tests/application_lifecycle_test.js
@@ -7,7 +7,7 @@ import jQuery from 'ember-views/system/jquery';
var compile = Ember.HTMLBars.compile;
-var App, container, router;
+var App, appInstance, router;
function setupApp(klass) {
run(function() {
@@ -21,7 +21,7 @@ function setupApp(klass) {
App.deferReadiness();
- container = App.__container__;
+ appInstance = App.__deprecatedInstance__;
});
}
@@ -38,7 +38,7 @@ QUnit.module('Application Lifecycle', {
});
function handleURL(path) {
- router = container.lookup('router:main');
+ router = appInstance.lookup('router:main');
return run(function() {
return router.handleURL(path).then(function(value) {
ok(true, 'url: `' + path + '` was handled');
@@ -50,7 +50,6 @@ function handleURL(path) {
});
}
-
QUnit.test('Resetting the application allows controller properties to be set when a route deactivates', function() {
App.Router.map(function() {
this.route('home', { path: '/' });
@@ -73,22 +72,22 @@ QUnit.test('Resetting the application allows controller properties to be set whe
}
});
- container.lookup('router:main');
+ appInstance.lookup('router:main');
run(App, 'advanceReadiness');
handleURL('/');
- equal(Ember.controllerFor(container, 'home').get('selectedMenuItem'), 'home');
- equal(Ember.controllerFor(container, 'application').get('selectedMenuItem'), 'home');
+ equal(Ember.controllerFor(appInstance, 'home').get('selectedMenuItem'), 'home');
+ equal(Ember.controllerFor(appInstance, 'application').get('selectedMenuItem'), 'home');
App.reset();
- equal(Ember.controllerFor(container, 'home').get('selectedMenuItem'), null);
- equal(Ember.controllerFor(container, 'application').get('selectedMenuItem'), null);
+ equal(Ember.controllerFor(appInstance, 'home').get('selectedMenuItem'), null);
+ equal(Ember.controllerFor(appInstance, 'application').get('selectedMenuItem'), null);
});
-QUnit.test('Destroying the application resets the router before the container is destroyed', function() {
+QUnit.test('Destroying the application resets the router before the appInstance is destroyed', function() {
App.Router.map(function() {
this.route('home', { path: '/' });
});
@@ -110,19 +109,19 @@ QUnit.test('Destroying the application resets the router before the container is
}
});
- container.lookup('router:main');
+ appInstance.lookup('router:main');
run(App, 'advanceReadiness');
handleURL('/');
- equal(Ember.controllerFor(container, 'home').get('selectedMenuItem'), 'home');
- equal(Ember.controllerFor(container, 'application').get('selectedMenuItem'), 'home');
+ equal(Ember.controllerFor(appInstance, 'home').get('selectedMenuItem'), 'home');
+ equal(Ember.controllerFor(appInstance, 'application').get('selectedMenuItem'), 'home');
run(App, 'destroy');
- equal(Ember.controllerFor(container, 'home').get('selectedMenuItem'), null);
- equal(Ember.controllerFor(container, 'application').get('selectedMenuItem'), null);
+ equal(Ember.controllerFor(appInstance, 'home').get('selectedMenuItem'), null);
+ equal(Ember.controllerFor(appInstance, 'application').get('selectedMenuItem'), null);
});
QUnit.test('initializers can augment an applications customEvents hash', function(assert) {
diff --git a/packages/ember/tests/component_registration_test.js b/packages/ember/tests/component_registration_test.js
index 3e24dcf9893..5ffcf97c335 100644
--- a/packages/ember/tests/component_registration_test.js
+++ b/packages/ember/tests/component_registration_test.js
@@ -10,7 +10,7 @@ import Component from 'ember-views/components/component';
import jQuery from 'ember-views/system/jquery';
import { A as emberA } from 'ember-runtime/system/native_array';
-var App, registry, container;
+var App, appInstance;
var originalHelpers;
const keys = Object.keys;
@@ -27,7 +27,7 @@ function cleanup() {
if (App) {
App.destroy();
}
- App = null;
+ App = appInstance = null;
Ember.TEMPLATES = {};
cleanupHelpers();
@@ -62,13 +62,12 @@ function boot(callback, startURL='/') {
location: 'none'
});
- registry = App.__registry__;
- container = App.__container__;
+ appInstance = App.__deprecatedInstance__;
if (callback) { callback(); }
});
- var router = container.lookup('router:main');
+ var router = appInstance.lookup('router:main');
run(App, 'advanceReadiness');
run(function() {
@@ -83,7 +82,7 @@ QUnit.test('The helper becomes the body of the component', function() {
QUnit.test('If a component is registered, it is used', function() {
boot(function() {
- registry.register('component:expand-it', Component.extend({
+ appInstance.register('component:expand-it', Component.extend({
classNames: 'testing123'
}));
});
@@ -96,7 +95,7 @@ QUnit.test('Late-registered components can be rendered with custom `layout` prop
Ember.TEMPLATES.application = compile('
there goes {{my-hero}}
');
boot(function() {
- registry.register('component:my-hero', Component.extend({
+ appInstance.register('component:my-hero', Component.extend({
classNames: 'testing123',
layout: compile('watch him as he GOES')
}));
@@ -110,8 +109,8 @@ QUnit.test('Late-registered components can be rendered with template registered
Ember.TEMPLATES.application = compile('
hello world {{sally-rutherford}}-{{#sally-rutherford}}!!!{{/sally-rutherford}}
');
boot(function() {
- registry.register('template:components/sally-rutherford', compile('funkytowny{{yield}}'));
- registry.register('component:sally-rutherford', Component);
+ appInstance.register('template:components/sally-rutherford', compile('funkytowny{{yield}}'));
+ appInstance.register('component:sally-rutherford', Component);
});
equal(jQuery('#wrapper').text(), 'hello world funkytowny-funkytowny!!!', 'The component is composed correctly');
@@ -122,7 +121,7 @@ QUnit.test('Late-registered components can be rendered with ONLY the template re
Ember.TEMPLATES.application = compile('
hello world {{borf-snorlax}}-{{#borf-snorlax}}!!!{{/borf-snorlax}}
');
boot(function() {
- registry.register('template:components/borf-snorlax', compile('goodfreakingTIMES{{yield}}'));
+ appInstance.register('template:components/borf-snorlax', compile('goodfreakingTIMES{{yield}}'));
});
equal(jQuery('#wrapper').text(), 'hello world goodfreakingTIMES-goodfreakingTIMES!!!', 'The component is composed correctly');
@@ -133,7 +132,7 @@ QUnit.test('Component-like invocations are treated as bound paths if neither tem
Ember.TEMPLATES.application = compile('
{{user-name}} hello {{api-key}} world
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'user-name': 'machty'
}));
});
@@ -148,11 +147,11 @@ QUnit.test('Assigning layoutName to a component should setup the template as a l
Ember.TEMPLATES['foo-bar-baz'] = compile('{{text}}-{{yield}}');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner',
layoutName: 'foo-bar-baz'
}));
@@ -168,11 +167,11 @@ QUnit.test('Assigning layoutName and layout to a component should use the `layou
Ember.TEMPLATES['foo-bar-baz'] = compile('No way!');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner',
layoutName: 'foo-bar-baz',
layout: compile('{{text}}-{{yield}}')
@@ -189,11 +188,11 @@ QUnit.test('Assigning defaultLayout to a component should set it up as a layout
expectDeprecation(function() {
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner',
defaultLayout: compile('{{text}}-{{yield}}')
}));
@@ -211,11 +210,11 @@ QUnit.test('Assigning defaultLayout to a component should set it up as a layout
expectDeprecation(function() {
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner',
defaultLayout: compile('should not see this!')
}));
@@ -243,11 +242,11 @@ QUnit.test('Components with a block should have the proper content when a templa
Ember.TEMPLATES['components/my-component'] = compile('{{text}}-{{yield}}');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner'
}));
});
@@ -259,11 +258,11 @@ QUnit.test('Components with a block should yield the proper content without a te
Ember.TEMPLATES.application = compile('
{{#my-component}}{{text}}{{/my-component}}
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner'
}));
});
@@ -276,11 +275,11 @@ QUnit.test('Components without a block should have the proper content when a tem
Ember.TEMPLATES['components/my-component'] = compile('{{text}}');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
text: 'inner'
}));
});
@@ -292,11 +291,11 @@ QUnit.test('Components without a block should have the proper content', function
Ember.TEMPLATES.application = compile('
{{my-component}}
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
didInsertElement() {
this.$().html('Some text inserted by jQuery');
}
@@ -311,12 +310,12 @@ QUnit.test('properties of a component without a template should not collide with
Ember.TEMPLATES.application = compile('
{{my-component data=foo}}
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer',
'foo': 'Some text inserted by jQuery'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
didInsertElement() {
this.$().html(this.get('data'));
}
@@ -330,12 +329,12 @@ QUnit.test('attrs property of a component without a template should not collide
Ember.TEMPLATES.application = compile('
{{my-component attrs=foo}}
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
'text': 'outer',
'foo': 'Some text inserted by jQuery'
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
didInsertElement() {
// FIXME: I'm unsure if this is even the right way to access attrs
this.$().html(this.get('attrs.attrs.value'));
@@ -350,7 +349,7 @@ QUnit.test('Components trigger actions in the parents context when called from w
Ember.TEMPLATES.application = compile('
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
actions: {
fizzbuzz() {
ok(true, 'action triggered on parent');
@@ -358,7 +357,7 @@ QUnit.test('Components trigger actions in the parents context when called from w
}
}));
- registry.register('component:my-component', Component.extend());
+ appInstance.register('component:my-component', Component.extend());
});
run(function() {
@@ -371,7 +370,7 @@ QUnit.test('Components trigger actions in the components context when called fro
Ember.TEMPLATES['components/my-component'] = compile('Fizzbuzz');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
actions: {
fizzbuzz() {
ok(false, 'action triggered on the wrong context');
@@ -379,7 +378,7 @@ QUnit.test('Components trigger actions in the components context when called fro
}
}));
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
actions: {
fizzbuzz() {
ok(true, 'action triggered on component');
@@ -399,7 +398,7 @@ QUnit.test('Components receive the top-level view as their ownerView', function(
let component;
boot(function() {
- registry.register('component:my-component', Component.extend({
+ appInstance.register('component:my-component', Component.extend({
init() {
this._super();
component = this;
diff --git a/packages/ember/tests/helpers/helper_registration_test.js b/packages/ember/tests/helpers/helper_registration_test.js
index 6e6770a7397..9233c40fab0 100644
--- a/packages/ember/tests/helpers/helper_registration_test.js
+++ b/packages/ember/tests/helpers/helper_registration_test.js
@@ -11,7 +11,7 @@ import inject from 'ember-runtime/inject';
import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
import viewKeyword from 'ember-htmlbars/keywords/view';
-var App, registry, container, originalViewKeyword;
+var App, appInstance, originalViewKeyword;
QUnit.module('Application Lifecycle - Helper Registration', {
setup() {
@@ -23,7 +23,7 @@ QUnit.module('Application Lifecycle - Helper Registration', {
App.destroy();
}
- App = null;
+ App = appInstance = null;
Ember.TEMPLATES = {};
});
delete helpers['foo-bar-baz-widget'];
@@ -44,13 +44,12 @@ var boot = function(callback) {
location: 'none'
});
- registry = App.__registry__;
- container = App.__container__;
+ appInstance = App.__deprecatedInstance__;
if (callback) { callback(); }
});
- var router = container.lookup('router:main');
+ var router = appInstance.lookup('router:main');
run(App, 'advanceReadiness');
run(function() {
@@ -65,7 +64,7 @@ QUnit.test('Unbound dashed helpers registered on the container can be late-invok
});
boot(() => {
- registry.register('helper:x-borf', myHelper);
+ App.register('helper:x-borf', myHelper);
});
equal(jQuery('#wrapper').text(), 'BORF YES', 'The helper was invoked from the container');
@@ -76,11 +75,11 @@ QUnit.test('Bound helpers registered on the container can be late-invoked', func
Ember.TEMPLATES.application = compile('
{{x-reverse}} {{x-reverse foo}}
');
boot(function() {
- registry.register('controller:application', Controller.extend({
+ appInstance.register('controller:application', Controller.extend({
foo: 'alex'
}));
- registry.register('helper:x-reverse', helper(function([ value ]) {
+ appInstance.register('helper:x-reverse', helper(function([ value ]) {
return value ? value.split('').reverse().join('') : '--';
}));
});
@@ -93,11 +92,11 @@ QUnit.test('Undashed helpers registered on the container can be invoked', functi
Ember.TEMPLATES.application = compile('
{{omg}}|{{yorp \'boo\'}}|{{yorp \'ya\'}}
');
boot(function() {
- registry.register('helper:omg', helper(function() {
+ appInstance.register('helper:omg', helper(function() {
return 'OMG';
}));
- registry.register('helper:yorp', helper(function([ value ]) {
+ appInstance.register('helper:yorp', helper(function([ value ]) {
return value;
}));
});
@@ -110,12 +109,12 @@ QUnit.test('Helpers can receive injections', function() {
var serviceCalled = false;
boot(function() {
- registry.register('service:name-builder', Ember.Service.extend({
+ appInstance.register('service:name-builder', Ember.Service.extend({
build() {
serviceCalled = true;
}
}));
- registry.register('helper:full-name', Helper.extend({
+ appInstance.register('helper:full-name', Helper.extend({
nameBuilder: inject.service('name-builder'),
compute() {
this.get('nameBuilder').build();
diff --git a/packages/ember/tests/helpers/link_to_test.js b/packages/ember/tests/helpers/link_to_test.js
index 986c64bfeda..2ecd98a709e 100644
--- a/packages/ember/tests/helpers/link_to_test.js
+++ b/packages/ember/tests/helpers/link_to_test.js
@@ -14,14 +14,15 @@ import EmberObject from 'ember-runtime/system/object';
import inject from 'ember-runtime/inject';
import { A as emberA } from 'ember-runtime/system/native_array';
import NoneLocation from 'ember-routing/location/none_location';
+import { OWNER } from 'container/owner';
import { compile } from 'ember-template-compiler';
import EmberView from 'ember-views/views/view';
-var Router, App, AppView, router, registry, container;
+var Router, App, AppView, router, appInstance;
function bootApplication() {
- router = container.lookup('router:main');
+ router = appInstance.lookup('router:main');
run(App, 'advanceReadiness');
}
@@ -69,8 +70,7 @@ function sharedSetup() {
});
Router = App.Router;
- registry = App.__registry__;
- container = App.__container__;
+ appInstance = App.__deprecatedInstance__;
}
function sharedTeardown() {
@@ -92,10 +92,10 @@ QUnit.module('The {{link-to}} helper', {
templateName: 'app'
});
- registry.register('view:app', AppView);
+ appInstance.register('view:app', AppView);
- registry.unregister('router:main');
- registry.register('router:main', Router);
+ appInstance.unregister('router:main');
+ appInstance.register('router:main', Router);
});
},
@@ -109,14 +109,14 @@ QUnit.test('Using {{link-to}} does not cause an exception if it is rendered befo
this.route('about');
});
- registry.register('component-lookup:main', ComponentLookup);
+ appInstance.register('component-lookup:main', ComponentLookup);
let component = Component.extend({
- layout: compile('{{#link-to "about"}}Go to About{{/link-to}}'),
- container: container
+ [OWNER]: appInstance,
+ layout: compile('{{#link-to "about"}}Go to About{{/link-to}}')
}).create();
- let router = container.lookup('router:main');
+ let router = appInstance.lookup('router:main');
router.setupRouter();
run(function() {
@@ -127,11 +127,11 @@ QUnit.test('Using {{link-to}} does not cause an exception if it is rendered befo
});
QUnit.test('Using {{link-to}} does not cause an exception if it is rendered without a router.js instance', function(assert) {
- registry.register('component-lookup:main', ComponentLookup);
+ appInstance.register('component-lookup:main', ComponentLookup);
let component = Component.extend({
- layout: compile('{{#link-to "nonexistent"}}Does not work.{{/link-to}}'),
- container: container
+ [OWNER]: appInstance,
+ layout: compile('{{#link-to "nonexistent"}}Does not work.{{/link-to}}')
}).create();
run(function() {
@@ -442,7 +442,7 @@ QUnit.test('The {{link-to}} helper supports \'classNameBindings\' with custom va
equal(jQuery('#about-link.foo-is-false', '#qunit-fixture').length, 1, 'The about-link was rendered with the falsy class');
- var controller = container.lookup('controller:index');
+ var controller = appInstance.lookup('controller:index');
run(function() {
controller.set('foo', true);
});
@@ -849,7 +849,7 @@ QUnit.test('The {{link-to}} helper should not transition if target is not equal
jQuery('#about-link', '#qunit-fixture').click();
});
- notEqual(container.lookup('controller:application').get('currentRouteName'), 'about', 'link-to should not transition if target is not equal to _self or empty');
+ notEqual(appInstance.lookup('controller:application').get('currentRouteName'), 'about', 'link-to should not transition if target is not equal to _self or empty');
});
QUnit.test('The {{link-to}} helper accepts string/numeric arguments', function() {
@@ -988,7 +988,7 @@ QUnit.test('Quoteless route param performs property lookup', function() {
assertEquality('/');
- var controller = container.lookup('controller:index');
+ var controller = appInstance.lookup('controller:index');
var view = EmberView.views['index-view'];
run(function() {
controller.set('foo', 'about');
@@ -1041,7 +1041,7 @@ QUnit.test('link-to with null/undefined dynamic parameters are put in a loading
var $contextLink = jQuery('#context-link', '#qunit-fixture');
var $staticLink = jQuery('#static-link', '#qunit-fixture');
- var controller = container.lookup('controller:index');
+ var controller = appInstance.lookup('controller:index');
assertLinkStatus($contextLink);
assertLinkStatus($staticLink);
@@ -1098,7 +1098,7 @@ QUnit.test('The {{link-to}} helper refreshes href element when one of params cha
Ember.TEMPLATES.index = compile('{{#link-to "post" post id="post"}}post{{/link-to}}');
App.IndexController = Controller.extend();
- var indexController = container.lookup('controller:index');
+ var indexController = appInstance.lookup('controller:index');
run(function() { indexController.set('post', post); });
@@ -1174,7 +1174,7 @@ QUnit.test('The {{link-to}} helper works in an #each\'d array of string route na
linksEqual(jQuery('a', '#qunit-fixture'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/bar', '/foo']);
- var indexController = container.lookup('controller:index');
+ var indexController = appInstance.lookup('controller:index');
run(indexController, 'set', 'route1', 'rar');
linksEqual(jQuery('a', '#qunit-fixture'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/rar', '/foo']);
@@ -1222,7 +1222,7 @@ QUnit.test('The non-block form {{link-to}} helper updates the link text when it
run(function() {
router.handleURL('/');
});
- var controller = container.lookup('controller:index');
+ var controller = appInstance.lookup('controller:index');
equal(jQuery('#contact-link:contains(Jane)', '#qunit-fixture').length, 1, 'The link title is correctly resolved');
@@ -1321,7 +1321,7 @@ QUnit.test('The non-block form {{link-to}} performs property lookup', function()
assertEquality('/');
- var controller = container.lookup('controller:index');
+ var controller = appInstance.lookup('controller:index');
var view = EmberView.views['index-view'];
run(function() {
controller.set('foo', 'about');
@@ -1342,7 +1342,7 @@ QUnit.test('The non-block form {{link-to}} protects against XSS', function() {
run(router, 'handleURL', '/');
- var controller = container.lookup('controller:application');
+ var controller = appInstance.lookup('controller:application');
equal(jQuery('#link', '#qunit-fixture').text(), 'blahzorz');
run(function() {
diff --git a/packages/ember/tests/routing/basic_test.js b/packages/ember/tests/routing/basic_test.js
index a616517d4f5..e6ff7f90723 100644
--- a/packages/ember/tests/routing/basic_test.js
+++ b/packages/ember/tests/routing/basic_test.js
@@ -18,6 +18,7 @@ import Application from 'ember-application/system/application';
import { A as emberA } from 'ember-runtime/system/native_array';
import NoneLocation from 'ember-routing/location/none_location';
import HistoryLocation from 'ember-routing/location/history_location';
+import { getOwner } from 'container/owner';
var trim = jQuery.trim;
@@ -1785,7 +1786,7 @@ QUnit.test('A redirection hook is provided', function() {
equal(chooseFollowed, 0, 'The choose route wasn\'t entered since a transition occurred');
equal(jQuery('h3:contains(Hours)', '#qunit-fixture').length, 1, 'The home template was rendered');
- equal(router.container.lookup('controller:application').get('currentPath'), 'home');
+ equal(getOwner(router).lookup('controller:application').get('currentPath'), 'home');
});
QUnit.test('Redirecting from the middle of a route aborts the remainder of the routes', function() {
@@ -1819,7 +1820,7 @@ QUnit.test('Redirecting from the middle of a route aborts the remainder of the r
handleURLAborts('/foo/bar/baz');
- equal(router.container.lookup('controller:application').get('currentPath'), 'home');
+ equal(getOwner(router).lookup('controller:application').get('currentPath'), 'home');
equal(router.get('location').getURL(), '/home');
});
@@ -1858,7 +1859,7 @@ QUnit.test('Redirecting to the current target in the middle of a route does not
handleURL('/foo/bar/baz');
- equal(router.container.lookup('controller:application').get('currentPath'), 'foo.bar.baz');
+ equal(getOwner(router).lookup('controller:application').get('currentPath'), 'foo.bar.baz');
equal(successCount, 1, 'transitionTo success handler was called once');
});
@@ -1902,7 +1903,7 @@ QUnit.test('Redirecting to the current target with a different context aborts th
handleURLAborts('/foo/bar/1/baz');
- equal(router.container.lookup('controller:application').get('currentPath'), 'foo.bar.baz');
+ equal(getOwner(router).lookup('controller:application').get('currentPath'), 'foo.bar.baz');
equal(router.get('location').getURL(), '/foo/bar/2/baz');
});
@@ -1926,7 +1927,7 @@ QUnit.test('Transitioning from a parent event does not prevent currentPath from
bootApplication();
- var applicationController = router.container.lookup('controller:application');
+ var applicationController = getOwner(router).lookup('controller:application');
handleURL('/foo/bar/baz');
@@ -3034,7 +3035,7 @@ QUnit.test('currentRouteName is a property installed on ApplicationController th
bootApplication();
- var appController = router.container.lookup('controller:application');
+ var appController = getOwner(router).lookup('controller:application');
function transitionAndCheck(path, expectedPath, expectedRouteName) {
if (path) { run(router, 'transitionTo', path); }