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