Skip to content

Commit

Permalink
Add a basic integration test for Glimmer
Browse files Browse the repository at this point in the history
This also setup that new testing infrastructure
that would allow us to run the same tests on both
Glimmer and HTMLBars.
  • Loading branch information
Godhuda committed Jan 30, 2016
1 parent b63d5a5 commit b8786ba
Show file tree
Hide file tree
Showing 17 changed files with 142 additions and 20 deletions.
4 changes: 2 additions & 2 deletions packages/ember-application/lib/system/application-instance.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import run from 'ember-metal/run_loop';
import { computed } from 'ember-metal/computed';
import DOMHelper from 'ember-htmlbars/system/dom-helper';
import { buildFakeRegistryWithDeprecations } from 'ember-runtime/mixins/registry_proxy';
import Renderer from 'ember-metal-views/renderer';
import { Renderer } from 'ember-metal-views';
import assign from 'ember-metal/assign';
import environment from 'ember-metal/environment';
import RSVP from 'ember-runtime/ext/rsvp';
Expand Down Expand Up @@ -147,7 +147,7 @@ const ApplicationInstance = EngineInstance.extend({

registry.register('renderer:-dom', {
create() {
return new Renderer(new DOMHelper(options.document), options.isInteractive);
return new Renderer(new DOMHelper(options.document), { destinedForDOM: options.isInteractive });
}
});

Expand Down
2 changes: 1 addition & 1 deletion packages/ember-application/lib/system/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { get } from 'ember-metal/property_get';
import { runLoadHooks } from 'ember-runtime/system/lazy_load';
import run from 'ember-metal/run_loop';
import Controller from 'ember-runtime/controllers/controller';
import Renderer from 'ember-metal-views/renderer';
import { Renderer } from 'ember-metal-views';
import DOMHelper from 'ember-htmlbars/system/dom-helper';
import SelectView from 'ember-views/views/select';
import { OutletView } from 'ember-routing-views/views/outlet';
Expand Down
18 changes: 18 additions & 0 deletions packages/ember-glimmer/lib/ember-metal-views/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export class Renderer {
constructor(domHelper, { destinedForDOM, env } = {}) {
this._dom = domHelper;
this._env = env;
}

appendTo(view, target) {
let env = this._env;

env.begin();
view.template.render({ view }, env, { appendTo: target });
env.commit();
}

componentInitAttrs() {
// TODO: Remove me
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import template from './template';
import require, { has } from 'require';

let compileSpec;
let Template;

export default function compile(string, options) {
if (!compileSpec && has('glimmer-compiler')) {
compileSpec = require('glimmer-compiler').compileSpec;
}

if (!Template && has('glimmer-runtime')) {
Template = require('glimmer-runtime').Template;
}

if (!compileSpec || !Template) {
throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.');
}

let templateSpec = template(compileSpec(string, options));
return Template.fromSpec(templateSpec, options.env);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function template(templateSpec) {
return JSON.parse(templateSpec);
}
8 changes: 0 additions & 8 deletions packages/ember-glimmer/tests/dummy_test.js

This file was deleted.

10 changes: 10 additions & 0 deletions packages/ember-glimmer/tests/integration/content-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { RenderingTest, moduleFor } from '../utils/test-case';

moduleFor('Content tests', class extends RenderingTest {

['TEST: it can render static content']() {
this.render('hello');
this.assertText('hello');
}

});
1 change: 1 addition & 0 deletions packages/ember-glimmer/tests/utils/environment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { TestEnvironment as default } from 'glimmer-test-helpers';
3 changes: 3 additions & 0 deletions packages/ember-glimmer/tests/utils/helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export { DOMHelper } from 'glimmer-runtime';
export { Renderer } from 'ember-glimmer/ember-metal-views';
export { default as compile } from 'ember-glimmer/ember-template-compiler/system/compile';
1 change: 1 addition & 0 deletions packages/ember-glimmer/tests/utils/package-name.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default 'glimmer';
75 changes: 75 additions & 0 deletions packages/ember-glimmer/tests/utils/test-case.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import packageName from './package-name';
import Environment from './environment';
import { compile, DOMHelper, Renderer } from './helpers';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import Component from 'ember-views/components/component';
import jQuery from 'ember-views/system/jquery';

const packageTag = `${packageName.toUpperCase()}: `;

export function moduleFor(description, TestClass) {
let context;

QUnit.module(description, {
setup() {
context = new TestClass();
},

teardown() {
context.teardown();
}
});

Object.keys(TestClass.prototype).forEach(name => {
if (name.indexOf('TEST: ') === 0) {
QUnit.test(name.slice(5), assert => context[name](assert));
} else if (name.indexOf('SKIP: ') === 0) {
QUnit.skip(name.slice(5), assert => context[name](assert));
} else if (name.indexOf(packageTag) === 0) {
QUnit.test(name.slice(packageTag.length), assert => context[name](assert));
}
});
}

let assert = QUnit.assert;

export class TestCase {
teardown() {}
}

export class RenderingTest extends TestCase {
constructor() {
super();
let dom = new DOMHelper(document);
let env = this.env = new Environment(dom);
this.renderer = new Renderer(dom, { destinedForDOM: true, env });
this.component = null;
}

teardown() {
if (this.component) {
runDestroy(this.component);
}
}

render(templateStr, context = {}) {
let { env, renderer } = this;

let attrs = Object.assign({}, context, {
renderer,
template: compile(templateStr, { env })
});

this.component = Component.create(attrs);

runAppend(this.component);
}

rerender() {
this.component.rerender();
}

assertText(text) {
assert.strictEqual(jQuery('#qunit-fixture').text(), text, `#qunit-fixture contents`);
}
}
2 changes: 1 addition & 1 deletion packages/ember-htmlbars/lib/system/render-env.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import defaultEnv from 'ember-htmlbars/env';
import { MorphSet } from 'ember-metal-views/renderer';
import { MorphSet } from 'ember-metal-views';
import { getOwner } from 'container/owner';

export default function RenderEnv(options) {
Expand Down
2 changes: 1 addition & 1 deletion packages/ember-htmlbars/tests/attr_nodes/data_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import EmberView from 'ember-views/views/view';
import run from 'ember-metal/run_loop';
import EmberObject from 'ember-runtime/system/object';
import compile from 'ember-template-compiler/system/compile';
import Renderer from 'ember-metal-views/renderer';
import { Renderer } from 'ember-metal-views';
import { equalInnerHTML } from 'htmlbars-test-helpers';
import { domHelper as dom } from 'ember-htmlbars/env';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import setProperties from 'ember-metal/set_properties';
import buildComponentTemplate from 'ember-views/system/build-component-template';
import environment from 'ember-metal/environment';

function Renderer(domHelper, destinedForDOM) {
export function Renderer(domHelper, { destinedForDOM } = {}) {
this._dom = domHelper;

// This flag indicates whether the resulting rendered element will be
Expand Down Expand Up @@ -280,5 +280,3 @@ Renderer.prototype.didDestroyElement = function (view) {
view.trigger('didDestroyElement');
}
}; // element destroyed so view.destroy shouldn't try to remove it removedFromDOM

export default Renderer;
3 changes: 1 addition & 2 deletions packages/ember-metal-views/lib/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
import Renderer from 'ember-metal-views/renderer';
export { Renderer };
export * from './htmlbars-renderer';
2 changes: 1 addition & 1 deletion packages/ember-views/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
states
} from 'ember-views/views/states';

import Renderer from 'ember-metal-views/renderer';
import { Renderer } from 'ember-metal-views';
import { DeprecatedCoreView } from 'ember-views/views/core_view';
import { DeprecatedView } from 'ember-views/views/view';
import { DeprecatedContainerView } from 'ember-views/views/container_view';
Expand Down
2 changes: 1 addition & 1 deletion packages/ember-views/lib/views/core_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Evented from 'ember-runtime/mixins/evented';
import ActionHandler, { deprecateUnderscoreActions } from 'ember-runtime/mixins/action_handler';
import { typeOf } from 'ember-runtime/utils';

import Renderer from 'ember-metal-views/renderer';
import { Renderer } from 'ember-metal-views';
import { cloneStates, states } from 'ember-views/views/states';
import { internal } from 'htmlbars-runtime';
import require from 'require';
Expand Down

0 comments on commit b8786ba

Please sign in to comment.