Go-Back-Skeleton/vendor/github.com/vanng822/css/parser_selector_test.go
2017-09-25 20:20:52 +02:00

175 lines
5 KiB
Go

package css
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestMultipleSelectors(t *testing.T) {
css := Parse(`div .a {
font-size: 150%;
}
p .b {
font-size: 250%;
}`)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, "div .a")
assert.Equal(t, css.CssRuleList[1].Style.SelectorText, "p .b")
}
func TestIdSelector(t *testing.T) {
css := Parse("#div { color: red;}")
assert.Equal(t, css.CssRuleList[0].Style.Styles["color"].Value, "red")
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, "#div")
}
func TestClassSelector(t *testing.T) {
css := Parse(".div { color: green;}")
assert.Equal(t, css.CssRuleList[0].Style.Styles["color"].Value, "green")
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, ".div")
}
func TestStarSelector(t *testing.T) {
css := Parse("* { text-rendering: optimizelegibility; }")
assert.Equal(t, "optimizelegibility", css.CssRuleList[0].Style.Styles["text-rendering"].Value)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, "*")
}
func TestStarSelectorMulti(t *testing.T) {
css := Parse(`div .a {
font-size: 150%;
}
* { text-rendering: optimizelegibility; }`)
assert.Equal(t, "150%", css.CssRuleList[0].Style.Styles["font-size"].Value)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, "div .a")
assert.Equal(t, "optimizelegibility", css.CssRuleList[1].Style.Styles["text-rendering"].Value)
assert.Equal(t, css.CssRuleList[1].Style.SelectorText, "*")
}
func TestMixedClassSelectors(t *testing.T) {
selectors := []string{".footer__content_wrapper--last",
"table[class=\"body\"] .footer__content td",
"table[class=\"body\"] td.footer__link_wrapper--first",
"table[class=\"body\"] td.footer__link_wrapper--last"}
for _, selector := range selectors {
css := Parse(fmt.Sprintf(` %s {
border-collapse: separate;
padding: 10px 0 0
}`, selector))
assert.Equal(t, "separate", css.CssRuleList[0].Style.Styles["border-collapse"].Value)
assert.Equal(t, "10px 0 0", css.CssRuleList[0].Style.Styles["padding"].Value)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, selector)
}
}
func TestGenericSelectors(t *testing.T) {
selectors := []string{
"p ~ ul",
"div > p",
"div > p",
"div p",
"div, p",
"[target]",
"[target=_blank]",
"[title~=flower]",
"[lang|=en]",
"a[href^=\"https\"]",
"a[href$=\".pdf\"]",
"a[href*=\"css\"]",
".header + .content",
"#firstname",
"table[class=\"body\"] .footer__content td",
"table[class=\"body\"] td.footer__link_wrapper--first"}
for _, selector := range selectors {
css := Parse(fmt.Sprintf(` %s {
border-collapse: separate;
padding: 10px 0 0
}`, selector))
assert.Equal(t, "separate", css.CssRuleList[0].Style.Styles["border-collapse"].Value)
assert.Equal(t, "10px 0 0", css.CssRuleList[0].Style.Styles["padding"].Value)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, selector)
}
}
func TestFilterSelectors(t *testing.T) {
selectors := []string{
"a:active",
"p::after",
"p::before",
"input:checked",
"input:disabled",
"input:in-range",
"input:invalid",
"input:optional",
"input:read-only",
"input:enabled",
"p:empty",
"p:first-child",
"p::first-letter",
"p::first-line",
"p:first-of-type",
"input:focus",
"a:hover",
"p:lang(it)",
"p:last-child",
"p:last-of-type",
"a:link",
":not(p)",
"p:nth-child(2)",
"p:nth-last-child(2)",
"p:only-of-type",
"p:only-child",
"p:nth-last-of-type(2)",
"div:not(:nth-child(1))",
"div:not(:not(:first-child))",
":root",
"::selection",
"#news:target"}
for _, selector := range selectors {
css := Parse(fmt.Sprintf(` %s {
border-collapse: separate;
padding: 10px 0 0
}`, selector))
assert.Equal(t, "separate", css.CssRuleList[0].Style.Styles["border-collapse"].Value)
assert.Equal(t, "10px 0 0", css.CssRuleList[0].Style.Styles["padding"].Value)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, selector)
}
}
func TestFontFace(t *testing.T) {
css := Parse(`@font-face {
font-family: "Bitstream Vera Serif Bold";
src: url("https://mdn.mozillademos.org/files/2468/VeraSeBd.ttf");
}
body { font-family: "Bitstream Vera Serif Bold", serif }`)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, "")
assert.Equal(t, css.CssRuleList[0].Style.Styles["font-family"].Value, "\"Bitstream Vera Serif Bold\"")
assert.Equal(t, css.CssRuleList[0].Style.Styles["src"].Value, "url(\"https://mdn.mozillademos.org/files/2468/VeraSeBd.ttf\")")
assert.Equal(t, css.CssRuleList[1].Style.Styles["font-family"].Value, "\"Bitstream Vera Serif Bold\", serif")
assert.Equal(t, css.CssRuleList[0].Type, FONT_FACE_RULE)
}
func TestPage(t *testing.T) {
css := Parse(`@page :first {
margin: 2in 3in;
}`)
assert.Equal(t, css.CssRuleList[0].Style.SelectorText, ":first")
assert.Equal(t, css.CssRuleList[0].Style.Styles["margin"].Value, "2in 3in")
assert.Equal(t, css.CssRuleList[0].Type, PAGE_RULE)
}