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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 } | 91 } |
92 | 92 |
93 class FastaContext extends ChainContext { | 93 class FastaContext extends ChainContext { |
94 final TranslateUri uriTranslator; | 94 final TranslateUri uriTranslator; |
95 final List<Step> steps; | 95 final List<Step> steps; |
96 final Uri vm; | 96 final Uri vm; |
97 final Map<Program, KernelTarget> programToTarget = <Program, KernelTarget>{}; | 97 final Map<Program, KernelTarget> programToTarget = <Program, KernelTarget>{}; |
98 Uri sdk; | 98 Uri sdk; |
99 Uri platformUri; | 99 Uri platformUri; |
100 Uri outlineUri; | 100 Uri outlineUri; |
101 List<int> outlineBytes; | 101 Program outline; |
102 | 102 |
103 final ExpectationSet expectationSet = | 103 final ExpectationSet expectationSet = |
104 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); | 104 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); |
105 | 105 |
106 FastaContext( | 106 FastaContext( |
107 this.vm, | 107 this.vm, |
108 bool strongMode, | 108 bool strongMode, |
109 bool updateExpectations, | 109 bool updateExpectations, |
110 bool updateComments, | 110 bool updateComments, |
111 bool skipVm, | 111 bool skipVm, |
(...skipping 20 matching lines...) Expand all Loading... |
132 | 132 |
133 Future ensurePlatformUris() async { | 133 Future ensurePlatformUris() async { |
134 if (sdk == null) { | 134 if (sdk == null) { |
135 sdk = await computePatchedSdk(); | 135 sdk = await computePatchedSdk(); |
136 platformUri = sdk.resolve('platform.dill'); | 136 platformUri = sdk.resolve('platform.dill'); |
137 outlineUri = sdk.resolve('outline.dill'); | 137 outlineUri = sdk.resolve('outline.dill'); |
138 } | 138 } |
139 } | 139 } |
140 | 140 |
141 Future<Program> loadPlatformOutline() async { | 141 Future<Program> loadPlatformOutline() async { |
142 if (outlineBytes == null) { | 142 if (outline == null) { |
143 await ensurePlatformUris(); | 143 await ensurePlatformUris(); |
144 outlineBytes = new File.fromUri(outlineUri).readAsBytesSync(); | 144 outline = |
| 145 loadProgramFromBytes(new File.fromUri(outlineUri).readAsBytesSync()); |
145 } | 146 } |
146 // Note: we rebuild the platform outline on every test because the compiler | 147 return outline; |
147 // currently mutates the in-memory representation of the program without | |
148 // cloning it. | |
149 // TODO(sigmund): investigate alternatives to this approach. | |
150 return loadProgramFromBytes(outlineBytes); | |
151 } | 148 } |
152 | 149 |
153 static Future<FastaContext> create( | 150 static Future<FastaContext> create( |
154 Chain suite, Map<String, String> environment) async { | 151 Chain suite, Map<String, String> environment) async { |
155 Uri sdk = await computePatchedSdk(); | 152 Uri sdk = await computePatchedSdk(); |
156 Uri vm = computeDartVm(sdk); | 153 Uri vm = computeDartVm(sdk); |
157 Uri packages = Uri.base.resolve(".packages"); | 154 Uri packages = Uri.base.resolve(".packages"); |
158 TranslateUri uriTranslator = await TranslateUri | 155 TranslateUri uriTranslator = await TranslateUri |
159 .parse(PhysicalFileSystem.instance, sdk, packages: packages); | 156 .parse(PhysicalFileSystem.instance, sdk, packages: packages); |
160 bool strongMode = environment.containsKey(STRONG_MODE); | 157 bool strongMode = environment.containsKey(STRONG_MODE); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 sourceTarget.read(description.uri); | 249 sourceTarget.read(description.uri); |
253 await dillTarget.buildOutlines(); | 250 await dillTarget.buildOutlines(); |
254 ValidatingInstrumentation instrumentation; | 251 ValidatingInstrumentation instrumentation; |
255 if (strongMode) { | 252 if (strongMode) { |
256 instrumentation = new ValidatingInstrumentation(); | 253 instrumentation = new ValidatingInstrumentation(); |
257 await instrumentation.loadExpectations(description.uri); | 254 await instrumentation.loadExpectations(description.uri); |
258 sourceTarget.loader.instrumentation = instrumentation; | 255 sourceTarget.loader.instrumentation = instrumentation; |
259 } | 256 } |
260 p = await sourceTarget.buildOutlines(); | 257 p = await sourceTarget.buildOutlines(); |
261 if (fullCompile) { | 258 if (fullCompile) { |
262 p = await sourceTarget.buildProgram(trimDependencies: true); | 259 p = await sourceTarget.buildProgram(); |
263 instrumentation?.finish(); | 260 instrumentation?.finish(); |
264 if (instrumentation != null && instrumentation.hasProblems) { | 261 if (instrumentation != null && instrumentation.hasProblems) { |
265 if (updateComments) { | 262 if (updateComments) { |
266 await instrumentation.fixSource(description.uri, false); | 263 await instrumentation.fixSource(description.uri, false); |
267 } else { | 264 } else { |
268 return fail(null, instrumentation.problemsAsString); | 265 return fail(null, instrumentation.problemsAsString); |
269 } | 266 } |
270 } | 267 } |
271 } | 268 } |
272 } on InputError catch (e, s) { | 269 } on InputError catch (e, s) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 } | 313 } |
317 } | 314 } |
318 | 315 |
319 void performGlobalTransformations(CoreTypes coreTypes, Program program, | 316 void performGlobalTransformations(CoreTypes coreTypes, Program program, |
320 {void logger(String msg)}) { | 317 {void logger(String msg)}) { |
321 if (enabled) { | 318 if (enabled) { |
322 super.performGlobalTransformations(coreTypes, program, logger: logger); | 319 super.performGlobalTransformations(coreTypes, program, logger: logger); |
323 } | 320 } |
324 } | 321 } |
325 } | 322 } |
OLD | NEW |