diff options
Diffstat (limited to 'sonar-css-plugin')
4 files changed, 47 insertions, 5 deletions
| diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintReportSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintReportSensor.java index 106f9a3..c694d9d 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintReportSensor.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintReportSensor.java @@ -22,12 +22,14 @@ package org.sonar.css.plugin;  import com.google.gson.Gson;  import com.google.gson.JsonSyntaxException;  import java.io.File; -import java.io.FileInputStream;  import java.io.IOException;  import java.io.InputStreamReader;  import java.nio.charset.StandardCharsets; +import java.nio.file.Files;  import java.util.List;  import javax.annotation.Nullable; +import org.apache.commons.io.ByteOrderMark; +import org.apache.commons.io.input.BOMInputStream;  import org.sonar.api.batch.fs.FilePredicates;  import org.sonar.api.batch.fs.InputFile;  import org.sonar.api.batch.rule.CheckFactory; @@ -50,9 +52,9 @@ public class StylelintReportSensor implements Sensor {    public static final String STYLELINT = "stylelint"; -    private static final Logger LOG = Loggers.get(StylelintReportSensor.class);    private static final String FILE_EXCEPTION_MESSAGE = "No issues information will be saved as the report file can't be read."; +  private static final ByteOrderMark[] BYTE_ORDER_MARKS = {ByteOrderMark.UTF_8, ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE, ByteOrderMark.UTF_32LE, ByteOrderMark.UTF_32BE};    private final CssRules cssRules;    private ExternalRuleLoader stylelintRuleLoader = getStylelintRuleLoader(); @@ -78,8 +80,13 @@ public class StylelintReportSensor implements Sensor {    private void importReport(File report, SensorContext context) {      LOG.info("Importing {}", report.getAbsoluteFile()); -    try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(report), StandardCharsets.UTF_8)) { -      IssuesPerFile[] issues = new Gson().fromJson(inputStreamReader, IssuesPerFile[].class); +    try (BOMInputStream bomInputStream = new BOMInputStream(Files.newInputStream(report.toPath()), BYTE_ORDER_MARKS)) { +      String charsetName = bomInputStream.getBOMCharsetName(); +      if (charsetName == null) { +        charsetName = StandardCharsets.UTF_8.name(); +      } + +      IssuesPerFile[] issues = new Gson().fromJson(new InputStreamReader(bomInputStream, charsetName), IssuesPerFile[].class);        for (IssuesPerFile issuesPerFile : issues) {          InputFile inputFile = getInputFile(context, issuesPerFile.source);          if (inputFile != null) { diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintReportSensorTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintReportSensorTest.java index 295cf7f..62974d9 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintReportSensorTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintReportSensorTest.java @@ -71,7 +71,7 @@ public class StylelintReportSensorTest {    }    @Test -  public void should_add_issues_from_report() throws Exception { +  public void should_add_issues_from_report() {      setReport("report.json");      stylelintReportSensor.execute(context); @@ -91,6 +91,24 @@ public class StylelintReportSensorTest {    }    @Test +  public void should_read_report_utf8_bom() { +    setReport("report-utf8-bom.json"); +    stylelintReportSensor.execute(context); + +    Collection<ExternalIssue> externalIssues = context.allExternalIssues(); +    assertThat(externalIssues).hasSize(2); +  } + +  @Test +  public void should_read_report_utf16() { +    setReport("report-utf16.json"); +    stylelintReportSensor.execute(context); + +    Collection<ExternalIssue> externalIssues = context.allExternalIssues(); +    assertThat(externalIssues).hasSize(2); +  } + +  @Test    public void should_support_absolute_file_paths_in_report() throws Exception {      String report = "[\n" +        "  {\n" + diff --git a/sonar-css-plugin/src/test/resources/stylelint-report/report-utf16.json b/sonar-css-plugin/src/test/resources/stylelint-report/report-utf16.jsonBinary files differ new file mode 100644 index 0000000..1fd449a --- /dev/null +++ b/sonar-css-plugin/src/test/resources/stylelint-report/report-utf16.json diff --git a/sonar-css-plugin/src/test/resources/stylelint-report/report-utf8-bom.json b/sonar-css-plugin/src/test/resources/stylelint-report/report-utf8-bom.json new file mode 100644 index 0000000..4f685c4 --- /dev/null +++ b/sonar-css-plugin/src/test/resources/stylelint-report/report-utf8-bom.json @@ -0,0 +1,17 @@ +[ +  { +    "source": "file.css", +    "warnings": [ +      { +        "line": 1, +        "rule": "color-no-invalid-hex", +        "text": "external issue message (color-no-invalid-hex)" +      }, +      { +        "line": 1, +        "rule": "comment-no-empty", +        "text": "external issue message (comment-no-empty)" +      } +    ] +  } +] | 
