From: Stas Vilchik Date: Tue, 17 Mar 2015 14:32:13 +0000 (+0100) Subject: add some web tests X-Git-Tag: 5.2-RC1~2554 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=083b9e143663fefdcf9ad0f71457bbbe70d60174;p=sonarqube.git add some web tests --- diff --git a/server/sonar-web/Gruntfile.coffee b/server/sonar-web/Gruntfile.coffee index 923cd20b34b..906e0a034d3 100644 --- a/server/sonar-web/Gruntfile.coffee +++ b/server/sonar-web/Gruntfile.coffee @@ -366,6 +366,7 @@ module.exports = (grunt) -> test: true 'fail-fast': true verbose: true + parallel: !isWindows port: expressPort src: ['src/test/js/**/*<%= grunt.option("spec") %>*.js'] single: diff --git a/server/sonar-web/src/main/js/coding-rules/filters-view.js b/server/sonar-web/src/main/js/coding-rules/filters-view.js index e4acf24227d..5b888444bc9 100644 --- a/server/sonar-web/src/main/js/coding-rules/filters-view.js +++ b/server/sonar-web/src/main/js/coding-rules/filters-view.js @@ -22,15 +22,7 @@ define([ ], function () { return Marionette.ItemView.extend({ - template: Templates['coding-rules-filters'], - - events: { - 'click .js-new-search': 'newSearch' - }, - - newSearch: function () { - this.options.app.controller.newSearch(); - } + template: Templates['coding-rules-filters'] }); }); diff --git a/server/sonar-web/src/test/js/coding-rules-page-bulk-change.js b/server/sonar-web/src/test/js/coding-rules-page-bulk-change.js new file mode 100644 index 00000000000..9d455734b08 --- /dev/null +++ b/server/sonar-web/src/test/js/coding-rules-page-bulk-change.js @@ -0,0 +1,273 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/* global casper:false */ + +var lib = require('../lib'), + testName = lib.testName('Coding Rules', 'Bulk Change'); + +lib.initMessages(); +lib.changeWorkingDirectory('coding-rules-page-bulk-change'); +lib.configureCasper(); + + +casper.test.begin(testName('Activate', 'Success'), function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + lib.mockRequest('/api/qualityprofiles/activate_rules', '{ "succeeded": 225 }'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + test.assertExists('.js-bulk-change'); + casper.click('.js-bulk-change'); + casper.waitForSelector('.bubble-popup'); + }) + + .then(function () { + test.assertExists('.bubble-popup .js-bulk-change[data-action="activate"]'); + casper.click('.js-bulk-change[data-action="activate"]'); + casper.waitForSelector('.modal'); + }) + + .then(function () { + test.assertExists('.modal #coding-rules-bulk-change-profile'); + test.assertExists('.modal #coding-rules-submit-bulk-change'); + }) + + .then(function () { + casper.evaluate(function () { + jQuery('#coding-rules-bulk-change-profile').val('java-default-with-mojo-conventions-49307'); + }); + }) + + .then(function () { + casper.click('.modal #coding-rules-submit-bulk-change'); + casper.waitForSelector('.modal .alert-success'); + }) + + .then(function () { + test.assertSelectorContains('.modal', '225'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Activate', 'Failed'), function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + lib.mockRequest('/api/qualityprofiles/activate_rules', '{ "succeeded": 225, "failed": 395 }'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + test.assertExists('.js-bulk-change'); + casper.click('.js-bulk-change'); + casper.waitForSelector('.bubble-popup'); + }) + + .then(function () { + test.assertExists('.bubble-popup .js-bulk-change[data-action="activate"]'); + casper.click('.js-bulk-change[data-action="activate"]'); + casper.waitForSelector('.modal'); + }) + + .then(function () { + test.assertExists('.modal #coding-rules-bulk-change-profile'); + test.assertExists('.modal #coding-rules-submit-bulk-change'); + }) + + .then(function () { + casper.evaluate(function () { + jQuery('#coding-rules-bulk-change-profile').val('java-default-with-mojo-conventions-49307'); + }); + }) + + .then(function () { + casper.click('.modal #coding-rules-submit-bulk-change'); + casper.waitForSelector('.modal .alert-warning'); + }) + + .then(function () { + test.assertSelectorContains('.modal', '225'); + test.assertSelectorContains('.modal', '395'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Filter Profiles by Language'), 4, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + casper.click('.js-facet[data-value="java"]'); + test.assertExists('.js-bulk-change'); + casper.click('.js-bulk-change'); + casper.waitForSelector('.bubble-popup'); + }) + + .then(function () { + test.assertExists('.bubble-popup .js-bulk-change[data-action="activate"]'); + casper.click('.js-bulk-change[data-action="activate"]'); + casper.waitForSelector('.modal'); + }) + + .then(function () { + test.assertExists('.modal #coding-rules-bulk-change-profile'); + test.assertEqual(8, casper.evaluate(function () { + return jQuery('.modal').find('#coding-rules-bulk-change-profile').find('option').length; + })); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Change Selected Profile'), 4, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search-qprofile-active.json', + { data: { activation: true } }); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + lib.mockRequest('/api/qualityprofiles/deactivate_rules', '{ "succeeded": 7 }'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + casper.click('[data-property="qprofile"] .js-facet-toggle'); + casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]'); + }) + + .then(function () { + casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]'); + casper.waitForSelectorTextChange('#coding-rules-total'); + }) + + .then(function () { + test.assertExists('.js-bulk-change'); + casper.click('.js-bulk-change'); + casper.waitForSelector('.bubble-popup'); + }) + + .then(function () { + test.assertExists('.bubble-popup .js-bulk-change[data-param="java-default-with-mojo-conventions-49307"]'); + casper.click('.js-bulk-change[data-param="java-default-with-mojo-conventions-49307"]'); + casper.waitForSelector('.modal'); + }) + + .then(function () { + test.assertDoesntExist('.modal #coding-rules-bulk-change-profile'); + casper.click('.modal #coding-rules-submit-bulk-change'); + casper.waitForSelector('.modal .alert-success'); + }) + + .then(function () { + test.assertSelectorContains('.modal', '7'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); diff --git a/server/sonar-web/src/test/js/coding-rules-page-header.js b/server/sonar-web/src/test/js/coding-rules-page-header.js new file mode 100644 index 00000000000..0cd140a460e --- /dev/null +++ b/server/sonar-web/src/test/js/coding-rules-page-header.js @@ -0,0 +1,162 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/* global casper:false */ + +var lib = require('../lib'), + testName = lib.testName('Coding Rules', 'Header'); + +lib.initMessages(); +lib.changeWorkingDirectory('coding-rules-page-header'); +lib.configureCasper(); + + +casper.test.begin(testName('Reload'), 2, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search.json'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + test.assertSelectorContains('#coding-rules-total', 609); + lib.clearRequestMock(this.searchMock); + lib.mockRequestFromFile('/api/rules/search', 'search2.json'); + casper.click('.js-reload'); + casper.waitForSelectorTextChange('#coding-rules-total'); + }) + + .then(function () { + test.assertSelectorContains('#coding-rules-total', 413); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('New Search'), 3, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search2.json', { data: { languages: 'java' } }); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule'); + }) + + .then(function () { + test.assertSelectorContains('#coding-rules-total', 609); + casper.click('.js-facet[data-value="java"]'); + casper.waitForSelectorTextChange('#coding-rules-total'); + }) + + .then(function () { + test.assertSelectorContains('#coding-rules-total', 413); + casper.click('.js-new-search'); + casper.waitForSelectorTextChange('#coding-rules-total'); + }) + + .then(function () { + test.assertSelectorContains('#coding-rules-total', 609); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); + + +casper.test.begin(testName('Go Back'), 2, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + lib.mockRequest('/api/l10n/index', '{}'); + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + lib.mockRequestFromFile('/api/rules/search', 'search.json'); + lib.mockRequestFromFile('/api/rules/show', 'show.json'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule.selected', function () { + casper.click('.coding-rule.selected .js-rule'); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rules-detail-header'); + }) + + .then(function () { + casper.click('.js-back'); + test.assertDoesntExist('.js-back'); + test.assertDoesntExist('.coding-rules-detail-header'); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); diff --git a/server/sonar-web/src/test/json/coding-rules-page-bulk-change/app.json b/server/sonar-web/src/test/json/coding-rules-page-bulk-change/app.json new file mode 100644 index 00000000000..50148bb1b6e --- /dev/null +++ b/server/sonar-web/src/test/json/coding-rules-page-bulk-change/app.json @@ -0,0 +1,316 @@ +{ + "canWrite": true, + "qualityprofiles": [ + { + "key": "java-default-with-mojo-conventions-49307", + "name": "Default - Maven Conventions", + "lang": "java", + "parentKey": "java-top-profile-without-formatting-conventions-50037" + }, + { + "key": "java-default-with-sonarsource-conventions-27339", + "name": "Default - SonarSource conventions", + "lang": "java", + "parentKey": "java-top-profile-without-formatting-conventions-50037" + }, + { + "key": "java-top-profile-without-formatting-conventions-50037", + "name": "Default - Top", + "lang": "java" + }, + { + "key": "java-findbugs-14954", + "name": "FindBugs", + "lang": "java" + }, + { + "key": "java-for-sq-java-plugin-only-92289", + "name": "For SQ Java Plugin Only", + "lang": "java", + "parentKey": "java-default-with-sonarsource-conventions-27339" + }, + { + "key": "java-for-sq-only-95381", + "name": "For SQ Only", + "lang": "java", + "parentKey": "java-default-with-sonarsource-conventions-27339" + }, + { + "key": "php-psr-2-06315", + "name": "PSR-2", + "lang": "php" + }, + { + "key": "java-sonar-way-80423", + "name": "Sonar way", + "lang": "java" + }, + { + "key": "js-sonar-way", + "name": "Sonar way", + "lang": "js" + }, + { + "key": "php-sonar-way-05548", + "name": "Sonar way", + "lang": "php" + }, + { + "key": "py-sonar-way-80265", + "name": "Sonar way", + "lang": "py" + }, + { + "key": "java-without-findbugs", + "name": "Without Findbugs", + "lang": "java" + } + ], + "languages": { + "py": "Python", + "js": "JavaScript", + "php": "PHP", + "java": "Java" + }, + "repositories": [ + { + "key": "common-java", + "name": "Common SonarQube", + "language": "java" + }, + { + "key": "common-js", + "name": "Common SonarQube", + "language": "js" + }, + { + "key": "common-php", + "name": "Common SonarQube", + "language": "php" + }, + { + "key": "common-py", + "name": "Common SonarQube", + "language": "py" + }, + { + "key": "Pylint", + "name": "Pylint", + "language": "py" + }, + { + "key": "javascript", + "name": "SonarQube", + "language": "js" + }, + { + "key": "php", + "name": "SonarQube", + "language": "php" + }, + { + "key": "python", + "name": "SonarQube", + "language": "py" + }, + { + "key": "squid", + "name": "SonarQube", + "language": "java" + } + ], + "statuses": { + "BETA": "Beta", + "DEPRECATED": "Deprecated", + "READY": "Ready" + }, + "characteristics": [ + { + "key": "UNDERSTANDABILITY", + "name": "Understandability", + "parent": "MAINTAINABILITY" + }, + { + "key": "MAINTAINABILITY", + "name": "Maintainability" + }, + { + "key": "TIME_ZONE_RELATED_PORTABILITY", + "name": "Time zone related portability", + "parent": "PORTABILITY" + }, + { + "key": "READABILITY", + "name": "Readability", + "parent": "MAINTAINABILITY" + }, + { + "key": "SECURITY_FEATURES", + "name": "Security features", + "parent": "SECURITY" + }, + { + "key": "ARCHITECTURE_RELIABILITY", + "name": "Architecture related reliability", + "parent": "RELIABILITY" + }, + { + "key": "OS_RELATED_PORTABILITY", + "name": "OS related portability", + "parent": "PORTABILITY" + }, + { + "key": "EXCEPTION_HANDLING", + "name": "Exception handling", + "parent": "RELIABILITY" + }, + { + "key": "LOGIC_CHANGEABILITY", + "name": "Logic related changeability", + "parent": "CHANGEABILITY" + }, + { + "key": "SOFTWARE_RELATED_PORTABILITY", + "name": "Software related portability", + "parent": "PORTABILITY" + }, + { + "key": "INPUT_VALIDATION_AND_REPRESENTATION", + "name": "Input validation and representation", + "parent": "SECURITY" + }, + { + "key": "LANGUAGE_RELATED_PORTABILITY", + "name": "Language related portability", + "parent": "PORTABILITY" + }, + { + "key": "ERRORS", + "name": "Errors", + "parent": "SECURITY" + }, + { + "key": "SECURITY", + "name": "Security" + }, + { + "key": "RELIABILITY", + "name": "Reliability" + }, + { + "key": "PORTABILITY", + "name": "Portability" + }, + { + "key": "HARDWARE_RELATED_PORTABILITY", + "name": "Hardware related portability", + "parent": "PORTABILITY" + }, + { + "key": "SYNCHRONIZATION_RELIABILITY", + "name": "Synchronization related reliability", + "parent": "RELIABILITY" + }, + { + "key": "TRANSPORTABILITY", + "name": "Transportability", + "parent": "REUSABILITY" + }, + { + "key": "COMPILER_RELATED_PORTABILITY", + "name": "Compiler related portability", + "parent": "PORTABILITY" + }, + { + "key": "RESOURCE_RELIABILITY", + "name": "Resource", + "parent": "RELIABILITY" + }, + { + "key": "CPU_EFFICIENCY", + "name": "Processor use", + "parent": "EFFICIENCY" + }, + { + "key": "EFFICIENCY", + "name": "Efficiency" + }, + { + "key": "CHANGEABILITY", + "name": "Changeability" + }, + { + "key": "DATA_CHANGEABILITY", + "name": "Data related changeability", + "parent": "CHANGEABILITY" + }, + { + "key": "API_ABUSE", + "name": "API abuse", + "parent": "SECURITY" + }, + { + "key": "ARCHITECTURE_CHANGEABILITY", + "name": "Architecture related changeability", + "parent": "CHANGEABILITY" + }, + { + "key": "UNIT_TESTS", + "name": "Unit tests", + "parent": "RELIABILITY" + }, + { + "key": "INSTRUCTION_RELIABILITY", + "name": "Instruction related reliability", + "parent": "RELIABILITY" + }, + { + "key": "REUSABILITY", + "name": "Reusability" + }, + { + "key": "MODULARITY", + "name": "Modularity", + "parent": "REUSABILITY" + }, + { + "key": "UNIT_TESTABILITY", + "name": "Unit level testability", + "parent": "TESTABILITY" + }, + { + "key": "TESTABILITY", + "name": "Testability" + }, + { + "key": "INTEGRATION_TESTABILITY", + "name": "Integration level testability", + "parent": "TESTABILITY" + }, + { + "key": "NETWORK_USE", + "name": "Network use", + "parent": "EFFICIENCY" + }, + { + "key": "MEMORY_EFFICIENCY", + "name": "Memory use", + "parent": "EFFICIENCY" + }, + { + "key": "DATA_RELIABILITY", + "name": "Data related reliability", + "parent": "RELIABILITY" + }, + { + "key": "FAULT_TOLERANCE", + "name": "Fault tolerance", + "parent": "RELIABILITY" + }, + { + "key": "LOGIC_RELIABILITY", + "name": "Logic related reliability", + "parent": "RELIABILITY" + } + ] +} diff --git a/server/sonar-web/src/test/json/coding-rules-page-bulk-change/search-qprofile-active.json b/server/sonar-web/src/test/json/coding-rules-page-bulk-change/search-qprofile-active.json new file mode 100644 index 00000000000..cbbb2722ae9 --- /dev/null +++ b/server/sonar-web/src/test/json/coding-rules-page-bulk-change/search-qprofile-active.json @@ -0,0 +1,371 @@ +{ + "total": 407, + "p": 1, + "ps": 25, + "rules": [ + { + "key": "squid:S2077", + "name": "Values passed to SQL commands should be sanitized", + "lang": "java", + "langName": "Java", + "sysTags": [ + "cwe", + "owasp-top10", + "security", + "sql" + ], + "tags": [ + "custom-tag" + ] + }, + { + "key": "php:S107", + "name": "Functions should not have too many parameters", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "brain-overload" + ], + "tags": [] + }, + { + "key": "php:S1192", + "name": "String literals should not be duplicated", + "lang": "php", + "langName": "PHP", + "sysTags": [], + "tags": [] + }, + { + "key": "php:S1145", + "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "bug", + "cwe", + "security" + ], + "tags": [] + }, + { + "key": "php:S108", + "name": "Nested blocks of code should not be left empty", + "lang": "php", + "langName": "PHP", + "sysTags": [], + "tags": [] + }, + { + "key": "php:S1301", + "name": "\"switch\" statements should have at least 3 \"case\" clauses", + "lang": "php", + "langName": "PHP", + "sysTags": [], + "tags": [] + }, + { + "key": "php:S103", + "name": "Lines should not be too long", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "convention" + ], + "tags": [] + }, + { + "key": "php:S1144", + "name": "Unused private method should be removed", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "unused" + ], + "tags": [] + }, + { + "key": "php:S105", + "name": "Tabulation characters should not be used", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "convention", + "psr2" + ], + "tags": [] + }, + { + "key": "php:S1481", + "name": "Unused local variables should be removed", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "unused" + ], + "tags": [] + }, + { + "key": "php:S1142", + "name": "Functions should not contain too many return statements", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "brain-overload" + ], + "tags": [] + }, + { + "key": "php:S104", + "name": "Files should not have too many lines", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "brain-overload" + ], + "tags": [] + }, + { + "key": "php:S1605", + "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "convention" + ], + "tags": [] + }, + { + "key": "php:S1448", + "name": "Classes should not have too many methods", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "brain-overload" + ], + "tags": [] + }, + { + "key": "php:S1603", + "name": "PHP 4 constructor declarations should not be used", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "pitfail" + ], + "tags": [] + }, + { + "key": "php:S1779", + "name": "Only LF character (Unix-like) should be used to end lines", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "convention", + "psr2" + ], + "tags": [] + }, + { + "key": "php:S1185", + "name": "Overriding methods should do more than simply call the same method in the super class", + "lang": "php", + "langName": "PHP", + "sysTags": [], + "tags": [] + }, + { + "key": "php:S1600", + "name": "Deprecated predefined variables should not be used", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "pitfail" + ], + "tags": [] + }, + { + "key": "php:S1109", + "name": "A close curly brace should be located at the beginning of a line", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "convention" + ], + "tags": [] + }, + { + "key": "php:S2001", + "name": "Functions deprecated in PHP 5 should not be used", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "obsolete" + ], + "tags": [] + }, + { + "key": "php:S2002", + "name": "Errors should not be silenced", + "lang": "php", + "langName": "PHP", + "sysTags": [ + "pitfail" + ], + "tags": [] + }, + { + "key": "php:S2000", + "name": "Files should not contain characters before \"\nThrowable is the superclass of all errors and exceptions in Java.\nError is the superclass of all errors which are not meant to be caught by applications.\n

\n\n

\nCatching either Throwable or Error will also catch OutOfMemoryError or InternalError from which an application should not attempt to recover.\n

\n\n

Only Exception and its subclasses should be caught.

\n\n

Noncompliant Code Example

\n\n
\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n
\n\n

Compliant Solution

\n\n
\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n
", + "defaultDebtChar": "RELIABILITY", + "defaultDebtSubChar": "EXCEPTION_HANDLING", + "debtChar": "RELIABILITY", + "debtSubChar": "EXCEPTION_HANDLING", + "debtCharName": "Reliability", + "debtSubCharName": "Exception handling", + "defaultDebtRemFnType": "CONSTANT_ISSUE", + "defaultDebtRemFnOffset": "20min", + "debtOverloaded": true, + "debtRemFnType": "LINEAR", + "debtRemFnCoeff": "20min", + "params": [ + { + "key": "max", + "htmlDesc": "Maximum authorized number of parameters", + "type": "INTEGER", + "defaultValue": "7" + } + ] + }, + "actives": [ + { + "qProfile": "java-top-profile-without-formatting-conventions-50037", + "inherit": "NONE", + "severity": "BLOCKER", + "params": [] + }, + { + "qProfile": "java-default-with-sonarsource-conventions-27339", + "inherit": "INHERITED", + "severity": "BLOCKER", + "params": [] + }, + { + "qProfile": "java-for-sq-java-plugin-only-92289", + "inherit": "INHERITED", + "severity": "BLOCKER", + "params": [] + }, + { + "qProfile": "java-for-sq-only-95381", + "inherit": "INHERITED", + "severity": "BLOCKER", + "params": [] + }, + { + "qProfile": "java-default-with-mojo-conventions-49307", + "inherit": "INHERITED", + "severity": "BLOCKER", + "params": [] + }, + { + "qProfile": "java-sonar-way-80423", + "inherit": "NONE", + "severity": "BLOCKER", + "params": [] + } + ] +}