From 536d095b961f7f5d2aca11a829a05b725a578717 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Fri, 11 Jun 2021 11:07:46 +0200 Subject: [PATCH] Disallow comma in selector by default --- build.gradle.kts | 2 +- .../kotlin/nl/astraeus/css/style/Style.kt | 25 ++++++++++--- .../kotlin/nl/astraeus/css/TestCssBuilder.kt | 35 +++++++++++++++++++ 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 17b1df4..db76547 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "nl.astraeus" -version = "0.4.20" +version = "0.4.21" repositories { maven { setUrl("https://dl.bintray.com/kotlin/kotlin-eap") } diff --git a/src/commonMain/kotlin/nl/astraeus/css/style/Style.kt b/src/commonMain/kotlin/nl/astraeus/css/style/Style.kt index e5250ce..e9ff803 100644 --- a/src/commonMain/kotlin/nl/astraeus/css/style/Style.kt +++ b/src/commonMain/kotlin/nl/astraeus/css/style/Style.kt @@ -75,7 +75,8 @@ abstract class CssGenerator { namespace: String = "", indent: String = "", minified: Boolean = false, - warnOnRedeclaration: Boolean = true + warnOnRedeclaration: Boolean = true, + allowCommaInSelector: Boolean = false ): String { val builder = StringBuilder() @@ -96,6 +97,10 @@ abstract class CssGenerator { css.append(finalStyle.generatePropertyCss(" $indent")) if (css.isNotBlank()) { + check (allowCommaInSelector || !name.contains(',')) { + "Comma is not allowed in selector (option is set in generateCss call)" + } + builder.append("\n$namespace$name".trim()) //builder.append(" $indent") @@ -144,7 +149,11 @@ abstract class CssGenerator { builder.append("}\n\n") } - builder.append(finalStyle.generateCss("$namespace$name".trim(), indent)) + builder.append(finalStyle.generateCss( + "$namespace$name".trim(), + indent, + allowCommaInSelector = allowCommaInSelector + )) } if (this is ConditionalStyle) { @@ -161,7 +170,11 @@ abstract class CssGenerator { css(mediaStyle) - builder.append(mediaStyle.generateCss("", " $indent")) + builder.append(mediaStyle.generateCss( + "", + " $indent", + allowCommaInSelector = allowCommaInSelector + )) } builder.append(indent) @@ -182,7 +195,11 @@ abstract class CssGenerator { css(mediaStyle) - builder.append(mediaStyle.generateCss("", " $indent")) + builder.append(mediaStyle.generateCss( + "", + " $indent", + allowCommaInSelector = allowCommaInSelector + )) } builder.append(indent) diff --git a/src/commonTest/kotlin/nl/astraeus/css/TestCssBuilder.kt b/src/commonTest/kotlin/nl/astraeus/css/TestCssBuilder.kt index 4096398..6bb2c29 100644 --- a/src/commonTest/kotlin/nl/astraeus/css/TestCssBuilder.kt +++ b/src/commonTest/kotlin/nl/astraeus/css/TestCssBuilder.kt @@ -12,6 +12,7 @@ import nl.astraeus.css.style.attrEquals import nl.astraeus.css.style.cls import nl.astraeus.css.style.id import kotlin.test.Test +import kotlin.test.assertTrue class TestCssBuilder { @@ -174,4 +175,38 @@ class TestCssBuilder { println(css.generateCss()) } + + + @Test + fun testOrWithComma() { + val css = style { + select("h1") { + color(Color.blue) + + select("table") { + color(Color.red) + + select("th, td") { + color(Color.green) + } + } + } + } + + var excepted = false + try { + println(css.generateCss()) + } catch(e: Exception) { + excepted = true + assertTrue { + e is IllegalStateException + } + assertTrue { + e.message?.contains("Comma is not allowed in selector") ?: false + } + } + assertTrue { + excepted + } + } }