From 5d8771d18d142aa5b7cf965caf53bcdfef2a0c20 Mon Sep 17 00:00:00 2001
From: Todd Volkert <tvolkert@users.noreply.github.com>
Date: Fri, 10 Aug 2018 21:18:10 -0700
Subject: [PATCH] Update fuchsia_tester to work in (and require) Dart 2 mode
 (#20460)

---
 .../flutter_tools/bin/fuchsia_tester.dart     | 44 ++++++++++++-------
 .../flutter_tools/lib/src/test/runner.dart    |  2 +
 2 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/packages/flutter_tools/bin/fuchsia_tester.dart b/packages/flutter_tools/bin/fuchsia_tester.dart
index 3fa170bb25..bd2be70411 100644
--- a/packages/flutter_tools/bin/fuchsia_tester.dart
+++ b/packages/flutter_tools/bin/fuchsia_tester.dart
@@ -24,10 +24,16 @@ import 'package:flutter_tools/src/usage.dart';
 const String _kOptionPackages = 'packages';
 const String _kOptionShell = 'shell';
 const String _kOptionTestDirectory = 'test-directory';
+const String _kOptionSdkRoot = 'sdk-root';
+const String _kOptionTestFile = 'test-file';
+const String _kOptionDillFile = 'dill-file';
 const List<String> _kRequiredOptions = <String>[
   _kOptionPackages,
   _kOptionShell,
   _kOptionTestDirectory,
+  _kOptionSdkRoot,
+  _kOptionTestFile,
+  _kOptionDillFile,
 ];
 const String _kOptionCoverage = 'coverage';
 const String _kOptionCoveragePath = 'coverage-path';
@@ -38,20 +44,14 @@ void main(List<String> args) {
   });
 }
 
-List<String> _findTests(Directory directory) {
-  return directory
-      .listSync(recursive: true, followLinks: false)
-      .where((FileSystemEntity entity) =>
-          entity.path.endsWith('_test.dart') && fs.isFileSync(entity.path))
-      .map((FileSystemEntity entity) => fs.path.absolute(entity.path))
-      .toList();
-}
-
 Future<Null> run(List<String> args) async {
   final ArgParser parser = new ArgParser()
     ..addOption(_kOptionPackages, help: 'The .packages file')
     ..addOption(_kOptionShell, help: 'The Flutter shell binary')
     ..addOption(_kOptionTestDirectory, help: 'Directory containing the tests')
+    ..addOption(_kOptionSdkRoot, help: 'Path to the SDK platform files')
+    ..addOption(_kOptionTestFile, help: 'Test file to execute')
+    ..addOption(_kOptionDillFile, help: 'Precompiled dill file for test')
     ..addFlag(_kOptionCoverage,
       defaultsTo: false,
       negatable: false,
@@ -72,22 +72,33 @@ Future<Null> run(List<String> args) async {
     Cache.flutterRoot = tempDirectory.path;
     final Directory testDirectory =
         fs.directory(argResults[_kOptionTestDirectory]);
-    final List<String> tests = _findTests(testDirectory);
-
-    final List<String> testArgs = <String>[];
-    testArgs.add('--');
-    testArgs.addAll(tests);
+    final File testFile = fs.file(argResults[_kOptionTestFile]);
+    final File dillFile = fs.file(argResults[_kOptionDillFile]);
 
     final String shellPath = argResults[_kOptionShell];
     if (!fs.isFileSync(shellPath)) {
       throwToolExit('Cannot find Flutter shell at $shellPath');
     }
+
+    final Directory sdkRootSrc = fs.directory(argResults[_kOptionSdkRoot]);
+    if (!fs.isDirectorySync(sdkRootSrc.path)) {
+      throwToolExit('Cannot find SDK files at ${sdkRootSrc.path}');
+    }
+
     // Put the tester shell where runTests expects it.
     // TODO(tvolkert,garymm): Switch to a Fuchsia-specific Artifacts impl.
     final Link testerDestLink =
         fs.link(artifacts.getArtifactPath(Artifact.flutterTester));
     testerDestLink.parent.createSync(recursive: true);
     testerDestLink.createSync(shellPath);
+    final Directory sdkRootDest =
+        fs.directory(artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath));
+    sdkRootDest.createSync(recursive: true);
+    for (FileSystemEntity artifact in sdkRootSrc.listSync()) {
+      fs.link(sdkRootDest.childFile(artifact.basename).path).createSync(artifact.path);
+    }
+    // TODO(tvolkert): Remove once flutter_tester no longer looks for this.
+    fs.link(sdkRootDest.childFile('platform.dill').path).createSync('platform_strong.dill');
 
     PackageMap.globalPackagesPath =
         fs.path.normalize(fs.path.absolute(argResults[_kOptionPackages]));
@@ -98,10 +109,13 @@ Future<Null> run(List<String> args) async {
     }
 
     exitCode = await runTests(
-      tests,
+      <String>[testFile.path],
       workDir: testDirectory,
       watcher: collector,
+      ipv6: false,
       enableObservatory: collector != null,
+      previewDart2: true,
+      precompiledDillPath: dillFile.path,
     );
 
     if (collector != null) {
diff --git a/packages/flutter_tools/lib/src/test/runner.dart b/packages/flutter_tools/lib/src/test/runner.dart
index e447e2f69b..bc97ec6df5 100644
--- a/packages/flutter_tools/lib/src/test/runner.dart
+++ b/packages/flutter_tools/lib/src/test/runner.dart
@@ -30,6 +30,7 @@ Future<int> runTests(
     bool ipv6 = false,
     bool machine = false,
     bool previewDart2 = false,
+    String precompiledDillPath,
     bool trackWidgetCreation = false,
     bool updateGoldens = false,
     TestWatcher watcher,
@@ -88,6 +89,7 @@ Future<int> runTests(
     startPaused: startPaused,
     serverType: serverType,
     previewDart2: previewDart2,
+    precompiledDillPath: precompiledDillPath,
     trackWidgetCreation: trackWidgetCreation,
     updateGoldens: updateGoldens,
   );
-- 
2.21.0