aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--its/plugin/projects/issues-project/src/file1.css6
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java13
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java22
3 files changed, 36 insertions, 5 deletions
diff --git a/its/plugin/projects/issues-project/src/file1.css b/its/plugin/projects/issues-project/src/file1.css
index f98d608..0c95e3d 100644
--- a/its/plugin/projects/issues-project/src/file1.css
+++ b/its/plugin/projects/issues-project/src/file1.css
@@ -61,4 +61,8 @@ unknown { /* S4670 | selecto
@media screen and (unknown) { /* S4661 | media-feature-name-no-unknown */
width: 2px;
-} \ No newline at end of file
+}
+
+:global(.nestedClassParent) { /* ignored by S4659 | selector-pseudo-class-no-unknown */
+ color: blue;
+}
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<Object> 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,17 +42,28 @@ public class CssRuleTest {
@Test
public void rules_default_is_empty() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
+ Set<Class> 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());
assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreAtRules\":[\"at-root\",\"content\",\"debug\",\"each\",\"else\",\"error\",\"for\",\"function\",\"if\",\"include\",\"mixin\",\"return\",\"warn\",\"while\",\"extend\"]}]");