diff options
| author | Elena Vilchik | 2018-06-27 13:45:28 +0200 | 
|---|---|---|
| committer | GitHub | 2018-06-27 13:45:28 +0200 | 
| commit | bde3e646ffe1b1ba1b513cac042f5c1e379da4ff (patch) | |
| tree | 45405f54d8717a55d407c956ca210b76d6bf04d8 /sonar-css-plugin/src | |
| parent | 860ff7ee7f818bc0f60d8228670e584b3f6c218b (diff) | |
| download | sonar-css-bde3e646ffe1b1ba1b513cac042f5c1e379da4ff.tar.bz2 | |
Make Node configurable (#89)
Diffstat (limited to 'sonar-css-plugin/src')
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"); +  }  } | 
