Skip to content
This repository has been archived by the owner on Nov 11, 2017. It is now read-only.

Commit

Permalink
Starting to add tests
Browse files Browse the repository at this point in the history
- Created moduleForView test helper to allow testing views
  • Loading branch information
taras committed Mar 8, 2015
1 parent ead2b26 commit 6b392d8
Show file tree
Hide file tree
Showing 12 changed files with 201 additions and 20 deletions.
22 changes: 21 additions & 1 deletion Brocfile.js
@@ -1,6 +1,5 @@
/* jshint node: true */
/* global require, module */

var EmberAddon = require('ember-cli/lib/broccoli/ember-addon');

var app = new EmberAddon();
Expand All @@ -18,7 +17,28 @@ var app = new EmberAddon();
// please specify an object with the list of modules as keys
// along with the exports of each module as its value.

app.import('bower_components/ember-template-compiler/index.js');
app.import('vendor/zynga-scroller/Animate.js');
app.import('vendor/zynga-scroller/Scroller.js');
app.import('vendor/ember-test-helpers.amd.js', {
exports: {
'ember-test-helpers': [
'isolatedContainer',
'TestModule',
'TestModuleForComponent',
'TestModuleForModel',
'getContext',
'setContext',
'setResolver'
]
}
});
app.import('vendor/ember-qunit-module.amd.js', {
exports: {
'ember-qunit-module': [
'createModule'
]
}
});

module.exports = app.toTree();
12 changes: 12 additions & 0 deletions addon/helper.js
Expand Up @@ -5,6 +5,18 @@ import EmberVirtualListView from './virtual_list_view';
export var EmberVirtualList = createHelper(EmberVirtualListView);
export var EmberList = createHelper(EmberListView);

export function register() {
var registerHelper;
if (Ember.HTMLBars) {
// registerHelper was used for some 1.10-beta's and _registerHelper is for 1.10.0 final.
registerHelper = Ember.HTMLBars._registerHelper || Ember.HTMLBars.registerHelper;
} else {
registerHelper = Ember.Handlebars.registerHelper;
}
registerHelper('ember-list', EmberList);
registerHelper('ember-virtual-list', EmberVirtualList);
}

function createHelper(view) {
if (Ember.HTMLBars) {
return {
Expand Down
16 changes: 3 additions & 13 deletions app/initializers/list-view-helper.js
@@ -1,19 +1,9 @@
import Ember from 'ember';
import {EmberList, EmberVirtualList} from 'list-view/helper';
import {register} from 'list-view/helper';

export function initialize() {
var registerHelper;
if (Ember.HTMLBars) {
// registerHelper was used for some 1.10-beta's and _registerHelper is for 1.10.0 final.
registerHelper = Ember.HTMLBars._registerHelper || Ember.HTMLBars.registerHelper;
} else {
registerHelper = Ember.Handlebars.registerHelper;
}
registerHelper('ember-list', EmberList);
registerHelper('ember-virtual-list', EmberVirtualList);
}
export var initialize = register;

export default {
name: 'list-view-helper',
initialize: initialize
initialize: register
};
7 changes: 5 additions & 2 deletions bower.json
Expand Up @@ -10,7 +10,10 @@
"ember-cli-test-loader": "ember-cli-test-loader#0.1.3",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2",
"ember-qunit": "0.2.8",
"ember-qunit-source": "https://github.com/rwjblue/ember-qunit.git#9b8614cac1ac68c3b2f1ffb1dcd4e998fd636e2f",
"ember-qunit-notifications": "0.0.7",
"qunit": "~1.17.1"
"qunit": "~1.17.1",
"ember-test-helpers": "~0.3.4",
"ember-template-compiler": "http://builds.emberjs.com/tags/v1.10.0/ember-template-compiler.js"
}
}
}
48 changes: 47 additions & 1 deletion index.js
Expand Up @@ -2,5 +2,51 @@
'use strict';

module.exports = {
name: 'list-view'
name: 'list-view',
treeForVendor: function() {

var klassy = new this.Funnel('bower_components', {
srcDir: '/klassy/lib',
files: ['klassy.js'],
destDir: '/'
});

var emberTestHelpers = new this.Funnel('bower_components', {
srcDir: '/ember-test-helpers/lib',
include: [/.js$/],
destDir: '/'
});

var es6EmberTestHelpers = new this.transpileModules(this.mergeTrees([klassy, emberTestHelpers]), {
esperantoOptions: {
_evilES3SafeReExports: true,
strict: true
}
});

var emberTestHelpersAMD = this.concatFiles(es6EmberTestHelpers, {
inputFiles: ['**/*.js'],
outputFile: '/ember-test-helpers.amd.js'
});

var qunitModule = new this.Funnel('bower_components', {
srcDir: '/ember-qunit-source/lib/ember-qunit',
include: [/qunit-module.js$/],
destDir: '/'
});

var es6QunitModule = new this.transpileModules(this.mergeTrees([klassy, qunitModule]), {
esperantoOptions: {
_evilES3SafeReExports: true,
strict: true
}
});

var qunitModuleAMD = this.concatFiles(es6QunitModule, {
inputFiles: ['**/*.js'],
outputFile: '/ember-qunit-module.amd.js'
});

return this.mergeTrees(['vendor', emberTestHelpersAMD, qunitModuleAMD]);
}
};
2 changes: 1 addition & 1 deletion tests/dummy/app/routes/multi-height-multi-view.js
Expand Up @@ -3,6 +3,6 @@ import {types} from '../utils/fixtures';

export default Ember.Route.extend({
model: function() {
return types
return types;
}
});
2 changes: 1 addition & 1 deletion tests/dummy/app/routes/multi-height-virtual.js
Expand Up @@ -3,6 +3,6 @@ import {types} from '../utils/fixtures';

export default Ember.Route.extend({
model: function() {
return types
return types;
}
});
2 changes: 1 addition & 1 deletion tests/dummy/app/routes/multi-height.js
Expand Up @@ -3,6 +3,6 @@ import {types} from '../utils/fixtures';

export default Ember.Route.extend({
model: function() {
return types
return types;
}
});
3 changes: 3 additions & 0 deletions tests/dummy/app/views/test.js
@@ -0,0 +1,3 @@
import Ember from 'ember';

export default Ember.View.extend();
9 changes: 9 additions & 0 deletions tests/helpers/generate-content.js
@@ -0,0 +1,9 @@
import Ember from 'ember';

export default function generateContent(n) {
var content = Ember.A();
for (var i = 0; i < n; i++) {
content.push({name: "Item " + (i+1)});
}
return content;
}
58 changes: 58 additions & 0 deletions tests/helpers/module-for-view.js
@@ -0,0 +1,58 @@
import Ember from 'ember';
import TestModule from 'ember-test-helpers/test-module';
import { getResolver } from 'ember-test-helpers/test-resolver';
import { createModule } from 'qunit-module';

var TestModuleForView = TestModule.extend({
init: function(viewName, description, callbacks) {
this.viewName = viewName;
this._super.call(this, 'view:' + viewName, description, callbacks);
this.setupSteps.push(this.setupView);
},
setupView: function() {
var _this = this;
var resolver = getResolver();
var container = this.container;
var context = this.context;
var templateName = 'template:' + this.viewName;
var template = resolver.resolve(templateName);
if (template) {
container.register(templateName, template);
container.injection(this.subjectName, 'template', templateName);
}
context.dispatcher = Ember.EventDispatcher.create();
context.dispatcher.setup({}, '#ember-testing');
this.callbacks.render = function() {
var containerView = Ember.ContainerView.create({container: container});
var view = Ember.run(function(){
var subject = context.subject();
containerView.pushObject(subject);
containerView.appendTo('#ember-testing');
return subject;
});
_this.teardownSteps.unshift(function() {
Ember.run(function() {
Ember.tryInvoke(containerView, 'destroy');
});
});
return view.$();
};
this.callbacks.append = function() {
Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
return this.callbacks.render();
};
context.$ = function() {
var $view = this.render();
var subject = this.subject();
if (arguments.length){
return subject.$.apply(subject, arguments);
} else {
return $view;
}
};
}
});

export default function moduleForView(name, description, callbacks) {
createModule(TestModuleForView, name, description, callbacks);
}
40 changes: 40 additions & 0 deletions tests/unit/content-test.js
@@ -0,0 +1,40 @@
import Ember from 'ember';
import { test } from 'ember-qunit';
import moduleForView from '../helpers/module-for-view';
import generateContent from '../helpers/generate-content';
import {register} from 'list-view/helper';

var compile = Ember.Handlebars.compile;

moduleForView('test', 'list-view integration - content', {
setup: function() {
register();
}
});

test('the ember-list helper', function(assert){
var view = this.subject({
controller: {
model: generateContent(100)
},
template: compile(`{{#ember-list items=model height=500 row-height=50}}{{name}}{{/ember-list}}`)
});

this.render();

assert.equal(this.$('.ember-list-item-view').length, 11, "The rendered list was updated");
assert.equal(this.$('.ember-list-container').height(), 5000, "The scrollable view has the correct height");
});

test("the ember-list helper uses items=", function(assert) {

var view = this.subject({
controller: { itemz: generateContent(100) },
template: compile("{{#ember-list items=itemz height=500 rowHeight=50}}{{name}}{{/ember-list}}")
});

this.render();

assert.equal(this.$('.ember-list-item-view').length, 11, "The rendered list was updated");
assert.equal(this.$('.ember-list-container').height(), 5000, "The scrollable view has the correct height");
});

0 comments on commit 6b392d8

Please sign in to comment.