From 2e78f80f5f24758cab2cbd4926c615ce7a0011aa Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Tue, 25 Feb 2014 08:59:53 +0100 Subject: [PATCH] Update karma config to support requirejs --- sonar-server/karma.conf.js | 21 ++++++--- sonar-server/package.json | 2 +- .../navigator/filters/base-filters.js | 2 +- .../navigator/filters/choice-filters.js | 4 +- .../src/main/webapp/javascripts/tests/main.js | 45 +++++++++++++++++++ .../main/webapp/javascripts/tests/measures.js | 23 ---------- .../navigator/filters/BaseFilterViewSpec.js | 15 +++++++ .../navigator/filters/ChoiceFilterViewSpec.js | 39 ++++++++++++++++ 8 files changed, 117 insertions(+), 34 deletions(-) create mode 100644 sonar-server/src/main/webapp/javascripts/tests/main.js delete mode 100644 sonar-server/src/main/webapp/javascripts/tests/measures.js create mode 100644 sonar-server/src/main/webapp/javascripts/tests/navigator/filters/BaseFilterViewSpec.js create mode 100644 sonar-server/src/main/webapp/javascripts/tests/navigator/filters/ChoiceFilterViewSpec.js diff --git a/sonar-server/karma.conf.js b/sonar-server/karma.conf.js index 9619bdfee07..f4ce16ebe0e 100644 --- a/sonar-server/karma.conf.js +++ b/sonar-server/karma.conf.js @@ -18,7 +18,7 @@ module.exports = function(config) { // frameworks to use - frameworks: ['qunit'], + frameworks: ['jasmine'], // list of files / patterns to load in the browser @@ -26,14 +26,21 @@ module.exports = function(config) { // dependencies 'third-party/jquery.min.js', 'third-party/underscore.js', - 'third-party/backbone.js', - 'third-party/backbone.marionette.js', + 'third-party/require.js', + + // libs + { pattern: 'third-party/**/*.js', included: false }, + + // templates + { pattern: '../WEB-INF/app/views/**/*.hbs.erb', included: false }, // app - 'navigator/filters/base-filters.js', + { pattern: 'navigator/**/*.js', included: false }, // tests - 'tests/measures.js' + { pattern: 'tests/**/*Spec.js', included: false }, + + 'tests/main.js' ], @@ -49,7 +56,7 @@ module.exports = function(config) { plugins: [ - 'karma-qunit', + 'karma-jasmine', 'karma-phantomjs-launcher', 'karma-coverage', 'karma-junit-reporter' @@ -108,6 +115,6 @@ module.exports = function(config) { // Continuous Integration mode // if true, it capture browsers, run tests and exit - singleRun: true + singleRun: false }); }; diff --git a/sonar-server/package.json b/sonar-server/package.json index 7ef6cb9960c..7b52fb4e0e0 100644 --- a/sonar-server/package.json +++ b/sonar-server/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "devDependencies": { "karma": "~0.10.8", - "karma-qunit": "*", + "karma-jasmine": "*", "karma-phantomjs-launcher": "*", "karma-coverage": "*", "karma-junit-reporter": "*" diff --git a/sonar-server/src/main/webapp/javascripts/navigator/filters/base-filters.js b/sonar-server/src/main/webapp/javascripts/navigator/filters/base-filters.js index d3b764e23da..1509c43d315 100644 --- a/sonar-server/src/main/webapp/javascripts/navigator/filters/base-filters.js +++ b/sonar-server/src/main/webapp/javascripts/navigator/filters/base-filters.js @@ -60,7 +60,7 @@ define(['backbone', 'backbone.marionette'], function (Backbone, Marionette) { initialize: function(options) { Marionette.ItemView.prototype.initialize.apply(this, arguments); - var detailsView = options.detailsView || DetailsFilterView; + var detailsView = (options && options.detailsView) || DetailsFilterView; this.detailsView = new detailsView({ model: this.model, filterView: this diff --git a/sonar-server/src/main/webapp/javascripts/navigator/filters/choice-filters.js b/sonar-server/src/main/webapp/javascripts/navigator/filters/choice-filters.js index 8a679fc5eed..d97c33e1129 100644 --- a/sonar-server/src/main/webapp/javascripts/navigator/filters/choice-filters.js +++ b/sonar-server/src/main/webapp/javascripts/navigator/filters/choice-filters.js @@ -1,8 +1,8 @@ define(['handlebars', 'navigator/filters/base-filters'], function (Handlebars, BaseFilters) { var DetailsChoiceFilterView = BaseFilters.DetailsFilterView.extend({ - template: Handlebars.compile(jQuery('#choiceFilterTemplate').html()), - itemTemplate: Handlebars.compile(jQuery('#choiceFilterItemTemplate').html()), + template: Handlebars.compile(jQuery('#choiceFilterTemplate').html() || ''), + itemTemplate: Handlebars.compile(jQuery('#choiceFilterItemTemplate').html() || ''), events: function() { diff --git a/sonar-server/src/main/webapp/javascripts/tests/main.js b/sonar-server/src/main/webapp/javascripts/tests/main.js new file mode 100644 index 00000000000..c012e4777e2 --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/tests/main.js @@ -0,0 +1,45 @@ +window.__karma__.loaded = function() {}; + +var tests = []; +for (var file in window.__karma__.files) { + if (window.__karma__.files.hasOwnProperty(file)) { + if (/Spec\.js$/.test(file)) { + tests.push(file); + } + } +} + + +requirejs.config({ + baseUrl: '/base', + + paths: { + 'backbone': 'third-party/backbone', + 'backbone.marionette': 'third-party/backbone.marionette', + 'handlebars': 'third-party/handlebars', + 'moment': 'third-party/moment' + }, + + shim: { + 'backbone.marionette': { + deps: ['backbone'], + exports: 'Marionette' + }, + 'backbone': { + exports: 'Backbone' + }, + 'handlebars': { + exports: 'Handlebars' + }, + 'moment': { + exports: 'moment' + } + }, + + // ask Require.js to load these files (all our tests) + deps: tests, + + // start test run, once Require.js is done + callback: window.__karma__.start + +}); diff --git a/sonar-server/src/main/webapp/javascripts/tests/measures.js b/sonar-server/src/main/webapp/javascripts/tests/measures.js deleted file mode 100644 index b8b2f239c2c..00000000000 --- a/sonar-server/src/main/webapp/javascripts/tests/measures.js +++ /dev/null @@ -1,23 +0,0 @@ -/* jshint undef:false */ - -test("filter defaults", function() { - var filter = new window.SS.Filter(); - strictEqual(true, filter.get('multiple'), "multiple doesn't equal true"); - equal(false, filter.get('placeholder'), "placeholder doesn't equal ''"); -}); - -test("is model.view correctly set", function() { - var filter = new window.SS.Filter(), - filterView = new window.SS.BaseFilterView({ - model: filter - }); - strictEqual(filterView, filter.view, "model.view doesn't model's view"); -}); - -test("is details view set to default", function() { - var filter = new window.SS.Filter(), - filterView = new window.SS.BaseFilterView({ - model: filter - }); - ok(filterView.detailsView instanceof window.SS.DetailsFilterView, ""); -}); diff --git a/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/BaseFilterViewSpec.js b/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/BaseFilterViewSpec.js new file mode 100644 index 00000000000..b1a0ab15c4f --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/BaseFilterViewSpec.js @@ -0,0 +1,15 @@ +define(['navigator/filters/base-filters'], function(BaseFilters) { + + describe('BaseFilterView', function() { + + it('initializes', function() { + var baseFilterView = new BaseFilters.BaseFilterView({ + model: new BaseFilters.Filter() + }); + expect(baseFilterView.detailsView).toBeDefined(); + expect(baseFilterView.detailsView.options.filterView).toBe(baseFilterView); + }); + + }); + +}); diff --git a/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/ChoiceFilterViewSpec.js b/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/ChoiceFilterViewSpec.js new file mode 100644 index 00000000000..3b905a9f88f --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/tests/navigator/filters/ChoiceFilterViewSpec.js @@ -0,0 +1,39 @@ +define(['navigator/filters/base-filters', 'navigator/filters/choice-filters'], function(BaseFilters, ChoiceFilters) { + + describe('BaseFilterView', function() { + var choices, choiceFilter, choiceFilterView; + + beforeEach(function() { + choices = { + 'ONE': 'one', + 'TWO': 'two', + 'THREE': 'three', + '!OPPOSITE': 'opposite' + }; + + choiceFilter = new BaseFilters.Filter({ + name: 'Choice Filter Name', + property: 'choiceFilterProperty', + type: ChoiceFilters.ChoiceFilterView, + enabled: true, + optional: false, + choices: choices + }); + + choiceFilterView = new ChoiceFilters.ChoiceFilterView({ + model: choiceFilter + }); + }); + + it('creates choices', function() { + expect(choiceFilterView.choices).toBeDefined(); + expect(choiceFilterView.choices.length).toBe(Object.keys(choices).length); + }); + + it('does not have selected by default', function() { + expect(choiceFilterView.getSelected().length).toBe(0); + }); + + }); + +}); -- 2.39.5