diff options
Diffstat (limited to 'sonar-css-plugin/src/test')
4 files changed, 80 insertions, 11 deletions
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java index 0dd35d8..0b37c92 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java @@ -35,13 +35,14 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; import org.sonar.api.batch.fs.InputFile; -import org.sonar.api.batch.fs.InputFile.Type; import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.batch.rule.CheckFactory; import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor; import org.sonar.api.batch.sensor.internal.SensorContextTester; +import org.sonar.api.internal.SonarRuntimeImpl; import org.sonar.api.notifications.AnalysisWarnings; +import org.sonar.api.utils.Version; import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LoggerLevel; import org.sonar.css.plugin.server.CssAnalyzerBridgeServer; @@ -260,10 +261,56 @@ public class CssRuleSensorTest { assertThat(logTester.logs(LoggerLevel.ERROR)).contains("Unknown stylelint rule or rule not enabled: 'unknown-rule-key'"); } + @Test + public void should_not_send_file_content_if_encoding_is_utf8_and_context_is_not_sonarlint() throws IOException { + String filePath = "copy-file-content-into-issue-message.css"; + DefaultInputFile inputFile = new TestInputFileBuilder("moduleKey", filePath) + .setLanguage(CssLanguage.KEY) + .setCharset(StandardCharsets.UTF_8) + .setContents("css content") + .build(); + context.fileSystem().add(inputFile); + sensor.execute(context); + + assertThat(context.allIssues()).hasSize(1); + assertThat(context.allIssues()).extracting("primaryLocation.message") + .containsOnly("undefined"); + } + + @Test + public void should_send_file_content_if_encoding_is_not_utf8() throws IOException { + String filePath = "copy-file-content-into-issue-message.css"; + DefaultInputFile inputFile = new TestInputFileBuilder("moduleKey", filePath) + .setLanguage(CssLanguage.KEY) + .setCharset(StandardCharsets.ISO_8859_1) + .setContents("css content") + .build(); + context.fileSystem().add(inputFile); + sensor.execute(context); + + assertThat(context.allIssues()).hasSize(1); + assertThat(context.allIssues()).extracting("primaryLocation.message") + .containsOnly("css content"); + } + + @Test + public void should_send_file_content_if_context_is_sonarlint() throws IOException { + String filePath = "copy-file-content-into-issue-message.css"; + DefaultInputFile inputFile = new TestInputFileBuilder("moduleKey", filePath) + .setLanguage(CssLanguage.KEY) + .setCharset(StandardCharsets.UTF_8) + .setContents("css content") + .build(); + context.fileSystem().add(inputFile); + context.setRuntime(SonarRuntimeImpl.forSonarLint(Version.create(7, 9))); + sensor.execute(context); + assertThat(context.allIssues()).hasSize(1); + assertThat(context.allIssues()).extracting("primaryLocation.message") + .containsOnly("css content"); + } + private DefaultInputFile addInputFile(String relativePath) { DefaultInputFile inputFile = new TestInputFileBuilder("moduleKey", relativePath) - .setModuleBaseDir(context.fileSystem().baseDirPath()) - .setType(Type.MAIN) .setLanguage(relativePath.split("\\.")[1]) .setCharset(StandardCharsets.UTF_8) .setContents("some css content\n on 2 lines") diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java index 302b6bb..45ae8ae 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java @@ -120,7 +120,7 @@ public class CssAnalyzerBridgeServerTest { @Test public void should_forward_process_streams() throws Exception { - cssAnalyzerBridgeServer = createCssAnalyzerBridgeServer(); + cssAnalyzerBridgeServer = createCssAnalyzerBridgeServer("testLogs.js"); cssAnalyzerBridgeServer.startServerLazily(context); assertThat(logTester.logs(DEBUG)).contains("testing debug log"); @@ -133,14 +133,14 @@ public class CssAnalyzerBridgeServerTest { cssAnalyzerBridgeServer = createCssAnalyzerBridgeServer(); cssAnalyzerBridgeServer.startServerLazily(context); - Request request = new Request("/absolute/path/file.css", CONFIG_FILE); + Request request = new Request("/absolute/path/file.css", null, CONFIG_FILE); Issue[] issues = cssAnalyzerBridgeServer.analyze(request); assertThat(issues).hasSize(1); assertThat(issues[0].line).isEqualTo(2); assertThat(issues[0].rule).isEqualTo("block-no-empty"); assertThat(issues[0].text).isEqualTo("Unexpected empty block"); - request = new Request("/absolute/path/empty.css", CONFIG_FILE); + request = new Request("/absolute/path/empty.css", null, CONFIG_FILE); issues = cssAnalyzerBridgeServer.analyze(request); assertThat(issues).isEmpty(); } @@ -217,7 +217,7 @@ public class CssAnalyzerBridgeServerTest { DefaultInputFile inputFile = TestInputFileBuilder.create("foo", "invalid-json-response.css") .build(); - Request request = new Request(inputFile.absolutePath(), CONFIG_FILE); + Request request = new Request(inputFile.absolutePath(), null, CONFIG_FILE); assertThatThrownBy(() -> cssAnalyzerBridgeServer.analyze(request)).isInstanceOf(IllegalStateException.class); assertThat(context.allIssues()).isEmpty(); } diff --git a/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js b/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js index c8b8d38..f7f40c5 100644 --- a/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js +++ b/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js @@ -3,10 +3,6 @@ const http = require('http'); const port = process.argv[2]; -console.log(`DEBUG testing debug log`) -console.log(`WARN testing warn log`) -console.log(`testing info log`) - const requestHandler = (request, response) => { let data = []; request.on('data', chunk => { @@ -14,9 +10,11 @@ const requestHandler = (request, response) => { }); request.on('end', () => { let fileName = null; + let fileContent = null; if (data.length > 0) { const analysisRequest = JSON.parse(data.join()); fileName = analysisRequest.filePath.replace(/.*[\/\\]/g,""); + fileContent = analysisRequest.fileContent; } if (request.url === '/status') { response.writeHead(200, { 'Content-Type': 'text/plain' }); @@ -52,6 +50,11 @@ const requestHandler = (request, response) => { case "invalid-json-response.css": response.end("["); break; + case "copy-file-content-into-issue-message.css": + response.end(JSON.stringify([ + {line: 1, rule: "block-no-empty", text: "" + fileContent} + ])); + break; default: throw "Unexpected fileName: " + fileName; } diff --git a/sonar-css-plugin/src/test/resources/mock-start-server/testLogs.js b/sonar-css-plugin/src/test/resources/mock-start-server/testLogs.js new file mode 100644 index 0000000..8fb5caa --- /dev/null +++ b/sonar-css-plugin/src/test/resources/mock-start-server/testLogs.js @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +const http = require('http'); +const port = process.argv[2]; + +console.log(`DEBUG testing debug log`) +console.log(`WARN testing warn log`) +console.log(`testing info log`) + + +const server = http.createServer(() => {}); + +server.listen(port, (err) => { + if (err) { + return console.log('something bad happened', err) + } + + console.log(`server is listening on ${port}`) +}); |
