<===> attribute/dash_dash/input.scss
// Attribute selector values are allowed to be unquoted as long as they're plain
// CSS identifiers. However, IE 11 doesn't recognize custom-property-style
// identifiers like `--foo` as identifiers, so they should always be quoted.

[class="--foo"], [class*="--foo"] {
  x: y;
}

<===> attribute/dash_dash/output.css
[class="--foo"], [class*="--foo"] {
  x: y;
}

<===>
================================================================================
<===> attribute/modifier/unknown/options.yml
---
:todo:
- sass/libsass#2886

<===> attribute/modifier/unknown/input.scss
// At time of writing, only the modifiers "i" and "s" are allowed by the CSS
// spec. However, for forwards-compatibility with future CSS additions, any
// single character should be allowed.
[a=b c] {d: e}

<===> attribute/modifier/unknown/output.css
[a=b c] {
  d: e;
}

<===>
================================================================================
<===> attribute/modifier/caps/input.scss
[a=b I] {c: d}

<===> attribute/modifier/caps/output.css
[a=b I] {
  c: d;
}

<===>
================================================================================
<===> attribute/modifier/after_string/input.scss
[a="b"i] {c: d}

<===> attribute/modifier/after_string/output.css
[a=b i] {
  c: d;
}

<===> attribute/modifier/after_string/output-libsass.css
[a="b" i] {
  c: d;
}

<===>
================================================================================
<===> attribute/quoted_non_identifier/input.scss
// Quotes should be preserved when the string they contain is not an identifier.
// See https://github.com/sass/dart-sass/issues/598.
[a="b."] {c: d}

<===> attribute/quoted_non_identifier/output.css
[a="b."] {
  c: d;
}

<===>
================================================================================
<===> inline_comments/options.yml
---
:todo:
- sass/libsass#3124

<===> inline_comments/silent/input.sass
a, // comment
b
  x: y

<===> inline_comments/silent/output.css
a,
b {
  x: y;
}

<===>
================================================================================
<===> inline_comments/silent/with_comma_in_comment/input.sass
// A comma within a comment, even at the end of the line, should not cause the
// parser to continue the selector on a new line, so this should parse as an
// empty rule with selector "a", followed by the rule with selector "b".
a // comment,
b
  x: y

<===> inline_comments/silent/with_comma_in_comment/output.css
b {
  x: y;
}

<===> inline_comments/silent/with_comma_in_comment/warning
WARNING on line 4, column 1 of input.sass:
This selector doesn't have any properties and won't be rendered.
  ,
4 | a // comment,
  | ^^^^^^^^^^^^^
  '

<===>
================================================================================
<===> inline_comments/loud/comma_before/input.sass
a, /* comment */
b
  x: y

<===> inline_comments/loud/comma_before/output.css
a,
b {
  x: y;
}

<===>
================================================================================
<===> inline_comments/loud/comma_after/input.sass
a /* comment */,
b
  x: y

<===> inline_comments/loud/comma_after/output.css
a,
b {
  x: y;
}

<===>
================================================================================
<===> placeholder/pseudoselectors/is/options.yml
---
:todo:
- sass/libsass#3154

<===> placeholder/pseudoselectors/is/solo/input.scss
// Since `%b` doesn't exist, no selectors can match it, so this rule should be
// removed.
a:is(%b) {x: y}

<===> placeholder/pseudoselectors/is/solo/output.css

<===>
================================================================================
<===> placeholder/pseudoselectors/is/with_real/input.scss
// Since `%b` doesn't exist, an element matches `%b` or `c` iff it matches `c`.
a:is(%b, c) {x: y}

<===> placeholder/pseudoselectors/is/with_real/output.css
a:is(c) {
  x: y;
}

<===>
================================================================================
<===> placeholder/pseudoselectors/matches/solo/options.yml
---
:todo:
- sass/libsass#2422

<===> placeholder/pseudoselectors/matches/solo/input.scss
// Since `%b` doesn't exist, no selectors can match it, so this rule should be
// removed.
a:matches(%b) {x: y}

<===> placeholder/pseudoselectors/matches/solo/output.css

<===>
================================================================================
<===> placeholder/pseudoselectors/matches/with_real/input.scss
// Since `%b` doesn't exist, an element matches `%b` or `c` iff it matches `c`.
a:matches(%b, c) {x: y}

<===> placeholder/pseudoselectors/matches/with_real/output.css
a:matches(c) {
  x: y;
}

<===>
================================================================================
<===> placeholder/pseudoselectors/not/solo/input.scss
// Since `%b` doesn't exist, all `a` elements match `a:not(%b)`.
a:not(%b) {x: y}

<===> placeholder/pseudoselectors/not/solo/output.css
a {
  x: y;
}

<===>
================================================================================
<===> placeholder/pseudoselectors/not/with_real/input.scss
// Since `%b` doesn't exist, it can be removed from the `:not` pseudoselector.
a:not(%b, c) {x: y}

<===> placeholder/pseudoselectors/not/with_real/output.css
a:not(c) {
  x: y;
}

<===>
================================================================================
<===> placeholder/pseudoselectors/not/universal/options.yml
---
:todo:
- sass/libsass#2422

<===> placeholder/pseudoselectors/not/universal/input.scss
// Since `%b` doesn't exist, all elements match `:not(%b)`.
:not(%b) {x: y}

<===> placeholder/pseudoselectors/not/universal/output.css
* {
  x: y;
}

<===>
================================================================================
<===> pseudoselector/nested/adjacent_combinators/input.scss
// Regression test for sass/dart-sass#1038
a {
  b:c, > d {x: y}
}

<===> pseudoselector/nested/adjacent_combinators/output.css
a b:c, a > d {
  x: y;
}

<===>
================================================================================
<===> reference_combinator/options.yml
---
:todo:
- libsass

<===> reference_combinator/input.scss
// Reference combinators used to be supported by Sass when they were part of the
// CSS spec, but they're no longer supported and should now produce errors.
.foo /bar/ .baz {
  a: b;
}

<===> reference_combinator/error
Error: expected selector.
  ,
3 | .foo /bar/ .baz{
  |      ^
  '
  input.scss 3:6  root stylesheet

<===>
================================================================================
<===> slotted/input.scss
::slotted(.a) {x: y}

::slotted(.c.d) {x: y}
.e {@extend .c}

::slotted(.f) {x: y}
::slotted(.g) {@extend .f}

<===> slotted/output.css
::slotted(.a) {
  x: y;
}

::slotted(.c.d, .d.e) {
  x: y;
}

::slotted(.f, ::slotted(.g)) {
  x: y;
}

<===>
================================================================================
<===> error/attribute/modifier/no_operator/input.scss
[a b] {c: d}

<===> error/attribute/modifier/no_operator/error
Error: Expected "]".
  ,
1 | [a b]{c: d}
  |    ^
  '
  input.scss 1:4  root stylesheet

<===> error/attribute/modifier/no_operator/error-libsass
Error: invalid operator in attribute selector for a
        on line 1:2 of input.scss
>> [a b] {c: d}

   -^

<===>
================================================================================
<===> error/attribute/modifier/too_long/input.scss
// Attribute modifiers must be single characters.
[a=b cd] {e: f}

<===> error/attribute/modifier/too_long/error
Error: expected "]".
  ,
2 | [a=b cd]{e: f}
  |       ^
  '
  input.scss 2:7  root stylesheet

<===> error/attribute/modifier/too_long/error-libsass
Error: unterminated attribute selector for a
        on line 2:4 of input.scss
>> [a=b cd] {e: f}

   ---^

<===>
================================================================================
<===> error/attribute/modifier/underscore/input.scss
// Attribute modifiers must be ASCII alphabetical characters.
[a=b _] {c: d}

<===> error/attribute/modifier/underscore/error
Error: expected "]".
  ,
2 | [a=b _]{c: d}
  |      ^
  '
  input.scss 2:6  root stylesheet

<===> error/attribute/modifier/underscore/error-libsass
Error: unterminated attribute selector for a
        on line 2:4 of input.scss
>> [a=b _] {c: d}

   ---^

<===>
================================================================================
<===> error/attribute/modifier/digit/input.scss
// Attribute modifiers must be ASCII alphabetical characters.
[a=b 1] {c: d}

<===> error/attribute/modifier/digit/error
Error: expected "]".
  ,
2 | [a=b 1]{c: d}
  |      ^
  '
  input.scss 2:6  root stylesheet

<===> error/attribute/modifier/digit/error-libsass
Error: unterminated attribute selector for a
        on line 2:4 of input.scss
>> [a=b 1] {c: d}

   ---^

<===>
================================================================================
<===> error/attribute/modifier/unicode/input.scss
// Attribute modifiers must be ASCII alphabetical characters.
[a=b ï] {c: d}

<===> error/attribute/modifier/unicode/error
Error: expected "]".
  ,
2 | [a=b ï]{c: d}
  |      ^
  '
  input.scss 2:6  root stylesheet

<===> error/attribute/modifier/unicode/error-libsass
Error: unterminated attribute selector for a
        on line 2:4 of input.scss
>> [a=b ï] {c: d}

   ---^

<===>
================================================================================
<===> escaping/number_as_first_char_without_space/input.scss
.\31u {a: b;}

<===> escaping/number_as_first_char_without_space/output.css
.\31 u {
  a: b;
}

<===> escaping/number_as_first_char_without_space/output-libsass.css
.\31u {
  a: b;
}

<===>
================================================================================
<===> escaping/number_as_first_char_with_space/input.scss
.\31 u {a: b;}

<===> escaping/number_as_first_char_with_space/output.css
.\31 u {
  a: b;
}

<===>
================================================================================
<===> escaping/number_as_nonfirst_char_without_space/input.scss
.a\31u {a: b;}

<===> escaping/number_as_nonfirst_char_without_space/output.css
.a1u {
  a: b;
}

<===> escaping/number_as_nonfirst_char_without_space/output-libsass.css
.a\31u {
  a: b;
}

<===>
================================================================================
<===> escaping/number_as_nonfirst_char_with_space/input.scss
.a\31 u {a: b;}

<===> escaping/number_as_nonfirst_char_with_space/output.css
.a1u {
  a: b;
}

<===> escaping/number_as_nonfirst_char_with_space/output-libsass.css
.a\31 u {
  a: b;
}

<===>
================================================================================
<===> escaping/dollar_char/input.scss
.u\$ {a: b;}

<===> escaping/dollar_char/output.css
.u\$ {
  a: b;
}

<===>
================================================================================
<===> escaping/dollar_char_as_numeric/input.scss
.u\24 {a: b;}

<===> escaping/dollar_char_as_numeric/output.css
.u\$ {
  a: b;
}

<===> escaping/dollar_char_as_numeric/output-libsass.css
.u\24 {
  a: b;
}

<===>
================================================================================
<===> escaping/parenthesis_in_interpolation/input.scss
.u#{'\\28'} { a: b; }

<===> escaping/parenthesis_in_interpolation/output.css
.u\( {
  a: b;
}

<===> escaping/parenthesis_in_interpolation/output-libsass.css
.u\28 {
  a: b;
}