| OLD | NEW | 
|    1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |    1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 
|    2 // for details. All rights reserved. Use of this source code is governed by a |    2 // for details. All rights reserved. Use of this source code is governed by a | 
|    3 // BSD-style license that can be found in the LICENSE.md file. |    3 // BSD-style license that can be found in the LICENSE.md file. | 
|    4  |    4  | 
|    5 // TODO(ahe): Copied from closure_conversion branch of kernel, remove this file |    5 // TODO(ahe): Copied from closure_conversion branch of kernel, remove this file | 
|    6 // when closure_conversion is merged with master. |    6 // when closure_conversion is merged with master. | 
|    7  |    7  | 
|    8 library kernel.testing.kernel_chain; |    8 library kernel.testing.kernel_chain; | 
|    9  |    9  | 
|   10 import 'dart:async' show |   10 import 'dart:async' show | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   70     StdioProcess, |   70     StdioProcess, | 
|   71     Step, |   71     Step, | 
|   72     TestDescription; |   72     TestDescription; | 
|   73  |   73  | 
|   74 import 'package:kernel/ast.dart' show |   74 import 'package:kernel/ast.dart' show | 
|   75     Program; |   75     Program; | 
|   76  |   76  | 
|   77 import 'package:package_config/discovery.dart' show |   77 import 'package:package_config/discovery.dart' show | 
|   78     loadPackagesFile; |   78     loadPackagesFile; | 
|   79  |   79  | 
 |   80 import '../environment_variable.dart' show | 
 |   81     EnvironmentVariable; | 
 |   82  | 
|   80 typedef Future<TestContext> TestContextConstructor( |   83 typedef Future<TestContext> TestContextConstructor( | 
|   81     Chain suite, Map<String, String> environment, String sdk, Uri vm, |   84     Chain suite, Map<String, String> environment, Uri sdk, Uri vm, | 
|   82     Uri packages, bool strongMode, DartSdk dartSdk, bool updateExpectations); |   85     Uri packages, bool strongMode, DartSdk dartSdk, bool updateExpectations); | 
|   83  |   86  | 
|   84 Future<bool> fileExists(Uri base, String path) async { |   87 Future<bool> fileExists(Uri base, String path) async { | 
|   85   return await new File.fromUri(base.resolve(path)).exists(); |   88   return await new File.fromUri(base.resolve(path)).exists(); | 
|   86 } |   89 } | 
|   87  |   90  | 
 |   91 final EnvironmentVariable testConfigVariable = new EnvironmentVariable( | 
 |   92     "DART_CONFIGURATION", | 
 |   93     "It should be something like 'ReleaseX64', depending on which" | 
 |   94     " configuration you're testing."); | 
 |   95  | 
 |   96 Future<Uri> computePatchedSdk() async { | 
 |   97   String config = await testConfigVariable.value; | 
 |   98   String path; | 
 |   99   switch (Platform.operatingSystem) { | 
 |  100     case "linux": | 
 |  101       path = "out/$config/patched_sdk"; | 
 |  102       break; | 
 |  103  | 
 |  104     case "macos": | 
 |  105       path = "xcodebuild/$config/patched_sdk"; | 
 |  106       break; | 
 |  107  | 
 |  108     case "windows": | 
 |  109       path = "build/$config/patched_sdk"; | 
 |  110       break; | 
 |  111  | 
 |  112     default: | 
 |  113       throw "Unsupported operating system: '${Platform.operatingSystem}'."; | 
 |  114   } | 
 |  115   Uri sdk = Uri.base.resolve("$path/"); | 
 |  116   const String asyncDart = "lib/async/async.dart"; | 
 |  117   if (!await fileExists(sdk, asyncDart)) { | 
 |  118     throw "Couldn't find '$asyncDart' in '$sdk'."; | 
 |  119   } | 
 |  120   const String asyncSources = "lib/async/async_sources.gypi"; | 
 |  121   if (await fileExists(sdk, asyncSources)) { | 
 |  122     throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK."; | 
 |  123   } | 
 |  124   return sdk; | 
 |  125 } | 
 |  126  | 
 |  127 Uri computeDartVm(Uri patchedSdk) { | 
 |  128   return patchedSdk.resolve(Platform.isWindows ? "../dart.exe" : "../dart"); | 
 |  129 } | 
 |  130  | 
|   88 abstract class TestContext extends ChainContext { |  131 abstract class TestContext extends ChainContext { | 
|   89   final Uri vm; |  132   final Uri vm; | 
|   90  |  133  | 
|   91   final Uri packages; |  134   final Uri packages; | 
|   92  |  135  | 
|   93   final DartOptions options; |  136   final DartOptions options; | 
|   94  |  137  | 
|   95   final DartSdk dartSdk; |  138   final DartSdk dartSdk; | 
|   96  |  139  | 
|   97   TestContext(String sdk, this.vm, Uri packages, bool strongMode, this.dartSdk) |  140   TestContext(Uri sdk, this.vm, Uri packages, bool strongMode, this.dartSdk) | 
|   98       : packages = packages, |  141       : packages = packages, | 
|   99         options = new DartOptions(strongMode: strongMode, sdk: sdk, |  142         options = new DartOptions(strongMode: strongMode, sdk: sdk.toFilePath(), | 
|  100             packagePath: packages.toFilePath()); |  143             packagePath: packages.toFilePath()); | 
|  101  |  144  | 
|  102   Future<DartLoader> createLoader() async { |  145   Future<DartLoader> createLoader() async { | 
|  103     Repository repository = new Repository(); |  146     Repository repository = new Repository(); | 
|  104     return new DartLoader(repository, options, await loadPackagesFile(packages), |  147     return new DartLoader(repository, options, await loadPackagesFile(packages), | 
|  105         ignoreRedirectingFactories: false, dartSdk: dartSdk); |  148         ignoreRedirectingFactories: false, dartSdk: dartSdk); | 
|  106   } |  149   } | 
|  107  |  150  | 
|  108   static Future<TestContext> create(Chain suite, |  151   static Future<TestContext> create(Chain suite, | 
|  109       Map<String, String> environment, |  152       Map<String, String> environment, | 
|  110       TestContextConstructor constructor) async { |  153       TestContextConstructor constructor) async { | 
|  111     const String suggestion = |  154     Uri sdk = await computePatchedSdk(); | 
|  112         "Try checking the value of environment variable 'DART_AOT_SDK', " |  155     Uri vm = computeDartVm(sdk); | 
|  113         "it should point to a patched SDK."; |  | 
|  114     String sdk = await getEnvironmentVariable( |  | 
|  115         "DART_AOT_SDK", Environment.directory, |  | 
|  116         "Please define environment variable 'DART_AOT_SDK' to point to a " |  | 
|  117         "patched SDK.", |  | 
|  118         (String n) => "Couldn't locate '$n'. $suggestion"); |  | 
|  119     Uri sdkUri = Uri.base.resolve("$sdk/"); |  | 
|  120     const String asyncDart = "lib/async/async.dart"; |  | 
|  121     if (!await fileExists(sdkUri, asyncDart)) { |  | 
|  122       throw "Couldn't find '$asyncDart' in '$sdk'. $suggestion"; |  | 
|  123     } |  | 
|  124     const String asyncSources = "lib/async/async_sources.gypi"; |  | 
|  125     if (await fileExists(sdkUri, asyncSources)) { |  | 
|  126       throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK. " |  | 
|  127           "$suggestion"; |  | 
|  128     } |  | 
|  129  |  | 
|  130     String vmPath = await getEnvironmentVariable( |  | 
|  131         "DART_AOT_VM", Environment.file, |  | 
|  132         "Please define environment variable 'DART_AOT_VM' to point to a " |  | 
|  133         "Dart VM that reads .dill files.", |  | 
|  134         (String n) => "Couldn't locate '$n'. Please check the value of " |  | 
|  135             "environment variable 'DART_AOT_VM', it should point to a " |  | 
|  136             "Dart VM that reads .dill files."); |  | 
|  137     Uri vm = Uri.base.resolve(vmPath); |  | 
|  138  |  | 
|  139     Uri packages = Uri.base.resolve(".packages"); |  156     Uri packages = Uri.base.resolve(".packages"); | 
|  140     bool strongMode = false; |  157     bool strongMode = false; | 
|  141     bool updateExpectations = environment["updateExpectations"] != "false"; |  158     bool updateExpectations = environment["updateExpectations"] != "false"; | 
|  142     return constructor(suite, environment, sdk, vm, packages, strongMode, |  159     return constructor(suite, environment, sdk, vm, packages, strongMode, | 
|  143         createDartSdk(sdk, strongMode: strongMode), updateExpectations); |  160         createDartSdk(sdk.toFilePath(), strongMode: strongMode), | 
 |  161         updateExpectations); | 
|  144   } |  162   } | 
|  145 } |  163 } | 
|  146  |  164  | 
|  147 enum Environment { |  | 
|  148   directory, |  | 
|  149   file, |  | 
|  150 } |  | 
|  151  |  | 
|  152 Future<String> getEnvironmentVariable( |  | 
|  153     String name, Environment kind, String undefined, notFound(String n)) async { |  | 
|  154   String result = Platform.environment[name]; |  | 
|  155   if (result == null) { |  | 
|  156     throw undefined; |  | 
|  157   } |  | 
|  158   switch (kind) { |  | 
|  159     case Environment.directory: |  | 
|  160       if (!await new Directory(result).exists()) throw notFound(result); |  | 
|  161       break; |  | 
|  162  |  | 
|  163     case Environment.file: |  | 
|  164       if (!await new File(result).exists()) throw notFound(result); |  | 
|  165       break; |  | 
|  166   } |  | 
|  167   return result; |  | 
|  168 } |  | 
|  169  |  | 
|  170 class Kernel extends Step<TestDescription, Program, TestContext> { |  165 class Kernel extends Step<TestDescription, Program, TestContext> { | 
|  171   const Kernel(); |  166   const Kernel(); | 
|  172  |  167  | 
|  173   String get name => "kernel"; |  168   String get name => "kernel"; | 
|  174  |  169  | 
|  175   Future<Result<Program>> run( |  170   Future<Result<Program>> run( | 
|  176       TestDescription description, TestContext testContext) async { |  171       TestDescription description, TestContext testContext) async { | 
|  177     try { |  172     try { | 
|  178       DartLoader loader = await testContext.createLoader(); |  173       DartLoader loader = await testContext.createLoader(); | 
|  179       Target target = getTarget( |  174       Target target = getTarget( | 
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  386  |  381  | 
|  387 Future openWrite(Uri uri, f(IOSink sink)) async { |  382 Future openWrite(Uri uri, f(IOSink sink)) async { | 
|  388   IOSink sink = new File.fromUri(uri).openWrite(); |  383   IOSink sink = new File.fromUri(uri).openWrite(); | 
|  389   try { |  384   try { | 
|  390     await f(sink); |  385     await f(sink); | 
|  391   } finally { |  386   } finally { | 
|  392     await sink.close(); |  387     await sink.close(); | 
|  393   } |  388   } | 
|  394   print("Wrote $uri"); |  389   print("Wrote $uri"); | 
|  395 } |  390 } | 
| OLD | NEW |