| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 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 | 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 import 'package:analyzer/dart/element/element.dart'; | 5 import 'package:analyzer/dart/element/element.dart'; |
| 6 import 'package:analyzer/file_system/file_system.dart'; | 6 import 'package:analyzer/file_system/file_system.dart'; |
| 7 import 'package:analyzer/source/package_map_resolver.dart'; | 7 import 'package:analyzer/source/package_map_resolver.dart'; |
| 8 import 'package:analyzer/src/generated/sdk.dart'; | 8 import 'package:analyzer/src/generated/sdk.dart'; |
| 9 import 'package:analyzer/src/generated/source.dart'; | 9 import 'package:analyzer/src/generated/source.dart'; |
| 10 import 'package:analyzer/src/summary/idl.dart'; | 10 import 'package:analyzer/src/summary/idl.dart'; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 static Map<DartSdk, PackageBundle> sdkBundleMap = <DartSdk, PackageBundle>{}; | 29 static Map<DartSdk, PackageBundle> sdkBundleMap = <DartSdk, PackageBundle>{}; |
| 30 | 30 |
| 31 PubSummaryManager manager; | 31 PubSummaryManager manager; |
| 32 | 32 |
| 33 void setUp() { | 33 void setUp() { |
| 34 super.setUp(); | 34 super.setUp(); |
| 35 manager = new PubSummaryManager(resourceProvider, '_.temp'); | 35 manager = new PubSummaryManager(resourceProvider, '_.temp'); |
| 36 } | 36 } |
| 37 | 37 |
| 38 test_getLinkedBundles_noCycles() async { | 38 test_getLinkedBundles_hasCycle() async { |
| 39 resourceProvider.newFile( | 39 resourceProvider.newFile( |
| 40 '$CACHE/aaa/lib/a.dart', | 40 '$CACHE/aaa/lib/a.dart', |
| 41 ''' | 41 ''' |
| 42 import 'package:bbb/b.dart'; |
| 43 class A {} |
| 44 int a1; |
| 45 B a2; |
| 46 '''); |
| 47 resourceProvider.newFile( |
| 48 '$CACHE/bbb/lib/b.dart', |
| 49 ''' |
| 50 import 'package:ccc/c.dart'; |
| 51 class B {} |
| 52 C b; |
| 53 '''); |
| 54 resourceProvider.newFile( |
| 55 '$CACHE/ccc/lib/c.dart', |
| 56 ''' |
| 57 import 'package:aaa/a.dart'; |
| 58 import 'package:ddd/d.dart'; |
| 59 class C {} |
| 60 A c1; |
| 61 D c2; |
| 62 '''); |
| 63 resourceProvider.newFile( |
| 64 '$CACHE/ddd/lib/d.dart', |
| 65 ''' |
| 66 class D {} |
| 67 String d; |
| 68 '''); |
| 69 |
| 70 // Configure packages resolution. |
| 71 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 72 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); |
| 73 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); |
| 74 Folder libFolderD = resourceProvider.newFolder('$CACHE/ddd/lib'); |
| 75 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 76 sdkResolver, |
| 77 resourceResolver, |
| 78 new PackageMapUriResolver(resourceProvider, { |
| 79 'aaa': [libFolderA], |
| 80 'bbb': [libFolderB], |
| 81 'ccc': [libFolderC], |
| 82 'ddd': [libFolderD], |
| 83 }) |
| 84 ]); |
| 85 |
| 86 // Ensure unlinked bundles. |
| 87 manager.getUnlinkedBundles(context); |
| 88 await manager.onUnlinkedComplete; |
| 89 |
| 90 // Now we should be able to get linked bundles. |
| 91 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 92 List<LinkedPubPackage> linkedPackages = |
| 93 manager.getLinkedBundles(context, sdkBundle); |
| 94 expect(linkedPackages, hasLength(4)); |
| 95 |
| 96 // package:aaa |
| 97 { |
| 98 LinkedPubPackage linkedPackage = linkedPackages |
| 99 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 100 expect(linkedPackage.linked.linkedLibraryUris, ['package:aaa/a.dart']); |
| 101 _assertHasLinkedVariable(linkedPackage, 'a1', 'int', 'dart:core'); |
| 102 _assertHasLinkedVariable(linkedPackage, 'a2', 'B', 'package:bbb/b.dart'); |
| 103 } |
| 104 |
| 105 // package:bbb |
| 106 { |
| 107 LinkedPubPackage linkedPackage = linkedPackages |
| 108 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 109 expect(linkedPackage.linked.linkedLibraryUris, ['package:bbb/b.dart']); |
| 110 _assertHasLinkedVariable(linkedPackage, 'b', 'C', 'package:ccc/c.dart'); |
| 111 } |
| 112 |
| 113 // package:ccc |
| 114 { |
| 115 LinkedPubPackage linkedPackage = linkedPackages |
| 116 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ccc'); |
| 117 expect(linkedPackage.linked.linkedLibraryUris, ['package:ccc/c.dart']); |
| 118 _assertHasLinkedVariable(linkedPackage, 'c1', 'A', 'package:aaa/a.dart'); |
| 119 _assertHasLinkedVariable(linkedPackage, 'c2', 'D', 'package:ddd/d.dart'); |
| 120 } |
| 121 |
| 122 // package:ddd |
| 123 { |
| 124 LinkedPubPackage linkedPackage = linkedPackages |
| 125 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ddd'); |
| 126 expect(linkedPackage.linked.linkedLibraryUris, ['package:ddd/d.dart']); |
| 127 _assertHasLinkedVariable(linkedPackage, 'd', 'String', 'dart:core'); |
| 128 } |
| 129 } |
| 130 |
| 131 test_getLinkedBundles_missingBundle() async { |
| 132 resourceProvider.newFile( |
| 133 '$CACHE/aaa/lib/a.dart', |
| 134 ''' |
| 135 int a; |
| 136 '''); |
| 137 resourceProvider.newFile( |
| 138 '$CACHE/bbb/lib/b.dart', |
| 139 ''' |
| 140 import 'package:ccc/c.dart'; |
| 141 C b; |
| 142 '''); |
| 143 |
| 144 // Configure packages resolution. |
| 145 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 146 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); |
| 147 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 148 sdkResolver, |
| 149 resourceResolver, |
| 150 new PackageMapUriResolver(resourceProvider, { |
| 151 'aaa': [libFolderA], |
| 152 'bbb': [libFolderB], |
| 153 }) |
| 154 ]); |
| 155 |
| 156 // Ensure unlinked bundles. |
| 157 manager.getUnlinkedBundles(context); |
| 158 await manager.onUnlinkedComplete; |
| 159 |
| 160 // Try to link. |
| 161 // Only 'aaa' can be linked, because 'bbb' references not available 'ccc'. |
| 162 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 163 List<LinkedPubPackage> linkedPackages = |
| 164 manager.getLinkedBundles(context, sdkBundle); |
| 165 expect(linkedPackages, hasLength(1)); |
| 166 |
| 167 // package:aaa |
| 168 { |
| 169 LinkedPubPackage linkedPackage = linkedPackages |
| 170 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 171 _assertHasLinkedVariable(linkedPackage, 'a', 'int', 'dart:core'); |
| 172 } |
| 173 } |
| 174 |
| 175 test_getLinkedBundles_missingBundle_chained() async { |
| 176 resourceProvider.newFile( |
| 177 '$CACHE/aaa/lib/a.dart', |
| 178 ''' |
| 179 import 'package:bbb/b.dart'; |
| 180 int a; |
| 181 '''); |
| 182 resourceProvider.newFile( |
| 183 '$CACHE/bbb/lib/b.dart', |
| 184 ''' |
| 185 import 'package:ccc/c.dart'; |
| 186 int b; |
| 187 '''); |
| 188 |
| 189 // Configure packages resolution. |
| 190 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 191 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); |
| 192 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 193 sdkResolver, |
| 194 resourceResolver, |
| 195 new PackageMapUriResolver(resourceProvider, { |
| 196 'aaa': [libFolderA], |
| 197 'bbb': [libFolderB], |
| 198 }) |
| 199 ]); |
| 200 |
| 201 // Ensure unlinked bundles. |
| 202 manager.getUnlinkedBundles(context); |
| 203 await manager.onUnlinkedComplete; |
| 204 |
| 205 // Try to link. |
| 206 // No linked libraries, because 'aaa' needs 'bbb', and 'bbb' needs 'ccc'. |
| 207 // But 'ccc' is not available, so the whole chain cannot be linked. |
| 208 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 209 List<LinkedPubPackage> linkedPackages = |
| 210 manager.getLinkedBundles(context, sdkBundle); |
| 211 expect(linkedPackages, isEmpty); |
| 212 } |
| 213 |
| 214 test_getLinkedBundles_missingLibrary() async { |
| 215 resourceProvider.newFile( |
| 216 '$CACHE/aaa/lib/a.dart', |
| 217 ''' |
| 218 import 'package:bbb/b2.dart'; |
| 219 int a; |
| 220 '''); |
| 221 resourceProvider.newFile( |
| 222 '$CACHE/bbb/lib/b.dart', |
| 223 ''' |
| 224 class B {} |
| 225 int b = 42; |
| 226 '''); |
| 227 |
| 228 // Configure packages resolution. |
| 229 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 230 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); |
| 231 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 232 sdkResolver, |
| 233 resourceResolver, |
| 234 new PackageMapUriResolver(resourceProvider, { |
| 235 'aaa': [libFolderA], |
| 236 'bbb': [libFolderB], |
| 237 }) |
| 238 ]); |
| 239 |
| 240 // Ensure unlinked bundles. |
| 241 manager.getUnlinkedBundles(context); |
| 242 await manager.onUnlinkedComplete; |
| 243 |
| 244 // Try to link. |
| 245 // Only 'bbb', because 'aaa' references 'package:bbb/b2.dart', which does |
| 246 // not exist in the bundle 'bbb'. |
| 247 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 248 List<LinkedPubPackage> linkedPackages = |
| 249 manager.getLinkedBundles(context, sdkBundle); |
| 250 expect(linkedPackages, hasLength(1)); |
| 251 |
| 252 // package:bbb |
| 253 { |
| 254 LinkedPubPackage linkedPackage = linkedPackages |
| 255 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 256 _assertHasLinkedVariable(linkedPackage, 'b', 'int', 'dart:core'); |
| 257 } |
| 258 } |
| 259 |
| 260 test_getLinkedBundles_missingLibrary_hasCycle() async { |
| 261 resourceProvider.newFile( |
| 262 '$CACHE/aaa/lib/a.dart', |
| 263 ''' |
| 264 import 'package:bbb/b.dart'; |
| 265 int a; |
| 266 '''); |
| 267 resourceProvider.newFile( |
| 268 '$CACHE/bbb/lib/b.dart', |
| 269 ''' |
| 270 import 'package:aaa/a.dart'; |
| 271 import 'package:ccc/c2.dart'; |
| 272 class B {} |
| 273 int b; |
| 274 '''); |
| 275 resourceProvider.newFile( |
| 276 '$CACHE/ccc/lib/c.dart', |
| 277 ''' |
| 278 class C {} |
| 279 int c; |
| 280 '''); |
| 281 |
| 282 // Configure packages resolution. |
| 283 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 284 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); |
| 285 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); |
| 286 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 287 sdkResolver, |
| 288 resourceResolver, |
| 289 new PackageMapUriResolver(resourceProvider, { |
| 290 'aaa': [libFolderA], |
| 291 'bbb': [libFolderB], |
| 292 'ccc': [libFolderC], |
| 293 }) |
| 294 ]); |
| 295 |
| 296 // Ensure unlinked bundles. |
| 297 manager.getUnlinkedBundles(context); |
| 298 await manager.onUnlinkedComplete; |
| 299 |
| 300 // Try to link. |
| 301 // Only 'ccc' is linked. |
| 302 // The 'aaa' + 'bbb' cycle cannot be linked because 'bbb' references |
| 303 // 'package:ccc/c2.dart', which does not exist in the bundle 'ccc'. |
| 304 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 305 List<LinkedPubPackage> linkedPackages = |
| 306 manager.getLinkedBundles(context, sdkBundle); |
| 307 expect(linkedPackages, hasLength(1)); |
| 308 |
| 309 // package:ccc |
| 310 { |
| 311 LinkedPubPackage linkedPackage = linkedPackages |
| 312 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ccc'); |
| 313 _assertHasLinkedVariable(linkedPackage, 'c', 'int', 'dart:core'); |
| 314 } |
| 315 } |
| 316 |
| 317 test_getLinkedBundles_noCycle() async { |
| 318 resourceProvider.newFile( |
| 319 '$CACHE/aaa/lib/a.dart', |
| 320 ''' |
| 42 class A {} | 321 class A {} |
| 43 int a; | 322 int a; |
| 44 '''); | 323 '''); |
| 45 resourceProvider.newFile( | 324 resourceProvider.newFile( |
| 46 '$CACHE/bbb/lib/b.dart', | 325 '$CACHE/bbb/lib/b.dart', |
| 47 ''' | 326 ''' |
| 48 import 'package:aaa/a.dart'; | 327 import 'package:aaa/a.dart'; |
| 49 A b; | 328 A b; |
| 50 '''); | 329 '''); |
| 51 | 330 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 68 // Now we should be able to get linked bundles. | 347 // Now we should be able to get linked bundles. |
| 69 PackageBundle sdkBundle = getSdkBundle(sdk); | 348 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 70 List<LinkedPubPackage> linkedPackages = | 349 List<LinkedPubPackage> linkedPackages = |
| 71 manager.getLinkedBundles(context, sdkBundle); | 350 manager.getLinkedBundles(context, sdkBundle); |
| 72 expect(linkedPackages, hasLength(2)); | 351 expect(linkedPackages, hasLength(2)); |
| 73 | 352 |
| 74 // package:aaa | 353 // package:aaa |
| 75 { | 354 { |
| 76 LinkedPubPackage linkedPackage = linkedPackages | 355 LinkedPubPackage linkedPackage = linkedPackages |
| 77 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); | 356 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 78 PackageBundle unlinked = linkedPackage.unlinked; | 357 _assertHasLinkedVariable(linkedPackage, 'a', 'int', 'dart:core'); |
| 79 PackageBundle linked = linkedPackage.linked; | |
| 80 expect(unlinked, isNotNull); | |
| 81 expect(linked, isNotNull); | |
| 82 expect(unlinked.unlinkedUnitUris, ['package:aaa/a.dart']); | |
| 83 expect(linked.linkedLibraryUris, ['package:aaa/a.dart']); | |
| 84 // Prepare linked `package:aaa/a.dart`. | |
| 85 UnlinkedUnit unlinkedUnitA = unlinked.unlinkedUnits[0]; | |
| 86 LinkedLibrary linkedLibraryA = linked.linkedLibraries[0]; | |
| 87 LinkedUnit linkedUnitA = linkedLibraryA.units[0]; | |
| 88 // int a; | |
| 89 { | |
| 90 UnlinkedVariable a = unlinkedUnitA.variables[0]; | |
| 91 expect(a.name, 'a'); | |
| 92 _assertLinkedNameReference(unlinkedUnitA, linkedLibraryA, linkedUnitA, | |
| 93 a.type.reference, 'int', 'dart:core'); | |
| 94 } | |
| 95 } | 358 } |
| 96 | 359 |
| 97 // package:bbb | 360 // package:bbb |
| 98 { | 361 { |
| 99 LinkedPubPackage linkedPackage = linkedPackages | 362 LinkedPubPackage linkedPackage = linkedPackages |
| 100 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); | 363 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 101 PackageBundle unlinked = linkedPackage.unlinked; | 364 _assertHasLinkedVariable(linkedPackage, 'b', 'A', 'package:aaa/a.dart'); |
| 102 PackageBundle linked = linkedPackage.linked; | |
| 103 expect(unlinked, isNotNull); | |
| 104 expect(linked, isNotNull); | |
| 105 expect(unlinked.unlinkedUnitUris, ['package:bbb/b.dart']); | |
| 106 expect(linked.linkedLibraryUris, ['package:bbb/b.dart']); | |
| 107 // Prepare linked `package:bbb/b.dart`. | |
| 108 UnlinkedUnit unlinkedUnit = unlinked.unlinkedUnits[0]; | |
| 109 LinkedLibrary linkedLibrary = linked.linkedLibraries[0]; | |
| 110 LinkedUnit linkedUnit = linkedLibrary.units[0]; | |
| 111 // A b; | |
| 112 { | |
| 113 UnlinkedVariable b = unlinkedUnit.variables[0]; | |
| 114 expect(b.name, 'b'); | |
| 115 _assertLinkedNameReference(unlinkedUnit, linkedLibrary, linkedUnit, | |
| 116 b.type.reference, 'A', 'package:aaa/a.dart'); | |
| 117 } | |
| 118 } | 365 } |
| 119 } | 366 } |
| 120 | 367 |
| 368 test_getLinkedBundles_noCycle_relativeUri() async { |
| 369 resourceProvider.newFile( |
| 370 '$CACHE/aaa/lib/a.dart', |
| 371 ''' |
| 372 import 'src/a2.dart'; |
| 373 A a; |
| 374 '''); |
| 375 resourceProvider.newFile( |
| 376 '$CACHE/aaa/lib/src/a2.dart', |
| 377 ''' |
| 378 class A {} |
| 379 '''); |
| 380 |
| 381 // Configure packages resolution. |
| 382 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 383 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 384 sdkResolver, |
| 385 resourceResolver, |
| 386 new PackageMapUriResolver(resourceProvider, { |
| 387 'aaa': [libFolderA], |
| 388 }) |
| 389 ]); |
| 390 |
| 391 // Ensure unlinked bundles. |
| 392 manager.getUnlinkedBundles(context); |
| 393 await manager.onUnlinkedComplete; |
| 394 |
| 395 // Link. |
| 396 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 397 List<LinkedPubPackage> linkedPackages = |
| 398 manager.getLinkedBundles(context, sdkBundle); |
| 399 expect(linkedPackages, hasLength(1)); |
| 400 |
| 401 // package:aaa |
| 402 { |
| 403 LinkedPubPackage linkedPackage = linkedPackages |
| 404 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 405 _assertHasLinkedVariable(linkedPackage, 'a', 'A', 'src/a2.dart'); |
| 406 } |
| 407 } |
| 408 |
| 409 test_getLinkedBundles_wrongScheme() async { |
| 410 resourceProvider.newFile( |
| 411 '$CACHE/aaa/lib/a.dart', |
| 412 ''' |
| 413 import 'xxx:yyy/zzz.dart'; |
| 414 Z a; |
| 415 '''); |
| 416 |
| 417 // Configure packages resolution. |
| 418 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 419 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 420 sdkResolver, |
| 421 resourceResolver, |
| 422 new PackageMapUriResolver(resourceProvider, { |
| 423 'aaa': [libFolderA], |
| 424 }) |
| 425 ]); |
| 426 |
| 427 // Ensure unlinked bundles. |
| 428 manager.getUnlinkedBundles(context); |
| 429 await manager.onUnlinkedComplete; |
| 430 |
| 431 // Try to link. |
| 432 // The package 'aaa' cannot be linked because it uses not 'dart' or |
| 433 // 'package' import URI scheme. |
| 434 PackageBundle sdkBundle = getSdkBundle(sdk); |
| 435 List<LinkedPubPackage> linkedPackages = |
| 436 manager.getLinkedBundles(context, sdkBundle); |
| 437 expect(linkedPackages, hasLength(0)); |
| 438 } |
| 439 |
| 440 test_getPackageName() { |
| 441 String getPackageName(String uriStr) { |
| 442 return PubSummaryManager.getPackageName(uriStr); |
| 443 } |
| 444 expect(getPackageName('package:foo/bar.dart'), 'foo'); |
| 445 expect(getPackageName('package:foo/bar/baz.dart'), 'foo'); |
| 446 expect(getPackageName('wrong:foo/bar.dart'), isNull); |
| 447 expect(getPackageName('package:foo'), isNull); |
| 448 } |
| 449 |
| 121 test_getUnlinkedBundles() async { | 450 test_getUnlinkedBundles() async { |
| 122 // Create package files. | 451 // Create package files. |
| 123 resourceProvider.newFile( | 452 resourceProvider.newFile( |
| 124 '$CACHE/aaa/lib/a.dart', | 453 '$CACHE/aaa/lib/a.dart', |
| 125 ''' | 454 ''' |
| 126 class A {} | 455 class A {} |
| 127 '''); | 456 '''); |
| 128 resourceProvider.newFile( | 457 resourceProvider.newFile( |
| 129 '$CACHE/aaa/lib/src/a2.dart', | 458 '$CACHE/aaa/lib/src/a2.dart', |
| 130 ''' | 459 ''' |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 expect( | 546 expect( |
| 218 PubSummaryManager.isPathInPubCache( | 547 PubSummaryManager.isPathInPubCache( |
| 219 pathos.windows, r'C:\Users\user\Sources\Dart\foo\lib\bar.dart'), | 548 pathos.windows, r'C:\Users\user\Sources\Dart\foo\lib\bar.dart'), |
| 220 isFalse); | 549 isFalse); |
| 221 } | 550 } |
| 222 | 551 |
| 223 void _assertFileExists(Folder folder, String fileName) { | 552 void _assertFileExists(Folder folder, String fileName) { |
| 224 expect(folder.getChildAssumingFile(fileName).exists, isTrue); | 553 expect(folder.getChildAssumingFile(fileName).exists, isTrue); |
| 225 } | 554 } |
| 226 | 555 |
| 227 void _assertLinkedNameReference( | 556 void _assertHasLinkedVariable( |
| 228 UnlinkedUnit unlinkedUnit, | 557 LinkedPubPackage linkedPackage, |
| 229 LinkedLibrary linkedLibrary, | 558 String variableName, |
| 230 LinkedUnit linkedUnit, | 559 String expectedTypeName, |
| 231 int typeNameReference, | 560 String expectedTypeNameUri) { |
| 232 String expectedName, | 561 PackageBundle unlinked = linkedPackage.unlinked; |
| 233 String expectedDependencyUri) { | 562 PackageBundle linked = linkedPackage.linked; |
| 234 expect(unlinkedUnit.references[typeNameReference].name, expectedName); | 563 expect(unlinked, isNotNull); |
| 235 int typeNameDependency = | 564 expect(linked, isNotNull); |
| 236 linkedUnit.references[typeNameReference].dependency; | 565 for (int i = 0; i < unlinked.unlinkedUnitUris.length; i++) { |
| 237 expect(linkedLibrary.dependencies[typeNameDependency].uri, | 566 String unlinkedUnitUri = unlinked.unlinkedUnitUris[i]; |
| 238 expectedDependencyUri); | 567 UnlinkedUnit unlinkedUnit = unlinked.unlinkedUnits[i]; |
| 568 for (UnlinkedVariable v in unlinkedUnit.variables) { |
| 569 if (v.name == variableName) { |
| 570 int typeNameReference = v.type.reference; |
| 571 expect(unlinkedUnit.references[typeNameReference].name, |
| 572 expectedTypeName); |
| 573 for (int j = 0; j < linked.linkedLibraryUris.length; j++) { |
| 574 String linkedLibraryUri = linked.linkedLibraryUris[j]; |
| 575 if (linkedLibraryUri == unlinkedUnitUri) { |
| 576 LinkedLibrary linkedLibrary = linked.linkedLibraries[j]; |
| 577 LinkedUnit linkedUnit = linkedLibrary.units.single; |
| 578 int typeNameDependency = |
| 579 linkedUnit.references[typeNameReference].dependency; |
| 580 expect(linkedLibrary.dependencies[typeNameDependency].uri, |
| 581 expectedTypeNameUri); |
| 582 return; |
| 583 } |
| 584 } |
| 585 fail('Cannot find linked unit for $variableName in $linkedPackage'); |
| 586 } |
| 587 } |
| 588 } |
| 589 fail('Cannot find variable $variableName in $linkedPackage'); |
| 239 } | 590 } |
| 240 | 591 |
| 241 /** | 592 /** |
| 242 * Compute element based summary bundle for the given [sdk]. | 593 * Compute element based summary bundle for the given [sdk]. |
| 243 */ | 594 */ |
| 244 static PackageBundle getSdkBundle(DartSdk sdk) { | 595 static PackageBundle getSdkBundle(DartSdk sdk) { |
| 245 return sdkBundleMap.putIfAbsent(sdk, () { | 596 return sdkBundleMap.putIfAbsent(sdk, () { |
| 246 PackageBundleAssembler assembler = new PackageBundleAssembler(); | 597 PackageBundleAssembler assembler = new PackageBundleAssembler(); |
| 247 for (SdkLibrary sdkLibrary in sdk.sdkLibraries) { | 598 for (SdkLibrary sdkLibrary in sdk.sdkLibraries) { |
| 248 String uriStr = sdkLibrary.shortName; | 599 String uriStr = sdkLibrary.shortName; |
| 249 Source source = sdk.mapDartUri(uriStr); | 600 Source source = sdk.mapDartUri(uriStr); |
| 250 LibraryElement libraryElement = | 601 LibraryElement libraryElement = |
| 251 sdk.context.computeLibraryElement(source); | 602 sdk.context.computeLibraryElement(source); |
| 252 assembler.serializeLibraryElement(libraryElement); | 603 assembler.serializeLibraryElement(libraryElement); |
| 253 } | 604 } |
| 254 List<int> bytes = assembler.assemble().toBuffer(); | 605 List<int> bytes = assembler.assemble().toBuffer(); |
| 255 return new PackageBundle.fromBuffer(bytes); | 606 return new PackageBundle.fromBuffer(bytes); |
| 256 }); | 607 }); |
| 257 } | 608 } |
| 258 | 609 |
| 259 static PackageBundle _getBundleByPackageName( | 610 static PackageBundle _getBundleByPackageName( |
| 260 Map<PubPackage, PackageBundle> bundles, String name) { | 611 Map<PubPackage, PackageBundle> bundles, String name) { |
| 261 PubPackage package = | 612 PubPackage package = |
| 262 bundles.keys.singleWhere((package) => package.name == name); | 613 bundles.keys.singleWhere((package) => package.name == name); |
| 263 return bundles[package]; | 614 return bundles[package]; |
| 264 } | 615 } |
| 265 } | 616 } |
| OLD | NEW |