/test/cli/shared/errors.dart
https://github.com/sass/dart-sass · Dart · 166 lines · 142 code · 20 blank · 4 comment · 0 complexity · 19222d43aaf198cac389b1c78e0550d3 MD5 · raw file
- // 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 'dart:async';
- 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);
- });
- }