From 2c6807703a23ea947bfbb3452492fd287a941b85 Mon Sep 17 00:00:00 2001
From: Natalie Weizenbaum <nweiz@google.com>
Date: Mon, 23 Nov 2015 17:57:09 -0800
Subject: [PATCH] Fix a bug with skipped groups.

When a group was skipped, it was being filtered out entirely since it
had no tests. This preserves it so that it can print a skip message.

R=kevmoo@google.com

Review URL: https://codereview.chromium.org//1471963002 .
---
 CHANGELOG.md                            |  2 ++
 lib/src/backend/group.dart              |  4 ++--
 test/runner/compact_reporter_test.dart  | 14 ++++++++++++++
 test/runner/expanded_reporter_test.dart | 12 ++++++++++++
 4 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4eed788a..bfd7505e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@
 * Add a machine-readable JSON reporter. For details, see
   [the protocol documentation][json-protocol].
 
+* Skipped groups now properly print skip messages.
+
 [json-protocol]: https://github.com/dart-lang/test/blob/master/json_reporter.md
 
 ## 0.12.5+2
diff --git a/lib/src/backend/group.dart b/lib/src/backend/group.dart
index dc7e6bd3..f1b08a49 100644
--- a/lib/src/backend/group.dart
+++ b/lib/src/backend/group.dart
@@ -44,14 +44,14 @@ class Group implements GroupEntry {
     if (!metadata.testOn.evaluate(platform, os: os)) return null;
     var newMetadata = metadata.forPlatform(platform, os: os);
     var filtered = _map((entry) => entry.forPlatform(platform, os: os));
-    if (filtered.isEmpty) return null;
+    if (filtered.isEmpty && !entries.isEmpty) return null;
     return new Group(name, filtered,
         metadata: newMetadata, setUpAll: setUpAll, tearDownAll: tearDownAll);
   }
 
   Group filter(bool callback(Test test)) {
     var filtered = _map((entry) => entry.filter(callback));
-    if (filtered.isEmpty) return null;
+    if (filtered.isEmpty && !entries.isEmpty) return null;
     return new Group(name, filtered,
         metadata: metadata, setUpAll: setUpAll, tearDownAll: tearDownAll);
   }
diff --git a/test/runner/compact_reporter_test.dart b/test/runner/compact_reporter_test.dart
index 47b9db91..f8908790 100644
--- a/test/runner/compact_reporter_test.dart
+++ b/test/runner/compact_reporter_test.dart
@@ -322,6 +322,20 @@ void main() {
           +0 ~3: All tests skipped.""");
     });
 
+    test("displays a skipped group", () {
+      _expectReport("""
+          group('skip', () {
+            test('test 1', () {});
+            test('test 2', () {});
+            test('test 3', () {});
+          }, skip: true);""",
+          """
+          +0: loading test.dart
+          +0: skip
+          +0 ~1: skip
+          +0 ~1: All tests skipped.""");
+    });
+
     test("runs skipped tests along with successful tests", () {
       _expectReport("""
           test('skip 1', () {}, skip: true);
diff --git a/test/runner/expanded_reporter_test.dart b/test/runner/expanded_reporter_test.dart
index 11eac9fd..188bc7f0 100644
--- a/test/runner/expanded_reporter_test.dart
+++ b/test/runner/expanded_reporter_test.dart
@@ -251,6 +251,18 @@ void main() {
           +0 ~3: All tests skipped.""");
     });
 
+    test("displays a skipped group", () {
+      _expectReport("""
+          group('skip', () {
+            test('test 1', () {});
+            test('test 2', () {});
+            test('test 3', () {});
+          }, skip: true);""",
+          """
+          +0: skip
+          +0 ~1: All tests skipped.""");
+    });
+
     test("runs skipped tests along with successful tests", () {
       _expectReport("""
           test('skip 1', () {}, skip: true);
-- 
GitLab