]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5820 Ability to filter rules that are inactive in a quality profile
authorStas Vilchik <vilchiks@gmail.com>
Mon, 5 Jan 2015 12:37:35 +0000 (13:37 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Mon, 5 Jan 2015 12:37:43 +0000 (13:37 +0100)
server/sonar-web/src/main/hbs/coding-rules/facets/coding-rules-quality-profile-facet.hbs [new file with mode: 0644]
server/sonar-web/src/main/js/coding-rules/facets/quality-profile-facet.js
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js [new file with mode: 0644]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json [new file with mode: 0644]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json [new file with mode: 0644]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json [new file with mode: 0644]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json [new file with mode: 0644]
server/sonar-web/src/main/less/components/facets.less
server/sonar-web/src/main/less/components/search-navigator.less

diff --git a/server/sonar-web/src/main/hbs/coding-rules/facets/coding-rules-quality-profile-facet.hbs b/server/sonar-web/src/main/hbs/coding-rules/facets/coding-rules-quality-profile-facet.hbs
new file mode 100644 (file)
index 0000000..5e964be
--- /dev/null
@@ -0,0 +1,13 @@
+{{> '_coding-rules-facet-header'}}
+
+<div class="search-navigator-facet-list">
+  {{#each values}}
+    <a class="facet search-navigator-facet js-facet" data-value="{{val}}" title="{{default label val}}">
+      <span class="facet-name">{{default label val}}{{#if extra}} <span class="subtitle">{{extra}}</span>{{/if}}</span>
+      <span class="facet-stat">
+        <span class="js-active facet-toggle facet-toggle-green {{#if ../toggled}}facet-toggle-active{{/if}}">active</span>
+        <span class="js-inactive facet-toggle facet-toggle-red {{#unless ../toggled}}facet-toggle-active{{/unless}}">inactive</span>
+      </span>
+    </a>
+  {{/each}}
+</div>
index 1e90e2bacca1fabbb8cb4b0d30dd6861da6f9495..aa4e510eaf60b658b7205d9055b95ab3833ac3eb 100644 (file)
@@ -1,10 +1,19 @@
 define([
-  'coding-rules/facets/base-facet'
-], function (BaseFacet) {
+  'coding-rules/facets/base-facet',
+  'templates/coding-rules'
+], function (BaseFacet, Templates) {
 
   var $ = jQuery;
 
   return BaseFacet.extend({
+    template: Templates['coding-rules-quality-profile-facet'],
+
+    events: function () {
+      return _.extend(BaseFacet.prototype.events.apply(this, arguments), {
+        'click .js-active': 'setActivation',
+        'click .js-inactive': 'unsetActivation'
+      });
+    },
 
     getValues: function () {
       var that = this,
@@ -31,9 +40,25 @@ define([
       this.options.app.state.updateFilter(obj);
     },
 
+    setActivation: function (e) {
+      e.stopPropagation();
+      this.options.app.state.updateFilter({ activation: 'true' });
+    },
+
+    unsetActivation: function (e) {
+      e.stopPropagation();
+      this.options.app.state.updateFilter({ activation: 'false' });
+    },
+
+    getToggled: function () {
+      var activation = this.options.app.state.get('query').activation;
+      return activation === 'true' || activation === true;
+    },
+
     serializeData: function () {
       return _.extend(BaseFacet.prototype.serializeData.apply(this, arguments), {
-        values: this.getValues()
+        values: this.getValues(),
+        toggled: this.getToggled()
       });
     }
   });
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js
new file mode 100644 (file)
index 0000000..d377b4f
--- /dev/null
@@ -0,0 +1,54 @@
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-quality-profile-facet');
+
+
+casper.test.begin('coding-rules-page-quality-profile-facet', 5, 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-qprofile-inactive.json',
+            { data: { activation: 'false' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        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.assertSelectorContains('#coding-rules-total', '407');
+        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-active.facet-toggle-active');
+        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive');
+        lib.capture();
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '408');
+        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive.facet-toggle-active');
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json
new file mode 100644 (file)
index 0000000..4f3319c
--- /dev/null
@@ -0,0 +1,168 @@
+{
+  "canWrite": false,
+  "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": {
+    "UNDERSTANDABILITY": "Maintainability: Understandability",
+    "MAINTAINABILITY": "Maintainability",
+    "TIME_ZONE_RELATED_PORTABILITY": "Portability: Time zone related portability",
+    "READABILITY": "Maintainability: Readability",
+    "SECURITY_FEATURES": "Security: Security features",
+    "ARCHITECTURE_RELIABILITY": "Reliability: Architecture related reliability",
+    "OS_RELATED_PORTABILITY": "Portability: OS related portability",
+    "EXCEPTION_HANDLING": "Reliability: Exception handling",
+    "LOGIC_CHANGEABILITY": "Changeability: Logic related changeability",
+    "SOFTWARE_RELATED_PORTABILITY": "Portability: Software related portability",
+    "INPUT_VALIDATION_AND_REPRESENTATION": "Security: Input validation and representation",
+    "LANGUAGE_RELATED_PORTABILITY": "Portability: Language related portability",
+    "ERRORS": "Security: Errors",
+    "SECURITY": "Security",
+    "RELIABILITY": "Reliability",
+    "PORTABILITY": "Portability",
+    "HARDWARE_RELATED_PORTABILITY": "Portability: Hardware related portability",
+    "SYNCHRONIZATION_RELIABILITY": "Reliability: Synchronization related reliability",
+    "TRANSPORTABILITY": "Reusability: Transportability",
+    "COMPILER_RELATED_PORTABILITY": "Portability: Compiler related portability",
+    "RESOURCE_RELIABILITY": "Reliability: Resource",
+    "CPU_EFFICIENCY": "Efficiency: Processor use",
+    "EFFICIENCY": "Efficiency",
+    "CHANGEABILITY": "Changeability",
+    "DATA_CHANGEABILITY": "Changeability: Data related changeability",
+    "API_ABUSE": "Security: API abuse",
+    "ARCHITECTURE_CHANGEABILITY": "Changeability: Architecture related changeability",
+    "UNIT_TESTS": "Reliability: Unit tests",
+    "INSTRUCTION_RELIABILITY": "Reliability: Instruction related reliability",
+    "REUSABILITY": "Reusability",
+    "MODULARITY": "Reusability: Modularity",
+    "UNIT_TESTABILITY": "Testability: Unit level testability",
+    "TESTABILITY": "Testability",
+    "INTEGRATION_TESTABILITY": "Testability: Integration level testability",
+    "NETWORK_USE": "Efficiency: Network use",
+    "MEMORY_EFFICIENCY": "Efficiency: Memory use",
+    "DATA_RELIABILITY": "Reliability: Data related reliability",
+    "FAULT_TOLERANCE": "Reliability: Fault tolerance",
+    "LOGIC_RELIABILITY": "Reliability: Logic related reliability"
+  }
+}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json
new file mode 100644 (file)
index 0000000..cbbb272
--- /dev/null
@@ -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 \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json
new file mode 100644 (file)
index 0000000..63dd5c4
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 408,
+  "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 \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "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 \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
index c21ed50005ff2a0af6ed192004de396d970be1c1..ae37e07518411b9d6633e2bcb0e1443b40464860 100644 (file)
   color: @secondFontColor;
   font-size: @smallFontSize;
 }
+
+.facet-toggle {
+  display: none;
+  float: left;
+  height: 16px;
+  line-height: 16px;
+  margin-top: -2px;
+  padding: 0 5px;
+  border-radius: 3px;
+  font-size: 11px;
+  font-weight: 300;
+  text-transform: lowercase;
+
+  &:hover {
+    color: @baseFontColor;
+  }
+}
+
+.facet-toggle-active.facet-toggle-green {
+  background-color: @green;
+  color: #fff;
+}
+
+.facet-toggle-active.facet-toggle-red {
+  background-color: @red;
+  color: #fff;
+}
index 85c80d2301653d9b05e3d06ac6e97512c27ba6e0..f73ff56db1e913410f86f8ba7657470bdd0d130c 100644 (file)
@@ -83,7 +83,7 @@
   .box-sizing(border-box);
   background-color: @barBackgroundColor;
   white-space: normal;
-  overflow-x: hidden;
+  overflow: hidden;
 
   .facet-name {
     white-space: nowrap;
   &.active .facet-stat:before {
     background-image: linear-gradient(to right, fade(@lightBlue, 0%), @lightBlue 75%);
   }
+
+  &.active .facet-toggle {
+    display: inline;
+  }
 }
 
 .search-navigator-facet-half {