Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1036)

Unified Diff: test/runner/tag_test.dart

Issue 1405633004: feature: tag tests; choose tags on command line Base URL: git@github.com:yjbanov/test.git@tags
Patch Set: address review comments; --exclude-tags Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« test/backend/metadata_test.dart ('K') | « test/backend/metadata_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..a4e4f9e9182309f9d6cebf2596797a3bd613430a
--- /dev/null
+++ b/test/runner/tag_test.dart
@@ -0,0 +1,213 @@
+// 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();
+
+ group("--tags", () {
+ test("runs only tests containing specified tags", () {
+ 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();
+
+ var test;
+
+ /// [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) {
+ test.stderr.expect(consumeThrough(contains(
+ "WARNING: unrecognized tags {${warning[0]}}"
+ " in test '${warning[1]}'")));
+ }
+ test.stderr.expect(isDone);
+ }
+
+ test = runTest(["test.dart"]);
nweiz 2015/11/16 21:59:44 Each of these invocations of the test runner shoul
yjbanov 2015/11/26 06:30:27 Done.
+ test.stdout.expect(consumeThrough(contains("+4: All tests passed!")));
+ expectTagWarnings([
+ ['a', 'a'],
+ ['b', 'b'],
+ ['b, c', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--tags=a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ expectTagWarnings([
+ ['b', 'b'],
+ ['b, c', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--tags=b", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
+ expectTagWarnings([
+ ['a', 'a'],
+ ['c', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--tags=c", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ expectTagWarnings([
+ ['a', 'a'],
+ ['b', 'b'],
+ ['b', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--tags=a,b,c", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
+ expectTagWarnings([]);
+ test.shouldExit(0);
+ });
+
+ test("takes -t abbreviation and --tag typo", () {
+ d.file("test.dart", """
+import 'package:test/test.dart';
+
+void main() {
+ test("no tags", () {});
+ test("a", () {}, tags: "a");
+}
+""").create();
+
+ var test = runTest(["test.dart"]);
nweiz 2015/11/16 21:59:44 You don't need to test what happens if no flags ar
yjbanov 2015/11/26 06:30:27 I was sanity checking the test itself, but done.
+ test.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
+ test.shouldExit(0);
+
+ test = runTest(["-t", "a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ test.shouldExit(0);
+
+ test = runTest(["--tag=a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ test.shouldExit(0);
+ });
+ });
+
+ group("--exclude-tags", () {
+ test("runs only tests containing specified tags", () {
+ 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();
+
+ var test;
+
+ /// [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) {
+ test.stderr.expect(consumeThrough(contains(
+ "WARNING: unrecognized tags {${warning[0]}}"
+ " in test '${warning[1]}'")));
+ }
+ test.stderr.expect(isDone);
+ }
+
+ test = runTest(["--exclude-tags=a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
+ expectTagWarnings([
+ ['b', 'b'],
+ ['b, c', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--exclude-tags=b", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
+ expectTagWarnings([
+ ['a', 'a'],
+ ['c', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--exclude-tags=c", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
+ expectTagWarnings([
+ ['a', 'a'],
+ ['b', 'b'],
+ ['b', 'bc'],
+ ]);
+ test.shouldExit(0);
+
+ test = runTest(["--exclude-tags=a,b,c", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ expectTagWarnings([]);
+ test.shouldExit(0);
+ });
+
+ test("takes -e abbreviation and --exclude-tag typo", () {
+ d.file("test.dart", """
+import 'package:test/test.dart';
+
+void main() {
+ test("no tags", () {});
+ test("a", () {}, tags: "a");
+}
+""").create();
+
+ var test = runTest(["-e", "a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ test.shouldExit(0);
+
+ test = runTest(["--exclude-tag=a", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
+ test.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();
+
+ var test = runTest(["-t", "a,b", "-e", "a,b,c", "test.dart"]);
+ test.stderr.expect(consumeThrough(contains("Included and excluded tag sets may not intersect. Found intersection: a, b")));
nweiz 2015/11/16 21:59:44 Long line.
yjbanov 2015/11/26 06:30:27 Done.
+ test.stderr.expect(consumeThrough(contains("Usage:")));
+ test.shouldExit(64);
+ });
+
+ test("--exclude-tags takes precedence over --tags", () {
+ d.file("test.dart", """
+import 'package:test/test.dart';
+
+void main() {
+ test("ab", () {}, tags: "ab");
+}
+""").create();
+
+ var test = runTest(["-t", "a", "-e", "b", "test.dart"]);
+ test.stdout.expect(consumeThrough(contains("No tests ran")));
+ test.shouldExit(0);
+ });
+ });
+}
nweiz 2015/11/16 21:59:44 Also test that you exclude tags specified on the g
yjbanov 2015/11/26 06:30:27 Done.
« test/backend/metadata_test.dart ('K') | « test/backend/metadata_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698