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

Side by Side Diff: test/codegen_test.dart

Issue 1020043002: Replace dart_core.js with actual compiled SDK (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merge Created 5 years, 9 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
« no previous file with comments | « test/codegen/expect/sunflower/sunflower.html ('k') | test/dependency_graph_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Tests code generation. 5 /// Tests code generation.
6 /// Runs Dart Dev Compiler on all input in the `codegen` directory and checks 6 /// Runs Dart Dev Compiler on all input in the `codegen` directory and checks
7 /// that the output is what we expected. 7 /// that the output is what we expected.
8 library dev_compiler.test.codegen_test; 8 library dev_compiler.test.codegen_test;
9 9
10 import 'dart:io'; 10 import 'dart:io';
11 import 'package:cli_util/cli_util.dart' show getSdkDir; 11 import 'package:cli_util/cli_util.dart' show getSdkDir;
12 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine, Logger; 12 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine, Logger;
13 import 'package:analyzer/src/generated/java_engine.dart' show CaughtException; 13 import 'package:analyzer/src/generated/java_engine.dart' show CaughtException;
14 import 'package:args/args.dart'; 14 import 'package:args/args.dart';
15 import 'package:cli_util/cli_util.dart' show getSdkDir;
16 import 'package:dev_compiler/devc.dart';
17 import 'package:dev_compiler/src/options.dart';
18 import 'package:logging/logging.dart' show Level; 15 import 'package:logging/logging.dart' show Level;
19 import 'package:path/path.dart' as path; 16 import 'package:path/path.dart' as path;
20 import 'package:unittest/unittest.dart'; 17 import 'package:unittest/unittest.dart';
21 18
19 import 'package:dev_compiler/devc.dart';
20 import 'package:dev_compiler/src/options.dart';
21 import 'package:dev_compiler/src/dependency_graph.dart'
22 show defaultRuntimeFiles;
23
22 final ArgParser argParser = new ArgParser() 24 final ArgParser argParser = new ArgParser()
23 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null) 25 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null)
24 ..addFlag('dart-gen', 26 ..addFlag('dart-gen',
25 abbr: 'd', help: 'Generate dart output', defaultsTo: false); 27 abbr: 'd', help: 'Generate dart output', defaultsTo: false);
26 28
27 main(arguments) { 29 main(arguments) {
28 if (arguments == null) arguments = []; 30 if (arguments == null) arguments = [];
29 ArgResults args = argParser.parse(arguments); 31 ArgResults args = argParser.parse(arguments);
30 var script = Platform.script.path; 32 var script = Platform.script.path;
31 var dartGen = args['dart-gen']; 33 var dartGen = args['dart-gen'];
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 ? new File(path.join(actualDir, '$filename/$filename.dart')) 109 ? new File(path.join(actualDir, '$filename/$filename.dart'))
108 : new File(path.join(actualDir, '$filename.js')); 110 : new File(path.join(actualDir, '$filename.js'));
109 expect(outFile.existsSync(), success, 111 expect(outFile.existsSync(), success,
110 reason: '${outFile.path} was created iff compilation succeeds'); 112 reason: '${outFile.path} was created iff compilation succeeds');
111 113
112 // TODO(jmesserly): ideally we'd diff the output here. For now it 114 // TODO(jmesserly): ideally we'd diff the output here. For now it
113 // happens in the containing shell script. 115 // happens in the containing shell script.
114 }); 116 });
115 } 117 }
116 118
117 group('sdk', () { 119 if (dartGen) {
118 // The analyzer does not bubble exception messages for certain internal 120 group('sdk', () {
119 // dart:* library failures, such as failing to find 121 // The analyzer does not bubble exception messages for certain internal
120 // "_internal/libraries.dart". Instead it produces an opaque "failed to 122 // dart:* library failures, such as failing to find
121 // instantiate dart:core" message. To remedy this we hook up an analysis 123 // "_internal/libraries.dart". Instead it produces an opaque "failed to
122 // logger that prints these messages. 124 // instantiate dart:core" message. To remedy this we hook up an analysis
123 var savedLogger; 125 // logger that prints these messages.
124 setUp(() { 126 var savedLogger;
125 savedLogger = AnalysisEngine.instance.logger; 127 setUp(() {
126 AnalysisEngine.instance.logger = new PrintLogger(); 128 savedLogger = AnalysisEngine.instance.logger;
129 AnalysisEngine.instance.logger = new PrintLogger();
130 });
131 tearDown(() {
132 AnalysisEngine.instance.logger = savedLogger;
133 });
134
135 test('devc dart:core', () {
136 // Get the test SDK. We use a checked in copy so test expectations can
137 // be generated against a specific SDK version.
138 var testSdk = path.join(testDir, '..', 'tool', 'input_sdk');
139 var result = compile('dart:core', testSdk, checkSdk: true);
140 var outputDir = new Directory(path.join(actualDir, 'core'));
141 var outFile = new File(path.join(actualDir, 'core/core'));
142 expect(outFile.existsSync(), true,
143 reason: '${outFile.path} was created for dart:core');
144 });
127 }); 145 });
128 tearDown(() { 146 }
129 AnalysisEngine.instance.logger = savedLogger;
130 });
131 147
132 test('devc dart:core', () { 148 var expectedRuntime =
133 // Get the test SDK. We use a checked in copy so test expectations can be 149 defaultRuntimeFiles.map((f) => 'dev_compiler/runtime/$f');
134 // generated against a specific SDK version.
135 // TODO(jmesserly): eventually we should track compiler messages.
136 // For now we're just trying to get decent code generation.
137 var testSdk = dartGen
138 ? path.join(testDir, '..', 'tool', 'input_sdk')
139 : path.join(testDir, 'generated_sdk');
140 var result = compile('dart:core', testSdk, checkSdk: true);
141 var outputDir = new Directory(path.join(actualDir, 'core'));
142 var outFile = dartGen
143 ? new File(path.join(actualDir, 'core/core'))
144 : new File(path.join(actualDir, 'dart/core.js'));
145 expect(outFile.existsSync(), true,
146 reason: '${outFile.path} was created for dart:core');
147 });
148 });
149 150
150 if (!dartGen) { 151 if (!dartGen) {
151 test('devc jscodegen sunflower.html', () { 152 test('devc jscodegen sunflower.html', () {
152 var filePath = path.join(inputDir, 'sunflower', 'sunflower.html'); 153 var filePath = path.join(inputDir, 'sunflower', 'sunflower.html');
153 compilerMessages.writeln('// Messages from compiling sunflower.html'); 154 compilerMessages.writeln('// Messages from compiling sunflower.html');
154 155
155 var result = compile(filePath, realSdk, subDir: 'sunflower'); 156 var result = compile(filePath, realSdk, subDir: 'sunflower');
156 var success = !result.failure; 157 var success = !result.failure;
157 158
158 // Write compiler messages to disk. 159 // Write compiler messages to disk.
159 new File(path.join(actualDir, 'sunflower', 'sunflower.txt')) 160 new File(path.join(actualDir, 'sunflower', 'sunflower.txt'))
160 .writeAsStringSync(compilerMessages.toString()); 161 .writeAsStringSync(compilerMessages.toString());
161 162
162 var expectedFiles = [ 163 var expectedFiles = [
163 'sunflower.html', 164 'sunflower.html',
164 'sunflower.js', 165 'sunflower.js',
165 'sunflower.css', 166 'sunflower.css',
166 'math.png', 167 'math.png',
167 'dev_compiler/runtime/dart_core.js', 168 ]..addAll(expectedRuntime);
168 'dev_compiler/runtime/dart_runtime.js', 169
169 'dev_compiler/runtime/harmony_feature_check.js',
170 ];
171 for (var filepath in expectedFiles) { 170 for (var filepath in expectedFiles) {
172 var outFile = new File(path.join(actualDir, 'sunflower', filepath)); 171 var outFile = new File(path.join(actualDir, 'sunflower', filepath));
173 expect(outFile.existsSync(), success, 172 expect(outFile.existsSync(), success,
174 reason: '${outFile.path} was created iff compilation succeeds'); 173 reason: '${outFile.path} was created iff compilation succeeds');
175 } 174 }
176 }); 175 });
177 176
178 test('devc jscodegen html_input.html', () { 177 test('devc jscodegen html_input.html', () {
179 var filePath = path.join(inputDir, 'html_input.html'); 178 var filePath = path.join(inputDir, 'html_input.html');
180 compilerMessages.writeln('// Messages from compiling html_input.html'); 179 compilerMessages.writeln('// Messages from compiling html_input.html');
181 180
182 var result = compile(filePath, realSdk); 181 var result = compile(filePath, realSdk);
183 var success = !result.failure; 182 var success = !result.failure;
184 183
185 // Write compiler messages to disk. 184 // Write compiler messages to disk.
186 new File(path.join(actualDir, 'html_input.txt')) 185 new File(path.join(actualDir, 'html_input.txt'))
187 .writeAsStringSync(compilerMessages.toString()); 186 .writeAsStringSync(compilerMessages.toString());
188 187
189 var expectedFiles = [ 188 var expectedFiles = [
190 'html_input.html', 189 'html_input.html',
191 'dir/html_input_a.js', 190 'dir/html_input_a.js',
192 'dir/html_input_b.js', 191 'dir/html_input_b.js',
193 'dir/html_input_c.js', 192 'dir/html_input_c.js',
194 'dir/html_input_d.js', 193 'dir/html_input_d.js',
195 'dir/html_input_e.js', 194 'dir/html_input_e.js'
196 'dev_compiler/runtime/dart_core.js', 195 ]..addAll(expectedRuntime);
197 'dev_compiler/runtime/dart_runtime.js', 196
198 'dev_compiler/runtime/harmony_feature_check.js',
199 ];
200 for (var filepath in expectedFiles) { 197 for (var filepath in expectedFiles) {
201 var outFile = new File(path.join(actualDir, filepath)); 198 var outFile = new File(path.join(actualDir, filepath));
202 expect(outFile.existsSync(), success, 199 expect(outFile.existsSync(), success,
203 reason: '${outFile.path} was created iff compilation succeeds'); 200 reason: '${outFile.path} was created iff compilation succeeds');
204 } 201 }
205 202
206 var notExpectedFiles = [ 203 var notExpectedFiles = [
207 'dev_compiler/runtime/messages_widget.js', 204 'dev_compiler/runtime/messages_widget.js',
208 'dev_compiler/runtime/messages.css' 205 'dev_compiler/runtime/messages.css'
209 ]; 206 ];
(...skipping 16 matching lines...) Expand all
226 new File(path.join(actualDir, 'server_mode', 'html_input.txt')) 223 new File(path.join(actualDir, 'server_mode', 'html_input.txt'))
227 .writeAsStringSync(compilerMessages.toString()); 224 .writeAsStringSync(compilerMessages.toString());
228 225
229 var expectedFiles = [ 226 var expectedFiles = [
230 'html_input.html', 227 'html_input.html',
231 'dir/html_input_a.js', 228 'dir/html_input_a.js',
232 'dir/html_input_b.js', 229 'dir/html_input_b.js',
233 'dir/html_input_c.js', 230 'dir/html_input_c.js',
234 'dir/html_input_d.js', 231 'dir/html_input_d.js',
235 'dir/html_input_e.js', 232 'dir/html_input_e.js',
236 'dev_compiler/runtime/dart_core.js',
237 'dev_compiler/runtime/dart_runtime.js',
238 'dev_compiler/runtime/harmony_feature_check.js',
239 'dev_compiler/runtime/messages_widget.js', 233 'dev_compiler/runtime/messages_widget.js',
240 'dev_compiler/runtime/messages.css' 234 'dev_compiler/runtime/messages.css'
241 ]; 235 ]..addAll(expectedRuntime);
236
242 for (var filepath in expectedFiles) { 237 for (var filepath in expectedFiles) {
243 var outFile = new File(path.join(actualDir, 'server_mode', filepath)); 238 var outFile = new File(path.join(actualDir, 'server_mode', filepath));
244 expect(outFile.existsSync(), success, 239 expect(outFile.existsSync(), success,
245 reason: '${outFile.path} was created iff compilation succeeds'); 240 reason: '${outFile.path} was created iff compilation succeeds');
246 } 241 }
247 }); 242 });
248 } 243 }
249 } 244 }
250 245
251 /// An implementation of analysis engine's [Logger] that prints. 246 /// An implementation of analysis engine's [Logger] that prints.
252 class PrintLogger implements Logger { 247 class PrintLogger implements Logger {
253 @override void logError(String message, [CaughtException exception]) { 248 @override void logError(String message, [CaughtException exception]) {
254 print('[AnalysisEngine] error $message $exception'); 249 print('[AnalysisEngine] error $message $exception');
255 } 250 }
256 251
257 @override void logError2(String message, Object exception) { 252 @override void logError2(String message, Object exception) {
258 print('[AnalysisEngine] error $message $exception'); 253 print('[AnalysisEngine] error $message $exception');
259 } 254 }
260 255
261 void logInformation(String message, [CaughtException exception]) {} 256 void logInformation(String message, [CaughtException exception]) {}
262 void logInformation2(String message, Object exception) {} 257 void logInformation2(String message, Object exception) {}
263 } 258 }
OLDNEW
« no previous file with comments | « test/codegen/expect/sunflower/sunflower.html ('k') | test/dependency_graph_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698