fn runner() -> crate::TestRunner {
super::runner()
.with_cwd("style_rule")
.mock_file(
"interpolation/custom_property/plain.css",
"a {\n --b: #{c};\n}\n",
)
.mock_file(
"interpolation/declaration/plain.css",
"a {\n w#{x}y: z;\n}\n",
)
.mock_file(
"interpolation/selector/plain.css",
"a#{b}c {\n x: y;\n}\n",
)
.mock_file(
"leading_combinator/through_import/plain.css",
"> b {c: d}\n",
)
.mock_file(
"leading_combinator/through_load_css/plain.css",
"> b {c: d}\n",
)
.mock_file("leading_combinator/top_level/plain.css", "> a {b: c}\n")
.mock_file(
"nested_property/no_value/plain.css",
"a {\n x: {\n y: z;\n }\n}\n",
)
.mock_file(
"nested_property/value/plain.css",
"a {\n b: c {\n d: e;\n }\n}\n",
)
.mock_file("parent_selector/suffix/plain.css", "a {&b {c: d}}\n")
.mock_file("placeholder_selector/plain.css", "%foo {\n x: y;\n}\n")
.mock_file(
"trailing_combinator/nesting/plain.css",
"a > {b {c: d}}\n",
)
.mock_file("trailing_combinator/no_nesting/plain.css", "a > {b: c}\n")
}
mod interpolation {
fn runner() -> crate::TestRunner {
super::runner().with_cwd("interpolation")
}
#[test]
#[ignore] fn custom_property() {
let runner = runner().with_cwd("custom_property");
assert_eq!(
runner.err("@use \'plain\'"),
"Error: Interpolation isn\'t allowed in plain CSS.\
\n ,\
\n2 | --b: #{c};\
\n | ^^^^\
\n \'\
\n plain.css 2:8 @use\
\n input.scss 1:1 root stylesheet",
);
}
#[test]
#[ignore] fn declaration() {
let runner = runner().with_cwd("declaration");
assert_eq!(
runner.err("@use \'plain\'"),
"Error: Interpolation isn\'t allowed in plain CSS.\
\n ,\
\n2 | w#{x}y: z;\
\n | ^^^^\
\n \'\
\n plain.css 2:4 @use\
\n input.scss 1:1 root stylesheet",
);
}
#[test]
#[ignore] fn selector() {
let runner = runner().with_cwd("selector");
assert_eq!(
runner.err("@use \'plain\'"),
"Error: Interpolation isn\'t allowed in plain CSS.\
\n ,\
\n1 | a#{b}c {\
\n | ^^^^\
\n \'\
\n plain.css 1:2 @use\
\n input.scss 1:1 root stylesheet",
);
}
}
mod leading_combinator {
fn runner() -> crate::TestRunner {
super::runner().with_cwd("leading_combinator")
}
#[test]
#[ignore] fn through_import() {
let runner = runner().with_cwd("through_import");
assert_eq!(
runner.err(
"a {@import \"plain\"}\n"
),
"DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.\n\
\nMore info and automated migrator: https://sass-lang.com/d/import\n\
\n ,\
\n1 | a {@import \"plain\"}\
\n | ^^^^^^^\
\n \'\
\n input.scss 1:12 root stylesheet\n\
\nError: Top-level leading combinators aren\'t allowed in plain CSS.\
\n ,\
\n1 | > b {c: d}\
\n | ^\
\n \'\
\n plain.css 1:1 @import\
\n input.scss 1:12 root stylesheet",
);
}
#[test]
#[ignore] fn through_load_css() {
let runner = runner().with_cwd("through_load_css");
assert_eq!(
runner.err(
"@use \"sass:meta\";\n\
\na {@include meta.load-css(\"plain\")}\n"
),
"Error: Top-level leading combinators aren\'t allowed in plain CSS.\
\n ,\
\n1 | > b {c: d}\
\n | ^\
\n \'\
\n plain.css 1:1 load-css()\
\n input.scss 3:4 root stylesheet",
);
}
#[test]
#[ignore] fn top_level() {
let runner = runner().with_cwd("top_level");
assert_eq!(
runner.err(
"@use \'plain\';\n"
),
"Error: Top-level leading combinators aren\'t allowed in plain CSS.\
\n ,\
\n1 | > a {b: c}\
\n | ^\
\n \'\
\n plain.css 1:1 @use\
\n input.scss 1:1 root stylesheet",
);
}
}
mod nested_property {
fn runner() -> crate::TestRunner {
super::runner().with_cwd("nested_property")
}
#[test]
#[ignore] fn no_value() {
let runner = runner().with_cwd("no_value");
assert_eq!(
runner.err("@use \'plain\'"),
"Error: Nested declarations aren\'t allowed in plain CSS.\
\n ,\
\n2 | x: {\
\n | ^\
\n \'\
\n plain.css 2:6 @use\
\n input.scss 1:1 root stylesheet",
);
}
#[test]
#[ignore] fn value() {
let runner = runner().with_cwd("value");
assert_eq!(
runner.err("@use \'plain\'\n"),
"Error: Nested declarations aren\'t allowed in plain CSS.\
\n ,\
\n2 | b: c {\
\n | ^\
\n \'\
\n plain.css 2:8 @use\
\n input.scss 1:1 root stylesheet",
);
}
}
mod parent_selector {
fn runner() -> crate::TestRunner {
super::runner().with_cwd("parent_selector")
}
#[test]
#[ignore] fn suffix() {
let runner = runner().with_cwd("suffix");
assert_eq!(
runner.err("@use \'plain\';\n"),
"Error: Parent selectors can\'t have suffixes in plain CSS.\
\n ,\
\n1 | a {&b {c: d}}\
\n | ^^\
\n \'\
\n plain.css 1:4 @use\
\n input.scss 1:1 root stylesheet",
);
}
}
#[test]
#[ignore] fn placeholder_selector() {
let runner = runner().with_cwd("placeholder_selector");
assert_eq!(
runner.err("@use \'plain\'"),
"Error: Placeholder selectors aren\'t allowed in plain CSS.\
\n ,\
\n1 | %foo {\
\n | ^^^^\
\n \'\
\n plain.css 1:1 @use\
\n input.scss 1:1 root stylesheet",
);
}
mod trailing_combinator {
fn runner() -> crate::TestRunner {
super::runner().with_cwd("trailing_combinator")
}
#[test]
#[ignore] fn nesting() {
let runner = runner().with_cwd("nesting");
assert_eq!(
runner.err("@use \'plain\';\n"),
"Error: expected selector.\
\n ,\
\n1 | a > {b {c: d}}\
\n | ^\
\n \'\
\n plain.css 1:5 @use\
\n input.scss 1:1 root stylesheet",
);
}
#[test]
#[ignore] fn no_nesting() {
let runner = runner().with_cwd("no_nesting");
assert_eq!(
runner.err("@use \'plain\';\n"),
"Error: expected selector.\
\n ,\
\n1 | a > {b: c}\
\n | ^\
\n \'\
\n plain.css 1:5 @use\
\n input.scss 1:1 root stylesheet",
);
}
}