aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin
diff options
context:
space:
mode:
authorElena Vilchik2018-06-27 13:45:28 +0200
committerGitHub2018-06-27 13:45:28 +0200
commitbde3e646ffe1b1ba1b513cac042f5c1e379da4ff (patch)
tree45405f54d8717a55d407c956ca210b76d6bf04d8 /sonar-css-plugin
parent860ff7ee7f818bc0f60d8228670e584b3f6c218b (diff)
downloadsonar-css-bde3e646ffe1b1ba1b513cac042f5c1e379da4ff.tar.bz2
Make Node configurable (#89)
Diffstat (limited to 'sonar-css-plugin')
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java12
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java17
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssPluginTest.java11
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java29
4 files changed, 66 insertions, 3 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
index c35836f..cd98f25 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
@@ -33,6 +33,9 @@ public class CssPlugin implements Plugin {
public static final String STYLELINT_REPORT_PATHS = "sonar.css.stylelint.reportPaths";
public static final String STYLELINT_REPORT_PATHS_DEFAULT_VALUE = "";
+ public static final String NODE_EXECUTABLE = "sonar.css.node";
+ public static final String NODE_EXECUTABLE_DEFAULT = "node";
+
private static final String CSS_CATEGORY = "CSS";
private static final String LINTER_SUBCATEGORY = "Popular Rule Engines";
private static final String GENERAL_SUBCATEGORY = "General";
@@ -59,6 +62,15 @@ public class CssPlugin implements Plugin {
.category(CSS_CATEGORY)
.onQualifiers(Qualifiers.PROJECT)
.multiValues(true)
+ .build(),
+
+ PropertyDefinition.builder(NODE_EXECUTABLE)
+ .defaultValue(NODE_EXECUTABLE_DEFAULT)
+ .name("Node.js executable")
+ .description("Node.js executable used to run the analysis of CSS files.")
+ .subCategory(GENERAL_SUBCATEGORY)
+ .category(CSS_CATEGORY)
+ .hidden()
.build()
);
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
index b2f50b5..52fa93f 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
@@ -21,15 +21,19 @@ package org.sonar.css.plugin;
import java.io.File;
import java.nio.file.Paths;
+import java.util.Optional;
import org.sonar.api.batch.ScannerSide;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.config.Configuration;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
@ScannerSide
public class StylelintCommandProvider implements LinterCommandProvider {
+ private static final Logger LOG = Loggers.get(StylelintCommandProvider.class);
+
private static final String CONFIG_PATH = "css-bundle/stylelintconfig.json";
- private static final String NODE_EXECUTABLE = "node";
@Override
public String[] commandParts(File deployDestination, SensorContext context) {
@@ -55,6 +59,15 @@ public class StylelintCommandProvider implements LinterCommandProvider {
@Override
public String nodeExecutable(Configuration configuration) {
- return NODE_EXECUTABLE;
+ Optional<String> nodeExecutableOptional = configuration.get(CssPlugin.NODE_EXECUTABLE);
+ if (nodeExecutableOptional.isPresent()) {
+ String nodeExecutable = nodeExecutableOptional.get();
+ File file = new File(nodeExecutable);
+ if (file.exists()) {
+ return nodeExecutable;
+ }
+ LOG.warn("Provided node executable file does not exist: " + file);
+ }
+ return CssPlugin.NODE_EXECUTABLE_DEFAULT;
}
}
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssPluginTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssPluginTest.java
index c5d9bbd..7dfe16b 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssPluginTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssPluginTest.java
@@ -36,6 +36,15 @@ public class CssPluginTest {
Plugin.Context context = new Plugin.Context(runtime);
Plugin underTest = new CssPlugin();
underTest.define(context);
- assertThat(context.getExtensions()).hasSize(9);
+ assertThat(context.getExtensions()).hasSize(10);
+ }
+
+ @Test
+ public void count_extensions_7_2() {
+ SonarRuntime runtime = SonarRuntimeImpl.forSonarQube(Version.create(7, 2), SonarQubeSide.SCANNER);
+ Plugin.Context context = new Plugin.Context(runtime);
+ Plugin underTest = new CssPlugin();
+ underTest.define(context);
+ assertThat(context.getExtensions()).hasSize(11);
}
}
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
index 7244cce..3ae3250 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
@@ -20,13 +20,24 @@
package org.sonar.css.plugin;
import java.io.File;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.sensor.internal.SensorContextTester;
+import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.utils.log.LogTester;
+import org.sonar.api.utils.log.LoggerLevel;
import static org.assertj.core.api.Assertions.assertThat;
public class StylelintCommandProviderTest {
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public final LogTester logTester = new LogTester();
+
@Test
public void test() throws Exception {
StylelintCommandProvider stylelintCommandProvider = new StylelintCommandProvider();
@@ -44,4 +55,22 @@ public class StylelintCommandProviderTest {
"json"
);
}
+
+ @Test
+ public void test_node_executable() throws Exception {
+ StylelintCommandProvider stylelintCommandProvider = new StylelintCommandProvider();
+
+ MapSettings settings = new MapSettings();
+ assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo("node");
+ assertThat(logTester.logs(LoggerLevel.WARN)).isEmpty();
+
+ File customNode = temporaryFolder.newFile("custom-node.exe");
+ settings.setProperty(CssPlugin.NODE_EXECUTABLE, customNode.getAbsolutePath());
+ assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo(customNode.getAbsolutePath());
+ assertThat(logTester.logs(LoggerLevel.WARN)).isEmpty();
+
+ settings.setProperty(CssPlugin.NODE_EXECUTABLE, "mynode");
+ assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo("node");
+ assertThat(logTester.logs(LoggerLevel.WARN)).contains("Provided node executable file does not exist: mynode");
+ }
}