## Simple selectors & basic combinators
#data
* {}
#errors
#expected
| 1 *
#reset
#data
E {}
#errors
#expected
| 1 E
#reset
#data
E F {}
#errors
#expected
| 1 E F
#reset
#data
E > F {}
#errors
#expected
| 1 E > F
#reset
#data
E:first-child {}
#errors
#expected
| 1 E:first-child
#reset
#data
E:link {}
#errors
#expected
| 1 E:link
#reset
#data
E:visited {}
#errors
#expected
| 1 E:visited
#reset
#data
E:active {}
#errors
#expected
| 1 E:active
#reset
#data
E:hover {}
#errors
#expected
| 1 E:hover
#reset
#data
E:focus {}
#errors
#expected
| 1 E:focus
#reset
#data
E:lang(c) {}
#errors
#expected
| 1 E:lang(c)
#reset
#data
E:left {}
#errors
#expected
| 1 E:left
#reset
#data
E:right {}
#errors
#expected
| 1 E:right
#reset
#data
E:first {}
#errors
#expected
| 1 E:first
#reset
#data
E:root {}
#errors
#expected
| 1 E:root
#reset
#data
E:nth-child(2n+1) {}
#errors
#expected
| 1 E:nth-child(2n+1)
#reset
#data
E:nth-last-child(2n+1) {}
#errors
#expected
| 1 E:nth-last-child(2n+1)
#reset
#data
E:nth-of-type(2n+1) {}
#errors
#expected
| 1 E:nth-of-type(2n+1)
#reset
#data
E:nth-last-of-type(2n+1) {}
#errors
#expected
| 1 E:nth-last-of-type(2n+1)
#reset
#data
E:last-child {}
#errors
#expected
| 1 E:last-child
#reset
#data
E:first-of-type {}
#errors
#expected
| 1 E:first-of-type
#reset
#data
E:last-of-type {}
#errors
#expected
| 1 E:last-of-type
#reset
#data
E:only-child {}
#errors
#expected
| 1 E:only-child
#reset
#data
E:only-of-type {}
#errors
#expected
| 1 E:only-of-type
#reset
#data
E:empty {}
#errors
#expected
| 1 E:empty
#reset
#data
E:target {}
#errors
#expected
| 1 E:target
#reset
#data
E:enabled {}
#errors
#expected
| 1 E:enabled
#reset
#data
E:disabled {}
#errors
#expected
| 1 E:disabled
#reset
#data
E:checked {}
#errors
#expected
| 1 E:checked
#reset
#data
E:first-line {}
#errors
#expected
| 1 E:first-line
#reset
#data
E:first-letter {}
#errors
#expected
| 1 E:first-letter
#reset
#data
E:before {}
#errors
#expected
| 1 E:before
#reset
#data
E:after {}
#errors
#expected
| 1 E:after
#reset
#data
E::first-line {}
#errors
#expected
| 1 E:first-line
#reset
#data
E::first-letter {}
#errors
#expected
| 1 E:first-letter
#reset
#data
E::before {}
#errors
#expected
| 1 E:before
#reset
#data
E::after {}
#errors
#expected
| 1 E:after
#reset
#data
E + F {}
#errors
#expected
| 1 E + F
#reset
#data
E ~ F {}
#errors
#expected
| 1 E ~ F
#reset
#data
E[foo] {}
#errors
#expected
| 1 E[foo]
#reset
#data
E[foo="warning"] {}
#errors
#expected
| 1 E[foo="warning"]
#reset
#data
E[foo~="warning"] {}
#errors
#expected
| 1 E[foo~="warning"]
#reset
#data
E[lang|="en"] {}
#errors
#expected
| 1 E[lang|="en"]
#reset
#data
E[foo^="warning"] {}
#errors
#expected
| 1 E[foo^="warning"]
#reset
#data
E[foo$="warning"] {}
#errors
#expected
| 1 E[foo$="warning"]
#reset
#data
E[foo*="warning"] {}
#errors
#expected
| 1 E[foo*="warning"]
#reset
#data
DIV.warning {}
#errors
#expected
| 1 DIV.warning
#reset
#data
.warning {}
#errors
#expected
| 1 .warning
#reset
#data
E#myid {}
#errors
#expected
| 1 E#myid
#reset
#data
#myid {}
#errors
#expected
| 1 #myid
#reset
## Multiple specifics in simple selectors
#data
foo.bar#baz {}
#errors
#expected
| 1 foo.bar#baz
#reset
#data
[bar="baz"][foo|="bar"] {}
#errors
#expected
| 1 [bar="baz"][foo|="bar"]
#reset
#data
.foo[bar~="baz"] {}
#errors
#expected
| 1 .foo[bar~="baz"]
#reset
#data
#myid:link:before {}
#errors
#expected
| 1 #myid:link:before
#reset
#data
.class:lang(c):after {}
#errors
#expected
| 1 .class:lang(c):after
#reset
#data
.class:lang(c) > #myid:before {}
#errors
#expected
| 1 .class:lang(c) > #myid:before
#reset
## Multiple selectors in a rule
#data
foo,bar {}
#errors
#expected
| 1 foo, bar
#reset
#data
E>F,bar {}
#errors
#expected
| 1 E > F, bar
#reset
#data
E+F,bar {}
#errors
#expected
| 1 E + F, bar
#reset
#data
E F,bar {}
#errors
#expected
| 1 E F, bar
#reset
#data
E:first-child,bar {}
#errors
#expected
| 1 E:first-child, bar
#reset
#data
E:link,bar {}
#errors
#expected
| 1 E:link, bar
#reset
#data
E:visited,bar {}
#errors
#expected
| 1 E:visited, bar
#reset
#data
E:active,bar {}
#errors
#expected
| 1 E:active, bar
#reset
#data
E:hover,bar {}
#errors
#expected
| 1 E:hover, bar
#reset
#data
E:focus,bar {}
#errors
#expected
| 1 E:focus, bar
#reset
#data
E:lang(c),bar {}
#errors
#expected
| 1 E:lang(c), bar
#reset
#data
E[foo],bar {}
#errors
#expected
| 1 E[foo], bar
#reset
#data
E[foo="warning"],bar {}
#errors
#expected
| 1 E[foo="warning"], bar
#reset
#data
E[foo~="warning"],bar {}
#errors
#expected
| 1 E[foo~="warning"], bar
#reset
#data
E[lang|="en"],bar {}
#errors
#expected
| 1 E[lang|="en"], bar
#reset
#data
DIV.warning,bar {}
#errors
#expected
| 1 DIV.warning, bar
#reset
#data
.warning,bar {}
#errors
#expected
| 1 .warning, bar
#reset
#data
E#myid,bar {}
#errors
#expected
| 1 E#myid, bar
#reset
#data
#myid,bar {}
#errors
#expected
| 1 #myid, bar
#reset
# Not pseudo class
#data
E:not(bar) {}
#errors
#expected
| 1 E:not(bar)
#reset
#data
E:not(*) {}
#errors
#expected
| 1 E:not(*)
#reset
#data
E:not(#foo) {}
#errors
#expected
| 1 E:not(#foo)
#reset
#data
E:not(.bar) {}
#errors
#expected
| 1 E:not(.bar)
#reset
#data
E:not([bar]) {}
#errors
#expected
| 1 E:not([bar])
#reset
#data
E:not(:first-child) {}
#errors
#expected
| 1 E:not(:first-child)
#reset
#data
E:not(:nth-child(2n+1)) {}
#errors
#expected
| 1 E:not(:nth-child(2n+1))
#reset
#data
E:not(:first-line) {}
#errors
#expected
#reset
#data
E:not(:not(bar)) {}
#errors
#expected
#reset