Fixes in modular test runner:
 - ensure output directory has a trailing slash
 - ensure tests complete before returning from runner
 - flush log files (probably not necessary)

TBR=athom@google.com

Change-Id: Ie415266fd311d6319e0853a785e867770c0587a0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105472
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/modular_test/lib/src/generic_runner.dart b/pkg/modular_test/lib/src/generic_runner.dart
index fae48d8..e7c3030 100644
--- a/pkg/modular_test/lib/src/generic_runner.dart
+++ b/pkg/modular_test/lib/src/generic_runner.dart
@@ -152,8 +152,13 @@
     }
   }
 
-  File.fromUri(options.logDir.resolve('results.json'))
-      .writeAsStringSync(results.map((s) => '$s\n').join());
-  File.fromUri(options.logDir.resolve('logs.json'))
-      .writeAsStringSync(logs.map((s) => '$s\n').join());
+  // Ensure the directory URI ends with a path separator.
+  var logDir = Directory.fromUri(options.logDir).uri;
+  var resultJsonUri = logDir.resolve('results.json');
+  var logsJsonUri = logDir.resolve('logs.json');
+  File.fromUri(resultJsonUri)
+      .writeAsStringSync(results.map((s) => '$s\n').join(), flush: true);
+  File.fromUri(logsJsonUri)
+      .writeAsStringSync(logs.map((s) => '$s\n').join(), flush: true);
+  print('log files emitted to ${resultJsonUri} and ${logsJsonUri}');
 }
diff --git a/pkg/modular_test/lib/src/runner.dart b/pkg/modular_test/lib/src/runner.dart
index d7e1dbd..d3803bb 100644
--- a/pkg/modular_test/lib/src/runner.dart
+++ b/pkg/modular_test/lib/src/runner.dart
@@ -24,7 +24,7 @@
       .map((e) => new _PipelineTest(e.uri, suiteFolder, options, pipeline))
       .toList();
 
-  generic.runSuite(
+  await generic.runSuite(
       entries,
       new generic.RunnerOptions()
         ..suiteName = suiteName