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

Side by Side Diff: pkg/code_transformers/test/resolver_test.dart

Issue 200543006: Allow multiple-entry libraries in code_transformers (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library code_transformers.test.resolver_test; 5 library code_transformers.test.resolver_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io' show File, Platform; 8 import 'dart:io' show File, Platform;
9 9
10 import 'package:barback/barback.dart'; 10 import 'package:barback/barback.dart';
11 import 'package:code_transformers/resolver.dart'; 11 import 'package:code_transformers/resolver.dart';
12 import 'package:code_transformers/tests.dart'; 12 import 'package:code_transformers/tests.dart';
13 import 'package:path/path.dart' as path; 13 import 'package:path/path.dart' as path;
14 import 'package:unittest/compact_vm_config.dart'; 14 import 'package:unittest/compact_vm_config.dart';
15 import 'package:unittest/unittest.dart'; 15 import 'package:unittest/unittest.dart';
16 16
17 main() { 17 main() {
18 useCompactVMConfiguration(); 18 useCompactVMConfiguration();
19
20 var sdkDir = dartSdkDirectory;
21 if (sdkDir == null) {
22 // If we cannot find the SDK dir, then assume this is being run from Dart's
23 // source directory and this script is the main script.
24 sdkDir = path.join(
25 path.dirname(path.fromUri(Platform.script)), '..', '..', '..', 'sdk');
26 }
27
28 var entryPoint = new AssetId('a', 'web/main.dart'); 19 var entryPoint = new AssetId('a', 'web/main.dart');
29 var resolvers = new Resolvers(sdkDir); 20 var resolvers = new Resolvers(testingDartSdkDirectory);
30 21
31 Future validateResolver({Map<String, String> inputs, void validator(Resolver), 22 Future validateResolver({Map<String, String> inputs, void validator(Resolver),
32 List<String> messages: const[]}) { 23 List<String> messages: const[]}) {
33 return applyTransformers( 24 return applyTransformers(
34 [[new TestTransformer(resolvers, entryPoint, validator)]], 25 [[new TestTransformer(resolvers, entryPoint, validator)]],
35 inputs: inputs, 26 inputs: inputs,
36 messages: messages); 27 messages: messages);
37 } 28 }
38 29
39 group('Resolver', () { 30 group('Resolver', () {
40 31
41 test('should handle empty files', () { 32 test('should handle empty files', () {
42 return validateResolver( 33 return validateResolver(
43 inputs: { 34 inputs: {
44 'a|web/main.dart': '', 35 'a|web/main.dart': '',
45 }, 36 },
46 validator: (resolver) { 37 validator: (resolver) {
47 var source = resolver.sources[entryPoint]; 38 var source = resolver.sources[entryPoint];
48 expect(source.modificationStamp, 1); 39 expect(source.modificationStamp, 1);
49 40
50 var lib = resolver.entryLibrary; 41 var lib = resolver.getLibrary(entryPoint);
51 expect(lib, isNotNull); 42 expect(lib, isNotNull);
52 expect(lib.entryPoint, isNull); 43 expect(lib.entryPoint, isNull);
53 }); 44 });
54 }); 45 });
55 46
56 test('should update when sources change', () { 47 test('should update when sources change', () {
57 return validateResolver( 48 return validateResolver(
58 inputs: { 49 inputs: {
59 'a|web/main.dart': ''' main() {} ''', 50 'a|web/main.dart': ''' main() {} ''',
60 }, 51 },
61 validator: (resolver) { 52 validator: (resolver) {
62 var source = resolver.sources[entryPoint]; 53 var source = resolver.sources[entryPoint];
63 expect(source.modificationStamp, 2); 54 expect(source.modificationStamp, 2);
64 55
65 var lib = resolver.entryLibrary; 56 var lib = resolver.getLibrary(entryPoint);
66 expect(lib, isNotNull); 57 expect(lib, isNotNull);
67 expect(lib.entryPoint, isNotNull); 58 expect(lib.entryPoint, isNotNull);
68 }); 59 });
69 }); 60 });
70 61
71 test('should follow imports', () { 62 test('should follow imports', () {
72 return validateResolver( 63 return validateResolver(
73 inputs: { 64 inputs: {
74 'a|web/main.dart': ''' 65 'a|web/main.dart': '''
75 import 'a.dart'; 66 import 'a.dart';
76 67
77 main() { 68 main() {
78 } ''', 69 } ''',
79 'a|web/a.dart': ''' 70 'a|web/a.dart': '''
80 library a; 71 library a;
81 ''', 72 ''',
82 }, 73 },
83 validator: (resolver) { 74 validator: (resolver) {
84 var lib = resolver.entryLibrary; 75 var lib = resolver.getLibrary(entryPoint);
85 expect(lib.importedLibraries.length, 2); 76 expect(lib.importedLibraries.length, 2);
86 var libA = lib.importedLibraries.where((l) => l.name == 'a').single; 77 var libA = lib.importedLibraries.where((l) => l.name == 'a').single;
87 expect(libA.getType('Foo'), isNull); 78 expect(libA.getType('Foo'), isNull);
88 }); 79 });
89 }); 80 });
90 81
91 test('should update changed imports', () { 82 test('should update changed imports', () {
92 return validateResolver( 83 return validateResolver(
93 inputs: { 84 inputs: {
94 'a|web/main.dart': ''' 85 'a|web/main.dart': '''
95 import 'a.dart'; 86 import 'a.dart';
96 87
97 main() { 88 main() {
98 } ''', 89 } ''',
99 'a|web/a.dart': ''' 90 'a|web/a.dart': '''
100 library a; 91 library a;
101 class Foo {} 92 class Foo {}
102 ''', 93 ''',
103 }, 94 },
104 validator: (resolver) { 95 validator: (resolver) {
105 var lib = resolver.entryLibrary; 96 var lib = resolver.getLibrary(entryPoint);
106 expect(lib.importedLibraries.length, 2); 97 expect(lib.importedLibraries.length, 2);
107 var libA = lib.importedLibraries.where((l) => l.name == 'a').single; 98 var libA = lib.importedLibraries.where((l) => l.name == 'a').single;
108 expect(libA.getType('Foo'), isNotNull); 99 expect(libA.getType('Foo'), isNotNull);
109 }); 100 });
110 }); 101 });
111 102
112 test('should follow package imports', () { 103 test('should follow package imports', () {
113 return validateResolver( 104 return validateResolver(
114 inputs: { 105 inputs: {
115 'a|web/main.dart': ''' 106 'a|web/main.dart': '''
116 import 'package:b/b.dart'; 107 import 'package:b/b.dart';
117 108
118 main() { 109 main() {
119 } ''', 110 } ''',
120 'b|lib/b.dart': ''' 111 'b|lib/b.dart': '''
121 library b; 112 library b;
122 ''', 113 ''',
123 }, 114 },
124 validator: (resolver) { 115 validator: (resolver) {
125 var lib = resolver.entryLibrary; 116 var lib = resolver.getLibrary(entryPoint);
126 expect(lib.importedLibraries.length, 2); 117 expect(lib.importedLibraries.length, 2);
127 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; 118 var libB = lib.importedLibraries.where((l) => l.name == 'b').single;
128 expect(libB.getType('Foo'), isNull); 119 expect(libB.getType('Foo'), isNull);
129 }); 120 });
130 }); 121 });
131 122
132 test('should update on changed package imports', () { 123 test('should update on changed package imports', () {
133 return validateResolver( 124 return validateResolver(
134 inputs: { 125 inputs: {
135 'a|web/main.dart': ''' 126 'a|web/main.dart': '''
136 import 'package:b/b.dart'; 127 import 'package:b/b.dart';
137 128
138 main() { 129 main() {
139 } ''', 130 } ''',
140 'b|lib/b.dart': ''' 131 'b|lib/b.dart': '''
141 library b; 132 library b;
142 class Bar {} 133 class Bar {}
143 ''', 134 ''',
144 }, 135 },
145 validator: (resolver) { 136 validator: (resolver) {
146 var lib = resolver.entryLibrary; 137 var lib = resolver.getLibrary(entryPoint);
147 expect(lib.importedLibraries.length, 2); 138 expect(lib.importedLibraries.length, 2);
148 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; 139 var libB = lib.importedLibraries.where((l) => l.name == 'b').single;
149 expect(libB.getType('Bar'), isNotNull); 140 expect(libB.getType('Bar'), isNotNull);
150 }); 141 });
151 }); 142 });
152 143
153 test('should handle deleted files', () { 144 test('should handle deleted files', () {
154 return validateResolver( 145 return validateResolver(
155 inputs: { 146 inputs: {
156 'a|web/main.dart': ''' 147 'a|web/main.dart': '''
157 import 'package:b/b.dart'; 148 import 'package:b/b.dart';
158 149
159 main() { 150 main() {
160 } ''', 151 } ''',
161 }, 152 },
162 messages: [ 153 messages: [
163 'error: Unable to find asset for "package:b/b.dart"', 154 'error: Unable to find asset for "package:b/b.dart"',
164 'error: Unable to find asset for "package:b/b.dart"', 155 'error: Unable to find asset for "package:b/b.dart"',
165 ], 156 ],
166 validator: (resolver) { 157 validator: (resolver) {
167 var lib = resolver.entryLibrary; 158 var lib = resolver.getLibrary(entryPoint);
168 expect(lib.importedLibraries.length, 1); 159 expect(lib.importedLibraries.length, 1);
169 }); 160 });
170 }); 161 });
171 162
172 test('should fail on absolute URIs', () { 163 test('should fail on absolute URIs', () {
173 return validateResolver( 164 return validateResolver(
174 inputs: { 165 inputs: {
175 'a|web/main.dart': ''' 166 'a|web/main.dart': '''
176 import '/b.dart'; 167 import '/b.dart';
177 168
178 main() { 169 main() {
179 } ''', 170 } ''',
180 }, 171 },
181 messages: [ 172 messages: [
182 // First from the AST walker 173 // First from the AST walker
183 'error: absolute paths not allowed: "/b.dart" (main.dart 0 14)', 174 'error: absolute paths not allowed: "/b.dart" (web/main.dart 0 14)',
184 // Then two from the resolver. 175 // Then two from the resolver.
185 'error: absolute paths not allowed: "/b.dart"', 176 'error: absolute paths not allowed: "/b.dart"',
186 'error: absolute paths not allowed: "/b.dart"', 177 'error: absolute paths not allowed: "/b.dart"',
187 ], 178 ],
188 validator: (resolver) { 179 validator: (resolver) {
189 var lib = resolver.entryLibrary; 180 var lib = resolver.getLibrary(entryPoint);
190 expect(lib.importedLibraries.length, 1); 181 expect(lib.importedLibraries.length, 1);
191 }); 182 });
192 }); 183 });
193 184
194 test('should list all libraries', () { 185 test('should list all libraries', () {
195 return validateResolver( 186 return validateResolver(
196 inputs: { 187 inputs: {
197 'a|web/main.dart': ''' 188 'a|web/main.dart': '''
198 library a.main; 189 library a.main;
199 import 'package:a/a.dart'; 190 import 'package:a/a.dart';
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 }); 313 });
323 314
324 test('handles parallel resolves', () { 315 test('handles parallel resolves', () {
325 return Future.wait([ 316 return Future.wait([
326 validateResolver( 317 validateResolver(
327 inputs: { 318 inputs: {
328 'a|web/main.dart': ''' 319 'a|web/main.dart': '''
329 library foo;''' 320 library foo;'''
330 }, 321 },
331 validator: (resolver) { 322 validator: (resolver) {
332 expect(resolver.entryLibrary.name, 'foo'); 323 expect(resolver.getLibrary(entryPoint).name, 'foo');
333 }), 324 }),
334 validateResolver( 325 validateResolver(
335 inputs: { 326 inputs: {
336 'a|web/main.dart': ''' 327 'a|web/main.dart': '''
337 library bar;''' 328 library bar;'''
338 }, 329 },
339 validator: (resolver) { 330 validator: (resolver) {
340 expect(resolver.entryLibrary.name, 'bar'); 331 expect(resolver.getLibrary(entryPoint).name, 'bar');
341 }), 332 }),
342 ]); 333 ]);
343 }); 334 });
344 }); 335 });
345 } 336 }
346 337
347 class TestTransformer extends Transformer with ResolverTransformer { 338 class TestTransformer extends Transformer with ResolverTransformer {
348 final AssetId primary; 339 final AssetId primary;
349 final Function validator; 340 final Function validator;
350 341
351 TestTransformer(Resolvers resolvers, this.primary, this.validator) { 342 TestTransformer(Resolvers resolvers, this.primary, this.validator) {
352 this.resolvers = resolvers; 343 this.resolvers = resolvers;
353 } 344 }
354 345
355 Future<bool> isPrimary(Asset input) => 346 Future<bool> isPrimary(Asset input) =>
356 new Future.value(input.id == primary); 347 new Future.value(input.id == primary);
357 348
358 applyResolver(Transform transform, Resolver resolver) { 349 applyResolver(Transform transform, Resolver resolver) {
359 return validator(resolver); 350 return validator(resolver);
360 } 351 }
361 } 352 }
OLDNEW
« pkg/code_transformers/lib/src/dart_sdk.dart ('K') | « pkg/code_transformers/lib/src/resolvers.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698