aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElena Vilchik2019-06-12 11:53:55 +0200
committerTibor Blenessy2019-06-12 11:53:55 +0200
commitfd0139f0673ceaeabab4db3112cf18fff69f3c81 (patch)
treed1faf835fabcf185e6c56442d40d8c288aa526b8
parent5e1b4ef423a1ca5943232ad332d3230d9d09ec82 (diff)
downloadsonar-css-fd0139f0673ceaeabab4db3112cf18fff69f3c81.tar.bz2
Support stylelint report in different encoding (#176)
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintReportSensor.java15
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintReportSensorTest.java20
-rw-r--r--sonar-css-plugin/src/test/resources/stylelint-report/report-utf16.jsonbin0 -> 668 bytes
-rw-r--r--sonar-css-plugin/src/test/resources/stylelint-report/report-utf8-bom.json17
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.json
new file mode 100644
index 0000000..1fd449a
--- /dev/null
+++ b/sonar-css-plugin/src/test/resources/stylelint-report/report-utf16.json
Binary files differ
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)"
+ }
+ ]
+ }
+]