From: Stas Vilchik Date: Tue, 8 Jul 2014 06:25:03 +0000 (+0600) Subject: CasperJS tests improvements. Drop karma. X-Git-Tag: 4.5-RC1~683 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=308b3b4e1fc1790a4299b5106c66729842584f6f;p=sonarqube.git CasperJS tests improvements. Drop karma. --- diff --git a/sonar-server/Gruntfile.coffee b/sonar-server/Gruntfile.coffee index e49048f7eff..244db1952ad 100644 --- a/sonar-server/Gruntfile.coffee +++ b/sonar-server/Gruntfile.coffee @@ -253,13 +253,6 @@ module.exports = (grunt) -> src: '<%= pkg.sources %>js/require.js', dest: '<%= pkg.assets %>js/require.js' - karma: - unit: - configFile: 'karma.conf.js' - singleRun: true - logLevel: 'DEBUG' - - express: dev: options: @@ -271,7 +264,7 @@ module.exports = (grunt) -> options: test: true 'no-colors': true - src: ['<%= pkg.sources %>js/tests/e2e/tests/**/*.js'] + src: ['<%= pkg.sources %>js/tests/**/*-spec.js'] watch: @@ -322,4 +315,4 @@ module.exports = (grunt) -> 'concat:build', 'requirejs', 'clean:js', 'copy:build', 'copy:requirejs', 'clean:build'] - grunt.registerTask 'test', ['coffee:build', 'handlebars:build', 'copy:js', 'concat:dev', 'karma:unit', 'express', 'casper'] + grunt.registerTask 'test', ['coffee:build', 'handlebars:build', 'copy:js', 'concat:dev', 'express', 'casper'] diff --git a/sonar-server/karma.conf.js b/sonar-server/karma.conf.js deleted file mode 100644 index 037950ad1c1..00000000000 --- a/sonar-server/karma.conf.js +++ /dev/null @@ -1,126 +0,0 @@ -/* global module:false, karma:false */ - -// Karma configuration for JS application - -// GLOBAL INSTALLATION -// sonar-server$ npm install -g -// sonar-server$ karma start - -// LOCAL INSTALLATION -// sonar-server$ npm install -// sonar-server$ ./node_modules/.bin/karma start - -module.exports = function(config) { - config.set({ - - // base path, that will be used to resolve files and exclude - basePath: 'src/main/webapp/js', - - - // frameworks to use - frameworks: ['jasmine'], - - - // list of files / patterns to load in the browser - files: [ - // dependencies - 'third-party/jquery.js', - 'third-party/underscore.js', - 'require.js', - 'translate.js', - 'common/inputs.js', - 'widgets/base.js', - - // libs - { pattern: 'third-party/**/*.js', included: false }, - - // common - { pattern: 'common/**/*.js', included: false }, - - // app - { pattern: 'navigator/**/*.js', included: false }, - { pattern: 'quality-gate/**/*.js', included: false }, - - // tests - { pattern: 'tests/**/*Spec.js', included: false }, - - 'tests/main.js' - ], - - - // list of files to exclude - exclude: [ - - ], - - - preprocessors: { - 'navigator/**/*.js': 'coverage', - 'common/inputs.js': 'coverage', - 'translate.js': 'coverage' - }, - - - plugins: [ - 'karma-jasmine', - 'karma-phantomjs-launcher', - 'karma-coverage', - 'karma-junit-reporter' - ], - - - // test results reporter to use - reporters: ['progress', 'coverage', 'junit'], - - - coverageReporter: { - type : 'lcovonly', - dir : '../../../../target/karma/coverage/' - }, - - junitReporter: { - outputFile : '../../../../target/karma/test-results.xml' - }, - - // WARNING - the 2 following ports should not be hardcoded in CI environments - // web server port - port: 9876, - - - // cli runner port - runnerPort: 9100, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: karma.LOG_DISABLE || karma.LOG_ERROR || karma.LOG_WARN || karma.LOG_INFO || karma.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari (only Mac) - // - PhantomJS - // - IE (only Windows) - browsers: ['PhantomJS'], - - - // If browser does not capture in given timeout [ms], kill it - captureTimeout: 60000, - - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun: false - }); -}; diff --git a/sonar-server/src/main/coffee/tests/common/inputsSpec.coffee b/sonar-server/src/main/coffee/tests/common/inputsSpec.coffee deleted file mode 100644 index 3cbc6591925..00000000000 --- a/sonar-server/src/main/coffee/tests/common/inputsSpec.coffee +++ /dev/null @@ -1,87 +0,0 @@ -$ = jQuery - -describe 'WORK_DUR suite', -> - - beforeEach -> - window.SS = {} - window.SS.phrases = - 'work_duration': - 'x_days': '{0}d', 'x_hours': '{0}h', 'x_minutes': '{0}min' - - @input = $('') - @input.appendTo $('body') - @input.data 'type', 'WORK_DUR' - - - it 'converts', -> - @input.originalVal '2d 7h 13min' - expect(@input.val()).toBe 1393 - - it 'converts only days', -> - @input.originalVal '1d' - expect(@input.val()).toBe 480 - - it 'converts hours with minutes', -> - @input.originalVal '2h 30min' - expect(@input.val()).toBe 150 - - it 'converts zero', -> - @input.originalVal '0' - expect(@input.val()).toBe 0 - - - it 'restores', -> - @input.val 1393 - expect(@input.originalVal()).toBe '2d 7h 13min' - - it 'restores zero', -> - @input.val '0' - expect(@input.originalVal()).toBe '0' - - - it 'returns initially incorrect value', -> - @input.val 'something' - expect(@input.val()).toBe 'something' - - -describe 'RATING suite', -> - - beforeEach -> - @input = $('') - @input.appendTo $('body') - @input.data 'type', 'RATING' - - - it 'converts A', -> - @input.originalVal 'A' - expect(@input.val()).toBe 1 - - - it 'converts B', -> - @input.originalVal 'B' - expect(@input.val()).toBe 2 - - - it 'converts E', -> - @input.originalVal 'E' - expect(@input.val()).toBe 5 - - - it 'does not convert F', -> - @input.originalVal 'F' - expect(@input.val()).toBe 'F' - - - it 'restores A', -> - @input.val 1 - expect(@input.originalVal()).toBe 'A' - - - it 'restores E', -> - @input.val 5 - expect(@input.originalVal()).toBe 'E' - - - it 'returns initially incorrect value', -> - @input.val 'something' - expect(@input.val()).toBe 'something' diff --git a/sonar-server/src/main/coffee/tests/translateSpec.coffee b/sonar-server/src/main/coffee/tests/translateSpec.coffee deleted file mode 100644 index 7b4576bcfff..00000000000 --- a/sonar-server/src/main/coffee/tests/translateSpec.coffee +++ /dev/null @@ -1,75 +0,0 @@ -$ = jQuery - -describe 'translation "t" suite', -> - - beforeEach -> - window.messages = - 'something': 'SOMETHING' - 'something_with_underscore': 'SOMETHING_WITH_UNDERSCORE' - 'something_with{braces}': 'SOMETHING_WITH{braces}' - - window.SS = - phrases: - 'something': 'SOMETHING ANOTHER' - - - afterEach -> - window.messages = window.SS = undefined - - - it 'translates', -> - expect(t('something')).toBe 'SOMETHING' - - - it 'translates with underscore', -> - expect(t('something_with_underscore')).toBe 'SOMETHING_WITH_UNDERSCORE' - - - it 'translates with braces', -> - expect(t('something_with{braces}')).toBe 'SOMETHING_WITH{braces}' - - - it 'fallbacks to "translate"', -> - window.messages = undefined - expect(t('something')).toBe 'SOMETHING ANOTHER' - - - it 'returns the key when no translation', -> - expect(t('something_another')).toBe 'something_another' - - - -describe 'translation "translate" suite', -> - - beforeEach -> - window.SS = - phrases: - 'something': 'SOMETHING' - 'something_with_underscore': 'SOMETHING_WITH_UNDERSCORE' - 'something_with{braces}': 'SOMETHING_WITH{braces}' - - - afterEach -> - window.messages = window.SS = undefined - - - it 'translates', -> - expect(translate('something')).toBe 'SOMETHING' - - - it 'translates with underscore', -> - expect(translate('something_with_underscore')).toBe 'SOMETHING_WITH_UNDERSCORE' - - - it 'translates with braces', -> - expect(translate('something_with{braces}')).toBe 'SOMETHING_WITH{braces}' - - - it 'returns the key when no translation', -> - expect(translate('something_another')).toBe 'something_another' - - - it 'does not fail when there is no dictionary', -> - window.SS = undefined - expect(translate('something_another')).toBe 'something_another' - diff --git a/sonar-server/src/main/coffee/tests/widgets/BaseSpec.coffee b/sonar-server/src/main/coffee/tests/widgets/BaseSpec.coffee deleted file mode 100644 index 797acf75588..00000000000 --- a/sonar-server/src/main/coffee/tests/widgets/BaseSpec.coffee +++ /dev/null @@ -1,47 +0,0 @@ -$ = jQuery - -describe 'base widget suite', -> - - it 'exists', -> - expect(window.SonarWidgets).toBeDefined() - expect(window.SonarWidgets.BaseWidget).toBeDefined() - - - it 'adds fields', -> - widget = new window.SonarWidgets.BaseWidget() - widget.addField 'fieldName', 1 - - expect(typeof widget.fieldName).toBe 'function' - expect(widget.fieldName()).toBe 1 - - expect(widget.fieldName(2)).toBe widget - expect(widget.fieldName()).toBe 2 - - - it 'adds metrics', -> - widget = new window.SonarWidgets.BaseWidget() - widget.addField 'metrics', 'metricA': { name: 'Metric A', someField: 2 } - widget.addField 'metricsPriority', ['metricA'] - widget.addMetric 'myMetric', 0 - - expect(widget.myMetric).toBeDefined() - expect(widget.myMetric.key).toBe 'metricA' - expect(widget.myMetric.name).toBe 'Metric A' - expect(widget.myMetric.someField).toBe 2 - expect(typeof widget.myMetric.value).toBe 'function' - expect(typeof widget.myMetric.formattedValue).toBe 'function' - - - it 'has default properties', -> - widget = new window.SonarWidgets.BaseWidget() - - expect(widget.components).toBeDefined() - expect(widget.metrics).toBeDefined() - expect(widget.metricsPriority).toBeDefined() - expect(widget.options).toBeDefined() - - - it 'created "translate" string', -> - widget = new window.SonarWidgets.BaseWidget() - - expect(widget.trans(1, 2)).toBe 'translate(1,2)' \ No newline at end of file diff --git a/sonar-server/src/main/js/tests/e2e/pages/quality-gates.html b/sonar-server/src/main/js/tests/e2e/pages/quality-gates.html index c4152e98755..c2eaba8d13e 100644 --- a/sonar-server/src/main/js/tests/e2e/pages/quality-gates.html +++ b/sonar-server/src/main/js/tests/e2e/pages/quality-gates.html @@ -9,9 +9,9 @@ diff --git a/sonar-server/src/main/js/tests/e2e/tests/quality-gates-spec.js b/sonar-server/src/main/js/tests/e2e/tests/quality-gates-spec.js new file mode 100644 index 00000000000..94f134693c3 --- /dev/null +++ b/sonar-server/src/main/js/tests/e2e/tests/quality-gates-spec.js @@ -0,0 +1,251 @@ +// Dump log messages +casper.on('remote.message', function(message) { + this.echo('Log: '+ message, 'LOG'); +}); + +// Dump uncaught errors +casper.on('page.error', function(msg, trace) { + this.echo('Error: ' + msg, 'ERROR'); +}); + + +casper.test.begin('App is setup correctly', function suite(test) { + + // Register mockjax requests on loading of requirejs + casper.options.onResourceRequested = function(instance, requestData, networkRequest) { + if (requestData.url.indexOf('require') >= 0) { + // Here, instance is the running instance of casperjs + instance.page.includeJs('../js/third-party/jquery.mockjax.js', function() { + instance.page.evaluate(function() { + jQuery.mockjaxSettings.contentType = 'text/json'; + jQuery.mockjaxSettings.responseTime = 250; + + jQuery.mockjax({ + url: '../api/l10n/index', + responseText: JSON.stringify({ + 'quality_gates.page': 'Quality Gates' + }) + }); + + jQuery.mockjax({ + url: '../api/qualitygates/app', + responseText: JSON.stringify({ + "edit": false, + "periods": [ + { + "key": 1, + "text": "since previous analysis" + }, + { + "key": 2, + "text": "over 365 days" + }, + { + "key": 3, + "text": "since previous version" + }, + { + "key": 4, + "text": "over period 4 - defined at project level" + }, + { + "key": 5, + "text": "over period 5 - defined at project level" + } + ], + "metrics": [ + { + "id": 62, + "key": "blocker_violations", + "name": "Blocker issues", + "type": "INT", + "domain": "Issues", + "hidden": false + }, + { + "id": 37, + "key": "new_coverage", + "name": "Coverage on new code", + "type": "PERCENT", + "domain": "Tests", + "hidden": false + }, + { + "id": 63, + "key": "critical_violations", + "name": "Critical issues", + "type": "INT", + "domain": "Issues", + "hidden": false + }, + { + "id": 154, + "key": "sqale_effort_to_grade_a", + "name": "Effort to rating A", + "type": "WORK_DUR", + "domain": "SQALE", + "hidden": false + }, + { + "id": 218, + "key": "open_issues", + "name": "Open issues", + "type": "INT", + "domain": "Issues", + "hidden": false + }, + { + "id": 219, + "key": "reopened_issues", + "name": "Reopened issues", + "type": "INT", + "domain": "Issues", + "hidden": false + }, + { + "id": 32, + "key": "skipped_tests", + "name": "Skipped unit tests", + "type": "INT", + "domain": "Tests", + "hidden": false + }, + { + "id": 31, + "key": "test_errors", + "name": "Unit test errors", + "type": "INT", + "domain": "Tests", + "hidden": false + }, + { + "id": 33, + "key": "test_failures", + "name": "Unit test failures", + "type": "INT", + "domain": "Tests", + "hidden": false + } + ] + }) + }); + + + jQuery.mockjax({ + url: "../api/qualitygates/list", + responseText: JSON.stringify({ + "qualitygates": [ + { + "id": 1, + "name": "Default Gate" + } + ], + "default": 1 + }) + }); + + jQuery.mockjax({ + url: "../api/qualitygates/show?id=1", + responseText: { + "id": 1, + "name": "Default Gate", + "conditions": [ + { + "id": 1, + "metric": "blocker_violations", + "op": "GT", + "warning": "", + "error": "0" + }, + { + "id": 2, + "metric": "new_coverage", + "op": "LT", + "warning": "", + "error": "80", + "period": 3 + }, + { + "id": 3, + "metric": "critical_violations", + "op": "GT", + "warning": "", + "error": "0" + }, + { + "id": 4, + "metric": "sqale_effort_to_grade_a", + "op": "GT", + "warning": "", + "error": "0" + }, + { + "id": 5, + "metric": "open_issues", + "op": "GT", + "warning": "0", + "error": "" + }, + { + "id": 6, + "metric": "reopened_issues", + "op": "GT", + "warning": "0", + "error": "" + }, + { + "id": 7, + "metric": "skipped_tests", + "op": "GT", + "warning": "0", + "error": "" + }, + { + "id": 8, + "metric": "test_errors", + "op": "GT", + "warning": "", + "error": "0" + }, + { + "id": 9, + "metric": "test_failures", + "op": "GT", + "warning": "", + "error": "0" + } + ] + } + }); + + }); + }); + } + }; + + // See API at http://docs.casperjs.org/en/latest/modules/index.html + + casper.start('http://localhost:3000/pages/quality-gates.html', function() { + test.assertTitle('Quality Gates'); + }); + + casper.waitWhileSelector("div#quality-gates-loader", function() { + + casper.waitForSelector('li.active', function() { + test.assertElementCount('li.active', 1); + test.assertSelectorHasText('ol.navigator-results-list li', 'Default Gate'); + }); + + casper.waitForSelector('div.navigator-header', function() { + test.assertSelectorHasText('div.navigator-header h1', 'Default Gate'); + }); + + casper.waitForSelector('table.quality-gate-conditions tbody tr:nth-child(9)', function() { + test.assertElementCount('table.quality-gate-conditions tbody tr', 9); + }); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/sonar-server/src/main/js/tests/e2e/tests/quality-gates.js b/sonar-server/src/main/js/tests/e2e/tests/quality-gates.js deleted file mode 100644 index 94f134693c3..00000000000 --- a/sonar-server/src/main/js/tests/e2e/tests/quality-gates.js +++ /dev/null @@ -1,251 +0,0 @@ -// Dump log messages -casper.on('remote.message', function(message) { - this.echo('Log: '+ message, 'LOG'); -}); - -// Dump uncaught errors -casper.on('page.error', function(msg, trace) { - this.echo('Error: ' + msg, 'ERROR'); -}); - - -casper.test.begin('App is setup correctly', function suite(test) { - - // Register mockjax requests on loading of requirejs - casper.options.onResourceRequested = function(instance, requestData, networkRequest) { - if (requestData.url.indexOf('require') >= 0) { - // Here, instance is the running instance of casperjs - instance.page.includeJs('../js/third-party/jquery.mockjax.js', function() { - instance.page.evaluate(function() { - jQuery.mockjaxSettings.contentType = 'text/json'; - jQuery.mockjaxSettings.responseTime = 250; - - jQuery.mockjax({ - url: '../api/l10n/index', - responseText: JSON.stringify({ - 'quality_gates.page': 'Quality Gates' - }) - }); - - jQuery.mockjax({ - url: '../api/qualitygates/app', - responseText: JSON.stringify({ - "edit": false, - "periods": [ - { - "key": 1, - "text": "since previous analysis" - }, - { - "key": 2, - "text": "over 365 days" - }, - { - "key": 3, - "text": "since previous version" - }, - { - "key": 4, - "text": "over period 4 - defined at project level" - }, - { - "key": 5, - "text": "over period 5 - defined at project level" - } - ], - "metrics": [ - { - "id": 62, - "key": "blocker_violations", - "name": "Blocker issues", - "type": "INT", - "domain": "Issues", - "hidden": false - }, - { - "id": 37, - "key": "new_coverage", - "name": "Coverage on new code", - "type": "PERCENT", - "domain": "Tests", - "hidden": false - }, - { - "id": 63, - "key": "critical_violations", - "name": "Critical issues", - "type": "INT", - "domain": "Issues", - "hidden": false - }, - { - "id": 154, - "key": "sqale_effort_to_grade_a", - "name": "Effort to rating A", - "type": "WORK_DUR", - "domain": "SQALE", - "hidden": false - }, - { - "id": 218, - "key": "open_issues", - "name": "Open issues", - "type": "INT", - "domain": "Issues", - "hidden": false - }, - { - "id": 219, - "key": "reopened_issues", - "name": "Reopened issues", - "type": "INT", - "domain": "Issues", - "hidden": false - }, - { - "id": 32, - "key": "skipped_tests", - "name": "Skipped unit tests", - "type": "INT", - "domain": "Tests", - "hidden": false - }, - { - "id": 31, - "key": "test_errors", - "name": "Unit test errors", - "type": "INT", - "domain": "Tests", - "hidden": false - }, - { - "id": 33, - "key": "test_failures", - "name": "Unit test failures", - "type": "INT", - "domain": "Tests", - "hidden": false - } - ] - }) - }); - - - jQuery.mockjax({ - url: "../api/qualitygates/list", - responseText: JSON.stringify({ - "qualitygates": [ - { - "id": 1, - "name": "Default Gate" - } - ], - "default": 1 - }) - }); - - jQuery.mockjax({ - url: "../api/qualitygates/show?id=1", - responseText: { - "id": 1, - "name": "Default Gate", - "conditions": [ - { - "id": 1, - "metric": "blocker_violations", - "op": "GT", - "warning": "", - "error": "0" - }, - { - "id": 2, - "metric": "new_coverage", - "op": "LT", - "warning": "", - "error": "80", - "period": 3 - }, - { - "id": 3, - "metric": "critical_violations", - "op": "GT", - "warning": "", - "error": "0" - }, - { - "id": 4, - "metric": "sqale_effort_to_grade_a", - "op": "GT", - "warning": "", - "error": "0" - }, - { - "id": 5, - "metric": "open_issues", - "op": "GT", - "warning": "0", - "error": "" - }, - { - "id": 6, - "metric": "reopened_issues", - "op": "GT", - "warning": "0", - "error": "" - }, - { - "id": 7, - "metric": "skipped_tests", - "op": "GT", - "warning": "0", - "error": "" - }, - { - "id": 8, - "metric": "test_errors", - "op": "GT", - "warning": "", - "error": "0" - }, - { - "id": 9, - "metric": "test_failures", - "op": "GT", - "warning": "", - "error": "0" - } - ] - } - }); - - }); - }); - } - }; - - // See API at http://docs.casperjs.org/en/latest/modules/index.html - - casper.start('http://localhost:3000/pages/quality-gates.html', function() { - test.assertTitle('Quality Gates'); - }); - - casper.waitWhileSelector("div#quality-gates-loader", function() { - - casper.waitForSelector('li.active', function() { - test.assertElementCount('li.active', 1); - test.assertSelectorHasText('ol.navigator-results-list li', 'Default Gate'); - }); - - casper.waitForSelector('div.navigator-header', function() { - test.assertSelectorHasText('div.navigator-header h1', 'Default Gate'); - }); - - casper.waitForSelector('table.quality-gate-conditions tbody tr:nth-child(9)', function() { - test.assertElementCount('table.quality-gate-conditions tbody tr', 9); - }); - }); - - casper.run(function() { - test.done(); - }); -}); diff --git a/sonar-server/src/main/js/tests/main.js b/sonar-server/src/main/js/tests/main.js deleted file mode 100644 index eb95545cb5b..00000000000 --- a/sonar-server/src/main/js/tests/main.js +++ /dev/null @@ -1,44 +0,0 @@ -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/js/tests/navigator/filters/BaseFilterViewSpec.js b/sonar-server/src/main/js/tests/navigator/filters/BaseFilterViewSpec.js deleted file mode 100644 index b1a0ab15c4f..00000000000 --- a/sonar-server/src/main/js/tests/navigator/filters/BaseFilterViewSpec.js +++ /dev/null @@ -1,15 +0,0 @@ -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/js/tests/navigator/filters/ChoiceFilterViewSpec.js b/sonar-server/src/main/js/tests/navigator/filters/ChoiceFilterViewSpec.js deleted file mode 100644 index 3b905a9f88f..00000000000 --- a/sonar-server/src/main/js/tests/navigator/filters/ChoiceFilterViewSpec.js +++ /dev/null @@ -1,39 +0,0 @@ -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); - }); - - }); - -}); diff --git a/sonar-server/src/main/js/translate.js b/sonar-server/src/main/js/translate.js index cb10b996220..c86d28c09ef 100644 --- a/sonar-server/src/main/js/translate.js +++ b/sonar-server/src/main/js/translate.js @@ -1,7 +1,11 @@ (function() { + window.suppressTranslationWarnings = false; + var warn = function(message) { - if (console != null && typeof console.warn === 'function') { - console.warn(message); + if (!window.suppressTranslationWarnings) { + if (console != null && typeof console.warn === 'function') { + console.warn(message); + } } }; @@ -90,7 +94,7 @@ window.messages = bundle; localStorage.setItem('l10n.bundle', JSON.stringify(bundle)); - } else if (jqXHR.status === 304) { + } else if (jqXHR.status == 304) { window.messages = JSON.parse(localStorage.getItem('l10n.bundle')); } });