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

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

Issue 2841803002: Add initial tests for Kernel interpreter (Closed)
Patch Set: Remove some tests 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
(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 'dart:io' show File;
10
11 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
12
13 import 'package:analyzer/src/kernel/loader.dart' show DartLoader;
14
15 import 'package:testing/testing.dart'
16 show Chain, Result, Step, TestDescription, runMe;
17
18 import 'package:kernel/ast.dart' show Program, Library;
19
20 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
21
22 import 'package:front_end/src/fasta/testing/kernel_chain.dart';
23
24 import 'package:front_end/src/fasta/ticker.dart' show Ticker;
25
26 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget;
27
28 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
29 show KernelTarget;
30
31 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri;
32
33 import 'package:front_end/src/fasta/errors.dart' show InputError;
34
35 import 'package:kernel/interpreter/interpreter.dart';
36
37 class InterpreterContext extends TestContext {
38 final TranslateUri uriTranslator;
39
40 final List<Step> steps;
41
42 Future<Program> platform;
43
44 InterpreterContext(Uri sdk, Uri vm, Uri packages, bool strongMode,
45 DartSdk dartSdk, this.uriTranslator)
46 : steps = <Step>[
47 const FastaCompile(),
48 const Interpret(".expect"),
49 ],
50 super(sdk, vm, packages, strongMode, dartSdk);
51
52 Future<Program> createPlatform() {
53 return new Future<Program>(() async {
54 DartLoader loader = await createLoader();
55 Target target =
56 getTarget("vm", new TargetFlags(strongMode: options.strongMode));
57 loader.loadProgram(Uri.base.resolve("pkg/fasta/test/platform.dart"),
58 target: target);
59 var program = loader.program;
60 if (loader.errors.isNotEmpty) {
61 throw loader.errors.join("\n");
62 }
63 Library mainLibrary = program.mainMethod.enclosingLibrary;
64 program.uriToSource.remove(mainLibrary.fileUri);
65 program = new Program(
66 program.libraries.where((Library l) => l != mainLibrary).toList(),
67 program.uriToSource);
68 target.performModularTransformations(program);
69 target.performGlobalTransformations(program);
70 return program;
71 });
72 }
73
74 static Future<InterpreterContext> create(
75 Chain suite, Map<String, String> environment) async {
76 return TestContext.create(suite, environment, (Chain suite,
77 Map<String, String> environment,
78 Uri sdk,
79 Uri vm,
80 Uri packages,
81 bool strongMode,
82 DartSdk dartSdk,
83 bool updateExpectations) async {
84 TranslateUri uriTranslator = await TranslateUri.parse(packages);
85 return new InterpreterContext(
86 sdk, vm, packages, strongMode, dartSdk, uriTranslator);
87 });
88 }
89 }
90
91 class FastaCompile extends Step<TestDescription, Program, InterpreterContext> {
92 const FastaCompile();
93
94 String get name => "fasta compile";
95
96 Future<Result<Program>> run(
97 TestDescription description, InterpreterContext context) async {
98 Program platform = await context.createPlatform();
99 Ticker ticker = new Ticker();
100 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator);
101 dillTarget.loader
102 ..input = Uri.parse("org.dartlang:platform")
103 ..setProgram(platform);
104 KernelTarget sourceTarget =
105 new KernelTarget(dillTarget, context.uriTranslator, false);
106
107 Program p;
108 try {
109 sourceTarget.read(description.uri);
110 await dillTarget.writeOutline(null);
111 await sourceTarget.writeOutline(null);
112 p = await sourceTarget.writeProgram(null);
113 } on InputError catch (e, s) {
114 return fail(null, e.error, s);
115 }
116
117 return pass(p);
118 }
119 }
120
121 class Interpret extends Step<Program, Program, TestContext> {
Dmitry Stefantsov 2017/05/01 09:35:23 I think it's better to split Interpret into two st
zhivkag 2017/05/01 11:36:20 Good idea, thanks!
122 final String suffix;
123
124 const Interpret(this.suffix);
125
126 String get name => "interpret";
127
128 Future<Result<Program>> run(Program program, _) async {
129 Library library = program.libraries
130 .firstWhere((Library library) => library.importUri.scheme != "dart");
131 Uri uri = library.importUri;
132
133 StringBuffer buffer = new StringBuffer();
134 log.onRecord.listen((LogRecord rec) => buffer.write(rec.message));
135
136 new Interpreter(program).run();
137
138 File expectedFile = new File("${uri.toFilePath()}$suffix");
139 if (await expectedFile.exists()) {
140 String expected = await expectedFile.readAsString();
141 if (expected.trim() != "$buffer".trim()) {
142 String diff = await runDiff(expectedFile.uri, "$buffer");
143 return fail(null, "$uri doesn't match ${expectedFile.uri}\n$diff");
144 } else {
145 return pass(program);
146 }
147 }
148 return fail(
149 program,
150 """Please create file ${expectedFile.path} with this content:
151 $buffer""");
152 }
153 }
154
155 main(List<String> arguments) =>
156 runMe(arguments, InterpreterContext.create, "testing.json");
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698