| 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/file_system/file_system.dart'; | 5 import 'package:analyzer/file_system/file_system.dart'; |
| 6 import 'package:analyzer/source/package_map_resolver.dart'; | 6 import 'package:analyzer/source/package_map_resolver.dart'; |
| 7 import 'package:analyzer/src/generated/source.dart'; | 7 import 'package:analyzer/src/generated/source.dart'; |
| 8 import 'package:analyzer/src/summary/format.dart'; | 8 import 'package:analyzer/src/summary/format.dart'; |
| 9 import 'package:analyzer/src/summary/idl.dart'; | 9 import 'package:analyzer/src/summary/idl.dart'; |
| 10 import 'package:analyzer/src/summary/pub_summary.dart'; | 10 import 'package:analyzer/src/summary/pub_summary.dart'; |
| 11 import 'package:analyzer/src/summary/summarize_elements.dart'; | 11 import 'package:analyzer/src/summary/summarize_elements.dart'; |
| 12 import 'package:analyzer/src/util/fast_uri.dart'; | 12 import 'package:analyzer/src/util/fast_uri.dart'; |
| 13 import 'package:path/path.dart' as pathos; | 13 import 'package:path/path.dart' as pathos; |
| 14 import 'package:test/test.dart'; | 14 import 'package:test/test.dart'; |
| 15 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 15 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 16 | 16 |
| 17 import '../context/abstract_context.dart'; | 17 import '../context/abstract_context.dart'; |
| 18 import '../context/mock_sdk.dart'; | 18 import '../context/mock_sdk.dart'; |
| 19 | 19 |
| 20 main() { | 20 main() { |
| 21 defineReflectiveSuite(() { | 21 defineReflectiveSuite(() { |
| 22 defineReflectiveTests(PubSummaryManagerTest); | 22 defineReflectiveTests(PubSummaryManagerTest); |
| 23 }); | 23 }); |
| 24 } | 24 } |
| 25 | 25 |
| 26 @reflectiveTest | 26 @reflectiveTest |
| 27 class PubSummaryManagerTest extends AbstractContextTest { | 27 class PubSummaryManagerTest extends AbstractContextTest { |
| 28 /** |
| 29 * The path to the root of the pubcache directory used in these tests. The |
| 30 * path has not been converted to the current platform, and is therefore only |
| 31 * appropriate for composing paths that will later be converted. |
| 32 */ |
| 28 static const String CACHE = '/home/.pub-cache/hosted/pub.dartlang.org'; | 33 static const String CACHE = '/home/.pub-cache/hosted/pub.dartlang.org'; |
| 29 | 34 |
| 30 PubSummaryManager manager; | 35 PubSummaryManager manager; |
| 31 | 36 |
| 37 Folder getFolder(String path) => |
| 38 resourceProvider.getFolder(resourceProvider.convertPath(path)); |
| 39 |
| 40 File newFile(String path, String content) { |
| 41 //, [int stamp]) { |
| 42 return resourceProvider.newFile( |
| 43 resourceProvider.convertPath(path), content); |
| 44 } |
| 45 |
| 46 Folder newFolder(String path) => |
| 47 resourceProvider.newFolder(resourceProvider.convertPath(path)); |
| 48 |
| 32 void setUp() { | 49 void setUp() { |
| 33 super.setUp(); | 50 super.setUp(); |
| 34 _createManager(); | 51 _createManager(); |
| 35 } | 52 } |
| 36 | 53 |
| 37 test_computeUnlinkedForFolder() async { | 54 test_computeUnlinkedForFolder() async { |
| 38 // Create package files. | 55 // Create package files. |
| 39 resourceProvider.newFile( | 56 newFile( |
| 40 '/flutter/aaa/lib/a.dart', | 57 '/flutter/aaa/lib/a.dart', |
| 41 ''' | 58 ''' |
| 42 class A {} | 59 class A {} |
| 43 '''); | 60 '''); |
| 44 resourceProvider.newFile( | 61 newFile( |
| 45 '/flutter/bbb/lib/b.dart', | 62 '/flutter/bbb/lib/b.dart', |
| 46 ''' | 63 ''' |
| 47 class B {} | 64 class B {} |
| 48 '''); | 65 '''); |
| 49 | 66 |
| 50 // Configure packages resolution. | 67 // Configure packages resolution. |
| 51 Folder libFolderA = resourceProvider.newFolder('/flutter/aaa/lib'); | 68 Folder libFolderA = newFolder('/flutter/aaa/lib'); |
| 52 Folder libFolderB = resourceProvider.newFolder('/flutter/bbb/lib'); | 69 Folder libFolderB = newFolder('/flutter/bbb/lib'); |
| 53 context.sourceFactory = new SourceFactory(<UriResolver>[ | 70 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 54 sdkResolver, | 71 sdkResolver, |
| 55 resourceResolver, | 72 resourceResolver, |
| 56 new PackageMapUriResolver(resourceProvider, { | 73 new PackageMapUriResolver(resourceProvider, { |
| 57 'aaa': [libFolderA], | 74 'aaa': [libFolderA], |
| 58 'bbb': [libFolderB], | 75 'bbb': [libFolderB], |
| 59 }) | 76 }) |
| 60 ]); | 77 ]); |
| 61 | 78 |
| 62 await manager.computeUnlinkedForFolder('aaa', libFolderA); | 79 await manager.computeUnlinkedForFolder('aaa', libFolderA); |
| 63 await manager.computeUnlinkedForFolder('bbb', libFolderB); | 80 await manager.computeUnlinkedForFolder('bbb', libFolderB); |
| 64 | 81 |
| 65 // The files must be created. | 82 // The files must be created. |
| 66 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); | 83 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); |
| 67 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 84 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 68 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 85 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 69 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 86 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 70 } | 87 } |
| 71 | 88 |
| 72 test_getLinkedBundles_cached() async { | 89 test_getLinkedBundles_cached() async { |
| 73 String pathA1 = '$CACHE/aaa-1.0.0'; | 90 String pathA1 = '$CACHE/aaa-1.0.0'; |
| 74 String pathA2 = '$CACHE/aaa-2.0.0'; | 91 String pathA2 = '$CACHE/aaa-2.0.0'; |
| 75 resourceProvider.newFile( | 92 newFile( |
| 76 '$pathA1/lib/a.dart', | 93 '$pathA1/lib/a.dart', |
| 77 ''' | 94 ''' |
| 78 class A {} | 95 class A {} |
| 79 int a; | 96 int a; |
| 80 '''); | 97 '''); |
| 81 resourceProvider.newFile( | 98 newFile( |
| 82 '$pathA2/lib/a.dart', | 99 '$pathA2/lib/a.dart', |
| 83 ''' | 100 ''' |
| 84 class A2 {} | 101 class A2 {} |
| 85 int a; | 102 int a; |
| 86 '''); | 103 '''); |
| 87 resourceProvider.newFile( | 104 newFile( |
| 88 '$CACHE/bbb/lib/b.dart', | 105 '$CACHE/bbb/lib/b.dart', |
| 89 ''' | 106 ''' |
| 90 import 'package:aaa/a.dart'; | 107 import 'package:aaa/a.dart'; |
| 91 A b; | 108 A b; |
| 92 '''); | 109 '''); |
| 93 Folder folderA1 = resourceProvider.getFolder(pathA1); | 110 Folder folderA1 = getFolder(pathA1); |
| 94 Folder folderA2 = resourceProvider.getFolder(pathA2); | 111 Folder folderA2 = getFolder(pathA2); |
| 95 Folder folderB = resourceProvider.getFolder('$CACHE/bbb'); | 112 Folder folderB = getFolder('$CACHE/bbb'); |
| 96 | 113 |
| 97 // Configure packages resolution. | 114 // Configure packages resolution. |
| 98 Folder libFolderA1 = resourceProvider.newFolder('$pathA1/lib'); | 115 Folder libFolderA1 = newFolder('$pathA1/lib'); |
| 99 Folder libFolderA2 = resourceProvider.newFolder('$pathA2/lib'); | 116 Folder libFolderA2 = newFolder('$pathA2/lib'); |
| 100 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 117 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 101 context.sourceFactory = new SourceFactory(<UriResolver>[ | 118 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 102 sdkResolver, | 119 sdkResolver, |
| 103 resourceResolver, | 120 resourceResolver, |
| 104 new PackageMapUriResolver(resourceProvider, { | 121 new PackageMapUriResolver(resourceProvider, { |
| 105 'aaa': [libFolderA1], | 122 'aaa': [libFolderA1], |
| 106 'bbb': [libFolderB], | 123 'bbb': [libFolderB], |
| 107 }) | 124 }) |
| 108 ]); | 125 ]); |
| 109 | 126 |
| 110 // Session 1. | 127 // Session 1. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 test_getLinkedBundles_cached_declaredVariables_export() async { | 194 test_getLinkedBundles_cached_declaredVariables_export() async { |
| 178 await _testImpl_getLinkedBundles_cached_declaredVariables('export'); | 195 await _testImpl_getLinkedBundles_cached_declaredVariables('export'); |
| 179 } | 196 } |
| 180 | 197 |
| 181 test_getLinkedBundles_cached_declaredVariables_import() async { | 198 test_getLinkedBundles_cached_declaredVariables_import() async { |
| 182 await _testImpl_getLinkedBundles_cached_declaredVariables('import'); | 199 await _testImpl_getLinkedBundles_cached_declaredVariables('import'); |
| 183 } | 200 } |
| 184 | 201 |
| 185 test_getLinkedBundles_cached_differentSdk() async { | 202 test_getLinkedBundles_cached_differentSdk() async { |
| 186 String pathA = '$CACHE/aaa'; | 203 String pathA = '$CACHE/aaa'; |
| 187 resourceProvider.newFile( | 204 newFile( |
| 188 '$pathA/lib/a.dart', | 205 '$pathA/lib/a.dart', |
| 189 ''' | 206 ''' |
| 190 class A {} | 207 class A {} |
| 191 int a; | 208 int a; |
| 192 '''); | 209 '''); |
| 193 resourceProvider.newFile( | 210 newFile( |
| 194 '$CACHE/bbb/lib/b.dart', | 211 '$CACHE/bbb/lib/b.dart', |
| 195 ''' | 212 ''' |
| 196 import 'package:aaa/a.dart'; | 213 import 'package:aaa/a.dart'; |
| 197 A b; | 214 A b; |
| 198 '''); | 215 '''); |
| 199 Folder folderA = resourceProvider.getFolder(pathA); | 216 Folder folderA = getFolder(pathA); |
| 200 Folder folderB = resourceProvider.getFolder('$CACHE/bbb'); | 217 Folder folderB = getFolder('$CACHE/bbb'); |
| 201 | 218 |
| 202 // Configure packages resolution. | 219 // Configure packages resolution. |
| 203 Folder libFolderA = resourceProvider.newFolder('$pathA/lib'); | 220 Folder libFolderA = newFolder('$pathA/lib'); |
| 204 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 221 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 205 context.sourceFactory = new SourceFactory(<UriResolver>[ | 222 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 206 sdkResolver, | 223 sdkResolver, |
| 207 resourceResolver, | 224 resourceResolver, |
| 208 new PackageMapUriResolver(resourceProvider, { | 225 new PackageMapUriResolver(resourceProvider, { |
| 209 'aaa': [libFolderA], | 226 'aaa': [libFolderA], |
| 210 'bbb': [libFolderB], | 227 'bbb': [libFolderB], |
| 211 }) | 228 }) |
| 212 ]); | 229 ]); |
| 213 | 230 |
| 214 // Session 1. | 231 // Session 1. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); | 280 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); |
| 264 expect(packageA.linkedHash, isNot(linkedHashA)); | 281 expect(packageA.linkedHash, isNot(linkedHashA)); |
| 265 expect(packageB.linkedHash, isNot(linkedHashB)); | 282 expect(packageB.linkedHash, isNot(linkedHashB)); |
| 266 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds'); | 283 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds'); |
| 267 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); | 284 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); |
| 268 } | 285 } |
| 269 } | 286 } |
| 270 | 287 |
| 271 test_getLinkedBundles_cached_inconsistent_majorVersion() async { | 288 test_getLinkedBundles_cached_inconsistent_majorVersion() async { |
| 272 String pathA = '$CACHE/aaa'; | 289 String pathA = '$CACHE/aaa'; |
| 273 resourceProvider.newFile( | 290 newFile( |
| 274 '$pathA/lib/a.dart', | 291 '$pathA/lib/a.dart', |
| 275 ''' | 292 ''' |
| 276 class A {} | 293 class A {} |
| 277 int a; | 294 int a; |
| 278 '''); | 295 '''); |
| 279 // Configure packages resolution. | 296 // Configure packages resolution. |
| 280 Folder libFolderA = resourceProvider.newFolder('$pathA/lib'); | 297 Folder libFolderA = newFolder('$pathA/lib'); |
| 281 context.sourceFactory = new SourceFactory(<UriResolver>[ | 298 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 282 sdkResolver, | 299 sdkResolver, |
| 283 resourceResolver, | 300 resourceResolver, |
| 284 new PackageMapUriResolver(resourceProvider, { | 301 new PackageMapUriResolver(resourceProvider, { |
| 285 'aaa': [libFolderA], | 302 'aaa': [libFolderA], |
| 286 }) | 303 }) |
| 287 ]); | 304 ]); |
| 288 | 305 |
| 289 // Session 1. | 306 // Session 1. |
| 290 // Create the linked bundle and cache it in a file. | 307 // Create the linked bundle and cache it in a file. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 303 // It cannot use the previously cache linked bundle. | 320 // It cannot use the previously cache linked bundle. |
| 304 // The reason is that we cannot use the cached unlinked bundle. | 321 // The reason is that we cannot use the cached unlinked bundle. |
| 305 { | 322 { |
| 306 _createManager(majorVersion: 12345); | 323 _createManager(majorVersion: 12345); |
| 307 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); | 324 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 308 expect(linkedPackages, isEmpty); | 325 expect(linkedPackages, isEmpty); |
| 309 } | 326 } |
| 310 } | 327 } |
| 311 | 328 |
| 312 test_getLinkedBundles_hasCycle() async { | 329 test_getLinkedBundles_hasCycle() async { |
| 313 resourceProvider.newFile( | 330 newFile( |
| 314 '$CACHE/aaa/lib/a.dart', | 331 '$CACHE/aaa/lib/a.dart', |
| 315 ''' | 332 ''' |
| 316 import 'package:bbb/b.dart'; | 333 import 'package:bbb/b.dart'; |
| 317 class A {} | 334 class A {} |
| 318 int a1; | 335 int a1; |
| 319 B a2; | 336 B a2; |
| 320 '''); | 337 '''); |
| 321 resourceProvider.newFile( | 338 newFile( |
| 322 '$CACHE/bbb/lib/b.dart', | 339 '$CACHE/bbb/lib/b.dart', |
| 323 ''' | 340 ''' |
| 324 import 'package:ccc/c.dart'; | 341 import 'package:ccc/c.dart'; |
| 325 class B {} | 342 class B {} |
| 326 C b; | 343 C b; |
| 327 '''); | 344 '''); |
| 328 resourceProvider.newFile( | 345 newFile( |
| 329 '$CACHE/ccc/lib/c.dart', | 346 '$CACHE/ccc/lib/c.dart', |
| 330 ''' | 347 ''' |
| 331 import 'package:aaa/a.dart'; | 348 import 'package:aaa/a.dart'; |
| 332 import 'package:ddd/d.dart'; | 349 import 'package:ddd/d.dart'; |
| 333 class C {} | 350 class C {} |
| 334 A c1; | 351 A c1; |
| 335 D c2; | 352 D c2; |
| 336 '''); | 353 '''); |
| 337 resourceProvider.newFile( | 354 newFile( |
| 338 '$CACHE/ddd/lib/d.dart', | 355 '$CACHE/ddd/lib/d.dart', |
| 339 ''' | 356 ''' |
| 340 class D {} | 357 class D {} |
| 341 String d; | 358 String d; |
| 342 '''); | 359 '''); |
| 343 | 360 |
| 344 // Configure packages resolution. | 361 // Configure packages resolution. |
| 345 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 362 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 346 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 363 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 347 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); | 364 Folder libFolderC = newFolder('$CACHE/ccc/lib'); |
| 348 Folder libFolderD = resourceProvider.newFolder('$CACHE/ddd/lib'); | 365 Folder libFolderD = newFolder('$CACHE/ddd/lib'); |
| 349 context.sourceFactory = new SourceFactory(<UriResolver>[ | 366 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 350 sdkResolver, | 367 sdkResolver, |
| 351 resourceResolver, | 368 resourceResolver, |
| 352 new PackageMapUriResolver(resourceProvider, { | 369 new PackageMapUriResolver(resourceProvider, { |
| 353 'aaa': [libFolderA], | 370 'aaa': [libFolderA], |
| 354 'bbb': [libFolderB], | 371 'bbb': [libFolderB], |
| 355 'ccc': [libFolderC], | 372 'ccc': [libFolderC], |
| 356 'ddd': [libFolderD], | 373 'ddd': [libFolderD], |
| 357 }) | 374 }) |
| 358 ]); | 375 ]); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 { | 417 { |
| 401 LinkedPubPackage linkedPackage = linkedPackages | 418 LinkedPubPackage linkedPackage = linkedPackages |
| 402 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ddd'); | 419 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ddd'); |
| 403 expect(linkedPackage.linked.linkedLibraryUris, ['package:ddd/d.dart']); | 420 expect(linkedPackage.linked.linkedLibraryUris, ['package:ddd/d.dart']); |
| 404 _assertHasLinkedVariable(linkedPackage, 'd', 'String', | 421 _assertHasLinkedVariable(linkedPackage, 'd', 'String', |
| 405 expectedTypeNameUri: 'dart:core'); | 422 expectedTypeNameUri: 'dart:core'); |
| 406 } | 423 } |
| 407 } | 424 } |
| 408 | 425 |
| 409 test_getLinkedBundles_missingBundle_listed() async { | 426 test_getLinkedBundles_missingBundle_listed() async { |
| 410 resourceProvider.newFile( | 427 newFile( |
| 411 '$CACHE/aaa/lib/a.dart', | 428 '$CACHE/aaa/lib/a.dart', |
| 412 ''' | 429 ''' |
| 413 import 'package:bbb/b.dart'; | 430 import 'package:bbb/b.dart'; |
| 414 B a; | 431 B a; |
| 415 '''); | 432 '''); |
| 416 resourceProvider.newFile( | 433 newFile( |
| 417 '$CACHE/bbb/lib/b.dart', | 434 '$CACHE/bbb/lib/b.dart', |
| 418 ''' | 435 ''' |
| 419 class B {} | 436 class B {} |
| 420 '''); | 437 '''); |
| 421 | 438 |
| 422 // Configure packages resolution. | 439 // Configure packages resolution. |
| 423 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 440 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 424 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 441 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 425 context.sourceFactory = new SourceFactory(<UriResolver>[ | 442 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 426 sdkResolver, | 443 sdkResolver, |
| 427 resourceResolver, | 444 resourceResolver, |
| 428 new PackageMapUriResolver(resourceProvider, { | 445 new PackageMapUriResolver(resourceProvider, { |
| 429 'aaa': [libFolderA], | 446 'aaa': [libFolderA], |
| 430 'bbb': [libFolderB], | 447 'bbb': [libFolderB], |
| 431 }) | 448 }) |
| 432 ]); | 449 ]); |
| 433 | 450 |
| 434 // Ensure unlinked bundles for 'aaa'. | 451 // Ensure unlinked bundles for 'aaa'. |
| 435 await manager.computeUnlinkedForFolder('aaa', libFolderA); | 452 await manager.computeUnlinkedForFolder('aaa', libFolderA); |
| 436 | 453 |
| 437 // Try to link. | 454 // Try to link. |
| 438 // Neither 'aaa' nor 'bbb' are linked. | 455 // Neither 'aaa' nor 'bbb' are linked. |
| 439 // 'bbb' does not have the unlinked bundle. | 456 // 'bbb' does not have the unlinked bundle. |
| 440 // 'aaa' is not linked because it references 'bbb', which is listed. | 457 // 'aaa' is not linked because it references 'bbb', which is listed. |
| 441 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); | 458 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 442 expect(linkedPackages, hasLength(0)); | 459 expect(linkedPackages, hasLength(0)); |
| 443 } | 460 } |
| 444 | 461 |
| 445 test_getLinkedBundles_missingBundle_listed_chained() async { | 462 test_getLinkedBundles_missingBundle_listed_chained() async { |
| 446 resourceProvider.newFile( | 463 newFile( |
| 447 '$CACHE/aaa/lib/a.dart', | 464 '$CACHE/aaa/lib/a.dart', |
| 448 ''' | 465 ''' |
| 449 import 'package:bbb/b.dart'; | 466 import 'package:bbb/b.dart'; |
| 450 '''); | 467 '''); |
| 451 resourceProvider.newFile( | 468 newFile( |
| 452 '$CACHE/bbb/lib/b.dart', | 469 '$CACHE/bbb/lib/b.dart', |
| 453 ''' | 470 ''' |
| 454 import 'package:ccc/c.dart'; | 471 import 'package:ccc/c.dart'; |
| 455 '''); | 472 '''); |
| 456 resourceProvider.newFile( | 473 newFile( |
| 457 '$CACHE/ccc/lib/c.dart', | 474 '$CACHE/ccc/lib/c.dart', |
| 458 ''' | 475 ''' |
| 459 class C {} | 476 class C {} |
| 460 '''); | 477 '''); |
| 461 | 478 |
| 462 // Configure packages resolution. | 479 // Configure packages resolution. |
| 463 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 480 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 464 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 481 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 465 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); | 482 Folder libFolderC = newFolder('$CACHE/ccc/lib'); |
| 466 context.sourceFactory = new SourceFactory(<UriResolver>[ | 483 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 467 sdkResolver, | 484 sdkResolver, |
| 468 resourceResolver, | 485 resourceResolver, |
| 469 new PackageMapUriResolver(resourceProvider, { | 486 new PackageMapUriResolver(resourceProvider, { |
| 470 'aaa': [libFolderA], | 487 'aaa': [libFolderA], |
| 471 'bbb': [libFolderB], | 488 'bbb': [libFolderB], |
| 472 'ccc': [libFolderC], | 489 'ccc': [libFolderC], |
| 473 }) | 490 }) |
| 474 ]); | 491 ]); |
| 475 | 492 |
| 476 // Ensure unlinked bundles. | 493 // Ensure unlinked bundles. |
| 477 await manager.computeUnlinkedForFolder('aaa', libFolderA); | 494 await manager.computeUnlinkedForFolder('aaa', libFolderA); |
| 478 await manager.computeUnlinkedForFolder('bbb', libFolderB); | 495 await manager.computeUnlinkedForFolder('bbb', libFolderB); |
| 479 | 496 |
| 480 // Try to link. | 497 // Try to link. |
| 481 // Neither 'aaa' nor 'bbb' are linked. | 498 // Neither 'aaa' nor 'bbb' are linked. |
| 482 // 'ccc' is listed in the package map, but its unlinked bundle is not ready. | 499 // 'ccc' is listed in the package map, but its unlinked bundle is not ready. |
| 483 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); | 500 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 484 expect(linkedPackages, hasLength(0)); | 501 expect(linkedPackages, hasLength(0)); |
| 485 } | 502 } |
| 486 | 503 |
| 487 test_getLinkedBundles_missingBundle_listed_partial() async { | 504 test_getLinkedBundles_missingBundle_listed_partial() async { |
| 488 resourceProvider.newFile( | 505 newFile( |
| 489 '$CACHE/aaa/lib/a.dart', | 506 '$CACHE/aaa/lib/a.dart', |
| 490 ''' | 507 ''' |
| 491 int a; | 508 int a; |
| 492 '''); | 509 '''); |
| 493 resourceProvider.newFile( | 510 newFile( |
| 494 '$CACHE/bbb/lib/b.dart', | 511 '$CACHE/bbb/lib/b.dart', |
| 495 ''' | 512 ''' |
| 496 import 'package:ccc/c.dart'; | 513 import 'package:ccc/c.dart'; |
| 497 C b; | 514 C b; |
| 498 '''); | 515 '''); |
| 499 resourceProvider.newFile( | 516 newFile( |
| 500 '$CACHE/ccc/lib/c.dart', | 517 '$CACHE/ccc/lib/c.dart', |
| 501 ''' | 518 ''' |
| 502 class C {} | 519 class C {} |
| 503 '''); | 520 '''); |
| 504 | 521 |
| 505 // Configure packages resolution. | 522 // Configure packages resolution. |
| 506 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 523 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 507 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 524 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 508 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); | 525 Folder libFolderC = newFolder('$CACHE/ccc/lib'); |
| 509 context.sourceFactory = new SourceFactory(<UriResolver>[ | 526 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 510 sdkResolver, | 527 sdkResolver, |
| 511 resourceResolver, | 528 resourceResolver, |
| 512 new PackageMapUriResolver(resourceProvider, { | 529 new PackageMapUriResolver(resourceProvider, { |
| 513 'aaa': [libFolderA], | 530 'aaa': [libFolderA], |
| 514 'bbb': [libFolderB], | 531 'bbb': [libFolderB], |
| 515 'ccc': [libFolderC], | 532 'ccc': [libFolderC], |
| 516 }) | 533 }) |
| 517 ]); | 534 ]); |
| 518 | 535 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 529 // package:aaa | 546 // package:aaa |
| 530 { | 547 { |
| 531 LinkedPubPackage linkedPackage = linkedPackages | 548 LinkedPubPackage linkedPackage = linkedPackages |
| 532 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); | 549 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 533 _assertHasLinkedVariable(linkedPackage, 'a', 'int', | 550 _assertHasLinkedVariable(linkedPackage, 'a', 'int', |
| 534 expectedTypeNameUri: 'dart:core'); | 551 expectedTypeNameUri: 'dart:core'); |
| 535 } | 552 } |
| 536 } | 553 } |
| 537 | 554 |
| 538 test_getLinkedBundles_missingBundle_notListed() async { | 555 test_getLinkedBundles_missingBundle_notListed() async { |
| 539 resourceProvider.newFile( | 556 newFile( |
| 540 '$CACHE/aaa/lib/a.dart', | 557 '$CACHE/aaa/lib/a.dart', |
| 541 ''' | 558 ''' |
| 542 int a; | 559 int a; |
| 543 '''); | 560 '''); |
| 544 resourceProvider.newFile( | 561 newFile( |
| 545 '$CACHE/bbb/lib/b.dart', | 562 '$CACHE/bbb/lib/b.dart', |
| 546 ''' | 563 ''' |
| 547 import 'package:ccc/c.dart'; | 564 import 'package:ccc/c.dart'; |
| 548 int b1; | 565 int b1; |
| 549 C b2; | 566 C b2; |
| 550 '''); | 567 '''); |
| 551 | 568 |
| 552 // Configure packages resolution. | 569 // Configure packages resolution. |
| 553 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 570 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 554 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 571 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 555 context.sourceFactory = new SourceFactory(<UriResolver>[ | 572 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 556 sdkResolver, | 573 sdkResolver, |
| 557 resourceResolver, | 574 resourceResolver, |
| 558 new PackageMapUriResolver(resourceProvider, { | 575 new PackageMapUriResolver(resourceProvider, { |
| 559 'aaa': [libFolderA], | 576 'aaa': [libFolderA], |
| 560 'bbb': [libFolderB], | 577 'bbb': [libFolderB], |
| 561 }) | 578 }) |
| 562 ]); | 579 ]); |
| 563 | 580 |
| 564 // Ensure unlinked bundles. | 581 // Ensure unlinked bundles. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 585 LinkedPubPackage linkedPackage = linkedPackages | 602 LinkedPubPackage linkedPackage = linkedPackages |
| 586 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); | 603 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 587 _assertHasLinkedVariable(linkedPackage, 'b1', 'int', | 604 _assertHasLinkedVariable(linkedPackage, 'b1', 'int', |
| 588 expectedTypeNameUri: 'dart:core'); | 605 expectedTypeNameUri: 'dart:core'); |
| 589 _assertHasLinkedVariable(linkedPackage, 'b2', 'C', | 606 _assertHasLinkedVariable(linkedPackage, 'b2', 'C', |
| 590 expectedToBeResolved: false); | 607 expectedToBeResolved: false); |
| 591 } | 608 } |
| 592 } | 609 } |
| 593 | 610 |
| 594 test_getLinkedBundles_missingLibrary() async { | 611 test_getLinkedBundles_missingLibrary() async { |
| 595 resourceProvider.newFile( | 612 newFile( |
| 596 '$CACHE/aaa/lib/a.dart', | 613 '$CACHE/aaa/lib/a.dart', |
| 597 ''' | 614 ''' |
| 598 import 'package:bbb/b2.dart'; | 615 import 'package:bbb/b2.dart'; |
| 599 int a1; | 616 int a1; |
| 600 B2 a2; | 617 B2 a2; |
| 601 '''); | 618 '''); |
| 602 resourceProvider.newFile( | 619 newFile( |
| 603 '$CACHE/bbb/lib/b.dart', | 620 '$CACHE/bbb/lib/b.dart', |
| 604 ''' | 621 ''' |
| 605 class B {} | 622 class B {} |
| 606 int b = 42; | 623 int b = 42; |
| 607 '''); | 624 '''); |
| 608 | 625 |
| 609 // Configure packages resolution. | 626 // Configure packages resolution. |
| 610 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 627 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 611 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 628 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 612 context.sourceFactory = new SourceFactory(<UriResolver>[ | 629 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 613 sdkResolver, | 630 sdkResolver, |
| 614 resourceResolver, | 631 resourceResolver, |
| 615 new PackageMapUriResolver(resourceProvider, { | 632 new PackageMapUriResolver(resourceProvider, { |
| 616 'aaa': [libFolderA], | 633 'aaa': [libFolderA], |
| 617 'bbb': [libFolderB], | 634 'bbb': [libFolderB], |
| 618 }) | 635 }) |
| 619 ]); | 636 ]); |
| 620 | 637 |
| 621 // Ensure unlinked bundles. | 638 // Ensure unlinked bundles. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 641 // package:bbb | 658 // package:bbb |
| 642 { | 659 { |
| 643 LinkedPubPackage linkedPackage = linkedPackages | 660 LinkedPubPackage linkedPackage = linkedPackages |
| 644 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); | 661 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 645 _assertHasLinkedVariable(linkedPackage, 'b', 'int', | 662 _assertHasLinkedVariable(linkedPackage, 'b', 'int', |
| 646 expectedTypeNameUri: 'dart:core'); | 663 expectedTypeNameUri: 'dart:core'); |
| 647 } | 664 } |
| 648 } | 665 } |
| 649 | 666 |
| 650 test_getLinkedBundles_missingLibrary_hasCycle() async { | 667 test_getLinkedBundles_missingLibrary_hasCycle() async { |
| 651 resourceProvider.newFile( | 668 newFile( |
| 652 '$CACHE/aaa/lib/a.dart', | 669 '$CACHE/aaa/lib/a.dart', |
| 653 ''' | 670 ''' |
| 654 import 'package:bbb/b.dart'; | 671 import 'package:bbb/b.dart'; |
| 655 B a; | 672 B a; |
| 656 '''); | 673 '''); |
| 657 resourceProvider.newFile( | 674 newFile( |
| 658 '$CACHE/bbb/lib/b.dart', | 675 '$CACHE/bbb/lib/b.dart', |
| 659 ''' | 676 ''' |
| 660 import 'package:aaa/a.dart'; | 677 import 'package:aaa/a.dart'; |
| 661 import 'package:ccc/c2.dart'; | 678 import 'package:ccc/c2.dart'; |
| 662 class B {} | 679 class B {} |
| 663 int b1; | 680 int b1; |
| 664 C2 b2; | 681 C2 b2; |
| 665 '''); | 682 '''); |
| 666 resourceProvider.newFile( | 683 newFile( |
| 667 '$CACHE/ccc/lib/c.dart', | 684 '$CACHE/ccc/lib/c.dart', |
| 668 ''' | 685 ''' |
| 669 class C {} | 686 class C {} |
| 670 int c; | 687 int c; |
| 671 '''); | 688 '''); |
| 672 | 689 |
| 673 // Configure packages resolution. | 690 // Configure packages resolution. |
| 674 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 691 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 675 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 692 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 676 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); | 693 Folder libFolderC = newFolder('$CACHE/ccc/lib'); |
| 677 context.sourceFactory = new SourceFactory(<UriResolver>[ | 694 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 678 sdkResolver, | 695 sdkResolver, |
| 679 resourceResolver, | 696 resourceResolver, |
| 680 new PackageMapUriResolver(resourceProvider, { | 697 new PackageMapUriResolver(resourceProvider, { |
| 681 'aaa': [libFolderA], | 698 'aaa': [libFolderA], |
| 682 'bbb': [libFolderB], | 699 'bbb': [libFolderB], |
| 683 'ccc': [libFolderC], | 700 'ccc': [libFolderC], |
| 684 }) | 701 }) |
| 685 ]); | 702 ]); |
| 686 | 703 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 // package:ccc | 735 // package:ccc |
| 719 { | 736 { |
| 720 LinkedPubPackage linkedPackage = linkedPackages | 737 LinkedPubPackage linkedPackage = linkedPackages |
| 721 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ccc'); | 738 .singleWhere((linkedPackage) => linkedPackage.package.name == 'ccc'); |
| 722 _assertHasLinkedVariable(linkedPackage, 'c', 'int', | 739 _assertHasLinkedVariable(linkedPackage, 'c', 'int', |
| 723 expectedTypeNameUri: 'dart:core'); | 740 expectedTypeNameUri: 'dart:core'); |
| 724 } | 741 } |
| 725 } | 742 } |
| 726 | 743 |
| 727 test_getLinkedBundles_noCycle() async { | 744 test_getLinkedBundles_noCycle() async { |
| 728 resourceProvider.newFile( | 745 newFile( |
| 729 '$CACHE/aaa/lib/a.dart', | 746 '$CACHE/aaa/lib/a.dart', |
| 730 ''' | 747 ''' |
| 731 class A {} | 748 class A {} |
| 732 int a; | 749 int a; |
| 733 '''); | 750 '''); |
| 734 resourceProvider.newFile( | 751 newFile( |
| 735 '$CACHE/bbb/lib/b.dart', | 752 '$CACHE/bbb/lib/b.dart', |
| 736 ''' | 753 ''' |
| 737 import 'package:aaa/a.dart'; | 754 import 'package:aaa/a.dart'; |
| 738 A b; | 755 A b; |
| 739 '''); | 756 '''); |
| 740 | 757 |
| 741 // Configure packages resolution. | 758 // Configure packages resolution. |
| 742 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 759 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 743 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 760 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 744 context.sourceFactory = new SourceFactory(<UriResolver>[ | 761 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 745 sdkResolver, | 762 sdkResolver, |
| 746 resourceResolver, | 763 resourceResolver, |
| 747 new PackageMapUriResolver(resourceProvider, { | 764 new PackageMapUriResolver(resourceProvider, { |
| 748 'aaa': [libFolderA], | 765 'aaa': [libFolderA], |
| 749 'bbb': [libFolderB], | 766 'bbb': [libFolderB], |
| 750 }) | 767 }) |
| 751 ]); | 768 ]); |
| 752 | 769 |
| 753 // Ensure unlinked bundles. | 770 // Ensure unlinked bundles. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 769 // package:bbb | 786 // package:bbb |
| 770 { | 787 { |
| 771 LinkedPubPackage linkedPackage = linkedPackages | 788 LinkedPubPackage linkedPackage = linkedPackages |
| 772 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); | 789 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb'); |
| 773 _assertHasLinkedVariable(linkedPackage, 'b', 'A', | 790 _assertHasLinkedVariable(linkedPackage, 'b', 'A', |
| 774 expectedTypeNameUri: 'package:aaa/a.dart'); | 791 expectedTypeNameUri: 'package:aaa/a.dart'); |
| 775 } | 792 } |
| 776 } | 793 } |
| 777 | 794 |
| 778 test_getLinkedBundles_noCycle_relativeUri() async { | 795 test_getLinkedBundles_noCycle_relativeUri() async { |
| 779 resourceProvider.newFile( | 796 newFile( |
| 780 '$CACHE/aaa/lib/a.dart', | 797 '$CACHE/aaa/lib/a.dart', |
| 781 ''' | 798 ''' |
| 782 import 'src/a2.dart'; | 799 import 'src/a2.dart'; |
| 783 A a; | 800 A a; |
| 784 '''); | 801 '''); |
| 785 resourceProvider.newFile( | 802 newFile( |
| 786 '$CACHE/aaa/lib/src/a2.dart', | 803 '$CACHE/aaa/lib/src/a2.dart', |
| 787 ''' | 804 ''' |
| 788 class A {} | 805 class A {} |
| 789 '''); | 806 '''); |
| 790 | 807 |
| 791 // Configure packages resolution. | 808 // Configure packages resolution. |
| 792 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 809 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 793 context.sourceFactory = new SourceFactory(<UriResolver>[ | 810 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 794 sdkResolver, | 811 sdkResolver, |
| 795 resourceResolver, | 812 resourceResolver, |
| 796 new PackageMapUriResolver(resourceProvider, { | 813 new PackageMapUriResolver(resourceProvider, { |
| 797 'aaa': [libFolderA], | 814 'aaa': [libFolderA], |
| 798 }) | 815 }) |
| 799 ]); | 816 ]); |
| 800 | 817 |
| 801 // Ensure unlinked bundles. | 818 // Ensure unlinked bundles. |
| 802 manager.getUnlinkedBundles(context); | 819 manager.getUnlinkedBundles(context); |
| 803 await manager.onUnlinkedComplete; | 820 await manager.onUnlinkedComplete; |
| 804 | 821 |
| 805 // Link. | 822 // Link. |
| 806 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); | 823 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 807 expect(linkedPackages, hasLength(1)); | 824 expect(linkedPackages, hasLength(1)); |
| 808 | 825 |
| 809 // package:aaa | 826 // package:aaa |
| 810 { | 827 { |
| 811 LinkedPubPackage linkedPackage = linkedPackages | 828 LinkedPubPackage linkedPackage = linkedPackages |
| 812 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); | 829 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 813 _assertHasLinkedVariable(linkedPackage, 'a', 'A', | 830 _assertHasLinkedVariable(linkedPackage, 'a', 'A', |
| 814 expectedTypeNameUri: 'src/a2.dart'); | 831 expectedTypeNameUri: 'src/a2.dart'); |
| 815 } | 832 } |
| 816 } | 833 } |
| 817 | 834 |
| 818 test_getLinkedBundles_noCycle_withExport() async { | 835 test_getLinkedBundles_noCycle_withExport() async { |
| 819 resourceProvider.newFile( | 836 newFile( |
| 820 '$CACHE/aaa/lib/a.dart', | 837 '$CACHE/aaa/lib/a.dart', |
| 821 ''' | 838 ''' |
| 822 import 'package:bbb/b.dart'; | 839 import 'package:bbb/b.dart'; |
| 823 C a; | 840 C a; |
| 824 '''); | 841 '''); |
| 825 resourceProvider.newFile( | 842 newFile( |
| 826 '$CACHE/bbb/lib/b.dart', | 843 '$CACHE/bbb/lib/b.dart', |
| 827 ''' | 844 ''' |
| 828 export 'package:ccc/c.dart'; | 845 export 'package:ccc/c.dart'; |
| 829 '''); | 846 '''); |
| 830 resourceProvider.newFile( | 847 newFile( |
| 831 '$CACHE/ccc/lib/c.dart', | 848 '$CACHE/ccc/lib/c.dart', |
| 832 ''' | 849 ''' |
| 833 class C {} | 850 class C {} |
| 834 '''); | 851 '''); |
| 835 | 852 |
| 836 // Configure packages resolution. | 853 // Configure packages resolution. |
| 837 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 854 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 838 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 855 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 839 Folder libFolderC = resourceProvider.newFolder('$CACHE/ccc/lib'); | 856 Folder libFolderC = newFolder('$CACHE/ccc/lib'); |
| 840 context.sourceFactory = new SourceFactory(<UriResolver>[ | 857 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 841 sdkResolver, | 858 sdkResolver, |
| 842 resourceResolver, | 859 resourceResolver, |
| 843 new PackageMapUriResolver(resourceProvider, { | 860 new PackageMapUriResolver(resourceProvider, { |
| 844 'aaa': [libFolderA], | 861 'aaa': [libFolderA], |
| 845 'bbb': [libFolderB], | 862 'bbb': [libFolderB], |
| 846 'ccc': [libFolderC], | 863 'ccc': [libFolderC], |
| 847 }) | 864 }) |
| 848 ]); | 865 ]); |
| 849 | 866 |
| 850 // Ensure unlinked bundles. | 867 // Ensure unlinked bundles. |
| 851 manager.getUnlinkedBundles(context); | 868 manager.getUnlinkedBundles(context); |
| 852 await manager.onUnlinkedComplete; | 869 await manager.onUnlinkedComplete; |
| 853 | 870 |
| 854 // Now we should be able to get linked bundles. | 871 // Now we should be able to get linked bundles. |
| 855 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); | 872 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 856 expect(linkedPackages, hasLength(3)); | 873 expect(linkedPackages, hasLength(3)); |
| 857 | 874 |
| 858 // package:aaa | 875 // package:aaa |
| 859 { | 876 { |
| 860 LinkedPubPackage linkedPackage = linkedPackages | 877 LinkedPubPackage linkedPackage = linkedPackages |
| 861 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); | 878 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); |
| 862 _assertHasLinkedVariable(linkedPackage, 'a', 'C', | 879 _assertHasLinkedVariable(linkedPackage, 'a', 'C', |
| 863 expectedTypeNameUri: 'package:ccc/c.dart'); | 880 expectedTypeNameUri: 'package:ccc/c.dart'); |
| 864 } | 881 } |
| 865 } | 882 } |
| 866 | 883 |
| 867 test_getLinkedBundles_wrongScheme() async { | 884 test_getLinkedBundles_wrongScheme() async { |
| 868 resourceProvider.newFile( | 885 newFile( |
| 869 '$CACHE/aaa/lib/a.dart', | 886 '$CACHE/aaa/lib/a.dart', |
| 870 ''' | 887 ''' |
| 871 import 'xxx:yyy/zzz.dart'; | 888 import 'xxx:yyy/zzz.dart'; |
| 872 int a1; | 889 int a1; |
| 873 Z a2; | 890 Z a2; |
| 874 '''); | 891 '''); |
| 875 | 892 |
| 876 // Configure packages resolution. | 893 // Configure packages resolution. |
| 877 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 894 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 878 context.sourceFactory = new SourceFactory(<UriResolver>[ | 895 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 879 sdkResolver, | 896 sdkResolver, |
| 880 resourceResolver, | 897 resourceResolver, |
| 881 new PackageMapUriResolver(resourceProvider, { | 898 new PackageMapUriResolver(resourceProvider, { |
| 882 'aaa': [libFolderA], | 899 'aaa': [libFolderA], |
| 883 }) | 900 }) |
| 884 ]); | 901 ]); |
| 885 | 902 |
| 886 // Ensure unlinked bundles. | 903 // Ensure unlinked bundles. |
| 887 manager.getUnlinkedBundles(context); | 904 manager.getUnlinkedBundles(context); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 900 } | 917 } |
| 901 | 918 |
| 902 expect(getPackageName('package:foo/bar.dart'), 'foo'); | 919 expect(getPackageName('package:foo/bar.dart'), 'foo'); |
| 903 expect(getPackageName('package:foo/bar/baz.dart'), 'foo'); | 920 expect(getPackageName('package:foo/bar/baz.dart'), 'foo'); |
| 904 expect(getPackageName('wrong:foo/bar.dart'), isNull); | 921 expect(getPackageName('wrong:foo/bar.dart'), isNull); |
| 905 expect(getPackageName('package:foo'), isNull); | 922 expect(getPackageName('package:foo'), isNull); |
| 906 } | 923 } |
| 907 | 924 |
| 908 test_getUnlinkedBundles() async { | 925 test_getUnlinkedBundles() async { |
| 909 // Create package files. | 926 // Create package files. |
| 910 resourceProvider.newFile( | 927 newFile( |
| 911 '$CACHE/aaa/lib/a.dart', | 928 '$CACHE/aaa/lib/a.dart', |
| 912 ''' | 929 ''' |
| 913 class A {} | 930 class A {} |
| 914 '''); | 931 '''); |
| 915 resourceProvider.newFile( | 932 newFile( |
| 916 '$CACHE/aaa/lib/src/a2.dart', | 933 '$CACHE/aaa/lib/src/a2.dart', |
| 917 ''' | 934 ''' |
| 918 class A2 {} | 935 class A2 {} |
| 919 '''); | 936 '''); |
| 920 resourceProvider.newFile( | 937 newFile( |
| 921 '$CACHE/bbb/lib/b.dart', | 938 '$CACHE/bbb/lib/b.dart', |
| 922 ''' | 939 ''' |
| 923 class B {} | 940 class B {} |
| 924 '''); | 941 '''); |
| 925 | 942 |
| 926 // Configure packages resolution. | 943 // Configure packages resolution. |
| 927 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib'); | 944 Folder libFolderA = newFolder('$CACHE/aaa/lib'); |
| 928 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 945 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 929 context.sourceFactory = new SourceFactory(<UriResolver>[ | 946 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 930 sdkResolver, | 947 sdkResolver, |
| 931 resourceResolver, | 948 resourceResolver, |
| 932 new PackageMapUriResolver(resourceProvider, { | 949 new PackageMapUriResolver(resourceProvider, { |
| 933 'aaa': [libFolderA], | 950 'aaa': [libFolderA], |
| 934 'bbb': [libFolderB], | 951 'bbb': [libFolderB], |
| 935 }) | 952 }) |
| 936 ]); | 953 ]); |
| 937 | 954 |
| 938 // No unlinked bundles yet. | 955 // No unlinked bundles yet. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 968 | 985 |
| 969 // The files must be created. | 986 // The files must be created. |
| 970 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); | 987 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); |
| 971 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 988 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 972 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 989 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 973 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 990 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 974 } | 991 } |
| 975 | 992 |
| 976 test_getUnlinkedBundles_inconsistent_majorVersion() async { | 993 test_getUnlinkedBundles_inconsistent_majorVersion() async { |
| 977 // Create package files. | 994 // Create package files. |
| 978 resourceProvider.newFile( | 995 newFile( |
| 979 '$CACHE/aaa/lib/a.dart', | 996 '$CACHE/aaa/lib/a.dart', |
| 980 ''' | 997 ''' |
| 981 class A {} | 998 class A {} |
| 982 '''); | 999 '''); |
| 983 | 1000 |
| 984 // Configure packages resolution. | 1001 // Configure packages resolution. |
| 985 Folder libFolder = resourceProvider.newFolder('$CACHE/aaa/lib'); | 1002 Folder libFolder = newFolder('$CACHE/aaa/lib'); |
| 986 context.sourceFactory = new SourceFactory(<UriResolver>[ | 1003 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 987 sdkResolver, | 1004 sdkResolver, |
| 988 resourceResolver, | 1005 resourceResolver, |
| 989 new PackageMapUriResolver(resourceProvider, { | 1006 new PackageMapUriResolver(resourceProvider, { |
| 990 'aaa': [libFolder], | 1007 'aaa': [libFolder], |
| 991 }) | 1008 }) |
| 992 ]); | 1009 ]); |
| 993 | 1010 |
| 994 /** | 1011 /** |
| 995 * Verify that the [manager] has exactly one cache bundle `aaa`. | 1012 * Verify that the [manager] has exactly one cache bundle `aaa`. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1019 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 1036 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 1020 | 1037 |
| 1021 // Can read from the file again. | 1038 // Can read from the file again. |
| 1022 _createManager(); | 1039 _createManager(); |
| 1023 _assertSingleBundle(); | 1040 _assertSingleBundle(); |
| 1024 } | 1041 } |
| 1025 | 1042 |
| 1026 test_getUnlinkedBundles_notPubCache_dontCreate() async { | 1043 test_getUnlinkedBundles_notPubCache_dontCreate() async { |
| 1027 String aaaPath = '/Users/user/projects/aaa'; | 1044 String aaaPath = '/Users/user/projects/aaa'; |
| 1028 // Create package files. | 1045 // Create package files. |
| 1029 resourceProvider.newFile( | 1046 newFile( |
| 1030 '$aaaPath/lib/a.dart', | 1047 '$aaaPath/lib/a.dart', |
| 1031 ''' | 1048 ''' |
| 1032 class A {} | 1049 class A {} |
| 1033 '''); | 1050 '''); |
| 1034 resourceProvider.newFile( | 1051 newFile( |
| 1035 '$CACHE/bbb/lib/b.dart', | 1052 '$CACHE/bbb/lib/b.dart', |
| 1036 ''' | 1053 ''' |
| 1037 class B {} | 1054 class B {} |
| 1038 '''); | 1055 '''); |
| 1039 | 1056 |
| 1040 // Configure packages resolution. | 1057 // Configure packages resolution. |
| 1041 Folder libFolderA = resourceProvider.getFolder('$aaaPath/lib'); | 1058 Folder libFolderA = getFolder('$aaaPath/lib'); |
| 1042 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 1059 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 1043 context.sourceFactory = new SourceFactory(<UriResolver>[ | 1060 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 1044 sdkResolver, | 1061 sdkResolver, |
| 1045 resourceResolver, | 1062 resourceResolver, |
| 1046 new PackageMapUriResolver(resourceProvider, { | 1063 new PackageMapUriResolver(resourceProvider, { |
| 1047 'aaa': [libFolderA], | 1064 'aaa': [libFolderA], |
| 1048 'bbb': [libFolderB], | 1065 'bbb': [libFolderB], |
| 1049 }) | 1066 }) |
| 1050 ]); | 1067 ]); |
| 1051 | 1068 |
| 1052 // No unlinked bundles initially. | 1069 // No unlinked bundles initially. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1073 | 1090 |
| 1074 // The files must be created. | 1091 // The files must be created. |
| 1075 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 1092 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 1076 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 1093 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 1077 } | 1094 } |
| 1078 | 1095 |
| 1079 test_getUnlinkedBundles_notPubCache_useExisting() async { | 1096 test_getUnlinkedBundles_notPubCache_useExisting() async { |
| 1080 String aaaPath = '/Users/user/projects/aaa'; | 1097 String aaaPath = '/Users/user/projects/aaa'; |
| 1081 // Create package files. | 1098 // Create package files. |
| 1082 { | 1099 { |
| 1083 File file = resourceProvider.newFile( | 1100 File file = newFile( |
| 1084 '$aaaPath/lib/a.dart', | 1101 '$aaaPath/lib/a.dart', |
| 1085 ''' | 1102 ''' |
| 1086 class A {} | 1103 class A {} |
| 1087 '''); | 1104 '''); |
| 1088 PackageBundleAssembler assembler = new PackageBundleAssembler() | 1105 PackageBundleAssembler assembler = new PackageBundleAssembler() |
| 1089 ..addUnlinkedUnit( | 1106 ..addUnlinkedUnit( |
| 1090 file.createSource(FastUri.parse('package:aaa/a.dart')), | 1107 file.createSource(FastUri.parse('package:aaa/a.dart')), |
| 1091 new UnlinkedUnitBuilder()); | 1108 new UnlinkedUnitBuilder()); |
| 1092 resourceProvider.newFileWithBytes( | 1109 resourceProvider.newFileWithBytes( |
| 1093 '$aaaPath/${PubSummaryManager.UNLINKED_SPEC_NAME}', | 1110 resourceProvider |
| 1111 .convertPath('$aaaPath/${PubSummaryManager.UNLINKED_SPEC_NAME}'), |
| 1094 assembler.assemble().toBuffer()); | 1112 assembler.assemble().toBuffer()); |
| 1095 } | 1113 } |
| 1096 resourceProvider.newFile( | 1114 newFile( |
| 1097 '$CACHE/bbb/lib/b.dart', | 1115 '$CACHE/bbb/lib/b.dart', |
| 1098 ''' | 1116 ''' |
| 1099 class B {} | 1117 class B {} |
| 1100 '''); | 1118 '''); |
| 1101 | 1119 |
| 1102 // Configure packages resolution. | 1120 // Configure packages resolution. |
| 1103 Folder libFolderA = resourceProvider.getFolder('$aaaPath/lib'); | 1121 Folder libFolderA = getFolder('$aaaPath/lib'); |
| 1104 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib'); | 1122 Folder libFolderB = newFolder('$CACHE/bbb/lib'); |
| 1105 context.sourceFactory = new SourceFactory(<UriResolver>[ | 1123 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 1106 sdkResolver, | 1124 sdkResolver, |
| 1107 resourceResolver, | 1125 resourceResolver, |
| 1108 new PackageMapUriResolver(resourceProvider, { | 1126 new PackageMapUriResolver(resourceProvider, { |
| 1109 'aaa': [libFolderA], | 1127 'aaa': [libFolderA], |
| 1110 'bbb': [libFolderB], | 1128 'bbb': [libFolderB], |
| 1111 }) | 1129 }) |
| 1112 ]); | 1130 ]); |
| 1113 | 1131 |
| 1114 // Request already available unlinked bundles. | 1132 // Request already available unlinked bundles. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1143 } | 1161 } |
| 1144 | 1162 |
| 1145 // The files must be created. | 1163 // The files must be created. |
| 1146 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 1164 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 1147 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 1165 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 1148 } | 1166 } |
| 1149 | 1167 |
| 1150 test_getUnlinkedBundles_notPubCache_useExisting_inconsistent() async { | 1168 test_getUnlinkedBundles_notPubCache_useExisting_inconsistent() async { |
| 1151 String aaaPath = '/Users/user/projects/aaa'; | 1169 String aaaPath = '/Users/user/projects/aaa'; |
| 1152 // Create package files. | 1170 // Create package files. |
| 1153 resourceProvider.newFile( | 1171 newFile( |
| 1154 '$aaaPath/lib/a.dart', | 1172 '$aaaPath/lib/a.dart', |
| 1155 ''' | 1173 ''' |
| 1156 class A {} | 1174 class A {} |
| 1157 '''); | 1175 '''); |
| 1158 | 1176 |
| 1159 // Compute the bundles. | 1177 // Compute the bundles. |
| 1160 Folder libFolderA = resourceProvider.getFolder('$aaaPath/lib'); | 1178 Folder libFolderA = getFolder('$aaaPath/lib'); |
| 1161 await new PubSummaryManager(resourceProvider, '_.temp') | 1179 await new PubSummaryManager(resourceProvider, '_.temp') |
| 1162 .computeUnlinkedForFolder('aaa', libFolderA); | 1180 .computeUnlinkedForFolder('aaa', libFolderA); |
| 1163 | 1181 |
| 1164 // Configure packages resolution. | 1182 // Configure packages resolution. |
| 1165 context.sourceFactory = new SourceFactory(<UriResolver>[ | 1183 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 1166 sdkResolver, | 1184 sdkResolver, |
| 1167 resourceResolver, | 1185 resourceResolver, |
| 1168 new PackageMapUriResolver(resourceProvider, { | 1186 new PackageMapUriResolver(resourceProvider, { |
| 1169 'aaa': [libFolderA], | 1187 'aaa': [libFolderA], |
| 1170 }) | 1188 }) |
| 1171 ]); | 1189 ]); |
| 1172 | 1190 |
| 1173 // Request already available unlinked bundles. | 1191 // Request already available unlinked bundles. |
| 1174 expect(manager.getUnlinkedBundles(context), hasLength(1)); | 1192 expect(manager.getUnlinkedBundles(context), hasLength(1)); |
| 1175 | 1193 |
| 1176 // Update a Dart file. | 1194 // Update a Dart file. |
| 1177 // So, the cached bundle cannot be reused. | 1195 // So, the cached bundle cannot be reused. |
| 1178 resourceProvider.updateFile( | 1196 resourceProvider.updateFile( |
| 1179 '$aaaPath/lib/a.dart', | 1197 resourceProvider.convertPath('$aaaPath/lib/a.dart'), |
| 1180 ''' | 1198 ''' |
| 1181 class A2 {} | 1199 class A2 {} |
| 1182 '''); | 1200 '''); |
| 1183 _createManager(); | 1201 _createManager(); |
| 1184 expect(manager.getUnlinkedBundles(context), isEmpty); | 1202 expect(manager.getUnlinkedBundles(context), isEmpty); |
| 1185 | 1203 |
| 1186 // ...and because it is not in the pub cache, it will not be recomputed. | 1204 // ...and because it is not in the pub cache, it will not be recomputed. |
| 1187 await manager.onUnlinkedComplete; | 1205 await manager.onUnlinkedComplete; |
| 1188 expect(manager.getUnlinkedBundles(context), isEmpty); | 1206 expect(manager.getUnlinkedBundles(context), isEmpty); |
| 1189 } | 1207 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1274 | 1292 |
| 1275 LinkedPubPackage _getLinkedPackage( | 1293 LinkedPubPackage _getLinkedPackage( |
| 1276 List<LinkedPubPackage> packages, String name) { | 1294 List<LinkedPubPackage> packages, String name) { |
| 1277 return packages | 1295 return packages |
| 1278 .singleWhere((linkedPackage) => linkedPackage.package.name == name); | 1296 .singleWhere((linkedPackage) => linkedPackage.package.name == name); |
| 1279 } | 1297 } |
| 1280 | 1298 |
| 1281 _testImpl_getLinkedBundles_cached_declaredVariables( | 1299 _testImpl_getLinkedBundles_cached_declaredVariables( |
| 1282 String importOrExport) async { | 1300 String importOrExport) async { |
| 1283 String pathA = '$CACHE/aaa/lib'; | 1301 String pathA = '$CACHE/aaa/lib'; |
| 1284 resourceProvider.newFile('$pathA/foo.dart', 'class A {}'); | 1302 newFile('$pathA/foo.dart', 'class A {}'); |
| 1285 resourceProvider.newFile('$pathA/foo_io.dart', 'class A {}'); | 1303 newFile('$pathA/foo_io.dart', 'class A {}'); |
| 1286 resourceProvider.newFile('$pathA/foo_html.dart', 'class A {}'); | 1304 newFile('$pathA/foo_html.dart', 'class A {}'); |
| 1287 resourceProvider.newFile( | 1305 newFile( |
| 1288 '$pathA/user.dart', | 1306 '$pathA/user.dart', |
| 1289 ''' | 1307 ''' |
| 1290 $importOrExport 'foo.dart' | 1308 $importOrExport 'foo.dart' |
| 1291 if (dart.library.io) 'foo_io.dart' | 1309 if (dart.library.io) 'foo_io.dart' |
| 1292 if (dart.library.html) 'foo_html.dart'; | 1310 if (dart.library.html) 'foo_html.dart'; |
| 1293 '''); | 1311 '''); |
| 1294 // Configure packages resolution. | 1312 // Configure packages resolution. |
| 1295 Folder libFolderA = resourceProvider.newFolder(pathA); | 1313 Folder libFolderA = newFolder(pathA); |
| 1296 context.sourceFactory = new SourceFactory(<UriResolver>[ | 1314 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 1297 sdkResolver, | 1315 sdkResolver, |
| 1298 resourceResolver, | 1316 resourceResolver, |
| 1299 new PackageMapUriResolver(resourceProvider, { | 1317 new PackageMapUriResolver(resourceProvider, { |
| 1300 'aaa': [libFolderA], | 1318 'aaa': [libFolderA], |
| 1301 }) | 1319 }) |
| 1302 ]); | 1320 ]); |
| 1303 | 1321 |
| 1304 void _assertDependencyInUser(PackageBundle bundle, String shortName) { | 1322 void _assertDependencyInUser(PackageBundle bundle, String shortName) { |
| 1305 for (var i = 0; i < bundle.linkedLibraryUris.length; i++) { | 1323 for (var i = 0; i < bundle.linkedLibraryUris.length; i++) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1359 } | 1377 } |
| 1360 } | 1378 } |
| 1361 | 1379 |
| 1362 static PackageBundle _getBundleByPackageName( | 1380 static PackageBundle _getBundleByPackageName( |
| 1363 Map<PubPackage, PackageBundle> bundles, String name) { | 1381 Map<PubPackage, PackageBundle> bundles, String name) { |
| 1364 PubPackage package = | 1382 PubPackage package = |
| 1365 bundles.keys.singleWhere((package) => package.name == name); | 1383 bundles.keys.singleWhere((package) => package.name == name); |
| 1366 return bundles[package]; | 1384 return bundles[package]; |
| 1367 } | 1385 } |
| 1368 } | 1386 } |
| OLD | NEW |