From 3ad5232345519caed38a24c70fb77e91757833bf Mon Sep 17 00:00:00 2001 From: Elena Vilchik Date: Fri, 23 Nov 2018 10:28:41 +0100 Subject: Fix FP S4659: ":local" and ":global" css-modules switches (#145) --- .../plugin/rules/SelectorPseudoClassNoUnknown.java | 13 +++++++++++++ .../org/sonar/css/plugin/rules/CssRuleTest.java | 22 ++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) (limited to 'sonar-css-plugin') diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java index d647499..0f37f84 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java @@ -19,6 +19,8 @@ */ package org.sonar.css.plugin.rules; +import java.util.Arrays; +import java.util.List; import org.sonar.check.Rule; @Rule(key = "S4659") @@ -28,4 +30,15 @@ public class SelectorPseudoClassNoUnknown implements CssRule { public String stylelintKey() { return "selector-pseudo-class-no-unknown"; } + + @Override + public List stylelintOptions() { + return Arrays.asList(true, new StylelintIgnoreOption()); + } + + + private static class StylelintIgnoreOption { + // Used by GSON serialization + private final String[] ignorePseudoClasses = {"local", "global"}; + } } diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java index a929abf..21cc76a 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java @@ -21,7 +21,10 @@ package org.sonar.css.plugin.rules; import com.google.gson.Gson; import java.lang.reflect.InvocationTargetException; +import java.util.Collections; +import java.util.Set; import org.junit.Test; +import org.mockito.internal.util.collections.Sets; import org.sonar.css.plugin.CssRules; import static org.assertj.core.api.Assertions.assertThat; @@ -39,16 +42,27 @@ public class CssRuleTest { @Test public void rules_default_is_empty() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { + Set rulesWithStylelintOptions = Sets.newSet( + AtRuleNoUnknown.class, + DeclarationBlockNoDuplicateProperties.class, + SelectorPseudoClassNoUnknown.class); + for (Class ruleClass : CssRules.getRuleClasses()) { CssRule rule = (CssRule)ruleClass.getConstructor().newInstance(); - if (rule instanceof AtRuleNoUnknown || rule instanceof DeclarationBlockNoDuplicateProperties) { - continue; + if (rulesWithStylelintOptions.contains(rule.getClass())) { + assertThat(rule.stylelintOptions()).isNotEmpty(); + } else { + assertThat(rule.stylelintOptions()).isEmpty(); } - - assertThat(rule.stylelintOptions()).isEmpty(); } } + @Test + public void selector_pseudo_class_options() { + String optionsAsJson = new Gson().toJson(new SelectorPseudoClassNoUnknown().stylelintOptions()); + assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoClasses\":[\"local\",\"global\"]}]"); + } + @Test public void at_rule_unknown_default() { String optionsAsJson = new Gson().toJson(new AtRuleNoUnknown().stylelintOptions()); -- cgit v1.2.3