diff --git a/Gruntfile.js b/Gruntfile.js index f54791b5..ca4f296e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -182,7 +182,7 @@ module.exports = function(grunt) { autoWatch: true }, amd: { - configFile: 'karma-setup/requirejs/karma.conf.js', + configFile: 'karma-setup/amd/karma.conf.js', browsers: [], singleRun: false, autoWatch: true diff --git a/karma-setup/.eslintrc b/karma-setup/.eslintrc new file mode 100644 index 00000000..490d99d0 --- /dev/null +++ b/karma-setup/.eslintrc @@ -0,0 +1,56 @@ +{ + "extends": [ + "../.eslintrc.js" + ], + "overrides": [ + { + "extends": [ + "plugin:es5/no-es2015", + "prettier" + ], + "files": ["**/*.browser.js"], + "plugins": [ + "es5" + ], + "globals": { + "TODO: clean this up": true, + "CompilerContext": true, + "Handlebars": true, + "handlebarsEnv": true, + "shouldCompileTo": true, + "shouldCompileToWithPartials": true, + "shouldThrow": true, + "expectTemplate": true, + "compileWithPartials": true, + "console": true, + "require": true, + "suite": true, + "equal": true, + "equals": true, + "test": true, + "testBoth": true, + "raises": true, + "deepEqual": true, + "start": true, + "stop": true, + "ok": true, + "sinon": true, + "strictEqual": true, + "define": true, + "expect": true, + "chai": true + }, + "env": { + "mocha": true + }, + "rules": { + // Disabling for tests, for now. + "no-path-concat": "off", + + "no-var": "off", + "dot-notation": "off" + } + }, + ] + +} diff --git a/karma.conf.js b/karma-setup/amd/karma.conf.js similarity index 83% rename from karma.conf.js rename to karma-setup/amd/karma.conf.js index 35897ced..d1a63a6f 100644 --- a/karma.conf.js +++ b/karma-setup/amd/karma.conf.js @@ -1,5 +1,6 @@ module.exports = function(config) { config.set({ + basePath: '../..', reporters: ['dots'], frameworks: ['mocha', 'requirejs'], browsers: ['Chrome'], @@ -8,10 +9,10 @@ module.exports = function(config) { { pattern: 'node_modules/chai/chai.js', included: false }, { pattern: 'node_modules/dirty-chai/lib/dirty-chai.js', included: false }, { pattern: 'dist/handlebars.amd.js', included: false }, - 'karma-setup/karma-includes/browser-context.js', + 'karma-setup/shared/*.browser.js', + 'karma-setup/amd/*.browser.js', 'spec/vendor/json2.js', 'spec/env/common.js', - 'karma-setup/karma-includes/require-config.js', { pattern: 'spec/*.js', included: false } ] }); diff --git a/karma-setup/amd/require-config.browser.js b/karma-setup/amd/require-config.browser.js new file mode 100644 index 00000000..f9b33ee0 --- /dev/null +++ b/karma-setup/amd/require-config.browser.js @@ -0,0 +1,38 @@ +/* global requirejs */ + +var tests = Object.keys(window.__karma__.files).filter(function(file) { + return file.match(/^\/base\/spec\/[^/]*\.js/); +}); + +requirejs.config({ + // Karma serves files from '/base' + baseUrl: '/base', + + paths: { + handlebars: 'dist/handlebars.amd', + sinon: 'node_modules/sinon/pkg/sinon', + chai: 'node_modules/chai/chai', + dirtyChai: 'node_modules/dirty-chai/lib/dirty-chai' + }, + + // start test run, once Require.js is done + callback: function() { + require(['handlebars', 'chai', 'dirtyChai', 'sinon'], function( + Handlebars, + chai, + dirtyChai, + sinon + ) { + window.Handlebars = Handlebars; + + chai.use(dirtyChai); + window.expect = chai.expect; + + window.sinon = sinon; + + require(tests, function() { + window.__karma__.start(); + }); + }); + } +}); diff --git a/karma-setup/default/global-expect.browser.js b/karma-setup/default/global-expect.browser.js new file mode 100644 index 00000000..583ac5ad --- /dev/null +++ b/karma-setup/default/global-expect.browser.js @@ -0,0 +1 @@ +window.expect = chai.expect; diff --git a/karma-setup/default/karma.conf.js b/karma-setup/default/karma.conf.js index f4e64561..fe27fee3 100644 --- a/karma-setup/default/karma.conf.js +++ b/karma-setup/default/karma.conf.js @@ -1,8 +1,20 @@ -const files = require('../shared/default-files'); - module.exports = function(config) { config.set({ - ...require('../shared/default-config'), - files: [...files('dist/handlebars.js'), 'spec/*.js'] + basePath: '../..', + reporters: ['dots'], + frameworks: ['mocha'], + browsers: ['Chrome'], + files: [ + 'node_modules/sinon/pkg/sinon.js', + 'node_modules/chai/chai.js', + 'node_modules/dirty-chai/lib/dirty-chai.js', + 'karma-setup/shared/*.browser.js', + 'karma-setup/default/*.browser.js', + 'spec/vendor/json2.js', + 'spec/env/common.js', + + 'dist/handlebars.js', + 'spec/*.js' + ] }); }; diff --git a/karma-setup/karma-includes/.eslintrc b/karma-setup/karma-includes/.eslintrc deleted file mode 100644 index cd3e0ecb..00000000 --- a/karma-setup/karma-includes/.eslintrc +++ /dev/null @@ -1,48 +0,0 @@ -{ - "extends": [ - "../../.eslintrc.js", - "plugin:es5/no-es2015", - "prettier" - ], - "plugins": [ - "es5" - ], - "globals": { - "TODO: clean this up": true, - "CompilerContext": true, - "Handlebars": true, - "handlebarsEnv": true, - "shouldCompileTo": true, - "shouldCompileToWithPartials": true, - "shouldThrow": true, - "expectTemplate": true, - "compileWithPartials": true, - "console": true, - "require": true, - "suite": true, - "equal": true, - "equals": true, - "test": true, - "testBoth": true, - "raises": true, - "deepEqual": true, - "start": true, - "stop": true, - "ok": true, - "sinon": true, - "strictEqual": true, - "define": true, - "expect": true, - "chai": true - }, - "env": { - "mocha": true - }, - "rules": { - // Disabling for tests, for now. - "no-path-concat": "off", - - "no-var": "off", - "dot-notation": "off" - } -} diff --git a/karma-setup/karma-includes/mocha.js b/karma-setup/karma-includes/mocha.js deleted file mode 100644 index 4b71be2b..00000000 --- a/karma-setup/karma-includes/mocha.js +++ /dev/null @@ -1,8 +0,0 @@ -console.log('Setup starting'); - -window.expect = chai.expect; -mocha.setup('bdd'); -// eslint-disable-next-line no-undef -chai.use(dirtyChai); - -console.log('Setup complete'); diff --git a/karma-setup/karma-includes/require-config.js b/karma-setup/karma-includes/require-config.js deleted file mode 100644 index 7e5a5d42..00000000 --- a/karma-setup/karma-includes/require-config.js +++ /dev/null @@ -1,29 +0,0 @@ -/* global requirejs */ - -var tests = []; - -console.log('ABC', Object.keys(window.__karma__.files)); -requirejs.config({ - // Karma serves files from '/base' - baseUrl: '/', - - paths: { - handlebars: '/base/dist/handlebars.amd', - mochaConfig: '/base/karma-setup/karma-includes/mocha', - sinon: '/base/node_modules/sinon/pkg/sinon', - chai: '/base/node_modules/chai/chai', - dirtyChai: '/base/node_modules/dirty-chai/lib/dirty-chai' - }, - - shim: { - mochaConfig: { - deps: ['mocha', 'chai', 'dirtyChai', 'sinon'] - } - }, - - // ask Require.js to load these files (all our tests) - deps: ['handlebars', 'mochaConfig', tests], - - // start test run, once Require.js is done - callback: window.__karma__.start -}); diff --git a/karma-setup/requirejs/karma.conf.js b/karma-setup/requirejs/karma.conf.js deleted file mode 100644 index e248bc1b..00000000 --- a/karma-setup/requirejs/karma.conf.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = function(config) { - config.set({ - baseUrl: '../..', - reporters: ['dots'], - frameworks: ['mocha', 'requirejs'], - browsers: ['Chrome'], - files: [ - { pattern: 'node_modules/sinon/pkg/sinon.js', included: false }, - { pattern: 'node_modules/chai/chai.js', included: false }, - { pattern: 'node_modules/dirty-chai/lib/dirty-chai.js', included: false }, - { pattern: 'dist/handlebars.amd.js', included: false }, - 'karma-setup/karma-includes/browser-context.js', - 'spec/vendor/json2.js', - 'spec/env/common.js', - 'karma-setup/karma-includes/require-config.js', - { pattern: 'spec/*.js', included: false } - ] - }); -}; diff --git a/karma-setup/shared/default-config.js b/karma-setup/shared/default-config.js deleted file mode 100644 index ae02af21..00000000 --- a/karma-setup/shared/default-config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - frameworks: ['mocha'], - // concurrency: we have no concurrency set, because this seems to let Karma hang after the first batch - // of browsers have finished their tests. - reporters: ['dots'] -}; diff --git a/karma-setup/shared/default-files.js b/karma-setup/shared/default-files.js deleted file mode 100644 index 502fd231..00000000 --- a/karma-setup/shared/default-files.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = function files(...additionalFiles) { - return [ - 'node_modules/sinon/pkg/sinon.js', - 'node_modules/chai/chai.js', - 'node_modules/dirty-chai/lib/dirty-chai.js', - 'node_modules/mocha/mocha.js', - ...additionalFiles, - 'spec/browser-setup/browser-context.js', - 'spec/browser-setup/mocha.js', - 'spec/vendor/json2.js', - 'spec/env/common.js' - ]; -}; diff --git a/karma-setup/karma-includes/browser-context.js b/karma-setup/shared/global-compiler-context.browser.js similarity index 100% rename from karma-setup/karma-includes/browser-context.js rename to karma-setup/shared/global-compiler-context.browser.js