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