Index: lib/src/runner.dart |
diff --git a/lib/src/runner.dart b/lib/src/runner.dart |
index 260c3106951badc31a575aaecf285d2af02b05eb..90027ddbb17b70c0a6b365e521e79572ae19d379 100644 |
--- a/lib/src/runner.dart |
+++ b/lib/src/runner.dart |
@@ -158,9 +158,23 @@ class Runner { |
]); |
})).map((loadSuite) { |
return loadSuite.changeSuite((suite) { |
- return suite.filter((test) => |
- (_config.pattern == null || test.name.contains(_config.pattern)) && |
- (_config.tags.isEmpty || intersect(_config.tags, test.metadata.tags))); |
+ return suite.filter((test) { |
+ bool matchesNamePattern = |
+ _config.pattern == null || test.name.contains(_config.pattern); |
+ bool matchesTags = _config.tags.isEmpty || |
+ intersect(_config.tags, test.metadata.tags); |
+ bool matchesExcludeTags = |
+ intersect(_config.excludeTags, test.metadata.tags); |
+ |
+ var specifiedTags = _config.tags.union(_config.excludeTags); |
+ List unrecognizedTags = test.metadata.tags.difference(specifiedTags); |
+ if (unrecognizedTags.isNotEmpty) { |
+ var yellow = _config.color ? '\u001b[33m' : ''; |
+ stderr.writeln("\n${yellow}WARNING: unrecognized tags ${unrecognizedTags} in test '${test.name}'"); |
+ } |
+ |
+ return matchesNamePattern && matchesTags && !matchesExcludeTags; |
+ }); |
}); |
}); |
} |