| 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 library fasta.testing.suite; | 5 library fasta.testing.suite; |
| 6 | 6 |
| 7 import 'dart:async' show Future; | 7 import 'dart:async' show Future; |
| 8 | 8 |
| 9 import 'dart:io' show File; | 9 import 'dart:io' show File; |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 | 37 |
| 38 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; | 38 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; |
| 39 | 39 |
| 40 import 'package:analyzer/src/fasta/analyzer_target.dart' show AnalyzerTarget; | 40 import 'package:analyzer/src/fasta/analyzer_target.dart' show AnalyzerTarget; |
| 41 | 41 |
| 42 import 'package:front_end/src/fasta/kernel/kernel_target.dart' | 42 import 'package:front_end/src/fasta/kernel/kernel_target.dart' |
| 43 show KernelTarget; | 43 show KernelTarget; |
| 44 | 44 |
| 45 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; | 45 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; |
| 46 | 46 |
| 47 import 'package:kernel/kernel.dart' show loadProgramFromBytes; | 47 import 'package:kernel/kernel.dart' show loadProgramFromBinary; |
| 48 | 48 |
| 49 export 'package:testing/testing.dart' show Chain, runMe; | 49 export 'package:testing/testing.dart' show Chain, runMe; |
| 50 | 50 |
| 51 const String STRONG_MODE = " strong mode "; | 51 const String STRONG_MODE = " strong mode "; |
| 52 | 52 |
| 53 const String ENABLE_FULL_COMPILE = " full compile "; | 53 const String ENABLE_FULL_COMPILE = " full compile "; |
| 54 | 54 |
| 55 const String AST_KIND_INDEX = " AST kind index "; | 55 const String AST_KIND_INDEX = " AST kind index "; |
| 56 | 56 |
| 57 const String EXPECTATIONS = ''' | 57 const String EXPECTATIONS = ''' |
| (...skipping 20 matching lines...) Expand all Loading... |
| 78 Kernel, | 78 Kernel, |
| 79 } | 79 } |
| 80 | 80 |
| 81 class FastaContext extends ChainContext { | 81 class FastaContext extends ChainContext { |
| 82 final TranslateUri uriTranslator; | 82 final TranslateUri uriTranslator; |
| 83 final List<Step> steps; | 83 final List<Step> steps; |
| 84 final Uri vm; | 84 final Uri vm; |
| 85 Uri sdk; | 85 Uri sdk; |
| 86 Uri platformUri; | 86 Uri platformUri; |
| 87 Uri outlineUri; | 87 Uri outlineUri; |
| 88 List<int> outlineBytes; | |
| 89 | 88 |
| 90 final ExpectationSet expectationSet = | 89 final ExpectationSet expectationSet = |
| 91 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); | 90 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); |
| 92 | 91 |
| 92 Future<Program> outline; |
| 93 |
| 93 FastaContext( | 94 FastaContext( |
| 94 this.vm, | 95 this.vm, |
| 95 bool strongMode, | 96 bool strongMode, |
| 96 bool updateExpectations, | 97 bool updateExpectations, |
| 97 bool updateComments, | 98 bool updateComments, |
| 98 bool skipVm, | 99 bool skipVm, |
| 99 this.uriTranslator, | 100 this.uriTranslator, |
| 100 bool fullCompile, | 101 bool fullCompile, |
| 101 AstKind astKind) | 102 AstKind astKind) |
| 102 : steps = <Step>[ | 103 : steps = <Step>[ |
| (...skipping 14 matching lines...) Expand all Loading... |
| 117 } | 118 } |
| 118 | 119 |
| 119 Future ensurePlatformUris() async { | 120 Future ensurePlatformUris() async { |
| 120 if (sdk == null) { | 121 if (sdk == null) { |
| 121 sdk = await computePatchedSdk(); | 122 sdk = await computePatchedSdk(); |
| 122 platformUri = sdk.resolve('platform.dill'); | 123 platformUri = sdk.resolve('platform.dill'); |
| 123 outlineUri = sdk.resolve('outline.dill'); | 124 outlineUri = sdk.resolve('outline.dill'); |
| 124 } | 125 } |
| 125 } | 126 } |
| 126 | 127 |
| 127 Future<Program> loadPlatformOutline() async { | 128 Future<Program> loadPlatformOutline() { |
| 128 if (outlineBytes == null) { | 129 return outline ??= new Future<Program>(() async { |
| 129 await ensurePlatformUris(); | 130 await ensurePlatformUris(); |
| 130 outlineBytes = new File.fromUri(outlineUri).readAsBytesSync(); | 131 return loadProgramFromBinary(outlineUri.toFilePath()); |
| 131 } | 132 }); |
| 132 // Note: we rebuild the platform outline on every test because the compiler | |
| 133 // currently mutates the in-memory representation of the program without | |
| 134 // cloning it. | |
| 135 // TODO(sigmund): investigate alternatives to this approach. | |
| 136 return loadProgramFromBytes(outlineBytes); | |
| 137 } | 133 } |
| 138 | 134 |
| 139 static Future<FastaContext> create( | 135 static Future<FastaContext> create( |
| 140 Chain suite, Map<String, String> environment) async { | 136 Chain suite, Map<String, String> environment) async { |
| 141 Uri sdk = await computePatchedSdk(); | 137 Uri sdk = await computePatchedSdk(); |
| 142 Uri vm = computeDartVm(sdk); | 138 Uri vm = computeDartVm(sdk); |
| 143 Uri packages = Uri.base.resolve(".packages"); | 139 Uri packages = Uri.base.resolve(".packages"); |
| 144 TranslateUri uriTranslator = | 140 TranslateUri uriTranslator = |
| 145 await TranslateUri.parse(PhysicalFileSystem.instance, packages); | 141 await TranslateUri.parse(PhysicalFileSystem.instance, packages); |
| 146 bool strongMode = environment.containsKey(STRONG_MODE); | 142 bool strongMode = environment.containsKey(STRONG_MODE); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 sourceTarget.read(description.uri); | 218 sourceTarget.read(description.uri); |
| 223 await dillTarget.buildOutlines(); | 219 await dillTarget.buildOutlines(); |
| 224 ValidatingInstrumentation instrumentation; | 220 ValidatingInstrumentation instrumentation; |
| 225 if (strongMode) { | 221 if (strongMode) { |
| 226 instrumentation = new ValidatingInstrumentation(); | 222 instrumentation = new ValidatingInstrumentation(); |
| 227 await instrumentation.loadExpectations(description.uri); | 223 await instrumentation.loadExpectations(description.uri); |
| 228 sourceTarget.loader.instrumentation = instrumentation; | 224 sourceTarget.loader.instrumentation = instrumentation; |
| 229 } | 225 } |
| 230 p = await sourceTarget.buildOutlines(); | 226 p = await sourceTarget.buildOutlines(); |
| 231 if (fullCompile) { | 227 if (fullCompile) { |
| 232 p = await sourceTarget.buildProgram(trimDependencies: true); | 228 p = await sourceTarget.buildProgram(); |
| 233 instrumentation?.finish(); | 229 instrumentation?.finish(); |
| 234 if (instrumentation != null && instrumentation.hasProblems) { | 230 if (instrumentation != null && instrumentation.hasProblems) { |
| 235 if (updateComments) { | 231 if (updateComments) { |
| 236 await instrumentation.fixSource(description.uri); | 232 await instrumentation.fixSource(description.uri); |
| 237 } else { | 233 } else { |
| 238 return fail(null, instrumentation.problemsAsString); | 234 return fail(null, instrumentation.problemsAsString); |
| 239 } | 235 } |
| 240 } | 236 } |
| 241 } | 237 } |
| 242 } on InputError catch (e, s) { | 238 } on InputError catch (e, s) { |
| 243 return fail(null, e.error, s); | 239 return fail(null, e.error, s); |
| 244 } | 240 } |
| 245 return pass(p); | 241 return pass(p); |
| 246 } | 242 } |
| 247 } | 243 } |
| OLD | NEW |