53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package tw
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// @custom-variant is how a project redefines `dark:` as a CLASS toggle. The built-in
|
|
// dark variant is a prefers-color-scheme media query, which a site with its own theme
|
|
// switch cannot use: the OS says one thing and the switch says another, and the media
|
|
// query wins.
|
|
func TestCustomVariantDarkClass(t *testing.T) {
|
|
css, _, err := Compile(
|
|
"@import \"tailwindcss\";\n@custom-variant dark (&:where(.dark, .dark *));\n",
|
|
".", []string{"dark:bg-black", "bg-white"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(css, "prefers-color-scheme") {
|
|
t.Error("dark: still compiled to a media query — the @custom-variant was ignored")
|
|
}
|
|
if !strings.Contains(css, ".dark") {
|
|
t.Errorf("dark: did not compile to a class selector:\n%s", css)
|
|
}
|
|
}
|
|
|
|
// The shorthand's selector may itself contain commas — &:where(.dark, .dark *) is ONE
|
|
// selector, and splitting it on that comma yields two broken halves.
|
|
func TestCustomVariantKeepsNestedCommas(t *testing.T) {
|
|
css, _, err := Compile(
|
|
"@import \"tailwindcss\";\n@custom-variant dark (&:where(.dark, .dark *));\n",
|
|
".", []string{"dark:bg-black"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(css, ".dark *") {
|
|
t.Errorf("the descendant half of the selector was lost:\n%s", css)
|
|
}
|
|
}
|
|
|
|
// The block form, with an explicit @slot.
|
|
func TestCustomVariantBlockForm(t *testing.T) {
|
|
css, _, err := Compile(
|
|
"@import \"tailwindcss\";\n@custom-variant tall {\n @media (min-height: 800px) { @slot; }\n}\n",
|
|
".", []string{"tall:bg-black"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(css, "min-height: 800px") && !strings.Contains(css, "min-height:800px") {
|
|
t.Errorf("the block-form variant did not compile:\n%s", css)
|
|
}
|
|
}
|