| OLD | NEW |
| 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 | 8 |
| 9 import 'package:barback/barback.dart'; | 9 import 'package:barback/barback.dart'; |
| 10 import 'package:code_transformers/resolver.dart'; | 10 import 'package:code_transformers/resolver.dart'; |
| 11 import 'package:code_transformers/tests.dart'; | 11 import 'package:code_transformers/tests.dart'; |
| 12 import 'package:unittest/compact_vm_config.dart'; | 12 import 'package:unittest/compact_vm_config.dart'; |
| 13 import 'package:unittest/unittest.dart'; | 13 import 'package:unittest/unittest.dart'; |
| 14 | 14 |
| 15 main() { | 15 main() { |
| 16 useCompactVMConfiguration(); | 16 useCompactVMConfiguration(); |
| 17 var entryPoint = new AssetId('a', 'web/main.dart'); | 17 var entryPoint = new AssetId('a', 'web/main.dart'); |
| 18 var resolvers = new Resolvers(testingDartSdkDirectory); | 18 var resolvers = new Resolvers(testingDartSdkDirectory); |
| 19 | 19 |
| 20 Future validateResolver({Map<String, String> inputs, void validator(Resolver), | 20 Future validateResolver({Map<String, String> inputs, validator(Resolver), |
| 21 List<String> messages: const[]}) { | 21 List<String> messages: const[]}) { |
| 22 return applyTransformers( | 22 return applyTransformers( |
| 23 [[new TestTransformer(resolvers, entryPoint, validator)]], | 23 [[new TestTransformer(resolvers, entryPoint, validator)]], |
| 24 inputs: inputs, | 24 inputs: inputs, |
| 25 messages: messages); | 25 messages: messages); |
| 26 } | 26 } |
| 27 | 27 |
| 28 group('Resolver', () { | 28 group('Resolver', () { |
| 29 | 29 |
| 30 test('should handle empty files', () { | 30 test('should handle empty files', () { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 ''', | 111 ''', |
| 112 }, | 112 }, |
| 113 validator: (resolver) { | 113 validator: (resolver) { |
| 114 var lib = resolver.getLibrary(entryPoint); | 114 var lib = resolver.getLibrary(entryPoint); |
| 115 expect(lib.importedLibraries.length, 2); | 115 expect(lib.importedLibraries.length, 2); |
| 116 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; | 116 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; |
| 117 expect(libB.getType('Foo'), isNull); | 117 expect(libB.getType('Foo'), isNull); |
| 118 }); | 118 }); |
| 119 }); | 119 }); |
| 120 | 120 |
| 121 test('handles missing files', () { |
| 122 return validateResolver( |
| 123 inputs: { |
| 124 'a|web/main.dart': ''' |
| 125 import 'package:b/missing.dart'; |
| 126 |
| 127 main() { |
| 128 } ''', |
| 129 }, |
| 130 validator: (resolver) { |
| 131 var lib = resolver.getLibrary(entryPoint); |
| 132 expect(lib.importedLibraries.length, 1); |
| 133 }); |
| 134 }); |
| 135 |
| 121 test('should update on changed package imports', () { | 136 test('should update on changed package imports', () { |
| 122 return validateResolver( | 137 return validateResolver( |
| 123 inputs: { | 138 inputs: { |
| 124 'a|web/main.dart': ''' | 139 'a|web/main.dart': ''' |
| 125 import 'package:b/b.dart'; | 140 import 'package:b/missing.dart'; |
| 126 | 141 |
| 127 main() { | 142 main() { |
| 128 } ''', | 143 } ''', |
| 129 'b|lib/b.dart': ''' | 144 'b|lib/missing.dart': ''' |
| 130 library b; | 145 library b; |
| 131 class Bar {} | 146 class Bar {} |
| 132 ''', | 147 ''', |
| 133 }, | 148 }, |
| 134 validator: (resolver) { | 149 validator: (resolver) { |
| 135 var lib = resolver.getLibrary(entryPoint); | 150 var lib = resolver.getLibrary(entryPoint); |
| 136 expect(lib.importedLibraries.length, 2); | 151 expect(lib.importedLibraries.length, 2); |
| 137 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; | 152 var libB = lib.importedLibraries.where((l) => l.name == 'b').single; |
| 138 expect(libB.getType('Bar'), isNotNull); | 153 expect(libB.getType('Bar'), isNotNull); |
| 139 }); | 154 }); |
| 140 }); | 155 }); |
| 141 | 156 |
| 142 test('should handle deleted files', () { | 157 test('should handle deleted files', () { |
| 143 return validateResolver( | 158 return validateResolver( |
| 144 inputs: { | 159 inputs: { |
| 145 'a|web/main.dart': ''' | 160 'a|web/main.dart': ''' |
| 146 import 'package:b/b.dart'; | 161 import 'package:b/missing.dart'; |
| 147 | 162 |
| 148 main() { | 163 main() { |
| 149 } ''', | 164 } ''', |
| 150 }, | 165 }, |
| 151 messages: [ | |
| 152 'error: Unable to find asset for "package:b/b.dart"', | |
| 153 ], | |
| 154 validator: (resolver) { | 166 validator: (resolver) { |
| 155 var lib = resolver.getLibrary(entryPoint); | 167 var lib = resolver.getLibrary(entryPoint); |
| 156 expect(lib.importedLibraries.length, 1); | 168 expect(lib.importedLibraries.length, 1); |
| 157 }); | 169 }); |
| 158 }); | 170 }); |
| 159 | 171 |
| 160 test('should fail on absolute URIs', () { | 172 test('should fail on absolute URIs', () { |
| 161 return validateResolver( | 173 return validateResolver( |
| 162 inputs: { | 174 inputs: { |
| 163 'a|web/main.dart': ''' | 175 'a|web/main.dart': ''' |
| 164 import '/b.dart'; | 176 import '/b.dart'; |
| 165 | 177 |
| 166 main() { | 178 main() { |
| 167 } ''', | 179 } ''', |
| 168 }, | 180 }, |
| 169 messages: [ | 181 messages: [ |
| 170 // First from the AST walker | 182 // First from the AST walker |
| 171 'error: absolute paths not allowed: "/b.dart" (web/main.dart 0 14)', | 183 'error: absolute paths not allowed: "/b.dart" (web/main.dart 0 14)', |
| 172 // Then two from the resolver. | |
| 173 'error: absolute paths not allowed: "/b.dart"', | 184 'error: absolute paths not allowed: "/b.dart"', |
| 185 // TODO: remove this when analyzer is updated. |
| 174 'error: absolute paths not allowed: "/b.dart"', | 186 'error: absolute paths not allowed: "/b.dart"', |
| 175 ], | 187 ], |
| 176 validator: (resolver) { | 188 validator: (resolver) { |
| 177 var lib = resolver.getLibrary(entryPoint); | 189 var lib = resolver.getLibrary(entryPoint); |
| 178 expect(lib.importedLibraries.length, 1); | 190 expect(lib.importedLibraries.length, 1); |
| 179 }); | 191 }); |
| 180 }); | 192 }); |
| 181 | 193 |
| 182 test('should list all libraries', () { | 194 test('should list all libraries', () { |
| 183 return validateResolver( | 195 return validateResolver( |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 final AssetId primary; | 351 final AssetId primary; |
| 340 final Function validator; | 352 final Function validator; |
| 341 | 353 |
| 342 TestTransformer(Resolvers resolvers, this.primary, this.validator) { | 354 TestTransformer(Resolvers resolvers, this.primary, this.validator) { |
| 343 this.resolvers = resolvers; | 355 this.resolvers = resolvers; |
| 344 } | 356 } |
| 345 | 357 |
| 346 Future<bool> isPrimary(Asset input) => | 358 Future<bool> isPrimary(Asset input) => |
| 347 new Future.value(input.id == primary); | 359 new Future.value(input.id == primary); |
| 348 | 360 |
| 349 applyResolver(Transform transform, Resolver resolver) { | 361 applyResolver(Transform transform, Resolver resolver) => validator(resolver); |
| 350 return validator(resolver); | |
| 351 } | |
| 352 } | 362 } |
| OLD | NEW |