diff options
Diffstat (limited to 'its/plugin')
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 {  | 
