| Index: test/runner/tag_test.dart
|
| diff --git a/test/runner/tag_test.dart b/test/runner/tag_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b86fc63143341d53335589cbf079c8f1e4d24ff1
|
| --- /dev/null
|
| +++ b/test/runner/tag_test.dart
|
| @@ -0,0 +1,294 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +@TestOn("vm")
|
| +
|
| +import 'package:scheduled_test/descriptor.dart' as d;
|
| +import 'package:scheduled_test/scheduled_stream.dart';
|
| +import 'package:scheduled_test/scheduled_test.dart';
|
| +
|
| +import '../io.dart';
|
| +
|
| +void main() {
|
| + useSandbox();
|
| +
|
| + var testRun;
|
| +
|
| + /// [warnings] contains pairs, each containing a comma-separated list of
|
| + /// tags the warning is about and the test name.
|
| + expectTagWarnings(List<List<String>> warnings) {
|
| + for (var warning in warnings) {
|
| + testRun.stderr.expect(consumeThrough(contains(
|
| + "WARNING: unrecognized tags {${warning[0]}}"
|
| + " in test '${warning[1]}'")));
|
| + }
|
| + testRun.stderr.expect(isDone);
|
| + }
|
| +
|
| + group("--tags", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("no tags", () {});
|
| + test("a", () {}, tags: "a");
|
| + test("b", () {}, tags: "b");
|
| + test("bc", () {}, tags: "b,c");
|
| +}
|
| +""").create();
|
| + });
|
| +
|
| + test("runs all tests when no tags are specified", () {
|
| + testRun = runTest(["test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+4: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['a', 'a'],
|
| + ['b', 'b'],
|
| + ['b, c', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("runs only tests containing specified tags", () {
|
| + testRun = runTest(["--tags=a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['b', 'b'],
|
| + ['b, c', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("runs tests with tags intersecting command-line tags", () {
|
| + testRun = runTest(["--tags=c", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['a', 'a'],
|
| + ['b', 'b'],
|
| + ['b', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("ignores tag set difference", () {
|
| + testRun = runTest(["--tags=b,z", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['a', 'a'],
|
| + ['c', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("prints no warnings when all tags are specified", () {
|
| + testRun = runTest(["--tags=a,b,c", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
|
| + expectTagWarnings([]);
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group("--tag aliases", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("no tags", () {});
|
| + test("a", () {}, tags: "a");
|
| +}
|
| +""").create();
|
| + });
|
| +
|
| + test("takes -t abbreviation", () {
|
| + testRun = runTest(["-t", "a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("takes --tag typo", () {
|
| + testRun = runTest(["--tag=a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group("--exclude-tags", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("no tags", () {});
|
| + test("a", () {}, tags: "a");
|
| + test("b", () {}, tags: "b");
|
| + test("bc", () {}, tags: "b,c");
|
| +}
|
| +""").create();
|
| + });
|
| +
|
| + test("excludes tests containing excluded tags", () {
|
| + testRun = runTest(["--exclude-tags=a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['b', 'b'],
|
| + ['b, c', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("ignores tag set difference", () {
|
| + testRun = runTest(["--exclude-tags=b,z", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['a', 'a'],
|
| + ['c', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("excludes tests that intersect excluded tags", () {
|
| + testRun = runTest(["--exclude-tags=c", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
|
| + expectTagWarnings([
|
| + ['a', 'a'],
|
| + ['b', 'b'],
|
| + ['b', 'bc'],
|
| + ]);
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("prints no warnings when all tags are specified", () {
|
| + testRun = runTest(["--exclude-tags=a,b,c", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + expectTagWarnings([]);
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group("tagged groups", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + group("a", () {
|
| + test("foo", () {});
|
| + }, tags: "a");
|
| +}
|
| +""").create();
|
| + });
|
| +
|
| + test("excludes tags specified on the group", () {
|
| + testRun = runTest(["-x", "a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("No tests ran")));
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group("--exclude-tags aliases", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("no tags", () {});
|
| + test("a", () {}, tags: "a");
|
| +}
|
| +""").create();
|
| + });
|
| +
|
| + test("takes -x abbreviation", () {
|
| + testRun = runTest(["-x", "a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test("takes --exclude-tag typo", () {
|
| + testRun = runTest(["--exclude-tag=a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group('interaction between --tags and --exclude-tags', () {
|
| + test('refuses include and exclude the same tag simultaneously', () {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("foo", () {});
|
| +}
|
| +""").create();
|
| +
|
| + testRun = runTest(["-t", "a,b", "-x", "a,b,c", "test.dart"]);
|
| + testRun.stderr.expect(consumeThrough(
|
| + contains("Included and excluded tag sets may not intersect. "
|
| + "Found intersection: a, b")));
|
| + testRun.stderr.expect(consumeThrough(contains("Usage:")));
|
| + testRun.shouldExit(64);
|
| + });
|
| +
|
| + test("--exclude-tags takes precedence over --tags", () {
|
| + d.file("test.dart", """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("ab", () {}, tags: ["a", "b"]);
|
| +}
|
| +""").create();
|
| +
|
| + testRun = runTest(["-t", "a", "-x", "b", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("No tests ran")));
|
| + testRun.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group('@Tags annotation', () {
|
| + test('applies tags to the suite', () {
|
| + d.file("test.dart", """
|
| +@Tags(const ['a'])
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("foo", () {}, tags: "b");
|
| +}
|
| +""").create();
|
| +
|
| + testRun = runTest(["-x", "a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("No tests ran")));
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test('parses a string into a tag', () {
|
| + d.file("test.dart", """
|
| +@Tags('a')
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("foo", () {}, tags: "b");
|
| +}
|
| +""").create();
|
| +
|
| + testRun = runTest(["-x", "a", "test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(contains("No tests ran")));
|
| + testRun.shouldExit(0);
|
| + });
|
| +
|
| + test('refuses bad arguments', () {
|
| + d.file("test.dart", """
|
| +@Tags(1)
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {}
|
| +""").create();
|
| +
|
| + testRun = runTest(["test.dart"]);
|
| + testRun.stdout.expect(consumeThrough(
|
| + contains("Only String or List literal allowed as @Tags argument")));
|
| + testRun.shouldExit(1);
|
| + });
|
| + });
|
| +}
|
|
|