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

Side by Side Diff: pkg/fasta/lib/testing/suite.dart

Issue 2631613003: Add Fasta tests. (Closed)
Patch Set: Created 3 years, 11 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) 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
3 // BSD-style license that can be found in the LICENSE.md file.
4
5 library fasta.testing.suite;
6
7 import 'dart:async' show
8 Future;
9
10 import 'dart:convert' show
11 JSON;
12
13 import 'package:analyzer/src/generated/sdk.dart' show
14 DartSdk;
15
16 import 'package:kernel/ast.dart' show
17 Library,
18 Program;
19
20 import 'package:kernel/analyzer/loader.dart' show
21 DartLoader;
22
23 import 'package:kernel/target/targets.dart' show
24 Target,
25 TargetFlags,
26 getTarget;
27
28 import 'package:testing/testing.dart' show
29 Chain,
30 ExpectationSet,
31 Result,
32 Step,
33 TestDescription;
34
35 import '../src/errors.dart' show
36 InputError;
37
38 import 'kernel_chain.dart' show
39 MatchExpectation,
40 Print,
41 Run,
42 Verify,
43 TestContext,
44 WriteDill;
45
46 import '../src/ticker.dart' show
47 Ticker;
48
49 import '../src/translate_uri.dart' show
50 TranslateUri;
51
52 import '../src/kernel/kernel_target.dart' show
53 KernelSourceTarget;
54
55 import '../src/dill/dill_target.dart' show
56 DillTarget;
57
58 import '../src/ast_kind.dart' show
59 AstKind;
60
61 export 'kernel_chain.dart' show
62 TestContext;
63
64 export 'package:testing/testing.dart' show
65 Chain,
66 runMe;
67
68 export '../src/ast_kind.dart' show
69 AstKind;
70
71 const String ENABLE_FULL_COMPILE = " full compile ";
72
73 const String AST_KIND_INDEX = " AST kind index ";
74
75 const String EXPECTATIONS = '''
76 [
77 {
78 "name": "VerificationError",
79 "group": "Fail"
80 }
81 ]
82 ''';
83
84 String shortenAstKindName(AstKind astKind) {
85 switch (astKind) {
86 case AstKind.Analyzer: return "dartk";
87 case AstKind.Kernel: return "direct";
88 }
89 throw "Unknown AST kind: $astKind";
90 }
91
92 class FeContext extends TestContext {
93 final TranslateUri uriTranslator;
94
95 final List<Step> steps;
96
97 final ExpectationSet expectationSet =
98 new ExpectationSet.fromJsonList(JSON.decode(EXPECTATIONS));
99
100 Future<Program> platform;
101
102 FeContext(String sdk, Uri vm, Uri packages, bool strongMode,
103 DartSdk dartSdk, bool updateExpectations, this.uriTranslator,
104 bool fullCompile, AstKind astKind)
105 : steps = <Step>[
106 new Outline(fullCompile, astKind),
107 const Print(),
108 new Verify(fullCompile),
109 new MatchExpectation(
110 fullCompile
111 ? ".${shortenAstKindName(astKind)}.expect"
112 : ".outline.expect",
113 updateExpectations: updateExpectations)
114 ],
115 super(sdk, vm, packages, strongMode, dartSdk) {
116 if (fullCompile) {
117 steps.add(const WriteDill());
118 steps.add(const Run());
119 }
120 }
121
122 Future<Program> createPlatform() {
123 return platform ??= new Future<Program>(() async {
124 DartLoader loader = await createLoader();
125 Target target = getTarget(
126 "vm", new TargetFlags(strongMode: options.strongMode));
127 Program program = loader.loadProgram(
128 Uri.base.resolve("pkg/fasta/test/platform.dart"), target: target);
129 target.transformProgram(program);
130 if (loader.errors.isNotEmpty) {
131 throw loader.errors.join("\n");
132 }
133 Library mainLibrary = program.mainMethod.enclosingLibrary;
134 program.uriToLineStarts.remove(mainLibrary.fileUri);
135 return new Program(
136 program.libraries.where((Library l) => l != mainLibrary).toList(),
137 program.uriToLineStarts);
138 });
139 }
140
141 static Future<FeContext> create(Chain suite, Map<String, String> environment,
142 String sdk, Uri vm, Uri packages, bool strongMode, DartSdk dartSdk,
143 bool updateExpectations) async {
144 TranslateUri uriTranslator = await TranslateUri.parse(packages);
145 String astKindString = environment[AST_KIND_INDEX];
146 AstKind astKind = astKindString == null
147 ? null : AstKind.values[int.parse(astKindString)];
148 return new FeContext(
149 sdk, vm, packages, strongMode, dartSdk, updateExpectations,
150 uriTranslator, environment.containsKey(ENABLE_FULL_COMPILE), astKind);
151 }
152 }
153
154 class Outline extends Step<TestDescription, Program, FeContext> {
155 final bool fullCompile;
156
157 final AstKind astKind;
158
159 const Outline(this.fullCompile, this.astKind);
160
161 String get name {
162 return fullCompile ? "${shortenAstKindName(astKind)} compile" : "outline";
163 }
164
165 bool get isCompiler => fullCompile;
166
167 Future<Result<Program>> run(
168 TestDescription description, FeContext context) async {
169 Program platform = await context.createPlatform();
170 Ticker ticker = new Ticker();
171 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator);
172 dillTarget.loader.setProgram(platform);
173 KernelSourceTarget sourceTarget =
174 new KernelSourceTarget(dillTarget, context.uriTranslator);
175 Program p;
176 try {
177 sourceTarget.read(description.uri);
178 await dillTarget.writeOutline(null);
179 p = await sourceTarget.writeOutline(null);
180 if (fullCompile) {
181 p = await sourceTarget.writeProgram(null, astKind);
182 }
183 } on InputError catch (e, s) {
184 return fail(null, e.error, s);
185 }
186 return pass(p);
187 }
188 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698