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

Side by Side Diff: pkg/front_end/test/fasta/testing/suite.dart

Issue 2828583003: remove dependencies to analyzer from lib/src/fasta (Closed)
Patch Set: rebase Created 3 years, 8 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
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;
10
9 import 'dart:convert' show JSON; 11 import 'dart:convert' show JSON;
10 12
11 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
12
13 import 'package:front_end/src/fasta/testing/validating_instrumentation.dart' 13 import 'package:front_end/src/fasta/testing/validating_instrumentation.dart'
14 show ValidatingInstrumentation; 14 show ValidatingInstrumentation;
15 15
16 import 'package:kernel/ast.dart' show Library, Program; 16 import 'package:front_end/src/fasta/testing/patched_sdk_location.dart';
17 17
18 import 'package:analyzer/src/kernel/loader.dart' show DartLoader; 18 import 'package:kernel/ast.dart' show Program;
19
20 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
21 19
22 import 'package:testing/testing.dart' 20 import 'package:testing/testing.dart'
23 show Chain, ExpectationSet, Result, Step, TestDescription; 21 show
22 Chain,
23 ChainContext,
24 ExpectationSet,
25 Result,
26 Step,
27 TestDescription,
28 StdioProcess;
24 29
25 import '../errors.dart' show InputError; 30 import 'package:front_end/src/fasta/errors.dart' show InputError;
26 31
27 import 'kernel_chain.dart' 32 import 'package:front_end/src/fasta/testing/kernel_chain.dart'
28 show MatchExpectation, Print, Run, Verify, TestContext, WriteDill; 33 show MatchExpectation, Print, Verify, WriteDill;
29 34
30 import '../ticker.dart' show Ticker; 35 import 'package:front_end/src/fasta/ticker.dart' show Ticker;
31 36
32 import '../translate_uri.dart' show TranslateUri; 37 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri;
33 38
34 import '../analyzer/analyzer_target.dart' show AnalyzerTarget; 39 import 'package:analyzer/src/fasta/analyzer_target.dart' show AnalyzerTarget;
35 40
36 import '../kernel/kernel_target.dart' show KernelTarget; 41 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
42 show KernelTarget;
37 43
38 import '../dill/dill_target.dart' show DillTarget; 44 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget;
39 45
40 export 'kernel_chain.dart' show STRONG_MODE, TestContext; 46 import 'package:kernel/kernel.dart' show loadProgramFromBinary;
41 47
42 export 'package:testing/testing.dart' show Chain, runMe; 48 export 'package:testing/testing.dart' show Chain, runMe;
43 49
50 const String STRONG_MODE = " strong mode ";
51
44 const String ENABLE_FULL_COMPILE = " full compile "; 52 const String ENABLE_FULL_COMPILE = " full compile ";
45 53
46 const String AST_KIND_INDEX = " AST kind index "; 54 const String AST_KIND_INDEX = " AST kind index ";
47 55
48 const String EXPECTATIONS = ''' 56 const String EXPECTATIONS = '''
49 [ 57 [
50 { 58 {
51 "name": "VerificationError", 59 "name": "VerificationError",
52 "group": "Fail" 60 "group": "Fail"
53 } 61 }
54 ] 62 ]
55 '''; 63 ''';
56 64
57 String shortenAstKindName(AstKind astKind, bool strongMode) { 65 String shortenAstKindName(AstKind astKind, bool strongMode) {
58 switch (astKind) { 66 switch (astKind) {
59 case AstKind.Analyzer: 67 case AstKind.Analyzer:
60 return strongMode ? "dartk-strong" : "dartk"; 68 return strongMode ? "dartk-strong" : "dartk";
61 case AstKind.Kernel: 69 case AstKind.Kernel:
62 return strongMode ? "strong" : "direct"; 70 return strongMode ? "strong" : "direct";
63 } 71 }
64 throw "Unknown AST kind: $astKind"; 72 throw "Unknown AST kind: $astKind";
65 } 73 }
66 74
67 enum AstKind { 75 enum AstKind {
68 Analyzer, 76 Analyzer,
69 Kernel, 77 Kernel,
70 } 78 }
71 79
72 class FastaContext extends TestContext { 80 class FastaContext extends ChainContext {
73 final TranslateUri uriTranslator; 81 final TranslateUri uriTranslator;
74
75 final List<Step> steps; 82 final List<Step> steps;
83 final Uri vm;
76 84
77 final ExpectationSet expectationSet = 85 final ExpectationSet expectationSet =
78 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS)); 86 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS));
79 87
80 Future<Program> platform; 88 Future<Program> platform;
81 89
82 FastaContext( 90 FastaContext(this.vm, bool strongMode, bool updateExpectations,
83 Uri sdk, 91 this.uriTranslator, bool fullCompile, AstKind astKind)
84 Uri vm,
85 Uri packages,
86 bool strongMode,
87 DartSdk dartSdk,
88 bool updateExpectations,
89 this.uriTranslator,
90 bool fullCompile,
91 AstKind astKind)
92 : steps = <Step>[ 92 : steps = <Step>[
93 new Outline(fullCompile, astKind, strongMode, 93 new Outline(fullCompile, astKind, strongMode,
94 updateExpectations: updateExpectations), 94 updateExpectations: updateExpectations),
95 const Print(), 95 const Print(),
96 new Verify(fullCompile), 96 new Verify(fullCompile),
97 new MatchExpectation( 97 new MatchExpectation(
98 fullCompile 98 fullCompile
99 ? ".${shortenAstKindName(astKind, strongMode)}.expect" 99 ? ".${shortenAstKindName(astKind, strongMode)}.expect"
100 : ".outline.expect", 100 : ".outline.expect",
101 updateExpectations: updateExpectations) 101 updateExpectations: updateExpectations)
102 ], 102 ] {
103 super(sdk, vm, packages, strongMode, dartSdk) {
104 if (fullCompile) { 103 if (fullCompile) {
105 steps.add(const WriteDill()); 104 steps.add(const WriteDill());
106 steps.add(const Run()); 105 steps.add(const Run());
107 } 106 }
108 } 107 }
109 108
110 Future<Program> createPlatform() { 109 Future<Program> loadPlatform() {
111 return platform ??= new Future<Program>(() async { 110 return platform ??= new Future<Program>(() async {
112 DartLoader loader = await createLoader(); 111 Uri sdk = await computePatchedSdk();
113 Target target = 112 return loadProgramFromBinary(sdk.resolve('platform.dill').toFilePath());
114 getTarget("vm", new TargetFlags(strongMode: options.strongMode));
115 loader.loadProgram(Uri.base.resolve("pkg/fasta/test/platform.dart"),
116 target: target);
117 var program = loader.program;
118 if (loader.errors.isNotEmpty) {
119 throw loader.errors.join("\n");
120 }
121 Library mainLibrary = program.mainMethod.enclosingLibrary;
122 program.uriToSource.remove(mainLibrary.fileUri);
123 program = new Program(
124 program.libraries.where((Library l) => l != mainLibrary).toList(),
125 program.uriToSource);
126 target.performModularTransformations(program);
127 target.performGlobalTransformations(program);
128 return program;
129 }); 113 });
130 } 114 }
131 115
132 static Future<FastaContext> create( 116 static Future<FastaContext> create(
133 Chain suite, Map<String, String> environment) async { 117 Chain suite, Map<String, String> environment) async {
134 return TestContext.create(suite, environment, (Chain suite, 118 Uri sdk = await computePatchedSdk();
135 Map<String, String> environment, 119 Uri vm = computeDartVm(sdk);
136 Uri sdk, 120 Uri packages = Uri.base.resolve(".packages");
137 Uri vm, 121 TranslateUri uriTranslator = await TranslateUri.parse(packages);
138 Uri packages, 122 bool strongMode = environment.containsKey(STRONG_MODE);
139 bool strongMode, 123 bool updateExpectations = environment["updateExpectations"] == "true";
140 DartSdk dartSdk, 124 String astKindString = environment[AST_KIND_INDEX];
141 bool updateExpectations) async { 125 AstKind astKind =
142 TranslateUri uriTranslator = await TranslateUri.parse(packages); 126 astKindString == null ? null : AstKind.values[int.parse(astKindString)];
143 String astKindString = environment[AST_KIND_INDEX]; 127 return new FastaContext(vm, strongMode, updateExpectations, uriTranslator,
144 AstKind astKind = astKindString == null 128 environment.containsKey(ENABLE_FULL_COMPILE), astKind);
145 ? null
146 : AstKind.values[int.parse(astKindString)];
147 return new FastaContext(
148 sdk,
149 vm,
150 packages,
151 strongMode,
152 dartSdk,
153 updateExpectations,
154 uriTranslator,
155 environment.containsKey(ENABLE_FULL_COMPILE),
156 astKind);
157 });
158 } 129 }
159 } 130 }
160 131
132 class Run extends Step<Uri, int, FastaContext> {
133 const Run();
134
135 String get name => "run";
136
137 bool get isAsync => true;
138
139 bool get isRuntime => true;
140
141 Future<Result<int>> run(Uri uri, FastaContext context) async {
142 File generated = new File.fromUri(uri);
143 StdioProcess process;
144 try {
145 process = await StdioProcess
146 .run(context.vm.toFilePath(), [generated.path, "Hello, World!"]);
147 print(process.output);
148 } finally {
149 generated.parent.delete(recursive: true);
150 }
151 return process.toResult();
152 }
153 }
154
161 class Outline extends Step<TestDescription, Program, FastaContext> { 155 class Outline extends Step<TestDescription, Program, FastaContext> {
162 final bool fullCompile; 156 final bool fullCompile;
163 157
164 final AstKind astKind; 158 final AstKind astKind;
165 159
166 final bool strongMode; 160 final bool strongMode;
167 161
168 const Outline(this.fullCompile, this.astKind, this.strongMode, 162 const Outline(this.fullCompile, this.astKind, this.strongMode,
169 {this.updateExpectations: false}); 163 {this.updateExpectations: false});
170 164
171 final bool updateExpectations; 165 final bool updateExpectations;
172 166
173 String get name { 167 String get name {
174 return fullCompile ? "${astKind} compile" : "outline"; 168 return fullCompile ? "${astKind} compile" : "outline";
175 } 169 }
176 170
177 bool get isCompiler => fullCompile; 171 bool get isCompiler => fullCompile;
178 172
179 Future<Result<Program>> run( 173 Future<Result<Program>> run(
180 TestDescription description, FastaContext context) async { 174 TestDescription description, FastaContext context) async {
181 Program platform = await context.createPlatform(); 175 Program platform = await context.loadPlatform();
182 Ticker ticker = new Ticker(); 176 Ticker ticker = new Ticker();
183 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator); 177 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator);
184 dillTarget.loader 178 dillTarget.loader
185 ..input = Uri.parse("org.dartlang:platform") // Make up a name. 179 ..input = Uri.parse("org.dartlang:platform") // Make up a name.
186 ..setProgram(platform); 180 ..setProgram(platform);
187 KernelTarget sourceTarget = astKind == AstKind.Analyzer 181 KernelTarget sourceTarget = astKind == AstKind.Analyzer
188 ? new AnalyzerTarget(dillTarget, context.uriTranslator, strongMode) 182 ? new AnalyzerTarget(dillTarget, context.uriTranslator, strongMode)
189 : new KernelTarget(dillTarget, context.uriTranslator, strongMode); 183 : new KernelTarget(dillTarget, context.uriTranslator, strongMode);
190 184
191 Program p; 185 Program p;
(...skipping 17 matching lines...) Expand all
209 return fail(null, instrumentation.problemsAsString); 203 return fail(null, instrumentation.problemsAsString);
210 } 204 }
211 } 205 }
212 } 206 }
213 } on InputError catch (e, s) { 207 } on InputError catch (e, s) {
214 return fail(null, e.error, s); 208 return fail(null, e.error, s);
215 } 209 }
216 return pass(p); 210 return pass(p);
217 } 211 }
218 } 212 }
OLDNEW
« no previous file with comments | « pkg/front_end/test/fasta/testing.json ('k') | pkg/front_end/test/subpackage_relationships_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698