aboutsummaryrefslogtreecommitdiffstats
path: root/its/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'its/plugin')
-rw-r--r--its/plugin/projects/external-report-project/report.json55
-rw-r--r--its/plugin/projects/external-report-project/src/file1.css111
-rw-r--r--its/plugin/projects/external-report-project/src/file2.css114
-rw-r--r--its/plugin/projects/external-report-project/stylelintconfig.json162
-rw-r--r--its/plugin/src/test/java/org/sonar/css/its/StylelintReportTest.java62
-rw-r--r--its/plugin/src/test/java/org/sonar/css/its/Tests.java4
6 files changed, 507 insertions, 1 deletions
diff --git a/its/plugin/projects/external-report-project/report.json b/its/plugin/projects/external-report-project/report.json
new file mode 100644
index 0000000..2681dac
--- /dev/null
+++ b/its/plugin/projects/external-report-project/report.json
@@ -0,0 +1,55 @@
+[
+ {
+ "source": "src/file1.css",
+ "deprecations": [],
+ "invalidOptionWarnings": [],
+ "parseErrors": [],
+ "errored": true,
+ "warnings": [
+ {
+ "line": 111,
+ "column": 1,
+ "rule": "no-missing-end-of-source-newline",
+ "severity": "error",
+ "text": "Unexpected missing end-of-source newline (no-missing-end-of-source-newline)"
+ },
+ {
+ "line": 81,
+ "column": 1,
+ "rule": "rule-empty-line-before",
+ "severity": "error",
+ "text": "Expected empty line before rule (rule-empty-line-before)"
+ },
+ {
+ "line": 55,
+ "column": 20,
+ "rule": "selector-pseudo-element-colon-notation",
+ "severity": "error",
+ "text": "Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"
+ }
+ ]
+ },
+ {
+ "source": "src/file2.css",
+ "deprecations": [],
+ "invalidOptionWarnings": [],
+ "parseErrors": [],
+ "errored": true,
+ "warnings": [
+ {
+ "line": 58,
+ "column": 28,
+ "rule": "block-no-empty",
+ "severity": "error",
+ "text": "Unexpected empty block (block-no-empty)"
+ },
+ {
+ "line": 114,
+ "column": 1,
+ "rule": "no-missing-end-of-source-newline",
+ "severity": "error",
+ "text": "Unexpected missing end-of-source newline (no-missing-end-of-source-newline)"
+ }
+ ]
+ }
+]
diff --git a/its/plugin/projects/external-report-project/src/file1.css b/its/plugin/projects/external-report-project/src/file1.css
new file mode 100644
index 0000000..329fa57
--- /dev/null
+++ b/its/plugin/projects/external-report-project/src/file1.css
@@ -0,0 +1,111 @@
+.navbar-search {
+ position: relative;
+ padding: calc((var(--globalNavHeight) - var(--globalNavContentHeight)) / 2) 0;
+}
+
+.navbar-search .search-box,
+.navbar-search .search-box-input {
+ width: 26vw;
+ max-width: 310px;
+ min-width: 260px;
+ height: var(--globalNavContentHeight);
+}
+
+.navbar-search .search-box-input {
+ border-color: #fff;
+}
+
+.navbar-search .search-box-note {
+ line-height: calc(var(--globalNavContentHeight) - 2px);
+}
+
+.navbar-search .search-box-magnifier,
+.navbar-search .search-box-clear {
+ top: calc((var(--globalNavContentHeight) - 16px) / 2);
+}
+
+.navbar-search-input {
+ vertical-align: middle;
+ width: 310px;
+ margin-top: 3px;
+ margin-bottom: 3px;
+ padding-left: 26px !important;
+}
+
+.navbar-search-input-hint {
+ position: absolute;
+ top: 1px;
+ right: 27px;
+ line-height: var(--controlHeight);
+ font-size: var(--smallFontSize);
+ color: var(--secondFontColor);
+}
+
+.navbar-search-icon {
+ position: relative;
+ z-index: var(--aboveNormalZIndex);
+ vertical-align: middle;
+ width: 16px;
+ margin-left: 4px;
+ margin-right: -20px;
+ background-color: #fff;
+ color: var(--secondFontColor);
+}
+
+.navbar-search-icon:before {
+ font-size: var(--mediumFontSize);
+}
+
+.navbar-search-item-link {
+ display: flex !important;
+}
+
+.navbar-search-item-match {
+ flex-grow: 5;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.navbar-search-item-right {
+ flex-grow: 1;
+ padding-left: 10px;
+ text-align: right;
+}
+
+.navbar-search-item-icons {
+ position: relative;
+ flex-shrink: 0;
+ width: 16px;
+ height: 16px;
+}
+.navbar-search-item-icons > * {
+ position: absolute;
+ z-index: 5;
+ top: 0;
+ left: 0;
+}
+
+.navbar-search-item-icons > .icon-outline,
+.navbar-search-item-icons > .icon-clock {
+ z-index: 6;
+ top: -4px;
+ left: -5px;
+}
+
+.navbar-search-no-results {
+ margin-top: 4px;
+ padding: 5px 10px;
+}
+
+.global-navbar-search-dropdown {
+ top: 100% !important;
+ max-height: 80vh;
+ width: 440px;
+ padding: 0 !important;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.global-navbar-search-dropdown .dropdown-bottom-hint {
+ margin-bottom: 0;
+} \ No newline at end of file
diff --git a/its/plugin/projects/external-report-project/src/file2.css b/its/plugin/projects/external-report-project/src/file2.css
new file mode 100644
index 0000000..ff1d2e5
--- /dev/null
+++ b/its/plugin/projects/external-report-project/src/file2.css
@@ -0,0 +1,114 @@
+.date-input-control {
+ position: relative;
+ display: inline-block;
+ cursor: pointer;
+}
+
+.date-input-control-input {
+ width: 130px;
+ padding-left: var(--controlHeight) !important;
+ cursor: pointer;
+}
+
+.date-input-control-input.is-filled {
+ padding-right: 16px !important;
+}
+
+.date-input-control-icon {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+}
+
+.date-input-control-icon path {
+ fill: var(--gray80);
+ transition: fill 0.3s ease;
+}
+
+.date-input-control-input:focus + .date-input-control-icon path {
+ fill: var(--blue);
+}
+
+.date-input-control-reset {
+ position: absolute;
+ top: 4px;
+ right: 4px;
+ border: none;
+}
+
+.date-input-calendar {
+ position: absolute;
+ z-index: var(--dropdownMenuZIndex);
+ top: 100%;
+ left: 0;
+ border: 1px solid var(--barBorderColor);
+ background-color: #fff;
+ box-shadow: var(--defaultShadow);
+}
+
+.date-input-calendar-nav {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding-top: var(--gridSize);
+ padding-left: var(--gridSize);
+ padding-right: var(--gridSize);
+}
+
+.date-input-calender-month {
+}
+
+.date-input-calender-month-select {
+ width: 70px;
+}
+
+.button.boolean-toggle {
+ display: inline-block;
+ vertical-align: middle;
+ width: 48px;
+ height: var(--controlHeight);
+ padding: 1px;
+ border: 1px solid var(--gray80);
+ border-radius: var(--controlHeight);
+ box-sizing: border-box;
+ background-color: #fff;
+ cursor: pointer;
+ transition: all 0.3s ease;
+}
+
+.button.boolean-toggle:hover {
+ background-color: #fff;
+}
+
+.button.boolean-toggle:focus {
+ border-color: var(--blue);
+ background-color: #f6f6f6;
+}
+
+.boolean-toggle-handle {
+ width: 20px;
+ height: 20px;
+ border: 1px solid var(--gray80);
+ border-radius: 22px;
+ box-sizing: border-box;
+ background-color: #f6f6f6;
+ transition: transform 0.3s cubic-bezier(0.87, -0.41, 0.19, 1.44), border 0.3s ease;
+}
+
+.button.boolean-toggle-on {
+ border-color: var(--darkBlue);
+ background-color: var(--darkBlue);
+}
+
+.button.boolean-toggle-on:hover {
+ background-color: var(--darkBlue);
+}
+
+.button.boolean-toggle-on:focus {
+ background-color: var(--darkBlue);
+}
+
+.button.boolean-toggle-on .boolean-toggle-handle {
+ border-color: #f6f6f6;
+ transform: translateX(var(--controlHeight));
+} \ No newline at end of file
diff --git a/its/plugin/projects/external-report-project/stylelintconfig.json b/its/plugin/projects/external-report-project/stylelintconfig.json
new file mode 100644
index 0000000..4a0997a
--- /dev/null
+++ b/its/plugin/projects/external-report-project/stylelintconfig.json
@@ -0,0 +1,162 @@
+{
+ "rules": {
+ "at-rule-no-unknown": true,
+ "block-no-empty": true,
+ "color-no-invalid-hex": true,
+ "comment-no-empty": true,
+ "declaration-block-no-duplicate-properties": [
+ true,
+ {
+ "ignore": [
+ "consecutive-duplicates-with-different-values"
+ ]
+ }
+ ],
+ "declaration-block-no-shorthand-property-overrides": true,
+ "font-family-no-duplicate-names": true,
+ "font-family-no-missing-generic-family-keyword": true,
+ "function-calc-no-unspaced-operator": true,
+ "function-linear-gradient-no-nonstandard-direction": true,
+ "keyframe-declaration-no-important": true,
+ "media-feature-name-no-unknown": true,
+ "no-descending-specificity": true,
+ "no-duplicate-at-import-rules": true,
+ "no-duplicate-selectors": true,
+ "no-empty-source": true,
+ "no-extra-semicolons": true,
+ "no-invalid-double-slash-comments": true,
+ "property-no-unknown": true,
+ "selector-pseudo-class-no-unknown": true,
+ "selector-pseudo-element-no-unknown": true,
+ "selector-type-no-unknown": true,
+ "string-no-newline": true,
+ "unit-no-unknown": true,
+ "at-rule-empty-line-before": [
+ "always",
+ {
+ "except": [
+ "blockless-after-same-name-blockless",
+ "first-nested"
+ ],
+ "ignore": [
+ "after-comment"
+ ]
+ }
+ ],
+ "at-rule-name-case": "lower",
+ "at-rule-name-space-after": "always-single-line",
+ "at-rule-semicolon-newline-after": "always",
+ "block-closing-brace-empty-line-before": "never",
+ "block-closing-brace-newline-after": "always",
+ "block-closing-brace-newline-before": "always-multi-line",
+ "block-closing-brace-space-before": "always-single-line",
+ "block-opening-brace-newline-after": "always-multi-line",
+ "block-opening-brace-space-after": "always-single-line",
+ "block-opening-brace-space-before": "always",
+ "color-hex-case": "lower",
+ "color-hex-length": "short",
+ "comment-empty-line-before": [
+ "always",
+ {
+ "except": [
+ "first-nested"
+ ],
+ "ignore": [
+ "stylelint-commands"
+ ]
+ }
+ ],
+ "comment-whitespace-inside": "always",
+ "custom-property-empty-line-before": [
+ "always",
+ {
+ "except": [
+ "after-custom-property",
+ "first-nested"
+ ],
+ "ignore": [
+ "after-comment",
+ "inside-single-line-block"
+ ]
+ }
+ ],
+ "declaration-bang-space-after": "never",
+ "declaration-bang-space-before": "always",
+ "declaration-block-semicolon-newline-after": "always-multi-line",
+ "declaration-block-semicolon-space-after": "always-single-line",
+ "declaration-block-semicolon-space-before": "never",
+ "declaration-block-single-line-max-declarations": 1,
+ "declaration-block-trailing-semicolon": "always",
+ "declaration-colon-newline-after": "always-multi-line",
+ "declaration-colon-space-after": "always-single-line",
+ "declaration-colon-space-before": "never",
+ "declaration-empty-line-before": [
+ "always",
+ {
+ "except": [
+ "after-declaration",
+ "first-nested"
+ ],
+ "ignore": [
+ "after-comment",
+ "inside-single-line-block"
+ ]
+ }
+ ],
+ "function-comma-newline-after": "always-multi-line",
+ "function-comma-space-after": "always-single-line",
+ "function-comma-space-before": "never",
+ "function-max-empty-lines": 0,
+ "function-name-case": "lower",
+ "function-parentheses-newline-inside": "always-multi-line",
+ "function-parentheses-space-inside": "never-single-line",
+ "function-whitespace-after": "always",
+ "indentation": 2,
+ "length-zero-no-unit": true,
+ "max-empty-lines": 1,
+ "media-feature-colon-space-after": "always",
+ "media-feature-colon-space-before": "never",
+ "media-feature-name-case": "lower",
+ "media-feature-parentheses-space-inside": "never",
+ "media-feature-range-operator-space-after": "always",
+ "media-feature-range-operator-space-before": "always",
+ "media-query-list-comma-newline-after": "always-multi-line",
+ "media-query-list-comma-space-after": "always-single-line",
+ "media-query-list-comma-space-before": "never",
+ "no-eol-whitespace": true,
+ "no-missing-end-of-source-newline": true,
+ "number-leading-zero": "always",
+ "number-no-trailing-zeros": true,
+ "property-case": "lower",
+ "rule-empty-line-before": [
+ "always-multi-line",
+ {
+ "except": [
+ "first-nested"
+ ],
+ "ignore": [
+ "after-comment"
+ ]
+ }
+ ],
+ "selector-attribute-brackets-space-inside": "never",
+ "selector-attribute-operator-space-after": "never",
+ "selector-attribute-operator-space-before": "never",
+ "selector-combinator-space-after": "always",
+ "selector-combinator-space-before": "always",
+ "selector-descendant-combinator-no-non-space": true,
+ "selector-list-comma-newline-after": "always",
+ "selector-list-comma-space-before": "never",
+ "selector-max-empty-lines": 0,
+ "selector-pseudo-class-case": "lower",
+ "selector-pseudo-class-parentheses-space-inside": "never",
+ "selector-pseudo-element-case": "lower",
+ "selector-pseudo-element-colon-notation": "double",
+ "selector-type-case": "lower",
+ "unit-case": "lower",
+ "value-list-comma-newline-after": "always-multi-line",
+ "value-list-comma-space-after": "always-single-line",
+ "value-list-comma-space-before": "never",
+ "value-list-max-empty-lines": 0
+ }
+}
diff --git a/its/plugin/src/test/java/org/sonar/css/its/StylelintReportTest.java b/its/plugin/src/test/java/org/sonar/css/its/StylelintReportTest.java
new file mode 100644
index 0000000..b10f7a4
--- /dev/null
+++ b/its/plugin/src/test/java/org/sonar/css/its/StylelintReportTest.java
@@ -0,0 +1,62 @@
+/*
+ * SonarCSS
+ * Copyright (C) 2018-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.
+ */
+package org.sonar.css.its;
+
+import com.sonar.orchestrator.Orchestrator;
+import java.util.Collections;
+import java.util.List;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonarqube.ws.Issues.Issue;
+import org.sonarqube.ws.client.issues.SearchRequest;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.css.its.Tests.newWsClient;
+
+public class StylelintReportTest {
+
+ private static String PROJECT_KEY = "external-report-project";
+
+ @ClassRule
+ public static Orchestrator orchestrator = Tests.ORCHESTRATOR;
+
+ @BeforeClass
+ public static void prepare() {
+ orchestrator.executeBuild(Tests.createScanner(PROJECT_KEY).setProperty("sonar.css.stylelint.reportPaths", "report.json"));
+ }
+
+ @Test
+ public void test() {
+ if (orchestrator.getServer().version().isGreaterThanOrEquals(7, 2)) {
+ SearchRequest request = new SearchRequest();
+ request.setComponentKeys(Collections.singletonList(PROJECT_KEY));
+ List<Issue> issuesList = newWsClient().issues().search(request).getIssuesList();
+
+ assertThat(issuesList).extracting("line").containsExactlyInAnyOrder(111, 81, 55, 58, 114);
+ assertThat(issuesList).extracting("rule").containsExactlyInAnyOrder(
+ "external_stylelint:no-missing-end-of-source-newline",
+ "external_stylelint:no-missing-end-of-source-newline",
+ "external_stylelint:rule-empty-line-before",
+ "external_stylelint:selector-pseudo-element-colon-notation",
+ "external_stylelint:block-no-empty");
+ }
+ }
+}
diff --git a/its/plugin/src/test/java/org/sonar/css/its/Tests.java b/its/plugin/src/test/java/org/sonar/css/its/Tests.java
index 31b2f78..d94a633 100644
--- a/its/plugin/src/test/java/org/sonar/css/its/Tests.java
+++ b/its/plugin/src/test/java/org/sonar/css/its/Tests.java
@@ -29,6 +29,7 @@ import java.util.List;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
+import org.sonar.css.plugin.StylelintReport;
import org.sonarqube.ws.Measures.ComponentWsResponse;
import org.sonarqube.ws.Measures.Measure;
import org.sonarqube.ws.client.HttpConnector;
@@ -39,7 +40,8 @@ import org.sonarqube.ws.client.measures.ComponentRequest;
@RunWith(Suite.class)
@Suite.SuiteClasses({
MetricsTest.class,
- IssuesTest.class
+ IssuesTest.class,
+ StylelintReportTest.class
})
public class Tests {