Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: pkg/kernel/test/closures_initializers/suite.dart

Issue 2944433002: Add tests for handling closures in LocalInitializers (Closed)
Patch Set: Merge in latest changes in master (e340ee517a) Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
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.
4
5 library test.kernel.closures.suite;
6
7 import 'dart:async' show Future;
8
9 import 'package:front_end/physical_file_system.dart' show PhysicalFileSystem;
10
11 import 'package:kernel/core_types.dart' show CoreTypes;
12
13 import 'package:testing/testing.dart'
14 show Chain, ChainContext, Result, Step, TestDescription, runMe;
15
16 import 'package:front_end/src/fasta/testing/patched_sdk_location.dart'
17 show computePatchedSdk;
18
19 import 'package:kernel/ast.dart' show Program, Library;
20
21 import 'package:kernel/transformations/argument_extraction_for_redirecting.dart'
22 as argument_extraction;
23
24 import 'package:kernel/transformations/closure_conversion.dart'
25 as closure_conversion;
26
27 import 'package:front_end/src/fasta/testing/kernel_chain.dart'
28 show Print, MatchExpectation, WriteDill, ReadDill, Verify;
29
30 import 'package:front_end/src/fasta/ticker.dart' show Ticker;
31
32 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget;
33
34 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
35 show KernelTarget;
36
37 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri;
38
39 import 'package:front_end/src/fasta/errors.dart' show InputError;
40
41 import 'package:front_end/src/fasta/testing/patched_sdk_location.dart';
42
43 import 'package:kernel/kernel.dart' show loadProgramFromBinary;
44
45 import 'package:kernel/target/targets.dart' show TargetFlags;
46
47 import 'package:kernel/target/vm_fasta.dart' show VmFastaTarget;
48
49 const String STRONG_MODE = " strong mode ";
50
51 class ClosureConversionContext extends ChainContext {
52 final bool strongMode;
53
54 final TranslateUri uriTranslator;
55
56 final List<Step> steps;
57
58 ClosureConversionContext(
59 this.strongMode, bool updateExpectations, this.uriTranslator)
60 : steps = <Step>[
61 const FastaCompile(),
62 const Print(),
63 const Verify(true),
64 const ArgumentExtraction(),
65 const Print(),
66 const Verify(true),
67 const ClosureConversion(),
68 const Print(),
69 const Verify(true),
70 new MatchExpectation(".expect",
71 updateExpectations: updateExpectations),
72 const WriteDill(),
73 const ReadDill(),
74 // TODO(29143): add `Run` step when Vectors are added to VM.
75 ];
76
77 Future<Program> loadPlatform() async {
78 Uri sdk = await computePatchedSdk();
79 return loadProgramFromBinary(sdk.resolve('platform.dill').toFilePath());
80 }
81
82 static Future<ClosureConversionContext> create(
83 Chain suite, Map<String, String> environment) async {
84 Uri sdk = await computePatchedSdk();
85 Uri packages = Uri.base.resolve(".packages");
86 bool strongMode = environment.containsKey(STRONG_MODE);
87 bool updateExpectations = environment["updateExpectations"] == "true";
88 TranslateUri uriTranslator = await TranslateUri
89 .parse(PhysicalFileSystem.instance, sdk, packages: packages);
90 return new ClosureConversionContext(
91 strongMode, updateExpectations, uriTranslator);
92 }
93 }
94
95 Future<ClosureConversionContext> createContext(
96 Chain suite, Map<String, String> environment) async {
97 environment["updateExpectations"] =
98 const String.fromEnvironment("updateExpectations");
99 return ClosureConversionContext.create(suite, environment);
100 }
101
102 class FastaCompile
103 extends Step<TestDescription, Program, ClosureConversionContext> {
104 const FastaCompile();
105
106 String get name => "fasta compilation";
107
108 Future<Result<Program>> run(
109 TestDescription description, ClosureConversionContext context) async {
110 Program platform = await context.loadPlatform();
111 Ticker ticker = new Ticker();
112 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator,
113 new VmFastaTarget(new TargetFlags(strongMode: context.strongMode)));
114 platform.unbindCanonicalNames();
115 dillTarget.loader.appendLibraries(platform);
116 KernelTarget sourceTarget = new KernelTarget(
117 PhysicalFileSystem.instance, dillTarget, context.uriTranslator);
118
119 Program p;
120 try {
121 sourceTarget.read(description.uri);
122 await dillTarget.buildOutlines();
123 await sourceTarget.buildOutlines();
124 p = await sourceTarget.buildProgram();
125 } on InputError catch (e, s) {
126 return fail(null, e.error, s);
127 }
128 return pass(p);
129 }
130 }
131
132 class ArgumentExtraction
133 extends Step<Program, Program, ClosureConversionContext> {
134 const ArgumentExtraction();
135
136 String get name => "argument extraction";
137
138 Future<Result<Program>> run(
139 Program program, ClosureConversionContext context) async {
140 try {
141 CoreTypes coreTypes = new CoreTypes(program);
142 Library library = program.libraries
143 .firstWhere((Library library) => library.importUri.scheme != "dart");
144 argument_extraction.transformLibraries(coreTypes, <Library>[library]);
145 return pass(program);
146 } catch (e, s) {
147 return crash(e, s);
148 }
149 }
150 }
151
152 class ClosureConversion
153 extends Step<Program, Program, ClosureConversionContext> {
154 const ClosureConversion();
155
156 String get name => "closure conversion";
157
158 Future<Result<Program>> run(
159 Program program, ClosureConversionContext testContext) async {
160 try {
161 CoreTypes coreTypes = new CoreTypes(program);
162 Library library = program.libraries
163 .firstWhere((Library library) => library.importUri.scheme != "dart");
164 closure_conversion.transformLibraries(coreTypes, <Library>[library]);
165 return pass(program);
166 } catch (e, s) {
167 return crash(e, s);
168 }
169 }
170 }
171
172 main(List<String> arguments) => runMe(arguments, createContext, "testing.json");
OLDNEW
« no previous file with comments | « pkg/kernel/test/closures_initializers/closures_initializers.status ('k') | pkg/kernel/test/closures_initializers/testing.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698