diff --git a/.gitignore b/.gitignore
index 29d07caf..6047e1c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-tmp
node_modules
bower_components
-
+tmp
+dist
+build
diff --git a/.npmignore b/.npmignore
index 5788e230..ab1e8a55 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,11 +1,8 @@
bower_components
-dist/amd
-dist/named-amd
-dist/globals
lib
-test
+tests
.travis.yml
bower.json
Brocfile.js
-karma.conf.js
+testem.json
tmp
diff --git a/.travis.yml b/.travis.yml
index a7dae8d0..722244ee 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,9 @@
language: node_js
-node_js:
- - "0.11"
- - "0.10"
-before_script:
- - export DISPLAY=:99.0
- - sh -e /etc/init.d/xvfb start
+
+install:
+ - npm install -g bower broccoli-cli
+ - npm install
+ - bower install
+
+script:
+ - npm test
diff --git a/Brocfile.js b/Brocfile.js
index 3ae2ccf6..b17cd604 100644
--- a/Brocfile.js
+++ b/Brocfile.js
@@ -1,12 +1,76 @@
-var makeModules = require('broccoli-dist-es6-module');
+var concat = require('broccoli-concat');
+var pickFiles = require('broccoli-static-compiler');
+var mergeTrees = require('broccoli-merge-trees');
+var compileES6 = require('broccoli-es6-concatenator');
-module.exports = makeModules('lib', {
- global: 'emq',
- packageName: 'ember-qunit',
- main: 'main',
- shim: {
- 'ember': 'Ember',
- 'qunit': 'QUnit'
- }
+// --- Compile ES6 modules ---
+
+var loader = pickFiles('bower_components', {
+ srcDir: 'loader',
+ files: ['loader.js'],
+ destDir: '/'
+});
+
+// TODO - this manual dependency management has got to go!
+var klassy = pickFiles('bower_components', {
+ srcDir: '/klassy/lib',
+ files: ['klassy.js'],
+ destDir: '/'
+});
+var emberTestHelpers = pickFiles('bower_components', {
+ srcDir: '/ember-test-helpers/lib',
+ files: ['**/*.js'],
+ destDir: '/'
+});
+var deps = mergeTrees([klassy, emberTestHelpers]);
+
+var lib = pickFiles('lib', {
+ srcDir: '/',
+ files: ['**/*.js'],
+ destDir: '/'
+});
+
+var tests = pickFiles('tests', {
+ srcDir: '/',
+ files: ['test-support/*.js', '*.js'],
+ destDir: '/tests'
+});
+
+var main = mergeTrees([loader, deps, lib, tests]);
+main = compileES6(main, {
+ loaderFile: '/loader.js',
+ inputFiles: ['**/*.js'],
+ ignoredModules: ['ember'],
+ outputFile: '/assets/ember-qunit-tests.amd.js'
});
+// --- Select and concat vendor / support files ---
+
+var vendor = concat('bower_components', {
+ inputFiles: ['jquery/dist/jquery.js',
+ 'handlebars/handlebars.js',
+ 'ember/ember.js',
+ 'ember-data/ember-data.js'],
+ outputFile: '/assets/vendor.js'
+});
+
+var qunit = pickFiles('bower_components', {
+ srcDir: '/qunit/qunit',
+ files: ['qunit.js', 'qunit.css'],
+ destDir: '/assets'
+});
+
+var testIndex = pickFiles('tests', {
+ srcDir: '/',
+ files: ['index.html'],
+ destDir: '/tests'
+});
+
+var testSupport = concat('bower_components', {
+ inputFiles: ['ember-cli-shims/app-shims.js',
+ 'ember-cli-test-loader/test-loader.js'],
+ outputFile: '/assets/test-support.js'
+});
+
+module.exports = mergeTrees([main, vendor, testIndex, qunit, testSupport]);
+
diff --git a/README.md b/README.md
index c1af224a..a009943d 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,10 @@
-Ember QUnit
-===========
+# Ember QUnit [![Build Status](https://travis-ci.org/rjackson/ember-qunit.png)](https://travis-ci.org/rwjblue/ember-qunit)
-[![Build Status](https://travis-ci.org/rjackson/ember-qunit.png)](https://travis-ci.org/rwjblue/ember-qunit)
+Ember QUnit simplifies unit testing of Ember applications with QUnit by
+providing QUnit-specific wrappers around the helpers contained in
+[ember-test-helpers](https://github.com/switchfly/ember-test-helpers).
-[WIP] Unit test helpers for Ember.
-
-About
------
-
-Ember QUnit uses your application's resolver to find and automatically
-create test subjects for you with the `moduleFor` and `test` helpers.
-
-*This is a work in progress* but its also quite handy already. Feedback
-is highly encouraged.
-
-Simple Usage
-------------
-
-Include `dist/globals/main.js` as a script in your tests index.html
-
-Module Formats
---------------
-
-You will find all the popular formats in `dist/`. If using globals, all
-methods are found on `window.emq`.
-
-Examples
---------
+## Usage
### Global build setup:
@@ -108,7 +86,7 @@ test('selects first tab and shows the panel', function() {
ok(panel1.$().is(':visible'));
});
```
-If you are using nested components with templates, you have to list them separately - otherwise your templates won't be loaded:
+If you are using nested components with templates, you have to list them separately - otherwise your templates won't be loaded:
```js
moduleForComponent('ic-tabs', 'TabsComponent', {
@@ -155,7 +133,7 @@ the error and assert that you got there:
test('sometimes async gets rejected', function(){
expect(1);
var myThing = MyThing.create()
-
+
return myThing.exampleMethod().then(function(){
ok(false, "promise should not be fulfilled");
})['catch'](function(err){
@@ -164,8 +142,7 @@ test('sometimes async gets rejected', function(){
});
```
-Helpers
--------
+## Test Helpers
### `moduleFor(fullName [, description [, callbacks]])`
@@ -188,23 +165,41 @@ Helpers
- `name`: (String) - the short name of the model you'd use in `store`
operations ie `user`, `assignmentGroup`, etc.
-Contributing
-------------
+## Contributing
+
+Contributions are welcome. Please follow the instructions below to install and
+test this library.
+
+### Installation
```sh
+$ npm install -g bower broccoli-cli
$ npm install
$ bower install
-$ npm install -g karma-cli broccoli-cli
+```
+
+### Testing
+
+In order to test in the browser:
+
+```sh
$ broccoli serve
-# new tab
-$ karma start
```
-Building dist/
---------------
+... and then visit [http://localhost:4200/tests](http://localhost:4200/tests).
+
+In order to perform a CI test:
```sh
-$ broccoli build dist
-# Broccoli will not overwrite dist/, so you
-# may need to delete it first
+$ rm -rf build && BROCCOLI_ENV=test broccoli build build && testem ci
```
+
+Or simply:
+
+```sh
+$ npm test
+```
+
+## Copyright and License
+
+Copyright 2014 Ryan Florence and contributors. [MIT License](./LICENSE).
diff --git a/bower.json b/bower.json
index 671b828d..ee82c2ff 100644
--- a/bower.json
+++ b/bower.json
@@ -3,19 +3,27 @@
"version": "0.1.8",
"authors": [
"Stefan Penner",
- "Ryan Florence"
+ "Ryan Florence",
+ "Robert Jackson",
+ "Dan Gebhardt"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
- "test"
+ "tests"
],
"dependencies": {
- "ember": "^1.3.0"
+ "ember": "^1.7.0",
+ "ember-test-helpers": "^0.0.6"
},
"devDependencies": {
+ "qunit": "^1.15.0",
+ "loader": "stefanpenner/loader.js#1.0.1",
+ "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3",
+ "ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4",
+ "jquery": "~2.1.1",
"ember-data": "~1.0.0-beta.10"
}
}
diff --git a/dist/amd/isolated-container.js b/dist/amd/isolated-container.js
deleted file mode 100644
index 4a2751b5..00000000
--- a/dist/amd/isolated-container.js
+++ /dev/null
@@ -1,23 +0,0 @@
-define(
- ["./test-resolver","ember","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var testResolver = __dependency1__["default"] || __dependency1__;
- var Ember = __dependency2__["default"] || __dependency2__;
-
- __exports__["default"] = function isolatedContainer(fullNames) {
- var resolver = testResolver.get();
- var container = new Ember.Container();
- container.optionsForType('component', { singleton: false });
- container.optionsForType('view', { singleton: false });
- container.optionsForType('template', { instantiate: false });
- container.optionsForType('helper', { instantiate: false });
- container.register('component-lookup:main', Ember.ComponentLookup);
- for (var i = fullNames.length; i > 0; i--) {
- var fullName = fullNames[i - 1];
- var normalizedFullName = resolver.normalize(fullName);
- container.register(fullName, resolver.resolve(normalizedFullName));
- }
- return container;
- }
- });
\ No newline at end of file
diff --git a/dist/amd/main.js b/dist/amd/main.js
deleted file mode 100644
index 99f0ec39..00000000
--- a/dist/amd/main.js
+++ /dev/null
@@ -1,33 +0,0 @@
-define(
- ["ember","./isolated-container","./module-for","./module-for-component","./module-for-model","./test","./test-resolver","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- var isolatedContainer = __dependency2__["default"] || __dependency2__;
- var moduleFor = __dependency3__["default"] || __dependency3__;
- var moduleForComponent = __dependency4__["default"] || __dependency4__;
- var moduleForModel = __dependency5__["default"] || __dependency5__;
- var test = __dependency6__["default"] || __dependency6__;
- var testResolver = __dependency7__["default"] || __dependency7__;
-
- Ember.testing = true;
-
- function setResolver(resolver) {
- testResolver.set(resolver);
- }
-
- function globalize() {
- window.moduleFor = moduleFor;
- window.moduleForComponent = moduleForComponent;
- window.moduleForModel = moduleForModel;
- window.test = test;
- window.setResolver = setResolver;
- }
-
- __exports__.globalize = globalize;
- __exports__.moduleFor = moduleFor;
- __exports__.moduleForComponent = moduleForComponent;
- __exports__.moduleForModel = moduleForModel;
- __exports__.test = test;
- __exports__.setResolver = setResolver;
- });
\ No newline at end of file
diff --git a/dist/amd/module-for-component.js b/dist/amd/module-for-component.js
deleted file mode 100644
index 2f41d4ad..00000000
--- a/dist/amd/module-for-component.js
+++ /dev/null
@@ -1,64 +0,0 @@
-define(
- ["./test-resolver","./module-for","ember","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- "use strict";
- var testResolver = __dependency1__["default"] || __dependency1__;
- var moduleFor = __dependency2__["default"] || __dependency2__;
- var Ember = __dependency3__["default"] || __dependency3__;
-
- __exports__["default"] = function moduleForComponent(name, description, callbacks) {
- var resolver = testResolver.get();
-
- moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
- var layoutName = 'template:components/' + name;
-
- var layout = resolver.resolve(layoutName);
-
- if (layout) {
- container.register(layoutName, layout);
- container.injection('component:' + name, 'layout', layoutName);
- }
-
- context.dispatcher = Ember.EventDispatcher.create();
- context.dispatcher.setup({}, '#ember-testing');
-
- context.__setup_properties__.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;
- });
-
- var oldTeardown = this.teardown;
- this.teardown = function() {
- Ember.run(function() {
- Ember.tryInvoke(containerView, 'destroy');
- });
-
- if (oldTeardown) {
- return oldTeardown.apply(this, arguments);
- }
- };
-
- return view.$();
- };
-
- context.__setup_properties__.append = function(){
- Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
- return this.render();
- };
-
- context.$ = function(){
- var $view = this.render(), subject = this.subject();
-
- if(arguments.length){
- return subject.$.apply(subject, arguments);
- }else{
- return $view;
- }
- };
- });
- }
- });
\ No newline at end of file
diff --git a/dist/amd/module-for-model.js b/dist/amd/module-for-model.js
deleted file mode 100644
index b8bd58eb..00000000
--- a/dist/amd/module-for-model.js
+++ /dev/null
@@ -1,36 +0,0 @@
-define(
- ["./module-for","ember","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var moduleFor = __dependency1__["default"] || __dependency1__;
- var Ember = __dependency2__["default"] || __dependency2__;
-
- __exports__["default"] = function moduleForModel(name, description, callbacks) {
- if (!DS) throw new Error('You must have Ember Data installed to use `moduleForModel`.');
-
- moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
- if (DS._setupContainer) {
- DS._setupContainer(container);
- } else {
- container.register('store:main', DS.Store);
- }
-
- var adapterFactory = container.lookupFactory('adapter:application');
- if (!adapterFactory) {
- container.register('adapter:application', DS.FixtureAdapter);
- }
-
- context.__setup_properties__.store = function(){
- return container.lookup('store:main');
- };
-
- if (context.__setup_properties__.subject === defaultSubject) {
- context.__setup_properties__.subject = function(options) {
- return Ember.run(function() {
- return container.lookup('store:main').createRecord(name, options);
- });
- };
- }
- });
- }
- });
\ No newline at end of file
diff --git a/dist/amd/module-for.js b/dist/amd/module-for.js
deleted file mode 100644
index 7536da6c..00000000
--- a/dist/amd/module-for.js
+++ /dev/null
@@ -1,92 +0,0 @@
-define(
- ["ember","./test-context","./isolated-container","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- //import QUnit from 'qunit'; // Assumed global in runner
- var testContext = __dependency2__["default"] || __dependency2__;
- var isolatedContainer = __dependency3__["default"] || __dependency3__;
-
- __exports__["default"] = function moduleFor(fullName, description, callbacks, delegate) {
- var container;
- var context;
-
- var _callbacks = {
- setup: function(){
- callbacks = callbacks || { };
-
- var needs = [fullName].concat(callbacks.needs || []);
- container = isolatedContainer(needs);
-
- callbacks.subject = callbacks.subject || defaultSubject;
-
- callbacks.setup = callbacks.setup || function() { };
- callbacks.teardown = callbacks.teardown || function() { };
-
- function factory() {
- return container.lookupFactory(fullName);
- }
-
- testContext.set({
- container: container,
- factory: factory,
- dispatcher: null,
- __setup_properties__: callbacks
- });
-
- context = testContext.get();
-
- if (delegate) {
- delegate(container, context, defaultSubject);
- }
-
- if (Ember.$('#ember-testing').length === 0) {
- Ember.$('
').appendTo(document.body);
- }
-
- buildContextVariables(context);
- callbacks.setup.call(context, container);
- },
-
- teardown: function(){
- Ember.run(function(){
- container.destroy();
-
- if (context.dispatcher) {
- context.dispatcher.destroy();
- }
- });
-
- callbacks.teardown(container);
- Ember.$('#ember-testing').empty();
- }
- };
-
- QUnit.module(description || fullName, _callbacks);
- }
-
- function defaultSubject(options, factory) {
- return factory.create(options);
- }
-
- // allow arbitrary named factories, like rspec let
- function buildContextVariables(context) {
- var cache = { };
- var callbacks = context.__setup_properties__;
- var container = context.container;
- var factory = context.factory;
-
- Ember.keys(callbacks).filter(function(key){
- // ignore the default setup/teardown keys
- return key !== 'setup' && key !== 'teardown';
- }).forEach(function(key){
- context[key] = function(options) {
- if (cache[key]) { return cache[key]; }
-
- var result = callbacks[key](options, factory(), container);
- cache[key] = result;
- return result;
- };
- });
- }
- });
\ No newline at end of file
diff --git a/dist/amd/test-context.js b/dist/amd/test-context.js
deleted file mode 100644
index b573c51a..00000000
--- a/dist/amd/test-context.js
+++ /dev/null
@@ -1,16 +0,0 @@
-define(
- ["exports"],
- function(__exports__) {
- "use strict";
- var __test_context__;
-
- function set(context) {
- __test_context__ = context;
- }
-
- __exports__.set = set;function get() {
- return __test_context__;
- }
-
- __exports__.get = get;
- });
\ No newline at end of file
diff --git a/dist/amd/test-resolver.js b/dist/amd/test-resolver.js
deleted file mode 100644
index 5ec49962..00000000
--- a/dist/amd/test-resolver.js
+++ /dev/null
@@ -1,17 +0,0 @@
-define(
- ["exports"],
- function(__exports__) {
- "use strict";
- var __resolver__;
-
- function set(resolver) {
- __resolver__ = resolver;
- }
-
- __exports__.set = set;function get() {
- if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
- return __resolver__;
- }
-
- __exports__.get = get;
- });
\ No newline at end of file
diff --git a/dist/amd/test.js b/dist/amd/test.js
deleted file mode 100644
index b5c9a974..00000000
--- a/dist/amd/test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-define(
- ["ember","./test-context","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- //import QUnit from 'qunit'; // Assumed global in runner
- var testContext = __dependency2__["default"] || __dependency2__;
-
- function resetViews() {
- Ember.View.views = {};
- }
-
- __exports__["default"] = function test(testName, callback) {
-
- function wrapper() {
- var context = testContext.get();
-
- resetViews();
- var result = callback.call(context);
-
- function failTestOnPromiseRejection(reason) {
- ok(false, reason);
- }
-
- Ember.run(function(){
- stop();
- Ember.RSVP.Promise.cast(result)['catch'](failTestOnPromiseRejection)['finally'](start);
- });
- }
-
- QUnit.test(testName, wrapper);
- }
- });
\ No newline at end of file
diff --git a/dist/cjs/isolated-container.js b/dist/cjs/isolated-container.js
deleted file mode 100644
index ab27019f..00000000
--- a/dist/cjs/isolated-container.js
+++ /dev/null
@@ -1,19 +0,0 @@
-"use strict";
-var testResolver = require("./test-resolver")["default"] || require("./test-resolver");
-var Ember = require("ember")["default"] || require("ember");
-
-exports["default"] = function isolatedContainer(fullNames) {
- var resolver = testResolver.get();
- var container = new Ember.Container();
- container.optionsForType('component', { singleton: false });
- container.optionsForType('view', { singleton: false });
- container.optionsForType('template', { instantiate: false });
- container.optionsForType('helper', { instantiate: false });
- container.register('component-lookup:main', Ember.ComponentLookup);
- for (var i = fullNames.length; i > 0; i--) {
- var fullName = fullNames[i - 1];
- var normalizedFullName = resolver.normalize(fullName);
- container.register(fullName, resolver.resolve(normalizedFullName));
- }
- return container;
-}
\ No newline at end of file
diff --git a/dist/cjs/main.js b/dist/cjs/main.js
deleted file mode 100644
index 5067bf8a..00000000
--- a/dist/cjs/main.js
+++ /dev/null
@@ -1,29 +0,0 @@
-"use strict";
-var Ember = require("ember")["default"] || require("ember");
-var isolatedContainer = require("./isolated-container")["default"] || require("./isolated-container");
-var moduleFor = require("./module-for")["default"] || require("./module-for");
-var moduleForComponent = require("./module-for-component")["default"] || require("./module-for-component");
-var moduleForModel = require("./module-for-model")["default"] || require("./module-for-model");
-var test = require("./test")["default"] || require("./test");
-var testResolver = require("./test-resolver")["default"] || require("./test-resolver");
-
-Ember.testing = true;
-
-function setResolver(resolver) {
- testResolver.set(resolver);
-}
-
-function globalize() {
- window.moduleFor = moduleFor;
- window.moduleForComponent = moduleForComponent;
- window.moduleForModel = moduleForModel;
- window.test = test;
- window.setResolver = setResolver;
-}
-
-exports.globalize = globalize;
-exports.moduleFor = moduleFor;
-exports.moduleForComponent = moduleForComponent;
-exports.moduleForModel = moduleForModel;
-exports.test = test;
-exports.setResolver = setResolver;
\ No newline at end of file
diff --git a/dist/cjs/module-for-component.js b/dist/cjs/module-for-component.js
deleted file mode 100644
index 15615e6b..00000000
--- a/dist/cjs/module-for-component.js
+++ /dev/null
@@ -1,60 +0,0 @@
-"use strict";
-var testResolver = require("./test-resolver")["default"] || require("./test-resolver");
-var moduleFor = require("./module-for")["default"] || require("./module-for");
-var Ember = require("ember")["default"] || require("ember");
-
-exports["default"] = function moduleForComponent(name, description, callbacks) {
- var resolver = testResolver.get();
-
- moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
- var layoutName = 'template:components/' + name;
-
- var layout = resolver.resolve(layoutName);
-
- if (layout) {
- container.register(layoutName, layout);
- container.injection('component:' + name, 'layout', layoutName);
- }
-
- context.dispatcher = Ember.EventDispatcher.create();
- context.dispatcher.setup({}, '#ember-testing');
-
- context.__setup_properties__.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;
- });
-
- var oldTeardown = this.teardown;
- this.teardown = function() {
- Ember.run(function() {
- Ember.tryInvoke(containerView, 'destroy');
- });
-
- if (oldTeardown) {
- return oldTeardown.apply(this, arguments);
- }
- };
-
- return view.$();
- };
-
- context.__setup_properties__.append = function(){
- Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
- return this.render();
- };
-
- context.$ = function(){
- var $view = this.render(), subject = this.subject();
-
- if(arguments.length){
- return subject.$.apply(subject, arguments);
- }else{
- return $view;
- }
- };
- });
-}
\ No newline at end of file
diff --git a/dist/cjs/module-for-model.js b/dist/cjs/module-for-model.js
deleted file mode 100644
index 104e3937..00000000
--- a/dist/cjs/module-for-model.js
+++ /dev/null
@@ -1,32 +0,0 @@
-"use strict";
-var moduleFor = require("./module-for")["default"] || require("./module-for");
-var Ember = require("ember")["default"] || require("ember");
-
-exports["default"] = function moduleForModel(name, description, callbacks) {
- if (!DS) throw new Error('You must have Ember Data installed to use `moduleForModel`.');
-
- moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
- if (DS._setupContainer) {
- DS._setupContainer(container);
- } else {
- container.register('store:main', DS.Store);
- }
-
- var adapterFactory = container.lookupFactory('adapter:application');
- if (!adapterFactory) {
- container.register('adapter:application', DS.FixtureAdapter);
- }
-
- context.__setup_properties__.store = function(){
- return container.lookup('store:main');
- };
-
- if (context.__setup_properties__.subject === defaultSubject) {
- context.__setup_properties__.subject = function(options) {
- return Ember.run(function() {
- return container.lookup('store:main').createRecord(name, options);
- });
- };
- }
- });
-}
\ No newline at end of file
diff --git a/dist/cjs/module-for.js b/dist/cjs/module-for.js
deleted file mode 100644
index c8ecdf92..00000000
--- a/dist/cjs/module-for.js
+++ /dev/null
@@ -1,88 +0,0 @@
-"use strict";
-var Ember = require("ember")["default"] || require("ember");
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = require("./test-context")["default"] || require("./test-context");
-var isolatedContainer = require("./isolated-container")["default"] || require("./isolated-container");
-
-exports["default"] = function moduleFor(fullName, description, callbacks, delegate) {
- var container;
- var context;
-
- var _callbacks = {
- setup: function(){
- callbacks = callbacks || { };
-
- var needs = [fullName].concat(callbacks.needs || []);
- container = isolatedContainer(needs);
-
- callbacks.subject = callbacks.subject || defaultSubject;
-
- callbacks.setup = callbacks.setup || function() { };
- callbacks.teardown = callbacks.teardown || function() { };
-
- function factory() {
- return container.lookupFactory(fullName);
- }
-
- testContext.set({
- container: container,
- factory: factory,
- dispatcher: null,
- __setup_properties__: callbacks
- });
-
- context = testContext.get();
-
- if (delegate) {
- delegate(container, context, defaultSubject);
- }
-
- if (Ember.$('#ember-testing').length === 0) {
- Ember.$('').appendTo(document.body);
- }
-
- buildContextVariables(context);
- callbacks.setup.call(context, container);
- },
-
- teardown: function(){
- Ember.run(function(){
- container.destroy();
-
- if (context.dispatcher) {
- context.dispatcher.destroy();
- }
- });
-
- callbacks.teardown(container);
- Ember.$('#ember-testing').empty();
- }
- };
-
- QUnit.module(description || fullName, _callbacks);
-}
-
-function defaultSubject(options, factory) {
- return factory.create(options);
-}
-
-// allow arbitrary named factories, like rspec let
-function buildContextVariables(context) {
- var cache = { };
- var callbacks = context.__setup_properties__;
- var container = context.container;
- var factory = context.factory;
-
- Ember.keys(callbacks).filter(function(key){
- // ignore the default setup/teardown keys
- return key !== 'setup' && key !== 'teardown';
- }).forEach(function(key){
- context[key] = function(options) {
- if (cache[key]) { return cache[key]; }
-
- var result = callbacks[key](options, factory(), container);
- cache[key] = result;
- return result;
- };
- });
-}
\ No newline at end of file
diff --git a/dist/cjs/test-context.js b/dist/cjs/test-context.js
deleted file mode 100644
index 20f6ac5d..00000000
--- a/dist/cjs/test-context.js
+++ /dev/null
@@ -1,12 +0,0 @@
-"use strict";
-var __test_context__;
-
-function set(context) {
- __test_context__ = context;
-}
-
-exports.set = set;function get() {
- return __test_context__;
-}
-
-exports.get = get;
\ No newline at end of file
diff --git a/dist/cjs/test-resolver.js b/dist/cjs/test-resolver.js
deleted file mode 100644
index c405b261..00000000
--- a/dist/cjs/test-resolver.js
+++ /dev/null
@@ -1,13 +0,0 @@
-"use strict";
-var __resolver__;
-
-function set(resolver) {
- __resolver__ = resolver;
-}
-
-exports.set = set;function get() {
- if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
- return __resolver__;
-}
-
-exports.get = get;
\ No newline at end of file
diff --git a/dist/cjs/test.js b/dist/cjs/test.js
deleted file mode 100644
index 67fa2841..00000000
--- a/dist/cjs/test.js
+++ /dev/null
@@ -1,29 +0,0 @@
-"use strict";
-var Ember = require("ember")["default"] || require("ember");
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = require("./test-context")["default"] || require("./test-context");
-
-function resetViews() {
- Ember.View.views = {};
-}
-
-exports["default"] = function test(testName, callback) {
-
- function wrapper() {
- var context = testContext.get();
-
- resetViews();
- var result = callback.call(context);
-
- function failTestOnPromiseRejection(reason) {
- ok(false, reason);
- }
-
- Ember.run(function(){
- stop();
- Ember.RSVP.Promise.cast(result)['catch'](failTestOnPromiseRejection)['finally'](start);
- });
- }
-
- QUnit.test(testName, wrapper);
-}
\ No newline at end of file
diff --git a/dist/globals/main.js b/dist/globals/main.js
deleted file mode 100644
index 91e1b137..00000000
--- a/dist/globals/main.js
+++ /dev/null
@@ -1,293 +0,0 @@
-!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.emq=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0; i--) {
- var fullName = fullNames[i - 1];
- var normalizedFullName = resolver.normalize(fullName);
- container.register(fullName, resolver.resolve(normalizedFullName));
- }
- return container;
-}
-},{"./test-resolver":7}],2:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-var isolatedContainer = _dereq_("./isolated-container")["default"] || _dereq_("./isolated-container");
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var moduleForComponent = _dereq_("./module-for-component")["default"] || _dereq_("./module-for-component");
-var moduleForModel = _dereq_("./module-for-model")["default"] || _dereq_("./module-for-model");
-var test = _dereq_("./test")["default"] || _dereq_("./test");
-var testResolver = _dereq_("./test-resolver")["default"] || _dereq_("./test-resolver");
-
-Ember.testing = true;
-
-function setResolver(resolver) {
- testResolver.set(resolver);
-}
-
-function globalize() {
- window.moduleFor = moduleFor;
- window.moduleForComponent = moduleForComponent;
- window.moduleForModel = moduleForModel;
- window.test = test;
- window.setResolver = setResolver;
-}
-
-exports.globalize = globalize;
-exports.moduleFor = moduleFor;
-exports.moduleForComponent = moduleForComponent;
-exports.moduleForModel = moduleForModel;
-exports.test = test;
-exports.setResolver = setResolver;
-},{"./isolated-container":1,"./module-for":5,"./module-for-component":3,"./module-for-model":4,"./test":8,"./test-resolver":7}],3:[function(_dereq_,module,exports){
-"use strict";
-var testResolver = _dereq_("./test-resolver")["default"] || _dereq_("./test-resolver");
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var Ember = window.Ember["default"] || window.Ember;
-
-exports["default"] = function moduleForComponent(name, description, callbacks) {
- var resolver = testResolver.get();
-
- moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
- var layoutName = 'template:components/' + name;
-
- var layout = resolver.resolve(layoutName);
-
- if (layout) {
- container.register(layoutName, layout);
- container.injection('component:' + name, 'layout', layoutName);
- }
-
- context.dispatcher = Ember.EventDispatcher.create();
- context.dispatcher.setup({}, '#ember-testing');
-
- context.__setup_properties__.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;
- });
-
- var oldTeardown = this.teardown;
- this.teardown = function() {
- Ember.run(function() {
- Ember.tryInvoke(containerView, 'destroy');
- });
-
- if (oldTeardown) {
- return oldTeardown.apply(this, arguments);
- }
- };
-
- return view.$();
- };
-
- context.__setup_properties__.append = function(){
- Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
- return this.render();
- };
-
- context.$ = function(){
- var $view = this.render(), subject = this.subject();
-
- if(arguments.length){
- return subject.$.apply(subject, arguments);
- }else{
- return $view;
- }
- };
- });
-}
-},{"./module-for":5,"./test-resolver":7}],4:[function(_dereq_,module,exports){
-"use strict";
-var moduleFor = _dereq_("./module-for")["default"] || _dereq_("./module-for");
-var Ember = window.Ember["default"] || window.Ember;
-
-exports["default"] = function moduleForModel(name, description, callbacks) {
- if (!DS) throw new Error('You must have Ember Data installed to use `moduleForModel`.');
-
- moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
- if (DS._setupContainer) {
- DS._setupContainer(container);
- } else {
- container.register('store:main', DS.Store);
- }
-
- var adapterFactory = container.lookupFactory('adapter:application');
- if (!adapterFactory) {
- container.register('adapter:application', DS.FixtureAdapter);
- }
-
- context.__setup_properties__.store = function(){
- return container.lookup('store:main');
- };
-
- if (context.__setup_properties__.subject === defaultSubject) {
- context.__setup_properties__.subject = function(options) {
- return Ember.run(function() {
- return container.lookup('store:main').createRecord(name, options);
- });
- };
- }
- });
-}
-},{"./module-for":5}],5:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = _dereq_("./test-context")["default"] || _dereq_("./test-context");
-var isolatedContainer = _dereq_("./isolated-container")["default"] || _dereq_("./isolated-container");
-
-exports["default"] = function moduleFor(fullName, description, callbacks, delegate) {
- var container;
- var context;
-
- var _callbacks = {
- setup: function(){
- callbacks = callbacks || { };
-
- var needs = [fullName].concat(callbacks.needs || []);
- container = isolatedContainer(needs);
-
- callbacks.subject = callbacks.subject || defaultSubject;
-
- callbacks.setup = callbacks.setup || function() { };
- callbacks.teardown = callbacks.teardown || function() { };
-
- function factory() {
- return container.lookupFactory(fullName);
- }
-
- testContext.set({
- container: container,
- factory: factory,
- dispatcher: null,
- __setup_properties__: callbacks
- });
-
- context = testContext.get();
-
- if (delegate) {
- delegate(container, context, defaultSubject);
- }
-
- if (Ember.$('#ember-testing').length === 0) {
- Ember.$('').appendTo(document.body);
- }
-
- buildContextVariables(context);
- callbacks.setup.call(context, container);
- },
-
- teardown: function(){
- Ember.run(function(){
- container.destroy();
-
- if (context.dispatcher) {
- context.dispatcher.destroy();
- }
- });
-
- callbacks.teardown(container);
- Ember.$('#ember-testing').empty();
- }
- };
-
- QUnit.module(description || fullName, _callbacks);
-}
-
-function defaultSubject(options, factory) {
- return factory.create(options);
-}
-
-// allow arbitrary named factories, like rspec let
-function buildContextVariables(context) {
- var cache = { };
- var callbacks = context.__setup_properties__;
- var container = context.container;
- var factory = context.factory;
-
- Ember.keys(callbacks).filter(function(key){
- // ignore the default setup/teardown keys
- return key !== 'setup' && key !== 'teardown';
- }).forEach(function(key){
- context[key] = function(options) {
- if (cache[key]) { return cache[key]; }
-
- var result = callbacks[key](options, factory(), container);
- cache[key] = result;
- return result;
- };
- });
-}
-},{"./isolated-container":1,"./test-context":6}],6:[function(_dereq_,module,exports){
-"use strict";
-var __test_context__;
-
-function set(context) {
- __test_context__ = context;
-}
-
-exports.set = set;function get() {
- return __test_context__;
-}
-
-exports.get = get;
-},{}],7:[function(_dereq_,module,exports){
-"use strict";
-var __resolver__;
-
-function set(resolver) {
- __resolver__ = resolver;
-}
-
-exports.set = set;function get() {
- if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
- return __resolver__;
-}
-
-exports.get = get;
-},{}],8:[function(_dereq_,module,exports){
-"use strict";
-var Ember = window.Ember["default"] || window.Ember;
-//import QUnit from 'qunit'; // Assumed global in runner
-var testContext = _dereq_("./test-context")["default"] || _dereq_("./test-context");
-
-function resetViews() {
- Ember.View.views = {};
-}
-
-exports["default"] = function test(testName, callback) {
-
- function wrapper() {
- var context = testContext.get();
-
- resetViews();
- var result = callback.call(context);
-
- function failTestOnPromiseRejection(reason) {
- ok(false, reason);
- }
-
- Ember.run(function(){
- stop();
- Ember.RSVP.Promise.cast(result)['catch'](failTestOnPromiseRejection)['finally'](start);
- });
- }
-
- QUnit.test(testName, wrapper);
-}
-},{"./test-context":6}]},{},[2])
-(2)
-});
\ No newline at end of file
diff --git a/dist/named-amd/main.js b/dist/named-amd/main.js
deleted file mode 100644
index 07328a54..00000000
--- a/dist/named-amd/main.js
+++ /dev/null
@@ -1,314 +0,0 @@
-define("ember-qunit/isolated-container",
- ["./test-resolver","ember","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var testResolver = __dependency1__["default"] || __dependency1__;
- var Ember = __dependency2__["default"] || __dependency2__;
-
- __exports__["default"] = function isolatedContainer(fullNames) {
- var resolver = testResolver.get();
- var container = new Ember.Container();
- container.optionsForType('component', { singleton: false });
- container.optionsForType('view', { singleton: false });
- container.optionsForType('template', { instantiate: false });
- container.optionsForType('helper', { instantiate: false });
- container.register('component-lookup:main', Ember.ComponentLookup);
- for (var i = fullNames.length; i > 0; i--) {
- var fullName = fullNames[i - 1];
- var normalizedFullName = resolver.normalize(fullName);
- container.register(fullName, resolver.resolve(normalizedFullName));
- }
- return container;
- }
- });
-define("ember-qunit",
- ["ember","./isolated-container","./module-for","./module-for-component","./module-for-model","./test","./test-resolver","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- var isolatedContainer = __dependency2__["default"] || __dependency2__;
- var moduleFor = __dependency3__["default"] || __dependency3__;
- var moduleForComponent = __dependency4__["default"] || __dependency4__;
- var moduleForModel = __dependency5__["default"] || __dependency5__;
- var test = __dependency6__["default"] || __dependency6__;
- var testResolver = __dependency7__["default"] || __dependency7__;
-
- Ember.testing = true;
-
- function setResolver(resolver) {
- testResolver.set(resolver);
- }
-
- function globalize() {
- window.moduleFor = moduleFor;
- window.moduleForComponent = moduleForComponent;
- window.moduleForModel = moduleForModel;
- window.test = test;
- window.setResolver = setResolver;
- }
-
- __exports__.globalize = globalize;
- __exports__.moduleFor = moduleFor;
- __exports__.moduleForComponent = moduleForComponent;
- __exports__.moduleForModel = moduleForModel;
- __exports__.test = test;
- __exports__.setResolver = setResolver;
- });
-define("ember-qunit/module-for-component",
- ["./test-resolver","./module-for","ember","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- "use strict";
- var testResolver = __dependency1__["default"] || __dependency1__;
- var moduleFor = __dependency2__["default"] || __dependency2__;
- var Ember = __dependency3__["default"] || __dependency3__;
-
- __exports__["default"] = function moduleForComponent(name, description, callbacks) {
- var resolver = testResolver.get();
-
- moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
- var layoutName = 'template:components/' + name;
-
- var layout = resolver.resolve(layoutName);
-
- if (layout) {
- container.register(layoutName, layout);
- container.injection('component:' + name, 'layout', layoutName);
- }
-
- context.dispatcher = Ember.EventDispatcher.create();
- context.dispatcher.setup({}, '#ember-testing');
-
- context.__setup_properties__.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;
- });
-
- var oldTeardown = this.teardown;
- this.teardown = function() {
- Ember.run(function() {
- Ember.tryInvoke(containerView, 'destroy');
- });
-
- if (oldTeardown) {
- return oldTeardown.apply(this, arguments);
- }
- };
-
- return view.$();
- };
-
- context.__setup_properties__.append = function(){
- Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
- return this.render();
- };
-
- context.$ = function(){
- var $view = this.render(), subject = this.subject();
-
- if(arguments.length){
- return subject.$.apply(subject, arguments);
- }else{
- return $view;
- }
- };
- });
- }
- });
-define("ember-qunit/module-for-model",
- ["./module-for","ember","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var moduleFor = __dependency1__["default"] || __dependency1__;
- var Ember = __dependency2__["default"] || __dependency2__;
-
- __exports__["default"] = function moduleForModel(name, description, callbacks) {
- if (!DS) throw new Error('You must have Ember Data installed to use `moduleForModel`.');
-
- moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
- if (DS._setupContainer) {
- DS._setupContainer(container);
- } else {
- container.register('store:main', DS.Store);
- }
-
- var adapterFactory = container.lookupFactory('adapter:application');
- if (!adapterFactory) {
- container.register('adapter:application', DS.FixtureAdapter);
- }
-
- context.__setup_properties__.store = function(){
- return container.lookup('store:main');
- };
-
- if (context.__setup_properties__.subject === defaultSubject) {
- context.__setup_properties__.subject = function(options) {
- return Ember.run(function() {
- return container.lookup('store:main').createRecord(name, options);
- });
- };
- }
- });
- }
- });
-define("ember-qunit/module-for",
- ["ember","./test-context","./isolated-container","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- //import QUnit from 'qunit'; // Assumed global in runner
- var testContext = __dependency2__["default"] || __dependency2__;
- var isolatedContainer = __dependency3__["default"] || __dependency3__;
-
- __exports__["default"] = function moduleFor(fullName, description, callbacks, delegate) {
- var container;
- var context;
-
- var _callbacks = {
- setup: function(){
- callbacks = callbacks || { };
-
- var needs = [fullName].concat(callbacks.needs || []);
- container = isolatedContainer(needs);
-
- callbacks.subject = callbacks.subject || defaultSubject;
-
- callbacks.setup = callbacks.setup || function() { };
- callbacks.teardown = callbacks.teardown || function() { };
-
- function factory() {
- return container.lookupFactory(fullName);
- }
-
- testContext.set({
- container: container,
- factory: factory,
- dispatcher: null,
- __setup_properties__: callbacks
- });
-
- context = testContext.get();
-
- if (delegate) {
- delegate(container, context, defaultSubject);
- }
-
- if (Ember.$('#ember-testing').length === 0) {
- Ember.$('').appendTo(document.body);
- }
-
- buildContextVariables(context);
- callbacks.setup.call(context, container);
- },
-
- teardown: function(){
- Ember.run(function(){
- container.destroy();
-
- if (context.dispatcher) {
- context.dispatcher.destroy();
- }
- });
-
- callbacks.teardown(container);
- Ember.$('#ember-testing').empty();
- }
- };
-
- QUnit.module(description || fullName, _callbacks);
- }
-
- function defaultSubject(options, factory) {
- return factory.create(options);
- }
-
- // allow arbitrary named factories, like rspec let
- function buildContextVariables(context) {
- var cache = { };
- var callbacks = context.__setup_properties__;
- var container = context.container;
- var factory = context.factory;
-
- Ember.keys(callbacks).filter(function(key){
- // ignore the default setup/teardown keys
- return key !== 'setup' && key !== 'teardown';
- }).forEach(function(key){
- context[key] = function(options) {
- if (cache[key]) { return cache[key]; }
-
- var result = callbacks[key](options, factory(), container);
- cache[key] = result;
- return result;
- };
- });
- }
- });
-define("ember-qunit/test-context",
- ["exports"],
- function(__exports__) {
- "use strict";
- var __test_context__;
-
- function set(context) {
- __test_context__ = context;
- }
-
- __exports__.set = set;function get() {
- return __test_context__;
- }
-
- __exports__.get = get;
- });
-define("ember-qunit/test-resolver",
- ["exports"],
- function(__exports__) {
- "use strict";
- var __resolver__;
-
- function set(resolver) {
- __resolver__ = resolver;
- }
-
- __exports__.set = set;function get() {
- if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
- return __resolver__;
- }
-
- __exports__.get = get;
- });
-define("ember-qunit/test",
- ["ember","./test-context","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
- "use strict";
- var Ember = __dependency1__["default"] || __dependency1__;
- //import QUnit from 'qunit'; // Assumed global in runner
- var testContext = __dependency2__["default"] || __dependency2__;
-
- function resetViews() {
- Ember.View.views = {};
- }
-
- __exports__["default"] = function test(testName, callback) {
-
- function wrapper() {
- var context = testContext.get();
-
- resetViews();
- var result = callback.call(context);
-
- function failTestOnPromiseRejection(reason) {
- ok(false, reason);
- }
-
- Ember.run(function(){
- stop();
- Ember.RSVP.Promise.cast(result)['catch'](failTestOnPromiseRejection)['finally'](start);
- });
- }
-
- QUnit.test(testName, wrapper);
- }
- });
\ No newline at end of file
diff --git a/karma.conf.js b/karma.conf.js
deleted file mode 100644
index 4efd1350..00000000
--- a/karma.conf.js
+++ /dev/null
@@ -1,38 +0,0 @@
-module.exports = function(config) {
- config.set({
-
- frameworks: ['qunit'],
-
- files: [
- 'bower_components/jquery/dist/jquery.js',
- 'bower_components/handlebars/handlebars.js',
- 'bower_components/ember/ember.js',
- 'bower_components/ember-data/ember-data.js',
- 'dist/globals/main.js',
- // when running broccoli serve, we use this instead
- 'http://localhost:4200/globals/main.js',
- 'test/support/setup.js',
- 'test/**/*.spec.js'
- ],
-
- basePath: '',
-
- reporters: ['progress'],
-
- port: 9876,
-
- colors: true,
-
- logLevel: config.LOG_INFO,
-
- autoWatch: true,
-
- browsers: ['Chrome'],
-
- captureTimeout: 60000,
-
- singleRun: false
-
- });
-};
-
diff --git a/lib/ember-qunit.js b/lib/ember-qunit.js
new file mode 100644
index 00000000..b8ab95c5
--- /dev/null
+++ b/lib/ember-qunit.js
@@ -0,0 +1,22 @@
+import moduleFor from 'ember-qunit/module-for';
+import moduleForComponent from 'ember-qunit/module-for-component';
+import moduleForModel from 'ember-qunit/module-for-model';
+import test from 'ember-qunit/test';
+import { setResolver } from 'ember-test-helpers';
+
+function globalize() {
+ window.moduleFor = moduleFor;
+ window.moduleForComponent = moduleForComponent;
+ window.moduleForModel = moduleForModel;
+ window.test = test;
+ window.setResolver = setResolver;
+}
+
+export {
+ globalize,
+ moduleFor,
+ moduleForComponent,
+ moduleForModel,
+ test,
+ setResolver
+};
diff --git a/lib/ember-qunit/module-for-component.js b/lib/ember-qunit/module-for-component.js
new file mode 100644
index 00000000..be699be3
--- /dev/null
+++ b/lib/ember-qunit/module-for-component.js
@@ -0,0 +1,6 @@
+import { createModule } from './qunit-module';
+import { TestModuleForComponent } from 'ember-test-helpers';
+
+export default function moduleForComponent(name, description, callbacks) {
+ createModule(TestModuleForComponent, name, description, callbacks);
+}
diff --git a/lib/ember-qunit/module-for-model.js b/lib/ember-qunit/module-for-model.js
new file mode 100644
index 00000000..7108b304
--- /dev/null
+++ b/lib/ember-qunit/module-for-model.js
@@ -0,0 +1,6 @@
+import { createModule } from './qunit-module';
+import { TestModuleForModel } from 'ember-test-helpers';
+
+export default function moduleForModel(name, description, callbacks) {
+ createModule(TestModuleForModel, name, description, callbacks);
+}
diff --git a/lib/ember-qunit/module-for.js b/lib/ember-qunit/module-for.js
new file mode 100644
index 00000000..ce206c83
--- /dev/null
+++ b/lib/ember-qunit/module-for.js
@@ -0,0 +1,6 @@
+import { createModule } from './qunit-module';
+import { TestModule } from 'ember-test-helpers';
+
+export default function moduleFor(name, description, callbacks) {
+ createModule(TestModule, name, description, callbacks);
+}
diff --git a/lib/ember-qunit/qunit-module.js b/lib/ember-qunit/qunit-module.js
new file mode 100644
index 00000000..2092d02b
--- /dev/null
+++ b/lib/ember-qunit/qunit-module.js
@@ -0,0 +1,12 @@
+export function createModule(Constructor, name, description, callbacks) {
+ var module = new Constructor(name, description, callbacks);
+
+ QUnit.module(module.name, {
+ setup: function() {
+ module.setup();
+ },
+ teardown: function() {
+ module.teardown();
+ }
+ });
+}
\ No newline at end of file
diff --git a/lib/test.js b/lib/ember-qunit/test.js
similarity index 77%
rename from lib/test.js
rename to lib/ember-qunit/test.js
index cd13d1bb..754bd6c6 100644
--- a/lib/test.js
+++ b/lib/ember-qunit/test.js
@@ -1,16 +1,14 @@
import Ember from 'ember';
-//import QUnit from 'qunit'; // Assumed global in runner
-import testContext from './test-context';
+import { getContext } from 'ember-test-helpers';
function resetViews() {
Ember.View.views = {};
}
export default function test(testName, callback) {
-
function wrapper() {
- var context = testContext.get();
-
+ var context = getContext();
+
resetViews();
var result = callback.call(context);
@@ -26,4 +24,3 @@ export default function test(testName, callback) {
QUnit.test(testName, wrapper);
}
-
diff --git a/lib/isolated-container.js b/lib/isolated-container.js
deleted file mode 100644
index e835a5b8..00000000
--- a/lib/isolated-container.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import testResolver from './test-resolver';
-import Ember from 'ember';
-
-export default function isolatedContainer(fullNames) {
- var resolver = testResolver.get();
- var container = new Ember.Container();
- container.optionsForType('component', { singleton: false });
- container.optionsForType('view', { singleton: false });
- container.optionsForType('template', { instantiate: false });
- container.optionsForType('helper', { instantiate: false });
- container.register('component-lookup:main', Ember.ComponentLookup);
- for (var i = fullNames.length; i > 0; i--) {
- var fullName = fullNames[i - 1];
- var normalizedFullName = resolver.normalize(fullName);
- container.register(fullName, resolver.resolve(normalizedFullName));
- }
- return container;
-}
diff --git a/lib/main.js b/lib/main.js
deleted file mode 100644
index de334a8c..00000000
--- a/lib/main.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import Ember from 'ember';
-import isolatedContainer from './isolated-container';
-import moduleFor from './module-for';
-import moduleForComponent from './module-for-component';
-import moduleForModel from './module-for-model';
-import test from './test';
-import testResolver from './test-resolver';
-
-Ember.testing = true;
-
-function setResolver(resolver) {
- testResolver.set(resolver);
-}
-
-function globalize() {
- window.moduleFor = moduleFor;
- window.moduleForComponent = moduleForComponent;
- window.moduleForModel = moduleForModel;
- window.test = test;
- window.setResolver = setResolver;
-}
-
-export {
- globalize,
- moduleFor,
- moduleForComponent,
- moduleForModel,
- test,
- setResolver
-};
-
diff --git a/lib/module-for-component.js b/lib/module-for-component.js
deleted file mode 100644
index 4e41332e..00000000
--- a/lib/module-for-component.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import testResolver from './test-resolver';
-import moduleFor from './module-for';
-import Ember from 'ember';
-
-export default function moduleForComponent(name, description, callbacks) {
- var resolver = testResolver.get();
-
- moduleFor('component:' + name, description, callbacks, function(container, context, defaultSubject) {
- var layoutName = 'template:components/' + name;
-
- var layout = resolver.resolve(layoutName);
-
- if (layout) {
- container.register(layoutName, layout);
- container.injection('component:' + name, 'layout', layoutName);
- }
-
- context.dispatcher = Ember.EventDispatcher.create();
- context.dispatcher.setup({}, '#ember-testing');
-
- context.__setup_properties__.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;
- });
-
- var oldTeardown = this.teardown;
- this.teardown = function() {
- Ember.run(function() {
- Ember.tryInvoke(containerView, 'destroy');
- });
-
- if (oldTeardown) {
- return oldTeardown.apply(this, arguments);
- }
- };
-
- return view.$();
- };
-
- context.__setup_properties__.append = function(){
- Ember.deprecate('this.append() is deprecated. Please use this.render() instead.');
- return this.render();
- };
-
- context.$ = function(){
- var $view = this.render(), subject = this.subject();
-
- if(arguments.length){
- return subject.$.apply(subject, arguments);
- }else{
- return $view;
- }
- };
- });
-}
diff --git a/lib/module-for-model.js b/lib/module-for-model.js
deleted file mode 100644
index 5a4bee24..00000000
--- a/lib/module-for-model.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import moduleFor from './module-for';
-import Ember from 'ember';
-
-export default function moduleForModel(name, description, callbacks) {
- if (!DS) throw new Error('You must have Ember Data installed to use `moduleForModel`.');
-
- moduleFor('model:' + name, description, callbacks, function(container, context, defaultSubject) {
- if (DS._setupContainer) {
- DS._setupContainer(container);
- } else {
- container.register('store:main', DS.Store);
- }
-
- var adapterFactory = container.lookupFactory('adapter:application');
- if (!adapterFactory) {
- container.register('adapter:application', DS.FixtureAdapter);
- }
-
- context.__setup_properties__.store = function(){
- return container.lookup('store:main');
- };
-
- if (context.__setup_properties__.subject === defaultSubject) {
- context.__setup_properties__.subject = function(options) {
- return Ember.run(function() {
- return container.lookup('store:main').createRecord(name, options);
- });
- };
- }
- });
-}
diff --git a/lib/module-for.js b/lib/module-for.js
deleted file mode 100644
index b9bd399b..00000000
--- a/lib/module-for.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import Ember from 'ember';
-//import QUnit from 'qunit'; // Assumed global in runner
-import testContext from './test-context';
-import isolatedContainer from './isolated-container';
-
-export default function moduleFor(fullName, description, callbacks, delegate) {
- var container;
- var context;
-
- var _callbacks = {
- setup: function(){
- callbacks = callbacks || { };
-
- var needs = [fullName].concat(callbacks.needs || []);
- container = isolatedContainer(needs);
-
- callbacks.subject = callbacks.subject || defaultSubject;
-
- callbacks.setup = callbacks.setup || function() { };
- callbacks.teardown = callbacks.teardown || function() { };
-
- function factory() {
- return container.lookupFactory(fullName);
- }
-
- testContext.set({
- container: container,
- factory: factory,
- dispatcher: null,
- __setup_properties__: callbacks
- });
-
- context = testContext.get();
-
- if (Ember.$('#ember-testing').length === 0) {
- Ember.$('').appendTo(document.body);
- }
-
- if (delegate) {
- delegate(container, context, defaultSubject);
- }
-
- buildContextVariables(context);
- callbacks.setup.call(context, container);
- },
-
- teardown: function(){
- Ember.run(function(){
- container.destroy();
-
- if (context.dispatcher) {
- context.dispatcher.destroy();
- }
- });
-
- callbacks.teardown(container);
- Ember.$('#ember-testing').empty();
- }
- };
-
- QUnit.module(description || fullName, _callbacks);
-}
-
-function defaultSubject(options, factory) {
- return factory.create(options);
-}
-
-// allow arbitrary named factories, like rspec let
-function buildContextVariables(context) {
- var cache = { };
- var callbacks = context.__setup_properties__;
- var container = context.container;
- var factory = context.factory;
-
- Ember.keys(callbacks).filter(function(key){
- // ignore the default setup/teardown keys
- return key !== 'setup' && key !== 'teardown';
- }).forEach(function(key){
- context[key] = function(options) {
- if (cache[key]) { return cache[key]; }
-
- var result = callbacks[key](options, factory(), container);
- cache[key] = result;
- return result;
- };
- });
-}
diff --git a/lib/test-context.js b/lib/test-context.js
deleted file mode 100644
index 2e7c3c2e..00000000
--- a/lib/test-context.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var __test_context__;
-
-export function set(context) {
- __test_context__ = context;
-}
-
-export function get() {
- return __test_context__;
-}
-
diff --git a/lib/test-resolver.js b/lib/test-resolver.js
deleted file mode 100644
index dc45ecbe..00000000
--- a/lib/test-resolver.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var __resolver__;
-
-export function set(resolver) {
- __resolver__ = resolver;
-}
-
-export function get() {
- if (__resolver__ == null) throw new Error('you must set a resolver with `testResolver.set(resolver)`');
- return __resolver__;
-}
-
diff --git a/package.json b/package.json
index 8dc67856..3c6e5cd4 100644
--- a/package.json
+++ b/package.json
@@ -1,32 +1,24 @@
{
"name": "ember-qunit",
"version": "0.1.8",
- "description": "unit test helpers for ember",
- "main": "dist/cjs/main.js",
+ "description": "QUnit helpers for testing Ember.js applications",
+ "main": "lib/ember-qunit.js",
"scripts": {
- "test": "bower install && rm -rf dist && broccoli build dist && karma start --browsers Firefox --single-run"
+ "test": "rm -rf build && BROCCOLI_ENV=test broccoli build build && testem ci"
},
"authors": [
"Stefan Penner",
- "Ryan Florence"
+ "Ryan Florence",
+ "Robert Jackson",
+ "Dan Gebhardt"
],
"license": "MIT",
"devDependencies": {
- "broccoli": "^0.12.0",
- "broccoli-dist-es6-module": "^0.2.0",
- "karma-script-launcher": "~0.1.0",
- "karma-chrome-launcher": "~0.1.2",
- "karma-firefox-launcher": "~0.1.3",
- "karma-html2js-preprocessor": "~0.1.0",
- "karma-jasmine": "~0.1.5",
- "karma-coffee-preprocessor": "~0.1.3",
- "requirejs": "~2.1.11",
- "karma-requirejs": "~0.2.1",
- "karma-phantomjs-launcher": "~0.1.2",
- "karma": "~0.10.9",
- "qunitjs": "~1.14.0",
- "karma-qunit": "~0.1.1",
- "bower": "^1.2.8",
- "broccoli-cli": "0.0.1"
+ "broccoli": "^0.13.0",
+ "broccoli-concat": "^0.0.11",
+ "broccoli-es6-concatenator": "^0.1.7",
+ "broccoli-merge-trees": "^0.1.4",
+ "broccoli-static-compiler": "^0.1.4",
+ "testem": "0.6.19"
}
}
diff --git a/test/main.spec.js b/test/main.spec.js
deleted file mode 100644
index defc321a..00000000
--- a/test/main.spec.js
+++ /dev/null
@@ -1,267 +0,0 @@
-emq.globalize();
-
-var Post = DS.Model.extend({
- title: DS.attr(),
- user: DS.attr(),
- comments: DS.hasMany('comment')
-});
-var Comment = DS.Model.extend({
- post: DS.belongsTo('post')
-});
-
-var PrettyColor = Ember.Component.extend({
- classNames: ['pretty-color'],
- attributeBindings: ['style'],
- style: function(){
- return 'color: ' + this.get('name') + ';';
- }.property('name')
-});
-
-
-var Whazzit = DS.Model.extend({ gear: DS.attr('string') });
-var whazzitCreateRecordCalled = false;
-var WhazzitAdapter = DS.FixtureAdapter.extend({
- createRecord: function(){
- whazzitCreateRecordCalled = true;
- return this._super.apply(this, arguments);
- }
-});
-
-var ApplicationAdapter = DS.FixtureAdapter.extend();
-
-var registry = {
- 'component:x-foo': Ember.Component.extend(),
- 'component:pretty-color': PrettyColor,
- 'template:components/pretty-color': 'Pretty Color: {{name}}'.compile(),
- 'route:foo': Ember.Route.extend(),
- 'controller:foos': Ember.ArrayController.extend(),
- 'controller:hello-world': Ember.ObjectController.extend(),
- 'controller:bar': Ember.Controller.extend({
- needs: ['foos', 'helloWorld']
- }),
- 'model:post': Post,
- 'model:comment': Comment,
- 'model:whazzit': Whazzit,
- 'adapter:whazzit': WhazzitAdapter,
- 'adapter:application': ApplicationAdapter,
-};
-
-var Resolver = Ember.DefaultResolver.extend({
- resolve: function(fullName) {
- return registry[fullName] || this._super.apply(this, arguments);
- },
- normalize: function(fullName) {
- return Ember.String.dasherize(fullName);
- }
-});
-
-setResolver(Resolver.create());
-
-// NOTE: this must be the first test to run because it relies on the
-// '#ember-testing' div having not been added to the DOM yet; once added
-// it is never removed
-moduleFor('component:x-foo', 'moduleFor with empty DOM', {}, function() {
- equal(Ember.$('#ember-testing').length, 1, "root element is already in DOM");
-});
-
-test("root element is auto-added before moduleFor callback", function() {
- expect(1);
-});
-
-
-//moduleForRoute('foo', 'FooRoute');
-
-//test('creates route instance', function() {
- //expect(1);
- //var route = this.subject();
- //ok(route instanceof registry['route:foo']);
-//});
-
-
-
-//moduleForController('bar', 'BarController');
-
-//test('creates controller instance', function() {
- //expect(1);
- //var controller = this.subject();
- //ok(controller instanceof registry['controller:bar']);
-//});
-
-moduleFor('controller:bar', 'moduleFor with bar controller', {
- needs: ['controller:foos', 'controller:helloWorld']
-});
-
-test('exists', function() {
- var bar = this.subject();
-
- var foos = bar.get('controllers.foos');
- var helloWorld = bar.get('controllers.helloWorld');
-
- ok(bar);
- ok(bar instanceof Ember.Controller);
- ok(foos instanceof Ember.ArrayController);
- ok(helloWorld instanceof Ember.ObjectController);
-});
-
-test('exists again', function() {
- var bar = this.subject();
-
- var foos = bar.get('controllers.foos');
- var helloWorld = bar.get('controllers.helloWorld');
-
- ok(bar);
- ok(bar instanceof Ember.Controller);
- ok(foos instanceof Ember.ArrayController);
- ok(helloWorld instanceof Ember.ObjectController);
-});
-
-moduleForModel('whazzit', 'moduleForModel whazzit without adapter');
-
-test('store exists', function() {
- var store = this.store();
- ok(store instanceof DS.Store);
-});
-
-test('model exists as subject', function() {
- var model = this.subject();
- ok(model);
- ok(model instanceof DS.Model);
- ok(model instanceof Whazzit);
-});
-
-test('model is using the FixtureAdapter', function() {
- var model = this.subject(),
- store = this.store();
-
- ok(store.adapterFor(model.constructor) instanceof DS.FixtureAdapter);
- ok(!(store.adapterFor(model.constructor) instanceof WhazzitAdapter));
-});
-
-moduleForModel('whazzit', 'moduleForModel whazzit with adapter', {
- needs: ['adapter:whazzit'],
- teardown: function(){
- whazzitCreateRecordCalled = false;
- }
-});
-
-test('model is using the WhazzitAdapter', function() {
- var model = this.subject(),
- store = this.store();
-
- ok(store.adapterFor(model.constructor) instanceof WhazzitAdapter);
-});
-
-if (DS._setupContainer) {
- test('creates the custom adapter', function() {
- expect(2);
- ok(!whazzitCreateRecordCalled, 'precond - custom adapter is not yet instantiated');
-
- var model = this.subject();
-
- return Ember.run(function(){
- model.set('gear', '42');
- return model.save().then(function(){
- ok(whazzitCreateRecordCalled, 'uses the custom adapter');
- });
- });
- });
-} else {
- test('without DS._setupContainer fails to create the custom adapter', function() {
- var thrown = false;
- try {
- var model = this.subject();
- Ember.run(function(){
- model.set('gear', '42');
- return model.save();
- });
- } catch(e) {
- thrown = true;
- }
- ok(thrown, 'error is thrown without DS._setupContainer');
- });
-}
-
-
-moduleForModel('whazzit', 'moduleForModel whazzit with application adapter', {
- needs: ['adapter:application']
-});
-
-test('model is using the ApplicationAdapter', function() {
- var model = this.subject(),
- store = this.store();
-
- ok(store.adapterFor(model.constructor) instanceof ApplicationAdapter);
- ok(!(store.adapterFor(model.constructor) instanceof WhazzitAdapter));
-});
-
-moduleForComponent('x-foo', 'moduleForComponent with x-foo');
-
-test('renders', function() {
- expect(2);
- var component = this.subject();
- equal(component.state, 'preRender');
- this.render();
- equal(component.state, 'inDOM');
-});
-
-test('append', function() {
- expect(3);
- var component = this.subject();
- equal(component.state, 'preRender');
- this.append();
- equal(component.state, 'inDOM');
- ok(Ember.A(Ember.deprecationWarnings).contains('this.append() is deprecated. Please use this.render() instead.'));
-});
-
-test('yields', function() {
- expect(2);
- var component = this.subject({
- layout: "yield me".compile()
- });
- equal(component.state, 'preRender');
- this.render();
- equal(component.state, 'inDOM');
-});
-
-test('can lookup components in its layout', function() {
- expect(1);
- var component = this.subject({
- layout: "{{x-foo id='yodawg-i-heard-you-liked-x-foo-in-ur-x-foo'}}".compile()
- });
- this.render();
- equal(component.state, 'inDOM');
-});
-
-test('clears out views from test to test', function() {
- expect(1);
- var component = this.subject({
- layout: "{{x-foo id='yodawg-i-heard-you-liked-x-foo-in-ur-x-foo'}}".compile()
- });
- this.render();
- ok(true, 'rendered without id already being used from another test');
-});
-
-moduleForComponent('pretty-color', 'moduleForComponent with pretty-color');
-
-test("className", function(){
- // first call to this.$() renders the component.
- ok(this.$().is('.pretty-color'));
-});
-
-test("template", function(){
- var component = this.subject();
-
- equal($.trim(this.$().text()), 'Pretty Color:');
-
- Ember.run(function(){
- component.set('name', 'green');
- });
-
- equal($.trim(this.$().text()), 'Pretty Color: green');
-});
-
-test("$", function(){
- var component = this.subject({name: 'green'});
- equal($.trim(this.$('.color-name').text()), 'green');
- equal($.trim(this.$().text()), 'Pretty Color: green');
-});
diff --git a/test/support/setup.js b/test/support/setup.js
deleted file mode 100644
index 401359a4..00000000
--- a/test/support/setup.js
+++ /dev/null
@@ -1,13 +0,0 @@
-Ember.deprecationWarnings = [];
-
-Ember.deprecate = function(message){
- Ember.deprecationWarnings.push(message);
-};
-
-String.prototype.compile = function() {
- return Ember.Handlebars.compile(this);
-};
-
-Array.prototype.compile = function() {
- return Ember.Handlebars.compile(this.join('\n'));
-};
diff --git a/testem.json b/testem.json
new file mode 100644
index 00000000..a2bc0b13
--- /dev/null
+++ b/testem.json
@@ -0,0 +1,11 @@
+{
+ "framework": "qunit",
+ "cwd": "build/",
+ "serve_files": [
+ "assets/vendor.js",
+ "assets/ember-qunit-tests.amd.js",
+ "assets/test-support.js"
+ ],
+ "launch_in_ci": ["PhantomJS"],
+ "launch_in_dev": ["PhantomJS", "Chrome"]
+}
diff --git a/tests/index.html b/tests/index.html
new file mode 100644
index 00000000..16e9cd71
--- /dev/null
+++ b/tests/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+ Ember-QUnit Tests
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/module-for-component-test.js b/tests/module-for-component-test.js
new file mode 100644
index 00000000..c4bdfef5
--- /dev/null
+++ b/tests/module-for-component-test.js
@@ -0,0 +1,104 @@
+import Ember from 'ember';
+import { moduleForComponent, test } from 'ember-qunit';
+import { setResolverRegistry } from 'tests/test-support/resolver';
+
+var PrettyColor = Ember.Component.extend({
+ classNames: ['pretty-color'],
+ attributeBindings: ['style'],
+ style: function(){
+ return 'color: ' + this.get('name') + ';';
+ }.property('name')
+});
+
+function setupRegistry() {
+ setResolverRegistry({
+ 'component:x-foo': Ember.Component.extend(),
+ 'component:pretty-color': PrettyColor,
+ 'template:components/pretty-color': Ember.Handlebars.compile('Pretty Color: {{name}}')
+ });
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+moduleForComponent('x-foo', {
+ beforeSetup: function() {
+ setupRegistry();
+ }
+});
+
+test('renders', function() {
+ expect(2);
+ var component = this.subject();
+ equal(component._state, 'preRender');
+ this.render();
+ equal(component._state, 'inDOM');
+});
+
+test('append', function() {
+ expect(2);
+ var component = this.subject();
+ equal(component._state, 'preRender');
+ this.append();
+ equal(component._state, 'inDOM');
+ // TODO - is there still a way to check deprecationWarnings?
+// ok(Ember.A(Ember.deprecationWarnings).contains('this.append() is deprecated. Please use this.render() instead.'));
+});
+
+test('yields', function() {
+ expect(2);
+ var component = this.subject({
+ layout: Ember.Handlebars.compile("yield me")
+ });
+ equal(component._state, 'preRender');
+ this.render();
+ equal(component._state, 'inDOM');
+});
+
+test('can lookup components in its layout', function() {
+ expect(1);
+ var component = this.subject({
+ layout: Ember.Handlebars.compile("{{x-foo id='yodawg-i-heard-you-liked-x-foo-in-ur-x-foo'}}")
+ });
+ this.render();
+ equal(component._state, 'inDOM');
+});
+
+test('clears out views from test to test', function() {
+ expect(1);
+ this.subject({
+ layout: Ember.Handlebars.compile("{{x-foo id='yodawg-i-heard-you-liked-x-foo-in-ur-x-foo'}}")
+ });
+ this.render();
+ ok(true, 'rendered without id already being used from another test');
+});
+
+///////////////////////////////////////////////////////////////////////////////
+
+moduleForComponent('pretty-color', {
+ beforeSetup: function() {
+ setupRegistry();
+ }
+});
+
+test("className", function(){
+ // first call to this.$() renders the component.
+ ok(this.$().is('.pretty-color'));
+});
+
+test("template", function(){
+ var component = this.subject();
+
+ equal($.trim(this.$().text()), 'Pretty Color:');
+
+ Ember.run(function(){
+ component.set('name', 'green');
+ });
+
+ equal($.trim(this.$().text()), 'Pretty Color: green');
+});
+
+test("$", function(){
+ var component = this.subject({name: 'green'});
+ equal($.trim(this.$('.color-name').text()), 'green');
+ equal($.trim(this.$().text()), 'Pretty Color: green');
+});
diff --git a/tests/module-for-model-test.js b/tests/module-for-model-test.js
new file mode 100644
index 00000000..7cc8198f
--- /dev/null
+++ b/tests/module-for-model-test.js
@@ -0,0 +1,111 @@
+import Ember from 'ember';
+import { moduleForModel, test } from 'ember-qunit';
+import { setResolverRegistry } from 'tests/test-support/resolver';
+
+var Whazzit = DS.Model.extend({ gear: DS.attr('string') });
+var whazzitAdapterFindAllCalled = false;
+var WhazzitAdapter = DS.FixtureAdapter.extend({
+ findAll: function(store, type) {
+ whazzitAdapterFindAllCalled = true;
+ return this._super.apply(this, arguments);
+ }
+});
+
+var ApplicationAdapter = DS.FixtureAdapter.extend();
+
+function setupRegistry() {
+ setResolverRegistry({
+ 'model:whazzit': Whazzit,
+ 'adapter:whazzit': WhazzitAdapter,
+ 'adapter:application': ApplicationAdapter
+ });
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+moduleForModel('whazzit', 'model:whazzit without adapter', {
+ beforeSetup: function() {
+ setupRegistry();
+ },
+
+ setup: function() {
+ Whazzit.FIXTURES = [];
+ }
+});
+
+test('store exists', function() {
+ var store = this.store();
+ ok(store instanceof DS.Store);
+});
+
+test('model exists as subject', function() {
+ var model = this.subject();
+ ok(model);
+ ok(model instanceof DS.Model);
+ ok(model instanceof Whazzit);
+});
+
+test('FixtureAdapter is registered for model', function() {
+ var model = this.subject(),
+ store = this.store();
+
+ ok(store.adapterFor(model.constructor) instanceof DS.FixtureAdapter);
+ ok(!(store.adapterFor(model.constructor) instanceof WhazzitAdapter));
+});
+
+///////////////////////////////////////////////////////////////////////////////
+
+moduleForModel('whazzit', 'model:whazzit with custom adapter', {
+ needs: ['adapter:whazzit'],
+
+ beforeSetup: function() {
+ setupRegistry();
+ },
+
+ setup: function() {
+ Whazzit.FIXTURES = [];
+ whazzitAdapterFindAllCalled = false;
+ }
+});
+
+test('WhazzitAdapter is registered for model', function() {
+ var model = this.subject(),
+ store = this.store();
+
+ ok(store.adapterFor(model.constructor) instanceof WhazzitAdapter);
+});
+
+test('WhazzitAdapter is used for `find`', function() {
+ expect(2);
+ ok(!whazzitAdapterFindAllCalled, 'precond - custom adapter has not yet been called');
+
+ var store = this.store();
+
+ return Ember.run(function() {
+ return store.find('whazzit').then(function() {
+ ok(whazzitAdapterFindAllCalled, 'uses the custom adapter');
+ });
+ });
+});
+
+///////////////////////////////////////////////////////////////////////////////
+
+moduleForModel('whazzit', 'model:whazzit with application adapter', {
+ needs: ['adapter:application'],
+
+ beforeSetup: function() {
+ setupRegistry();
+ },
+
+ setup: function() {
+ Whazzit.FIXTURES = [];
+ }
+});
+
+test('ApplicationAdapter is registered for model', function() {
+ var model = this.subject(),
+ store = this.store();
+
+ ok(store.adapterFor(model.constructor) instanceof ApplicationAdapter);
+ ok(!(store.adapterFor(model.constructor) instanceof WhazzitAdapter));
+});
\ No newline at end of file
diff --git a/tests/module-for-test.js b/tests/module-for-test.js
new file mode 100644
index 00000000..e7232017
--- /dev/null
+++ b/tests/module-for-test.js
@@ -0,0 +1,53 @@
+import { moduleFor, test } from 'ember-qunit';
+import { setResolverRegistry } from 'tests/test-support/resolver';
+
+function setupRegistry() {
+ setResolverRegistry({
+ 'component:x-foo': Ember.Component.extend()
+ });
+}
+
+var a = 0;
+var b = 0;
+var beforeSetupOk = false;
+var beforeTeardownOk = false;
+
+moduleFor('component:x-foo', 'TestModule callbacks', {
+ beforeSetup: function() {
+ setupRegistry();
+
+ beforeSetupOk = (a === 0);
+ b += 1;
+ },
+
+ setup: function() {
+ a += 1;
+ },
+
+ beforeTeardown: function() {
+ beforeTeardownOk = (a === 1);
+ b -= 1;
+ },
+
+ teardown: function() {
+ a -= 1;
+ }
+});
+
+test("beforeSetup callback is called prior to any test setup", function() {
+ ok(beforeSetupOk);
+ equal(b, 1);
+});
+
+test("setup callback is called prior to test", function() {
+ equal(a, 1);
+});
+
+test("teardown callback is called after test", function() {
+ equal(a, 1);
+});
+
+test("beforeTeardown callback is called prior to any test teardown", function() {
+ ok(beforeTeardownOk);
+ equal(b, 1);
+});
diff --git a/tests/test-support/resolver.js b/tests/test-support/resolver.js
new file mode 100644
index 00000000..45416f89
--- /dev/null
+++ b/tests/test-support/resolver.js
@@ -0,0 +1,20 @@
+import { setResolver } from 'ember-test-helpers';
+
+var Resolver = Ember.DefaultResolver.extend({
+ registry: null,
+
+ resolve: function(fullName) {
+ return this.registry[fullName] || this._super.apply(this, arguments);
+ },
+
+ normalize: function(fullName) {
+ return Ember.String.dasherize(fullName);
+ }
+});
+
+var resolver = Resolver.create({registry: {}});
+setResolver(resolver);
+
+export function setResolverRegistry(registry) {
+ resolver.set('registry', registry);
+}