From 53e6a9cec0990bbd586b4c06f9932d7d7aaf92ff Mon Sep 17 00:00:00 2001 From: Chris Garrett Date: Fri, 5 Apr 2019 15:35:57 -0700 Subject: [PATCH] [BUGFIX beta] Ensure @controller passes args correctly @controller was not passing args correctly for parameter-less decorator usage. We weren't actually testing it, which is why we didn't catch the issue. This adds tests for both @service and @controller and fixes the problem. --- .../-internals/runtime/tests/inject_test.js | 46 ------------------- packages/@ember/controller/index.js | 4 +- .../controller/tests/controller_test.js | 42 +++++++++++++++++ packages/@ember/service/tests/service_test.js | 46 +++++++++++++++++++ 4 files changed, 90 insertions(+), 48 deletions(-) create mode 100644 packages/@ember/service/tests/service_test.js diff --git a/packages/@ember/-internals/runtime/tests/inject_test.js b/packages/@ember/-internals/runtime/tests/inject_test.js index addad3aaf8c..79375e0fcc5 100644 --- a/packages/@ember/-internals/runtime/tests/inject_test.js +++ b/packages/@ember/-internals/runtime/tests/inject_test.js @@ -1,5 +1,4 @@ import { inject } from '@ember/-internals/metal'; -import { EMBER_NATIVE_DECORATOR_SUPPORT } from '@ember/canary-features'; import { DEBUG } from '@glimmer/env'; import EmberObject from '../lib/system/object'; import { buildOwner } from 'internal-test-helpers'; @@ -50,48 +49,3 @@ moduleFor( } } ); - -if (EMBER_NATIVE_DECORATOR_SUPPORT) { - moduleFor( - 'inject - decorator', - class extends AbstractTestCase { - ['@test works with native decorators'](assert) { - let owner = buildOwner(); - - class Service extends EmberObject {} - - class Foo extends EmberObject { - @inject('service', 'main') main; - } - - owner.register('service:main', Service); - owner.register('foo:main', Foo); - - let foo = owner.lookup('foo:main'); - - assert.ok(foo.main instanceof Service, 'service injected correctly'); - } - - ['@test uses the decorated property key if not provided'](assert) { - let owner = buildOwner(); - - function service() { - return inject('service', ...arguments); - } - - class Service extends EmberObject {} - - class Foo extends EmberObject { - @service main; - } - - owner.register('service:main', Service); - owner.register('foo:main', Foo); - - let foo = owner.lookup('foo:main'); - - assert.ok(foo.main instanceof Service, 'service injected correctly'); - } - } - ); -} diff --git a/packages/@ember/controller/index.js b/packages/@ember/controller/index.js index 644b9b35819..78dc0047499 100644 --- a/packages/@ember/controller/index.js +++ b/packages/@ember/controller/index.js @@ -55,8 +55,8 @@ const Controller = EmberObject.extend(ControllerMixin); @return {ComputedDecorator} injection decorator instance @public */ -export function inject(nameOrDesc, options) { - return metalInject('controller', nameOrDesc, options); +export function inject() { + return metalInject('controller', ...arguments); } export default Controller; diff --git a/packages/@ember/controller/tests/controller_test.js b/packages/@ember/controller/tests/controller_test.js index daf4472e3f0..669247ec7c4 100644 --- a/packages/@ember/controller/tests/controller_test.js +++ b/packages/@ember/controller/tests/controller_test.js @@ -1,4 +1,5 @@ import Controller, { inject as injectController } from '@ember/controller'; +import { EMBER_NATIVE_DECORATOR_SUPPORT } from '@ember/canary-features'; import Service, { inject as injectService } from '@ember/service'; import { Object as EmberObject } from '@ember/-internals/runtime'; import { Mixin, get } from '@ember/-internals/metal'; @@ -207,3 +208,44 @@ moduleFor( } } ); + +if (EMBER_NATIVE_DECORATOR_SUPPORT) { + moduleFor( + 'Controller Injections', + class extends AbstractTestCase { + ['@test works with native decorators'](assert) { + let owner = buildOwner(); + + class MainController extends Controller {} + + class IndexController extends Controller { + @injectController('main') main; + } + + owner.register('controller:main', MainController); + owner.register('controller:index', IndexController); + + let index = owner.lookup('controller:index'); + + assert.ok(index.main instanceof Controller, 'controller injected correctly'); + } + + ['@test uses the decorated property key if not provided'](assert) { + let owner = buildOwner(); + + class MainController extends Controller {} + + class IndexController extends Controller { + @injectController main; + } + + owner.register('controller:main', MainController); + owner.register('controller:index', IndexController); + + let index = owner.lookup('controller:index'); + + assert.ok(index.main instanceof Controller, 'controller injected correctly'); + } + } + ); +} diff --git a/packages/@ember/service/tests/service_test.js b/packages/@ember/service/tests/service_test.js new file mode 100644 index 00000000000..4e8e68f09a7 --- /dev/null +++ b/packages/@ember/service/tests/service_test.js @@ -0,0 +1,46 @@ +import { EMBER_NATIVE_DECORATOR_SUPPORT } from '@ember/canary-features'; +import Service, { inject as injectService } from '@ember/service'; +import { Object as EmberObject } from '@ember/-internals/runtime'; +import { buildOwner } from 'internal-test-helpers'; +import { moduleFor, AbstractTestCase } from 'internal-test-helpers'; + +if (EMBER_NATIVE_DECORATOR_SUPPORT) { + moduleFor( + 'inject - decorator', + class extends AbstractTestCase { + ['@test works with native decorators'](assert) { + let owner = buildOwner(); + + class MainService extends Service {} + + class Foo extends EmberObject { + @injectService('main') main; + } + + owner.register('service:main', MainService); + owner.register('foo:main', Foo); + + let foo = owner.lookup('foo:main'); + + assert.ok(foo.main instanceof Service, 'service injected correctly'); + } + + ['@test uses the decorated property key if not provided'](assert) { + let owner = buildOwner(); + + class MainService extends Service {} + + class Foo extends EmberObject { + @injectService main; + } + + owner.register('service:main', MainService); + owner.register('foo:main', Foo); + + let foo = owner.lookup('foo:main'); + + assert.ok(foo.main instanceof Service, 'service injected correctly'); + } + } + ); +}