| 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 loadProgramFromBinary; | 47 import 'package:kernel/kernel.dart' show loadProgramFromBytes; |
| 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; |
| 88 | 89 |
| 89 final ExpectationSet expectationSet = | 90 final ExpectationSet expectationSet = |
| 90 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); | 91 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); |
| 91 | 92 |
| 92 Future<Program> outline; | |
| 93 | |
| 94 FastaContext( | 93 FastaContext( |
| 95 this.vm, | 94 this.vm, |
| 96 bool strongMode, | 95 bool strongMode, |
| 97 bool updateExpectations, | 96 bool updateExpectations, |
| 98 bool updateComments, | 97 bool updateComments, |
| 99 bool skipVm, | 98 bool skipVm, |
| 100 this.uriTranslator, | 99 this.uriTranslator, |
| 101 bool fullCompile, | 100 bool fullCompile, |
| 102 AstKind astKind) | 101 AstKind astKind) |
| 103 : steps = <Step>[ | 102 : steps = <Step>[ |
| (...skipping 14 matching lines...) Expand all Loading... |
| 118 } | 117 } |
| 119 | 118 |
| 120 Future ensurePlatformUris() async { | 119 Future ensurePlatformUris() async { |
| 121 if (sdk == null) { | 120 if (sdk == null) { |
| 122 sdk = await computePatchedSdk(); | 121 sdk = await computePatchedSdk(); |
| 123 platformUri = sdk.resolve('platform.dill'); | 122 platformUri = sdk.resolve('platform.dill'); |
| 124 outlineUri = sdk.resolve('outline.dill'); | 123 outlineUri = sdk.resolve('outline.dill'); |
| 125 } | 124 } |
| 126 } | 125 } |
| 127 | 126 |
| 128 Future<Program> loadPlatformOutline() { | 127 Future<Program> loadPlatformOutline() async { |
| 129 return outline ??= new Future<Program>(() async { | 128 if (outlineBytes == null) { |
| 130 await ensurePlatformUris(); | 129 await ensurePlatformUris(); |
| 131 return loadProgramFromBinary(outlineUri.toFilePath()); | 130 outlineBytes = new File.fromUri(outlineUri).readAsBytesSync(); |
| 132 }); | 131 } |
| 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); |
| 133 } | 137 } |
| 134 | 138 |
| 135 static Future<FastaContext> create( | 139 static Future<FastaContext> create( |
| 136 Chain suite, Map<String, String> environment) async { | 140 Chain suite, Map<String, String> environment) async { |
| 137 Uri sdk = await computePatchedSdk(); | 141 Uri sdk = await computePatchedSdk(); |
| 138 Uri vm = computeDartVm(sdk); | 142 Uri vm = computeDartVm(sdk); |
| 139 Uri packages = Uri.base.resolve(".packages"); | 143 Uri packages = Uri.base.resolve(".packages"); |
| 140 TranslateUri uriTranslator = | 144 TranslateUri uriTranslator = |
| 141 await TranslateUri.parse(PhysicalFileSystem.instance, packages); | 145 await TranslateUri.parse(PhysicalFileSystem.instance, packages); |
| 142 bool strongMode = environment.containsKey(STRONG_MODE); | 146 bool strongMode = environment.containsKey(STRONG_MODE); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 sourceTarget.read(description.uri); | 222 sourceTarget.read(description.uri); |
| 219 await dillTarget.buildOutlines(); | 223 await dillTarget.buildOutlines(); |
| 220 ValidatingInstrumentation instrumentation; | 224 ValidatingInstrumentation instrumentation; |
| 221 if (strongMode) { | 225 if (strongMode) { |
| 222 instrumentation = new ValidatingInstrumentation(); | 226 instrumentation = new ValidatingInstrumentation(); |
| 223 await instrumentation.loadExpectations(description.uri); | 227 await instrumentation.loadExpectations(description.uri); |
| 224 sourceTarget.loader.instrumentation = instrumentation; | 228 sourceTarget.loader.instrumentation = instrumentation; |
| 225 } | 229 } |
| 226 p = await sourceTarget.buildOutlines(); | 230 p = await sourceTarget.buildOutlines(); |
| 227 if (fullCompile) { | 231 if (fullCompile) { |
| 228 p = await sourceTarget.buildProgram(); | 232 p = await sourceTarget.buildProgram(trimDependencies: true); |
| 229 instrumentation?.finish(); | 233 instrumentation?.finish(); |
| 230 if (instrumentation != null && instrumentation.hasProblems) { | 234 if (instrumentation != null && instrumentation.hasProblems) { |
| 231 if (updateComments) { | 235 if (updateComments) { |
| 232 await instrumentation.fixSource(description.uri); | 236 await instrumentation.fixSource(description.uri); |
| 233 } else { | 237 } else { |
| 234 return fail(null, instrumentation.problemsAsString); | 238 return fail(null, instrumentation.problemsAsString); |
| 235 } | 239 } |
| 236 } | 240 } |
| 237 } | 241 } |
| 238 } on InputError catch (e, s) { | 242 } on InputError catch (e, s) { |
| 239 return fail(null, e.error, s); | 243 return fail(null, e.error, s); |
| 240 } | 244 } |
| 241 return pass(p); | 245 return pass(p); |
| 242 } | 246 } |
| 243 } | 247 } |
| OLD | NEW |