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 /// 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:convert' show JSON; | 10 import 'dart:convert' show JSON; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 | 154 |
155 var outPath = path.join(expectDir, path.withoutExtension(uriPath)); | 155 var outPath = path.join(expectDir, path.withoutExtension(uriPath)); |
156 _writeModule(outPath, built); | 156 _writeModule(outPath, built); |
157 }); | 157 }); |
158 } | 158 } |
159 } | 159 } |
160 | 160 |
161 void _buildMatcher(ModuleCompiler compiler, String expectDir) { | 161 void _buildMatcher(ModuleCompiler compiler, String expectDir) { |
162 var options = new CompilerOptions(sourceMap: false, summarizeApi: false); | 162 var options = new CompilerOptions(sourceMap: false, summarizeApi: false); |
163 | 163 |
164 var filePath = path.join(inputDir, 'packages', 'matcher', 'matcher.dart'); | 164 var packageRoot = path.join(inputDir, 'packages'); |
| 165 var filePath = path.join(packageRoot, 'matcher', 'matcher.dart'); |
165 var contents = new File(filePath).readAsStringSync(); | 166 var contents = new File(filePath).readAsStringSync(); |
166 | 167 |
167 // Collect any other files we've imported. | 168 // Collect any other files we've imported. |
168 var files = new Set<String>(); | 169 var files = new Set<String>(); |
169 _collectTransitiveImports(contents, files, from: filePath); | 170 _collectTransitiveImports(contents, files, |
| 171 packageRoot: packageRoot, from: filePath); |
170 | 172 |
171 var unit = new BuildUnit('matcher', files.toList(), _moduleForLibrary); | 173 var unit = new BuildUnit('matcher', files.toList(), _moduleForLibrary); |
172 var module = compiler.compile(unit, options); | 174 var module = compiler.compile(unit, options); |
173 | 175 |
174 var outPath = path.join(expectDir, 'matcher', 'matcher'); | 176 var outPath = path.join(expectDir, 'matcher', 'matcher'); |
175 _writeModule(outPath, module); | 177 _writeModule(outPath, module); |
176 } | 178 } |
177 | 179 |
178 String _moduleForLibrary(Source source) { | 180 String _moduleForLibrary(Source source) { |
179 var scheme = source.uri.scheme; | 181 var scheme = source.uri.scheme; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 .where((p) => p.endsWith('_test.dart') || p.endsWith('_multi.dart')); | 242 .where((p) => p.endsWith('_test.dart') || p.endsWith('_multi.dart')); |
241 } | 243 } |
242 return files; | 244 return files; |
243 } | 245 } |
244 | 246 |
245 /// Parse directives from [contents] and find the complete set of transitive | 247 /// Parse directives from [contents] and find the complete set of transitive |
246 /// imports, reading files as needed. | 248 /// imports, reading files as needed. |
247 /// | 249 /// |
248 /// This will not include dart:* libraries, as those are implicitly available. | 250 /// This will not include dart:* libraries, as those are implicitly available. |
249 void _collectTransitiveImports(String contents, Set<String> libraries, | 251 void _collectTransitiveImports(String contents, Set<String> libraries, |
250 {String from}) { | 252 {String packageRoot, String from}) { |
251 if (!libraries.add(from)) return; | 253 var uri = from; |
| 254 if (packageRoot != null && path.isWithin(packageRoot, from)) { |
| 255 uri = 'package:${path.relative(from, from: packageRoot)}'; |
| 256 } |
| 257 if (!libraries.add(uri)) return; |
252 | 258 |
253 var unit = parseDirectives(contents, name: from, suppressErrors: true); | 259 var unit = parseDirectives(contents, name: from, suppressErrors: true); |
254 for (var d in unit.directives) { | 260 for (var d in unit.directives) { |
255 if (d is ImportDirective || d is ExportDirective) { | 261 if (d is ImportDirective || d is ExportDirective) { |
256 String uri = _resolveDirective(d); | 262 String uri = _resolveDirective(d); |
257 if (uri == null || | 263 if (uri == null || |
258 uri.startsWith('dart:') || | 264 uri.startsWith('dart:') || |
259 uri.startsWith('package:')) { | 265 uri.startsWith('package:')) { |
260 continue; | 266 continue; |
261 } | 267 } |
262 | 268 |
263 var f = new File(path.join(path.dirname(from), uri)); | 269 var f = new File(path.join(path.dirname(from), uri)); |
264 if (f.existsSync()) { | 270 if (f.existsSync()) { |
265 _collectTransitiveImports(f.readAsStringSync(), libraries, | 271 _collectTransitiveImports(f.readAsStringSync(), libraries, |
266 from: f.path); | 272 packageRoot: packageRoot, from: f.path); |
267 } | 273 } |
268 } | 274 } |
269 } | 275 } |
270 } | 276 } |
271 | 277 |
272 /// Simplified from ParseDartTask.resolveDirective. | 278 /// Simplified from ParseDartTask.resolveDirective. |
273 String _resolveDirective(UriBasedDirective directive) { | 279 String _resolveDirective(UriBasedDirective directive) { |
274 StringLiteral uriLiteral = directive.uri; | 280 StringLiteral uriLiteral = directive.uri; |
275 String uriContent = uriLiteral.stringValue; | 281 String uriContent = uriLiteral.stringValue; |
276 if (uriContent != null) { | 282 if (uriContent != null) { |
277 uriContent = uriContent.trim(); | 283 uriContent = uriContent.trim(); |
278 directive.uriContent = uriContent; | 284 directive.uriContent = uriContent; |
279 } | 285 } |
280 return directive.validate() == null ? uriContent : null; | 286 return directive.validate() == null ? uriContent : null; |
281 } | 287 } |
OLD | NEW |