| 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 |
| 11 Future; | 11 Future; |
| 12 | 12 |
| 13 import 'dart:io' show | 13 import 'dart:io' show |
| 14 Directory, | 14 Directory, |
| 15 File, | 15 File, |
| 16 IOSink, | 16 IOSink, |
| 17 Platform; | 17 Platform; |
| 18 | 18 |
| 19 import 'dart:typed_data' show | 19 import 'dart:typed_data' show |
| 20 Uint8List; | 20 Uint8List; |
| 21 | 21 |
| 22 import 'package:kernel/kernel.dart' show | 22 import 'package:kernel/kernel.dart' show |
| 23 Repository, | |
| 24 loadProgramFromBinary; | 23 loadProgramFromBinary; |
| 25 | 24 |
| 26 import 'package:kernel/text/ast_to_text.dart' show | 25 import 'package:kernel/text/ast_to_text.dart' show |
| 27 Printer; | 26 Printer; |
| 28 | 27 |
| 29 import 'package:testing/testing.dart' show | 28 import 'package:testing/testing.dart' show |
| 30 Result, | 29 Result, |
| 31 StdioProcess, | 30 StdioProcess, |
| 32 Step; | 31 Step; |
| 33 | 32 |
| 34 import 'package:kernel/ast.dart' show | 33 import 'package:kernel/ast.dart' show |
| 35 Library, | 34 Library, |
| 36 Program; | 35 Program; |
| 37 | 36 |
| 38 import 'package:kernel/verifier.dart' show | 37 import 'package:kernel/verifier.dart' show |
| 39 VerifyingVisitor; | 38 VerifyingVisitor; |
| 40 | 39 |
| 41 import 'package:kernel/binary/ast_to_binary.dart' show | 40 import 'package:kernel/binary/ast_to_binary.dart' show |
| 42 BinaryPrinter; | 41 BinaryPrinter; |
| 43 | 42 |
| 44 import 'package:kernel/binary/ast_from_binary.dart' show | 43 import 'package:kernel/binary/ast_from_binary.dart' show |
| 45 BinaryBuilder; | 44 BinaryBuilder; |
| 46 | 45 |
| 47 import 'package:kernel/binary/loader.dart' show | |
| 48 BinaryLoader; | |
| 49 | |
| 50 import 'package:analyzer/src/generated/sdk.dart' show | 46 import 'package:analyzer/src/generated/sdk.dart' show |
| 51 DartSdk; | 47 DartSdk; |
| 52 | 48 |
| 53 import 'package:kernel/analyzer/loader.dart' show | 49 import 'package:kernel/analyzer/loader.dart' show |
| 54 DartLoader, | 50 DartLoader, |
| 55 DartOptions, | 51 DartOptions, |
| 56 createDartSdk; | 52 createDartSdk; |
| 57 | 53 |
| 58 import 'package:kernel/target/targets.dart' show | 54 import 'package:kernel/target/targets.dart' show |
| 59 Target, | 55 Target, |
| 60 TargetFlags, | 56 TargetFlags, |
| 61 getTarget; | 57 getTarget; |
| 62 | 58 |
| 63 import 'package:kernel/repository.dart' show | |
| 64 Repository; | |
| 65 | |
| 66 import 'package:testing/testing.dart' show | 59 import 'package:testing/testing.dart' show |
| 67 Chain, | 60 Chain, |
| 68 ChainContext, | 61 ChainContext, |
| 69 Result, | 62 Result, |
| 70 StdioProcess, | 63 StdioProcess, |
| 71 Step, | 64 Step, |
| 72 TestDescription; | 65 TestDescription; |
| 73 | 66 |
| 74 import 'package:kernel/ast.dart' show | 67 import 'package:kernel/ast.dart' show |
| 75 Program; | 68 Program; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 final DartOptions options; | 129 final DartOptions options; |
| 137 | 130 |
| 138 final DartSdk dartSdk; | 131 final DartSdk dartSdk; |
| 139 | 132 |
| 140 TestContext(Uri sdk, this.vm, Uri packages, bool strongMode, this.dartSdk) | 133 TestContext(Uri sdk, this.vm, Uri packages, bool strongMode, this.dartSdk) |
| 141 : packages = packages, | 134 : packages = packages, |
| 142 options = new DartOptions(strongMode: strongMode, sdk: sdk.toFilePath(), | 135 options = new DartOptions(strongMode: strongMode, sdk: sdk.toFilePath(), |
| 143 packagePath: packages.toFilePath()); | 136 packagePath: packages.toFilePath()); |
| 144 | 137 |
| 145 Future<DartLoader> createLoader() async { | 138 Future<DartLoader> createLoader() async { |
| 146 Repository repository = new Repository(); | 139 Program program = new Program(); |
| 147 return new DartLoader(repository, options, await loadPackagesFile(packages), | 140 return new DartLoader(program, options, await loadPackagesFile(packages), |
| 148 ignoreRedirectingFactories: false, dartSdk: dartSdk); | 141 ignoreRedirectingFactories: false, dartSdk: dartSdk); |
| 149 } | 142 } |
| 150 | 143 |
| 151 static Future<TestContext> create(Chain suite, | 144 static Future<TestContext> create(Chain suite, |
| 152 Map<String, String> environment, | 145 Map<String, String> environment, |
| 153 TestContextConstructor constructor) async { | 146 TestContextConstructor constructor) async { |
| 154 Uri sdk = await computePatchedSdk(); | 147 Uri sdk = await computePatchedSdk(); |
| 155 Uri vm = computeDartVm(sdk); | 148 Uri vm = computeDartVm(sdk); |
| 156 Uri packages = Uri.base.resolve(".packages"); | 149 Uri packages = Uri.base.resolve(".packages"); |
| 157 bool strongMode = false; | 150 bool strongMode = false; |
| 158 bool updateExpectations = environment["updateExpectations"] == "true"; | 151 bool updateExpectations = environment["updateExpectations"] == "true"; |
| 159 return constructor(suite, environment, sdk, vm, packages, strongMode, | 152 return constructor(suite, environment, sdk, vm, packages, strongMode, |
| 160 createDartSdk(sdk.toFilePath(), strongMode: strongMode), | 153 createDartSdk(sdk.toFilePath(), strongMode: strongMode), |
| 161 updateExpectations); | 154 updateExpectations); |
| 162 } | 155 } |
| 163 } | 156 } |
| 164 | 157 |
| 165 class Kernel extends Step<TestDescription, Program, TestContext> { | 158 class Kernel extends Step<TestDescription, Program, TestContext> { |
| 166 const Kernel(); | 159 const Kernel(); |
| 167 | 160 |
| 168 String get name => "kernel"; | 161 String get name => "kernel"; |
| 169 | 162 |
| 170 Future<Result<Program>> run( | 163 Future<Result<Program>> run( |
| 171 TestDescription description, TestContext testContext) async { | 164 TestDescription description, TestContext testContext) async { |
| 172 try { | 165 try { |
| 173 DartLoader loader = await testContext.createLoader(); | 166 DartLoader loader = await testContext.createLoader(); |
| 174 Target target = getTarget( | 167 Target target = getTarget( |
| 175 "vm", new TargetFlags(strongMode: testContext.options.strongMode)); | 168 "vm", new TargetFlags(strongMode: testContext.options.strongMode)); |
| 176 Program program = | 169 loader.loadProgram(description.uri, target: target); |
| 177 loader.loadProgram(description.uri, target: target); | 170 Program program = loader.program; |
| 178 for (var error in loader.errors) { | 171 for (var error in loader.errors) { |
| 179 return fail(program, "$error"); | 172 return fail(program, "$error"); |
| 180 } | 173 } |
| 181 target.performModularTransformations(program); | 174 target.performModularTransformations(program); |
| 182 target.performGlobalTransformations(program); | 175 target.performGlobalTransformations(program); |
| 183 return pass(program); | 176 return pass(program); |
| 184 } catch (e, s) { | 177 } catch (e, s) { |
| 185 return crash(e, s); | 178 return crash(e, s); |
| 186 } | 179 } |
| 187 } | 180 } |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 | 266 |
| 274 String get name => "write .dill"; | 267 String get name => "write .dill"; |
| 275 | 268 |
| 276 Future<Result<Uri>> run(Program program, _) async { | 269 Future<Result<Uri>> run(Program program, _) async { |
| 277 Directory tmp = await Directory.systemTemp.createTemp(); | 270 Directory tmp = await Directory.systemTemp.createTemp(); |
| 278 Uri uri = tmp.uri.resolve("generated.dill"); | 271 Uri uri = tmp.uri.resolve("generated.dill"); |
| 279 File generated = new File.fromUri(uri); | 272 File generated = new File.fromUri(uri); |
| 280 IOSink sink = generated.openWrite(); | 273 IOSink sink = generated.openWrite(); |
| 281 try { | 274 try { |
| 282 new BinaryPrinter(sink).writeProgramFile(program); | 275 new BinaryPrinter(sink).writeProgramFile(program); |
| 276 program.unbindCanonicalNames(); |
| 283 } catch (e, s) { | 277 } catch (e, s) { |
| 284 return fail(uri, e, s); | 278 return fail(uri, e, s); |
| 285 } finally { | 279 } finally { |
| 286 print("Wrote `${generated.path}`"); | 280 print("Wrote `${generated.path}`"); |
| 287 await sink.close(); | 281 await sink.close(); |
| 288 } | 282 } |
| 289 return pass(uri); | 283 return pass(uri); |
| 290 } | 284 } |
| 291 } | 285 } |
| 292 | 286 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 306 } | 300 } |
| 307 | 301 |
| 308 class Copy extends Step<Program, Program, TestContext> { | 302 class Copy extends Step<Program, Program, TestContext> { |
| 309 const Copy(); | 303 const Copy(); |
| 310 | 304 |
| 311 String get name => "copy program"; | 305 String get name => "copy program"; |
| 312 | 306 |
| 313 Future<Result<Program>> run(Program program, _) async { | 307 Future<Result<Program>> run(Program program, _) async { |
| 314 BytesCollector sink = new BytesCollector(); | 308 BytesCollector sink = new BytesCollector(); |
| 315 new BinaryPrinter(sink).writeProgramFile(program); | 309 new BinaryPrinter(sink).writeProgramFile(program); |
| 310 program.unbindCanonicalNames(); |
| 316 Uint8List bytes = sink.collect(); | 311 Uint8List bytes = sink.collect(); |
| 317 BinaryLoader loader = new BinaryLoader(new Repository()); | 312 new BinaryBuilder(bytes).readProgram(program); |
| 318 return pass(new BinaryBuilder(loader, bytes).readProgramFile()); | 313 return pass(program); |
| 319 } | 314 } |
| 320 } | 315 } |
| 321 | 316 |
| 322 class Run extends Step<Uri, int, TestContext> { | 317 class Run extends Step<Uri, int, TestContext> { |
| 323 const Run(); | 318 const Run(); |
| 324 | 319 |
| 325 String get name => "run"; | 320 String get name => "run"; |
| 326 | 321 |
| 327 bool get isAsync => true; | 322 bool get isAsync => true; |
| 328 | 323 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 | 370 |
| 376 Future openWrite(Uri uri, f(IOSink sink)) async { | 371 Future openWrite(Uri uri, f(IOSink sink)) async { |
| 377 IOSink sink = new File.fromUri(uri).openWrite(); | 372 IOSink sink = new File.fromUri(uri).openWrite(); |
| 378 try { | 373 try { |
| 379 await f(sink); | 374 await f(sink); |
| 380 } finally { | 375 } finally { |
| 381 await sink.close(); | 376 await sink.close(); |
| 382 } | 377 } |
| 383 print("Wrote $uri"); | 378 print("Wrote $uri"); |
| 384 } | 379 } |
| OLD | NEW |