OLD | NEW |
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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Tests code generation. | 5 /// Tests code generation. |
6 /// | 6 /// |
7 /// Runs Dart Dev Compiler on all input in the `codegen` directory and checks | 7 /// Runs Dart Dev Compiler on all input in the `codegen` directory and checks |
8 /// that the output is what we expected. | 8 /// that the output is what we expected. |
9 library dev_compiler.test.codegen_test; | 9 library dev_compiler.test.codegen_test; |
10 | 10 |
11 // TODO(rnystrom): This doesn't actually run any tests any more. It just | 11 // TODO(rnystrom): This doesn't actually run any tests any more. It just |
12 // compiles stuff. This should be changed to not use unittest and just be a | 12 // compiles stuff. This should be changed to not use unittest and just be a |
13 // regular program that outputs files. | 13 // regular program that outputs files. |
14 | 14 |
| 15 import 'dart:async'; |
15 import 'dart:io' show Directory, File, Platform; | 16 import 'dart:io' show Directory, File, Platform; |
16 import 'package:analyzer/analyzer.dart' | 17 import 'package:analyzer/analyzer.dart' |
17 show | 18 show |
18 ExportDirective, | 19 ExportDirective, |
19 ImportDirective, | 20 ImportDirective, |
20 StringLiteral, | 21 StringLiteral, |
21 UriBasedDirective, | 22 UriBasedDirective, |
22 parseDirectives; | 23 parseDirectives; |
23 import 'package:analyzer/src/command_line/arguments.dart' | 24 import 'package:analyzer/src/command_line/arguments.dart' |
24 show defineAnalysisArguments; | 25 show defineAnalysisArguments; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 | 121 |
121 // Compile each test file to JS and put the result in gen/codegen_output. | 122 // Compile each test file to JS and put the result in gen/codegen_output. |
122 for (var testFile in testFiles) { | 123 for (var testFile in testFiles) { |
123 var relativePath = path.relative(testFile, from: codegenTestDir); | 124 var relativePath = path.relative(testFile, from: codegenTestDir); |
124 | 125 |
125 // Only compile the top-level files for generating coverage. | 126 // Only compile the top-level files for generating coverage. |
126 bool isTopLevelTest = path.dirname(relativePath) == "."; | 127 bool isTopLevelTest = path.dirname(relativePath) == "."; |
127 if (codeCoverage && !isTopLevelTest) continue; | 128 if (codeCoverage && !isTopLevelTest) continue; |
128 | 129 |
129 var name = path.withoutExtension(relativePath); | 130 var name = path.withoutExtension(relativePath); |
130 test('dartdevc $name', () { | 131 test('dartdevc $name', () async { |
131 // Check if we need to use special compile options. | 132 // Check if we need to use special compile options. |
132 var contents = new File(testFile).readAsStringSync(); | 133 var contents = new File(testFile).readAsStringSync(); |
133 var match = testFileOptionsMatcher.firstMatch(contents); | 134 var match = testFileOptionsMatcher.firstMatch(contents); |
134 | 135 |
135 var args = defaultOptions.toList(); | 136 var args = defaultOptions.toList(); |
136 if (match != null) { | 137 if (match != null) { |
137 var matchedArgs = match.group(2).split(' '); | 138 var matchedArgs = match.group(2).split(' '); |
138 args.addAll(matchedArgs.where((s) => !ignoreOptions.contains(s))); | 139 args.addAll(matchedArgs.where((s) => !ignoreOptions.contains(s))); |
139 } | 140 } |
140 | 141 |
(...skipping 11 matching lines...) Expand all Loading... |
152 var unit = new BuildUnit( | 153 var unit = new BuildUnit( |
153 name, path.dirname(testFile), files.toList(), _moduleForLibrary); | 154 name, path.dirname(testFile), files.toList(), _moduleForLibrary); |
154 | 155 |
155 var compiler = sharedCompiler; | 156 var compiler = sharedCompiler; |
156 if (analyzerOptions.declaredVariables.isNotEmpty) { | 157 if (analyzerOptions.declaredVariables.isNotEmpty) { |
157 compiler = new ModuleCompiler(analyzerOptions); | 158 compiler = new ModuleCompiler(analyzerOptions); |
158 } | 159 } |
159 JSModuleFile module = null; | 160 JSModuleFile module = null; |
160 var exception, stackTrace; | 161 var exception, stackTrace; |
161 try { | 162 try { |
162 module = compiler.compile(unit, options); | 163 module = await compiler.compile(unit, options); |
163 } catch (e, st) { | 164 } catch (e, st) { |
164 exception = e; | 165 exception = e; |
165 stackTrace = st; | 166 stackTrace = st; |
166 } | 167 } |
167 | 168 |
168 bool expectedCompileTimeError = contents.contains(': compile-time error'); | 169 bool expectedCompileTimeError = contents.contains(': compile-time error'); |
169 bool notStrong = notYetStrongTests.contains(name); | 170 bool notStrong = notYetStrongTests.contains(name); |
170 bool crashing = _crashingTests.contains(name); | 171 bool crashing = _crashingTests.contains(name); |
171 bool inconsistent = _inconsistentTests.contains(name); | 172 bool inconsistent = _inconsistentTests.contains(name); |
172 | 173 |
(...skipping 24 matching lines...) Expand all Loading... |
197 ? "expected" | 198 ? "expected" |
198 : inconsistent ? "platform consistency" : "untriaged strong mode"; | 199 : inconsistent ? "platform consistency" : "untriaged strong mode"; |
199 expect(expectedCompileTimeError || inconsistent || notStrong, isTrue, | 200 expect(expectedCompileTimeError || inconsistent || notStrong, isTrue, |
200 reason: "test $name failed to compile due to $reason errors:" | 201 reason: "test $name failed to compile due to $reason errors:" |
201 "\n\n${module.errors.join('\n')}."); | 202 "\n\n${module.errors.join('\n')}."); |
202 } | 203 } |
203 }); | 204 }); |
204 } | 205 } |
205 | 206 |
206 if (filePattern.hasMatch('sunflower')) { | 207 if (filePattern.hasMatch('sunflower')) { |
207 test('sunflower', () { | 208 test('sunflower', () async { |
208 _buildSunflower(sharedCompiler, codegenOutputDir, codegenExpectDir); | 209 await _buildSunflower(sharedCompiler, codegenOutputDir, codegenExpectDir); |
209 }); | 210 }); |
210 } | 211 } |
211 | 212 |
212 if (codeCoverage) { | 213 if (codeCoverage) { |
213 test('build_sdk code coverage', () { | 214 test('build_sdk code coverage', () { |
214 return build_sdk.main(['--dart-sdk', sdkDir, '-o', codegenOutputDir]); | 215 return build_sdk.main(['--dart-sdk', sdkDir, '-o', codegenOutputDir]); |
215 }); | 216 }); |
216 } | 217 } |
217 } | 218 } |
218 | 219 |
(...skipping 19 matching lines...) Expand all Loading... |
238 | 239 |
239 var expectFile = new File(expectPath + '.js'); | 240 var expectFile = new File(expectPath + '.js'); |
240 if (result.isValid) { | 241 if (result.isValid) { |
241 result.writeCodeSync(format, expectFile.path); | 242 result.writeCodeSync(format, expectFile.path); |
242 } else { | 243 } else { |
243 expectFile.writeAsStringSync("//FAILED TO COMPILE"); | 244 expectFile.writeAsStringSync("//FAILED TO COMPILE"); |
244 } | 245 } |
245 } | 246 } |
246 } | 247 } |
247 | 248 |
248 void _buildSunflower( | 249 Future<Null> _buildSunflower( |
249 ModuleCompiler compiler, String outputDir, String expectDir) { | 250 ModuleCompiler compiler, String outputDir, String expectDir) async { |
250 var baseDir = path.join(codegenDir, 'sunflower'); | 251 var baseDir = path.join(codegenDir, 'sunflower'); |
251 var files = ['sunflower', 'circle', 'painter'] | 252 var files = ['sunflower', 'circle', 'painter'] |
252 .map((f) => path.join(baseDir, '$f.dart')) | 253 .map((f) => path.join(baseDir, '$f.dart')) |
253 .toList(); | 254 .toList(); |
254 var input = new BuildUnit('sunflower', baseDir, files, _moduleForLibrary); | 255 var input = new BuildUnit('sunflower', baseDir, files, _moduleForLibrary); |
255 var options = new CompilerOptions(summarizeApi: false); | 256 var options = new CompilerOptions(summarizeApi: false); |
256 | 257 |
257 var built = compiler.compile(input, options); | 258 var built = await compiler.compile(input, options); |
258 _writeModule(path.join(outputDir, 'sunflower', 'sunflower'), | 259 _writeModule(path.join(outputDir, 'sunflower', 'sunflower'), |
259 path.join(expectDir, 'sunflower', 'sunflower'), ModuleFormat.amd, built); | 260 path.join(expectDir, 'sunflower', 'sunflower'), ModuleFormat.amd, built); |
260 } | 261 } |
261 | 262 |
262 String _moduleForLibrary(Source source) { | 263 String _moduleForLibrary(Source source) { |
263 var scheme = source.uri.scheme; | 264 var scheme = source.uri.scheme; |
264 if (scheme == 'package') { | 265 if (scheme == 'package') { |
265 return source.uri.pathSegments.first; | 266 return source.uri.pathSegments.first; |
266 } | 267 } |
267 throw new Exception('Module not found for library "${source.fullName}"'); | 268 throw new Exception('Module not found for library "${source.fullName}"'); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 final _crashingTests = new Set<String>.from([ | 403 final _crashingTests = new Set<String>.from([ |
403 // TODO(vsm): Fix these - they import files from a different directory | 404 // TODO(vsm): Fix these - they import files from a different directory |
404 // - this triggers an invalid library root build error. | 405 // - this triggers an invalid library root build error. |
405 'lib/html/custom/attribute_changed_callback_test', | 406 'lib/html/custom/attribute_changed_callback_test', |
406 'lib/html/custom/constructor_calls_created_synchronously_test', | 407 'lib/html/custom/constructor_calls_created_synchronously_test', |
407 'lib/html/custom/entered_left_view_test', | 408 'lib/html/custom/entered_left_view_test', |
408 'lib/html/custom/js_custom_test', | 409 'lib/html/custom/js_custom_test', |
409 'lib/html/custom/mirrors_test', | 410 'lib/html/custom/mirrors_test', |
410 'lib/html/custom/regress_194523002_test', | 411 'lib/html/custom/regress_194523002_test', |
411 ].map((p) => p.replaceAll('/', path.separator))); | 412 ].map((p) => p.replaceAll('/', path.separator))); |
OLD | NEW |