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

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
« no previous file with comments | « pkg/code_transformers/lib/src/resolvers.dart ('k') | no next file » | 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) 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 ], 155 ],
165 validator: (resolver) { 156 validator: (resolver) {
166 var lib = resolver.entryLibrary; 157 var lib = resolver.getLibrary(entryPoint);
167 expect(lib.importedLibraries.length, 1); 158 expect(lib.importedLibraries.length, 1);
168 }); 159 });
169 }); 160 });
170 161
171 test('should fail on absolute URIs', () { 162 test('should fail on absolute URIs', () {
172 return validateResolver( 163 return validateResolver(
173 inputs: { 164 inputs: {
174 'a|web/main.dart': ''' 165 'a|web/main.dart': '''
175 import '/b.dart'; 166 import '/b.dart';
176 167
177 main() { 168 main() {
178 } ''', 169 } ''',
179 }, 170 },
180 messages: [ 171 messages: [
181 // First from the AST walker 172 // First from the AST walker
182 'error: absolute paths not allowed: "/b.dart" (main.dart 0 14)', 173 'error: absolute paths not allowed: "/b.dart" (web/main.dart 0 14)',
183 // Then two from the resolver. 174 // Then two from the resolver.
184 'error: absolute paths not allowed: "/b.dart"', 175 'error: absolute paths not allowed: "/b.dart"',
185 'error: absolute paths not allowed: "/b.dart"', 176 'error: absolute paths not allowed: "/b.dart"',
186 ], 177 ],
187 validator: (resolver) { 178 validator: (resolver) {
188 var lib = resolver.entryLibrary; 179 var lib = resolver.getLibrary(entryPoint);
189 expect(lib.importedLibraries.length, 1); 180 expect(lib.importedLibraries.length, 1);
190 }); 181 });
191 }); 182 });
192 183
193 test('should list all libraries', () { 184 test('should list all libraries', () {
194 return validateResolver( 185 return validateResolver(
195 inputs: { 186 inputs: {
196 'a|web/main.dart': ''' 187 'a|web/main.dart': '''
197 library a.main; 188 library a.main;
198 import 'package:a/a.dart'; 189 import 'package:a/a.dart';
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 }); 312 });
322 313
323 test('handles parallel resolves', () { 314 test('handles parallel resolves', () {
324 return Future.wait([ 315 return Future.wait([
325 validateResolver( 316 validateResolver(
326 inputs: { 317 inputs: {
327 'a|web/main.dart': ''' 318 'a|web/main.dart': '''
328 library foo;''' 319 library foo;'''
329 }, 320 },
330 validator: (resolver) { 321 validator: (resolver) {
331 expect(resolver.entryLibrary.name, 'foo'); 322 expect(resolver.getLibrary(entryPoint).name, 'foo');
332 }), 323 }),
333 validateResolver( 324 validateResolver(
334 inputs: { 325 inputs: {
335 'a|web/main.dart': ''' 326 'a|web/main.dart': '''
336 library bar;''' 327 library bar;'''
337 }, 328 },
338 validator: (resolver) { 329 validator: (resolver) {
339 expect(resolver.entryLibrary.name, 'bar'); 330 expect(resolver.getLibrary(entryPoint).name, 'bar');
340 }), 331 }),
341 ]); 332 ]);
342 }); 333 });
343 }); 334 });
344 } 335 }
345 336
346 class TestTransformer extends Transformer with ResolverTransformer { 337 class TestTransformer extends Transformer with ResolverTransformer {
347 final AssetId primary; 338 final AssetId primary;
348 final Function validator; 339 final Function validator;
349 340
350 TestTransformer(Resolvers resolvers, this.primary, this.validator) { 341 TestTransformer(Resolvers resolvers, this.primary, this.validator) {
351 this.resolvers = resolvers; 342 this.resolvers = resolvers;
352 } 343 }
353 344
354 Future<bool> isPrimary(Asset input) => 345 Future<bool> isPrimary(Asset input) =>
355 new Future.value(input.id == primary); 346 new Future.value(input.id == primary);
356 347
357 applyResolver(Transform transform, Resolver resolver) { 348 applyResolver(Transform transform, Resolver resolver) {
358 return validator(resolver); 349 return validator(resolver);
359 } 350 }
360 } 351 }
OLDNEW
« no previous file with comments | « 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