dart-sass/test/cli/shared/errors.dart
2020-12-09 14:20:51 -08:00

165 lines
4.5 KiB
Dart

// Copyright 2016 Google Inc. Use of this source code is governed by an
// MIT-style license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;
import 'package:test_process/test_process.dart';
/// Defines test that are shared between the Dart and Node.js CLI test suites.
void sharedTests(Future<TestProcess> runSass(Iterable<String> arguments)) {
test("from invalid arguments", () async {
var sass = await runSass(["--asdf"]);
expect(
sass.stdout, emitsThrough(contains("Print this usage information.")));
await sass.shouldExit(64);
});
test("from too many positional arguments", () async {
var sass = await runSass(["abc", "def", "ghi"]);
expect(
sass.stdout, emitsThrough(contains("Print this usage information.")));
await sass.shouldExit(64);
});
test("from too many positional arguments with --stdin", () async {
var sass = await runSass(["--stdin", "abc", "def"]);
expect(
sass.stdout, emitsThrough(contains("Print this usage information.")));
await sass.shouldExit(64);
});
test("from a file that doesn't exist", () async {
var sass = await runSass(["asdf"]);
expect(sass.stderr, emits(startsWith("Error reading asdf:")));
expect(sass.stderr, emitsDone);
await sass.shouldExit(66);
});
test("from invalid syntax", () async {
await d.file("test.scss", "a {b: }").create();
var sass = await runSass(["--no-unicode", "test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: Expected expression.",
" ,",
"1 | a {b: }",
" | ^",
" '",
" test.scss 1:7 root stylesheet",
]));
await sass.shouldExit(65);
});
test("from the runtime", () async {
await d.file("test.scss", "a {b: 1px + 1deg}").create();
var sass = await runSass(["--no-unicode", "test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: Incompatible units deg and px.",
" ,",
"1 | a {b: 1px + 1deg}",
" | ^^^^^^^^^^",
" '",
" test.scss 1:7 root stylesheet",
]));
await sass.shouldExit(65);
});
test("from an error encountered within a function", () async {
await d.file("test.scss", """
@function a() {
@error "Within A.";
}
.b {
c: a();
}
""").create();
var sass = await runSass(["--no-unicode", "test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: \"Within A.\"",
" ,",
"6 | c: a();",
" | ^^^",
" '",
" test.scss 6:6 root stylesheet",
]));
await sass.shouldExit(65);
});
test("from an error encountered within a mixin", () async {
await d.file("test.scss", """
@mixin a() {
@error "Within A.";
}
.b {
@include a();
}
""").create();
var sass = await runSass(["--no-unicode", "test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: \"Within A.\"",
" ,",
"6 | @include a();",
" | ^^^^^^^^^^^^",
" '",
" test.scss 6:3 root stylesheet",
]));
await sass.shouldExit(65);
});
test("with colors with --color", () async {
await d.file("test.scss", "a {b: }").create();
var sass = await runSass(["--no-unicode", "--color", "test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: Expected expression.",
"\u001b[34m ,\u001b[0m",
"\u001b[34m1 |\u001b[0m a {b: \u001b[31m\u001b[0m}",
"\u001b[34m |\u001b[0m \u001b[31m ^\u001b[0m",
"\u001b[34m '\u001b[0m",
" test.scss 1:7 root stylesheet",
]));
await sass.shouldExit(65);
});
test("with Unicode by default", () async {
await d.file("test.scss", "a {b: }").create();
var sass = await runSass(["test.scss"]);
expect(
sass.stderr,
emitsInOrder([
"Error: Expected expression.",
"",
"1 │ a {b: }",
" │ ^",
"",
" test.scss 1:7 root stylesheet",
]));
await sass.shouldExit(65);
});
test("with full stack traces with --trace", () async {
await d.file("test.scss", "a {b: }").create();
var sass = await runSass(["--trace", "test.scss"]);
expect(sass.stderr, emitsThrough(contains("\.dart")));
await sass.shouldExit(65);
});
}