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

Side by Side Diff: test/codegen_test.dart

Issue 1917863005: Qualify library names in packages (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Rebase Created 4 years, 7 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
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 var allDirs = [null]; 65 var allDirs = [null];
66 allDirs.addAll(testDirs); 66 allDirs.addAll(testDirs);
67 for (var dir in allDirs) { 67 for (var dir in allDirs) {
68 if (codeCoverage && dir != null) continue; 68 if (codeCoverage && dir != null) continue;
69 69
70 group('dartdevc ' + path.join('test', 'codegen', dir), () { 70 group('dartdevc ' + path.join('test', 'codegen', dir), () {
71 var outDir = new Directory(path.join(expectDir, dir)); 71 var outDir = new Directory(path.join(expectDir, dir));
72 if (!outDir.existsSync()) outDir.createSync(recursive: true); 72 if (!outDir.existsSync()) outDir.createSync(recursive: true);
73 73
74 var testFiles = _findTests(path.join(inputDir, dir), filePattern); 74 var baseDir = path.join(inputDir, dir);
75 var testFiles = _findTests(baseDir, filePattern);
75 for (var filePath in testFiles) { 76 for (var filePath in testFiles) {
76 if (multitests.contains(filePath)) continue; 77 if (multitests.contains(filePath)) continue;
77 78
78 var filename = path.basenameWithoutExtension(filePath); 79 var filename = path.basenameWithoutExtension(filePath);
79 80
80 test('$filename.dart', () { 81 test('$filename.dart', () {
81 // Check if we need to use special compile options. 82 // Check if we need to use special compile options.
82 var contents = new File(filePath).readAsStringSync(); 83 var contents = new File(filePath).readAsStringSync();
83 var match = 84 var match =
84 new RegExp(r'// compile options: (.*)').matchAsPrefix(contents); 85 new RegExp(r'// compile options: (.*)').matchAsPrefix(contents);
85 86
86 var args = new List.from(defaultOptions); 87 var args = new List.from(defaultOptions);
87 if (match != null) { 88 if (match != null) {
88 args.addAll(match.group(1).split(' ')); 89 args.addAll(match.group(1).split(' '));
89 } 90 }
90 var options = 91 var options =
91 new CompilerOptions.fromArguments(compilerArgParser.parse(args)); 92 new CompilerOptions.fromArguments(compilerArgParser.parse(args));
92 93
93 // Collect any other files we've imported. 94 // Collect any other files we've imported.
94 var files = new Set<String>(); 95 var files = new Set<String>();
95 _collectTransitiveImports(contents, files, from: filePath); 96 _collectTransitiveImports(contents, files, from: filePath);
96 97
97 var unit = new BuildUnit(filename, files.toList(), _moduleForLibrary); 98 var unit = new BuildUnit(
99 filename, baseDir, files.toList(), _moduleForLibrary);
98 var module = compiler.compile(unit, options); 100 var module = compiler.compile(unit, options);
99 _writeModule(path.join(outDir.path, filename), module); 101 _writeModule(path.join(outDir.path, filename), module);
100 }); 102 });
101 } 103 }
102 }); 104 });
103 } 105 }
104 106
105 if (codeCoverage) { 107 if (codeCoverage) {
106 test('build_sdk code coverage', () { 108 test('build_sdk code coverage', () {
107 var generatedSdkDir = 109 var generatedSdkDir =
(...skipping 13 matching lines...) Expand all
121 new File(outPath + '.js').writeAsStringSync(result.code); 123 new File(outPath + '.js').writeAsStringSync(result.code);
122 if (result.sourceMap != null) { 124 if (result.sourceMap != null) {
123 var mapPath = outPath + '.js.map'; 125 var mapPath = outPath + '.js.map';
124 new File(mapPath) 126 new File(mapPath)
125 .writeAsStringSync(JSON.encode(result.placeSourceMap(mapPath))); 127 .writeAsStringSync(JSON.encode(result.placeSourceMap(mapPath)));
126 } 128 }
127 } 129 }
128 } 130 }
129 131
130 void _buildSunflower(ModuleCompiler compiler, String expectDir) { 132 void _buildSunflower(ModuleCompiler compiler, String expectDir) {
133 var baseDir = path.join(inputDir, 'sunflower');
131 var files = ['sunflower', 'circle', 'painter'] 134 var files = ['sunflower', 'circle', 'painter']
132 .map((f) => path.join(inputDir, 'sunflower', '$f.dart')) 135 .map((f) => path.join(baseDir, '$f.dart'))
133 .toList(); 136 .toList();
134 var input = new BuildUnit('sunflower', files, _moduleForLibrary); 137 var input = new BuildUnit('sunflower', baseDir, files, _moduleForLibrary);
135 var options = new CompilerOptions(summarizeApi: false); 138 var options = new CompilerOptions(summarizeApi: false);
136 139
137 var built = compiler.compile(input, options); 140 var built = compiler.compile(input, options);
138 _writeModule(path.join(expectDir, 'sunflower', 'sunflower'), built); 141 _writeModule(path.join(expectDir, 'sunflower', 'sunflower'), built);
139 } 142 }
140 143
141 void _buildPackages(ModuleCompiler compiler, String expectDir) { 144 void _buildPackages(ModuleCompiler compiler, String expectDir) {
142 // Note: we don't summarize these, as we're going to rely on our in-memory 145 // Note: we don't summarize these, as we're going to rely on our in-memory
143 // shared analysis context for caching, and `_moduleForLibrary` below 146 // shared analysis context for caching, and `_moduleForLibrary` below
144 // understands these are from other modules. 147 // understands these are from other modules.
145 var options = new CompilerOptions(sourceMap: false, summarizeApi: false); 148 var options = new CompilerOptions(sourceMap: false, summarizeApi: false);
146 149
147 for (var uri in packageUrlMappings.keys) { 150 for (var uri in packageUrlMappings.keys) {
148 assert(uri.startsWith('package:')); 151 assert(uri.startsWith('package:'));
149 var uriPath = uri.substring('package:'.length); 152 var uriPath = uri.substring('package:'.length);
150 var name = path.basenameWithoutExtension(uriPath); 153 var name = path.basenameWithoutExtension(uriPath);
151 test(name, () { 154 test(name, () {
152 var input = new BuildUnit(name, [uri], _moduleForLibrary); 155 var input = new BuildUnit(name, inputDir, [uri], _moduleForLibrary);
153 var built = compiler.compile(input, options); 156 var built = compiler.compile(input, options);
154 157
155 var outPath = path.join(expectDir, path.withoutExtension(uriPath)); 158 var outPath = path.join(expectDir, path.withoutExtension(uriPath));
156 _writeModule(outPath, built); 159 _writeModule(outPath, built);
157 }); 160 });
158 } 161 }
159 } 162 }
160 163
161 void _buildMatcher(ModuleCompiler compiler, String expectDir) { 164 void _buildMatcher(ModuleCompiler compiler, String expectDir) {
162 var options = new CompilerOptions(sourceMap: false, summarizeApi: false); 165 var options = new CompilerOptions(sourceMap: false, summarizeApi: false);
163 166
164 var filePath = path.join(inputDir, 'packages', 'matcher', 'matcher.dart'); 167 var packageRoot = path.join(inputDir, 'packages');
168 var filePath = path.join(packageRoot, 'matcher', 'matcher.dart');
165 var contents = new File(filePath).readAsStringSync(); 169 var contents = new File(filePath).readAsStringSync();
166 170
167 // Collect any other files we've imported. 171 // Collect any other files we've imported.
168 var files = new Set<String>(); 172 var files = new Set<String>();
169 _collectTransitiveImports(contents, files, from: filePath); 173 _collectTransitiveImports(contents, files,
174 packageRoot: packageRoot, from: filePath);
170 175
171 var unit = new BuildUnit('matcher', files.toList(), _moduleForLibrary); 176 var unit =
177 new BuildUnit('matcher', inputDir, files.toList(), _moduleForLibrary);
172 var module = compiler.compile(unit, options); 178 var module = compiler.compile(unit, options);
173 179
174 var outPath = path.join(expectDir, 'matcher', 'matcher'); 180 var outPath = path.join(expectDir, 'matcher', 'matcher');
175 _writeModule(outPath, module); 181 _writeModule(outPath, module);
176 } 182 }
177 183
178 String _moduleForLibrary(Source source) { 184 String _moduleForLibrary(Source source) {
179 var scheme = source.uri.scheme; 185 var scheme = source.uri.scheme;
180 if (scheme == 'package') { 186 if (scheme == 'package') {
181 return source.uri.pathSegments.first; 187 return source.uri.pathSegments.first;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 .where((p) => p.endsWith('_test.dart') || p.endsWith('_multi.dart')); 246 .where((p) => p.endsWith('_test.dart') || p.endsWith('_multi.dart'));
241 } 247 }
242 return files; 248 return files;
243 } 249 }
244 250
245 /// Parse directives from [contents] and find the complete set of transitive 251 /// Parse directives from [contents] and find the complete set of transitive
246 /// imports, reading files as needed. 252 /// imports, reading files as needed.
247 /// 253 ///
248 /// This will not include dart:* libraries, as those are implicitly available. 254 /// This will not include dart:* libraries, as those are implicitly available.
249 void _collectTransitiveImports(String contents, Set<String> libraries, 255 void _collectTransitiveImports(String contents, Set<String> libraries,
250 {String from}) { 256 {String packageRoot, String from}) {
251 if (!libraries.add(from)) return; 257 var uri = from;
258 if (packageRoot != null && path.isWithin(packageRoot, from)) {
259 uri = 'package:${path.relative(from, from: packageRoot)}';
260 }
261 if (!libraries.add(uri)) return;
252 262
253 var unit = parseDirectives(contents, name: from, suppressErrors: true); 263 var unit = parseDirectives(contents, name: from, suppressErrors: true);
254 for (var d in unit.directives) { 264 for (var d in unit.directives) {
255 if (d is ImportDirective || d is ExportDirective) { 265 if (d is ImportDirective || d is ExportDirective) {
256 String uri = _resolveDirective(d); 266 String uri = _resolveDirective(d);
257 if (uri == null || 267 if (uri == null ||
258 uri.startsWith('dart:') || 268 uri.startsWith('dart:') ||
259 uri.startsWith('package:')) { 269 uri.startsWith('package:')) {
260 continue; 270 continue;
261 } 271 }
262 272
263 var f = new File(path.join(path.dirname(from), uri)); 273 var f = new File(path.join(path.dirname(from), uri));
264 if (f.existsSync()) { 274 if (f.existsSync()) {
265 _collectTransitiveImports(f.readAsStringSync(), libraries, 275 _collectTransitiveImports(f.readAsStringSync(), libraries,
266 from: f.path); 276 packageRoot: packageRoot, from: f.path);
267 } 277 }
268 } 278 }
269 } 279 }
270 } 280 }
271 281
272 /// Simplified from ParseDartTask.resolveDirective. 282 /// Simplified from ParseDartTask.resolveDirective.
273 String _resolveDirective(UriBasedDirective directive) { 283 String _resolveDirective(UriBasedDirective directive) {
274 StringLiteral uriLiteral = directive.uri; 284 StringLiteral uriLiteral = directive.uri;
275 String uriContent = uriLiteral.stringValue; 285 String uriContent = uriLiteral.stringValue;
276 if (uriContent != null) { 286 if (uriContent != null) {
277 uriContent = uriContent.trim(); 287 uriContent = uriContent.trim();
278 directive.uriContent = uriContent; 288 directive.uriContent = uriContent;
279 } 289 }
280 return directive.validate() == null ? uriContent : null; 290 return directive.validate() == null ? uriContent : null;
281 } 291 }
OLDNEW
« lib/src/compiler/code_generator.dart ('K') | « test/codegen/expect/unittest/unittest.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698