| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library analyzer.test.generated.package_test; |
| 6 |
| 7 import 'package:analyzer/file_system/file_system.dart'; |
| 8 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 9 import 'package:analyzer/src/generated/engine.dart'; |
| 10 import 'package:analyzer/src/generated/package.dart'; |
| 11 import 'package:analyzer/src/generated/sdk.dart'; |
| 12 import 'package:analyzer/src/generated/source.dart'; |
| 13 import 'package:package_config/packages.dart'; |
| 14 import 'package:unittest/unittest.dart'; |
| 15 |
| 16 import '../reflective_tests.dart'; |
| 17 import '../src/context/mock_sdk.dart'; |
| 18 import '../utils.dart'; |
| 19 import 'resolver_test_case.dart'; |
| 20 |
| 21 main() { |
| 22 initializeTestEnvironment(); |
| 23 runReflectiveTests(DependencyFinderTest); |
| 24 runReflectiveTests(PackageDescriptionTest); |
| 25 runReflectiveTests(PackageManagerTest); |
| 26 } |
| 27 |
| 28 /** |
| 29 * The name of the pubspec.yaml file. |
| 30 */ |
| 31 const String pubspecName = 'pubspec.yaml'; |
| 32 |
| 33 @reflectiveTest |
| 34 class DependencyFinderTest extends ResolverTestCase { |
| 35 /** |
| 36 * The resource provider to be used by tests. |
| 37 */ |
| 38 MemoryResourceProvider resourceProvider; |
| 39 |
| 40 @override |
| 41 void setUp() { |
| 42 resourceProvider = new MemoryResourceProvider(); |
| 43 } |
| 44 |
| 45 void test_transitiveDependenciesFor_circularDependencies() { |
| 46 String packageA = '/pub-cache/a-1.0'; |
| 47 String packageB = '/pub-cache/b-1.0'; |
| 48 String packageC = '/pub-cache/c-1.0'; |
| 49 resourceProvider.newFile( |
| 50 '$packageA/$pubspecName', |
| 51 ''' |
| 52 dependencies: |
| 53 b: any |
| 54 '''); |
| 55 resourceProvider.newFile( |
| 56 '$packageB/$pubspecName', |
| 57 ''' |
| 58 dependencies: |
| 59 c: any |
| 60 '''); |
| 61 resourceProvider.newFile( |
| 62 '$packageC/$pubspecName', |
| 63 ''' |
| 64 dependencies: |
| 65 a: any |
| 66 '''); |
| 67 Map<String, List<Folder>> packageMap = <String, List<Folder>>{ |
| 68 'a': <Folder>[resourceProvider.getFolder(packageA)], |
| 69 'b': <Folder>[resourceProvider.getFolder(packageB)], |
| 70 'c': <Folder>[resourceProvider.getFolder(packageC)], |
| 71 }; |
| 72 |
| 73 DependencyFinder finder = new DependencyFinder(resourceProvider); |
| 74 List<String> result = |
| 75 finder.transitiveDependenciesFor(packageMap, packageA); |
| 76 expect(result, unorderedEquals([packageB, packageC])); |
| 77 } |
| 78 |
| 79 void test_transitiveDependenciesFor_missingPubspec() { |
| 80 String packagePath = '/pub-cache/a-1.0'; |
| 81 Map<String, List<Folder>> packageMap = <String, List<Folder>>{ |
| 82 'a': <Folder>[resourceProvider.getFolder(packagePath)] |
| 83 }; |
| 84 |
| 85 DependencyFinder finder = new DependencyFinder(resourceProvider); |
| 86 expect(() => finder.transitiveDependenciesFor(packageMap, packagePath), |
| 87 throws); |
| 88 } |
| 89 |
| 90 void test_transitiveDependenciesFor_noDependencies() { |
| 91 String packagePath = '/pub-cache/a-1.0'; |
| 92 resourceProvider.newFile('$packagePath/$pubspecName', ''); |
| 93 Map<String, List<Folder>> packageMap = <String, List<Folder>>{ |
| 94 'a': <Folder>[resourceProvider.getFolder(packagePath)] |
| 95 }; |
| 96 |
| 97 DependencyFinder finder = new DependencyFinder(resourceProvider); |
| 98 List<String> result = |
| 99 finder.transitiveDependenciesFor(packageMap, packagePath); |
| 100 expect(result, hasLength(0)); |
| 101 } |
| 102 |
| 103 void test_transitiveDependenciesFor_overlappingDependencies() { |
| 104 String packageA = '/pub-cache/a-1.0'; |
| 105 String packageB = '/pub-cache/b-1.0'; |
| 106 String packageC = '/pub-cache/c-1.0'; |
| 107 String packageD = '/pub-cache/d-1.0'; |
| 108 resourceProvider.newFile( |
| 109 '$packageA/$pubspecName', |
| 110 ''' |
| 111 dependencies: |
| 112 b: any |
| 113 c: any |
| 114 '''); |
| 115 resourceProvider.newFile( |
| 116 '$packageB/$pubspecName', |
| 117 ''' |
| 118 dependencies: |
| 119 d: any |
| 120 '''); |
| 121 resourceProvider.newFile( |
| 122 '$packageC/$pubspecName', |
| 123 ''' |
| 124 dependencies: |
| 125 d: any |
| 126 '''); |
| 127 resourceProvider.newFile('$packageD/$pubspecName', ''); |
| 128 Map<String, List<Folder>> packageMap = <String, List<Folder>>{ |
| 129 'a': <Folder>[resourceProvider.getFolder(packageA)], |
| 130 'b': <Folder>[resourceProvider.getFolder(packageB)], |
| 131 'c': <Folder>[resourceProvider.getFolder(packageC)], |
| 132 'd': <Folder>[resourceProvider.getFolder(packageD)], |
| 133 }; |
| 134 |
| 135 DependencyFinder finder = new DependencyFinder(resourceProvider); |
| 136 List<String> result = |
| 137 finder.transitiveDependenciesFor(packageMap, packageA); |
| 138 expect(result, unorderedEquals([packageB, packageC, packageD])); |
| 139 } |
| 140 |
| 141 void test_transitiveDependenciesFor_simpleDependencies() { |
| 142 String packageA = '/pub-cache/a-1.0'; |
| 143 String packageB = '/pub-cache/b-1.0'; |
| 144 String packageC = '/pub-cache/c-1.0'; |
| 145 resourceProvider.newFile( |
| 146 '$packageA/$pubspecName', |
| 147 ''' |
| 148 dependencies: |
| 149 b: any |
| 150 c: any |
| 151 '''); |
| 152 resourceProvider.newFile('$packageB/$pubspecName', ''); |
| 153 resourceProvider.newFile('$packageC/$pubspecName', ''); |
| 154 Map<String, List<Folder>> packageMap = <String, List<Folder>>{ |
| 155 'a': <Folder>[resourceProvider.getFolder(packageA)], |
| 156 'b': <Folder>[resourceProvider.getFolder(packageB)], |
| 157 'c': <Folder>[resourceProvider.getFolder(packageC)], |
| 158 }; |
| 159 |
| 160 DependencyFinder finder = new DependencyFinder(resourceProvider); |
| 161 List<String> result = |
| 162 finder.transitiveDependenciesFor(packageMap, packageA); |
| 163 expect(result, unorderedEquals([packageB, packageC])); |
| 164 } |
| 165 } |
| 166 |
| 167 @reflectiveTest |
| 168 class PackageDescriptionTest extends ResolverTestCase { |
| 169 void test_equal_false_differentOptions() { |
| 170 String packageId = 'path1;path2'; |
| 171 DartSdk sdk = new MockSdk(); |
| 172 AnalysisOptionsImpl options1 = new AnalysisOptionsImpl(); |
| 173 AnalysisOptionsImpl options2 = new AnalysisOptionsImpl(); |
| 174 options2.enableAsync = !options1.enableAsync; |
| 175 PackageDescription first = new PackageDescription(packageId, sdk, options1); |
| 176 PackageDescription second = |
| 177 new PackageDescription(packageId, sdk, options2); |
| 178 expect(first == second, isFalse); |
| 179 } |
| 180 |
| 181 void test_equal_false_differentPaths() { |
| 182 String packageId1 = 'path1;path2'; |
| 183 String packageId2 = 'path1;path3'; |
| 184 DartSdk sdk = new MockSdk(); |
| 185 AnalysisOptions options = new AnalysisOptionsImpl(); |
| 186 PackageDescription first = new PackageDescription(packageId1, sdk, options); |
| 187 PackageDescription second = |
| 188 new PackageDescription(packageId2, sdk, options); |
| 189 expect(first == second, isFalse); |
| 190 } |
| 191 |
| 192 void test_equal_false_differentSdks() { |
| 193 String packageId = 'path1;path2'; |
| 194 DartSdk sdk1 = new MockSdk(); |
| 195 DartSdk sdk2 = new MockSdk(); |
| 196 AnalysisOptions options = new AnalysisOptionsImpl(); |
| 197 PackageDescription first = new PackageDescription(packageId, sdk1, options); |
| 198 PackageDescription second = |
| 199 new PackageDescription(packageId, sdk2, options); |
| 200 expect(first == second, isFalse); |
| 201 } |
| 202 |
| 203 void test_equal_true() { |
| 204 String packageId = 'path1;path2'; |
| 205 DartSdk sdk = new MockSdk(); |
| 206 AnalysisOptions options = new AnalysisOptionsImpl(); |
| 207 PackageDescription first = new PackageDescription(packageId, sdk, options); |
| 208 PackageDescription second = new PackageDescription(packageId, sdk, options); |
| 209 expect(first == second, isTrue); |
| 210 } |
| 211 } |
| 212 |
| 213 @reflectiveTest |
| 214 class PackageManagerTest extends ResolverTestCase { |
| 215 /** |
| 216 * The resource provider to be used by tests. |
| 217 */ |
| 218 MemoryResourceProvider resourceProvider; |
| 219 |
| 220 @override |
| 221 void setUp() { |
| 222 resourceProvider = new MemoryResourceProvider(); |
| 223 } |
| 224 |
| 225 void test_getContext() { |
| 226 String packageA = '/pub-cache/a-1.0'; |
| 227 String packageB1 = '/pub-cache/b-1.0'; |
| 228 String packageB2 = '/pub-cache/b-2.0'; |
| 229 String packageC = '/pub-cache/c-1.0'; |
| 230 resourceProvider.newFile( |
| 231 '$packageA/$pubspecName', |
| 232 ''' |
| 233 dependencies: |
| 234 b: any |
| 235 c: any |
| 236 '''); |
| 237 resourceProvider.newFile('$packageB1/$pubspecName', ''); |
| 238 resourceProvider.newFile('$packageB2/$pubspecName', ''); |
| 239 resourceProvider.newFile('$packageC/$pubspecName', ''); |
| 240 |
| 241 Packages packages1 = new _MockPackages(<String, Uri>{ |
| 242 'a': new Uri.file(packageA), |
| 243 'b': new Uri.file(packageB1), |
| 244 'c': new Uri.file(packageC), |
| 245 }); |
| 246 DartUriResolver resolver = new DartUriResolver(new MockSdk()); |
| 247 AnalysisOptions options = new AnalysisOptionsImpl(); |
| 248 // |
| 249 // Verify that we can compute a context for a package. |
| 250 // |
| 251 PackageManager manager = new PackageManager(resourceProvider); |
| 252 AnalysisContext context1 = |
| 253 manager.getContext(packageA, packages1, resolver, options); |
| 254 expect(context1, isNotNull); |
| 255 // |
| 256 // Verify that if we have the same package map we get the same context. |
| 257 // |
| 258 AnalysisContext context2 = |
| 259 manager.getContext(packageA, packages1, resolver, options); |
| 260 expect(context2, same(context1)); |
| 261 // |
| 262 // Verify that if we have a different package map we get a different context
. |
| 263 // |
| 264 Packages packages3 = new _MockPackages(<String, Uri>{ |
| 265 'a': new Uri.file(packageA), |
| 266 'b': new Uri.file(packageB2), |
| 267 'c': new Uri.file(packageC), |
| 268 }); |
| 269 AnalysisContext context3 = |
| 270 manager.getContext(packageA, packages3, resolver, options); |
| 271 expect(context3, isNot(same(context1))); |
| 272 } |
| 273 } |
| 274 |
| 275 /** |
| 276 * An implementation of [Packages] used for testing. |
| 277 */ |
| 278 class _MockPackages implements Packages { |
| 279 final Map<String, Uri> map; |
| 280 |
| 281 _MockPackages(this.map); |
| 282 |
| 283 @override |
| 284 Iterable<String> get packages => map.keys; |
| 285 |
| 286 @override |
| 287 Map<String, Uri> asMap() => map; |
| 288 |
| 289 @override |
| 290 Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) { |
| 291 fail('Unexpected invocation of resolve'); |
| 292 return null; |
| 293 } |
| 294 } |
| OLD | NEW |