Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import { moduleFor, RenderingTest } from '../../utils/test-case';

// copied from ember-htmlbars/tests/integration/local-lookup-test.js
function buildResolver() {
let resolver = {
resolve() { },
expandLocalLookup(fullName, sourceFullName) {
let [sourceType, sourceName ] = sourceFullName.split(':');
let [type, name ] = fullName.split(':');

if (type !== 'template' && sourceType === 'template' && sourceName.slice(0, 11) === 'components/') {
sourceName = sourceName.slice(11);
}

if (type === 'template' && sourceType === 'template' && name.slice(0, 11) === 'components/') {
name = name.slice(11);
}


let result = `${type}:${sourceName}/${name}`;

return result;
}
};

return resolver;
}

moduleFor('Components test: local lookup', class extends RenderingTest {
getOwnerOptions() {
return {
_registryOptions: {
resolver: buildResolver()
}
};
}

['@htmlbars it can lookup a local template']() {
this.registerComponent('x-outer/x-inner', { template: 'Nested template says: {{yield}}' });
this.registerComponent('x-outer', { template: '{{#x-inner}}Hi!{{/x-inner}}' });

this.render('{{x-outer}}');

this.assertText('Nested template says: Hi!', 'Initial render works');

this.runTask(() => this.rerender());

this.assertText('Nested template says: Hi!', 'Re-render works');
}

['@htmlbars it can lookup a local component template']() {
this.registerTemplate('components/x-outer/x-inner', 'Nested template says: {{yield}}');
this.registerTemplate('components/x-outer', '{{#x-inner}}Hi!{{/x-inner}}');

this.render('{{x-outer}}');

this.assertText('Nested template says: Hi!', 'Initial render works');

this.runTask(() => this.rerender());

this.assertText('Nested template says: Hi!', 'Re-render works');
}

['@htmlbars it can lookup a local helper']() {
this.registerHelper('x-outer/x-helper', () => {
return 'Who dis?';
});
this.registerComponent('x-outer', { template: 'Who dat? {{x-helper}}' });

this.render('{{x-outer}}');

this.assertText('Who dat? Who dis?', 'Initial render works');

this.runTask(() => this.rerender());

this.assertText('Who dat? Who dis?', 'Re-render works');
}

['@htmlbars it overrides global helper lookup']() {
this.registerHelper('x-outer/x-helper', () => {
return 'Who dis?';
});

this.registerHelper('x-helper', () => {
return 'I dunno';
});

this.registerComponent('x-outer', { template: 'Who dat? {{x-helper}}' });

this.render('{{x-outer}} {{x-helper}}');

this.assertText('Who dat? Who dis? I dunno', 'Initial render works');

this.runTask(() => this.rerender());

this.assertText('Who dat? Who dis? I dunno', 'Re-render works');
}

['@htmlbars lookup without match issues standard assertion (with local helper name)']() {
this.registerComponent('x-outer', { template: '{{#x-inner}}Hi!{{/x-inner}}' });

expectAssertion(() => {
this.render('{{x-outer}}');
}, /A helper named 'x-inner' could not be found/);
}

['@htmlbars overrides global lookup']() {
this.registerComponent('x-outer', { template: '{{#x-inner}}Hi!{{/x-inner}}' });
this.registerComponent('x-outer/x-inner', { template: 'Nested template says (from local): {{yield}}' });
this.registerComponent('x-inner', { template: 'Nested template says (from global): {{yield}}' });

this.render('{{#x-inner}}Hi!{{/x-inner}} {{x-outer}} {{#x-outer/x-inner}}Hi!{{/x-outer/x-inner}}');

this.assertText('Nested template says (from global): Hi! Nested template says (from local): Hi! Nested template says (from local): Hi!');

this.runTask(() => this.rerender());

this.assertText('Nested template says (from global): Hi! Nested template says (from local): Hi! Nested template says (from local): Hi!');
}
});
29 changes: 25 additions & 4 deletions packages/ember-glimmer/tests/utils/abstract-test-case.js
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,9 @@ export class ApplicationTest extends TestCase {
}

registerTemplate(name, template) {
this.application.register(`template:${name}`, compile(template));
this.application.register(`template:${name}`, compile(template, {
moduleName: name
}));
}

registerController(name, controller) {
Expand All @@ -276,13 +278,17 @@ export class RenderingTest extends TestCase {
constructor() {
super();
let dom = new DOMHelper(document);
let owner = this.owner = buildOwner();
let owner = this.owner = buildOwner(this.getOwnerOptions());
let env = this.env = new Environment({ dom, owner, [OWNER]: owner });
this.renderer = InteractiveRenderer.create({ dom, env, [OWNER]: owner });
this.element = jQuery('#qunit-fixture')[0];
this.component = null;
}

getOwnerOptions() {
return {};
}

teardown() {
if (this.component) {
runDestroy(this.component);
Expand All @@ -297,7 +303,9 @@ export class RenderingTest extends TestCase {
render(templateStr, context = {}) {
let { renderer, owner } = this;

owner.register('template:-top-level', compile(templateStr));
owner.register('template:-top-level', compile(templateStr, {
moduleName: '-top-level'
}));

let attrs = assign({}, context, {
tagName: '',
Expand Down Expand Up @@ -347,7 +355,20 @@ export class RenderingTest extends TestCase {
}

if (typeof template === 'string') {
owner.register(`template:components/${name}`, compile(template));
owner.register(`template:components/${name}`, compile(template, {
moduleName: `components/${name}`
}));
}
}

registerTemplate(name, template) {
let { owner } = this;
if (typeof template === 'string') {
owner.register(`template:${name}`, compile(template, {
moduleName: name
}));
} else {
throw new Error(`Registered template "${name}" must be a string`);
}
}

Expand Down
2 changes: 2 additions & 0 deletions packages/ember-htmlbars/lib/hooks/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ export default function componentHook(renderNode, env, scope, _tagName, params,

// Determine if this is an initial render or a re-render.
if (state.manager) {
let templateMeta = state.manager.block.template.meta;
env.meta.moduleName = (templateMeta && templateMeta.moduleName) || (env.meta && env.meta.moduleName);
state.manager.rerender(env, attrs, visitor);
return;
}
Expand Down
179 changes: 0 additions & 179 deletions packages/ember-htmlbars/tests/integration/local-lookup-test.js

This file was deleted.