Fix coverage shard and print summary after test run (#28970)

* Fix coverage shard

* clarify

* Make sure we print test results

* Actually report test results before exiting

* revert unintended changes
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index ea8bb9b..bb41ead 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -358,11 +358,15 @@
     pubEnvironment['FLUTTER_TOOL_ARGS'] = toolsArgs.trim();
   }
 
-  final Stream<String> testOutput = runAndGetStdout(pub, args,
+  final FlutterCompactFormatter formatter = FlutterCompactFormatter();
+  final Stream<String> testOutput = runAndGetStdout(
+    pub,
+    args,
     workingDirectory: workingDirectory,
     environment: pubEnvironment,
+    beforeExit: formatter.finish
   );
-  await _processTestOutput(testOutput, tableData);
+  await _processTestOutput(formatter, testOutput, tableData);
 }
 
 Future<void> _pubRunTest(
@@ -388,10 +392,14 @@
         toolsArgs += ' --enable-asserts';
     pubEnvironment['FLUTTER_TOOL_ARGS'] = toolsArgs.trim();
   }
-  final Stream<String> testOutput = runAndGetStdout(pub, args,
+  final FlutterCompactFormatter formatter = FlutterCompactFormatter();
+  final Stream<String> testOutput = runAndGetStdout(
+    pub,
+    args,
     workingDirectory: workingDirectory,
+    beforeExit: formatter.finish,
   );
-  await _processTestOutput(testOutput, tableData);
+  await _processTestOutput(formatter, testOutput, tableData);
 }
 
 enum CiProviders {
@@ -460,9 +468,13 @@
   return '';
 }
 
-Future<void> _processTestOutput(Stream<String> testOutput, bq.TabledataResourceApi tableData) async {
-  final FlutterCompactFormatter formatter = FlutterCompactFormatter();
+Future<void> _processTestOutput(
+  FlutterCompactFormatter formatter,
+  Stream<String> testOutput,
+  bq.TabledataResourceApi tableData,
+) async {
   await testOutput.forEach(formatter.processRawOutput);
+  formatter.finish();
   if (tableData == null || formatter.tests.isEmpty) {
     return;
   }
@@ -538,7 +550,8 @@
   if (flutterTestArgs != null && flutterTestArgs.isNotEmpty)
     args.addAll(flutterTestArgs);
 
-  if (!expectFailure) {
+  final bool shouldProcessOutput = !expectFailure && !options.contains('--coverage');
+  if (shouldProcessOutput) {
     args.add('--machine');
   }
 
@@ -556,7 +569,7 @@
     }
     args.add(script);
   }
-  if (expectFailure) {
+  if (!shouldProcessOutput) {
     return runCommand(flutter, args,
       workingDirectory: workingDirectory,
       expectNonZeroExit: true,
@@ -565,12 +578,14 @@
       timeout: timeout,
     );
   }
+  final FlutterCompactFormatter formatter = FlutterCompactFormatter();
   final Stream<String> testOutput = runAndGetStdout(flutter, args,
     workingDirectory: workingDirectory,
     expectNonZeroExit: expectFailure,
     timeout: timeout,
+    beforeExit: formatter.finish,
   );
-  await _processTestOutput(testOutput, tableData);
+  await _processTestOutput(formatter, testOutput, tableData);
 }
 
 Future<void> _verifyVersion(String filename) async {