Skip to content

Commit

Permalink
Revert "Revert "Add a basic integration test for Glimmer""
Browse files Browse the repository at this point in the history
This reverts commit d619a07.

CI was failing because we forgot to push the upstream changes in
Glimmer.
  • Loading branch information
chancancode committed Jan 30, 2016
1 parent d619a07 commit e07d3cf
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 e07d3cf

Please sign in to comment.