| 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'; |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 // Verify that new files with linked bundles were created. | 167 // Verify that new files with linked bundles were created. |
| 168 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa'); | 168 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa'); |
| 169 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); | 169 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); |
| 170 expect(packageA.linkedHash, isNot(linkedHashA)); | 170 expect(packageA.linkedHash, isNot(linkedHashA)); |
| 171 expect(packageB.linkedHash, isNot(linkedHashB)); | 171 expect(packageB.linkedHash, isNot(linkedHashB)); |
| 172 _assertFileExists(folderA2, 'linked_spec_${packageA.linkedHash}.ds'); | 172 _assertFileExists(folderA2, 'linked_spec_${packageA.linkedHash}.ds'); |
| 173 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); | 173 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); |
| 174 } | 174 } |
| 175 } | 175 } |
| 176 | 176 |
| 177 test_getLinkedBundles_cached_declaredVariables_export() async { |
| 178 _testImpl_getLinkedBundles_cached_declaredVariables('export'); |
| 179 } |
| 180 |
| 181 test_getLinkedBundles_cached_declaredVariables_import() async { |
| 182 _testImpl_getLinkedBundles_cached_declaredVariables('import'); |
| 183 } |
| 184 |
| 177 test_getLinkedBundles_cached_differentSdk() async { | 185 test_getLinkedBundles_cached_differentSdk() async { |
| 178 String pathA = '$CACHE/aaa'; | 186 String pathA = '$CACHE/aaa'; |
| 179 resourceProvider.newFile( | 187 resourceProvider.newFile( |
| 180 '$pathA/lib/a.dart', | 188 '$pathA/lib/a.dart', |
| 181 ''' | 189 ''' |
| 182 class A {} | 190 class A {} |
| 183 int a; | 191 int a; |
| 184 '''); | 192 '''); |
| 185 resourceProvider.newFile( | 193 resourceProvider.newFile( |
| 186 '$CACHE/bbb/lib/b.dart', | 194 '$CACHE/bbb/lib/b.dart', |
| (...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1251 } | 1259 } |
| 1252 } | 1260 } |
| 1253 fail('Cannot find linked unit for $variableName in $linkedPackage'); | 1261 fail('Cannot find linked unit for $variableName in $linkedPackage'); |
| 1254 } | 1262 } |
| 1255 } | 1263 } |
| 1256 } | 1264 } |
| 1257 fail('Cannot find variable $variableName in $linkedPackage'); | 1265 fail('Cannot find variable $variableName in $linkedPackage'); |
| 1258 } | 1266 } |
| 1259 | 1267 |
| 1260 void _createManager( | 1268 void _createManager( |
| 1261 {int majorVersion: PackageBundleAssembler.currentMajorVersion}) { | 1269 {bool allowLinking: true, |
| 1270 int majorVersion: PackageBundleAssembler.currentMajorVersion}) { |
| 1262 manager = new PubSummaryManager(resourceProvider, '_.temp', | 1271 manager = new PubSummaryManager(resourceProvider, '_.temp', |
| 1263 majorVersion: majorVersion); | 1272 allowLinking: allowLinking, majorVersion: majorVersion); |
| 1264 } | 1273 } |
| 1265 | 1274 |
| 1266 LinkedPubPackage _getLinkedPackage( | 1275 LinkedPubPackage _getLinkedPackage( |
| 1267 List<LinkedPubPackage> packages, String name) { | 1276 List<LinkedPubPackage> packages, String name) { |
| 1268 return packages | 1277 return packages |
| 1269 .singleWhere((linkedPackage) => linkedPackage.package.name == name); | 1278 .singleWhere((linkedPackage) => linkedPackage.package.name == name); |
| 1270 } | 1279 } |
| 1271 | 1280 |
| 1281 _testImpl_getLinkedBundles_cached_declaredVariables( |
| 1282 String importOrExport) async { |
| 1283 String pathA = '$CACHE/aaa/lib'; |
| 1284 resourceProvider.newFile('$pathA/foo.dart', 'class A {}'); |
| 1285 resourceProvider.newFile('$pathA/foo_io.dart', 'class A {}'); |
| 1286 resourceProvider.newFile('$pathA/foo_html.dart', 'class A {}'); |
| 1287 resourceProvider.newFile( |
| 1288 '$pathA/user.dart', |
| 1289 ''' |
| 1290 $importOrExport 'foo.dart' |
| 1291 if (dart.library.io) 'foo_io.dart' |
| 1292 if (dart.library.html) 'foo_html.dart'; |
| 1293 '''); |
| 1294 // Configure packages resolution. |
| 1295 Folder libFolderA = resourceProvider.newFolder(pathA); |
| 1296 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 1297 sdkResolver, |
| 1298 resourceResolver, |
| 1299 new PackageMapUriResolver(resourceProvider, { |
| 1300 'aaa': [libFolderA], |
| 1301 }) |
| 1302 ]); |
| 1303 |
| 1304 // Session 1. |
| 1305 // Create the linked bundle and cache it in a file. |
| 1306 { |
| 1307 // Ensure unlinked bundles. |
| 1308 manager.getUnlinkedBundles(context); |
| 1309 await manager.onUnlinkedComplete; |
| 1310 |
| 1311 // Now we should be able to get the linked bundle. |
| 1312 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 1313 expect(linkedPackages, hasLength(1)); |
| 1314 } |
| 1315 |
| 1316 // Session 2. |
| 1317 // Recreate manager and don't allow it to perform new linking. |
| 1318 // Set a declared variable, which is not used in the package. |
| 1319 // We still can get the cached linked bundle. |
| 1320 { |
| 1321 context.declaredVariables.define('not.used.variable', 'baz'); |
| 1322 _createManager(allowLinking: false); |
| 1323 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 1324 expect(linkedPackages, hasLength(1)); |
| 1325 } |
| 1326 |
| 1327 // Session 3. |
| 1328 // Recreate manager and don't allow it to perform new linking. |
| 1329 // Set the value of a referenced declared variable. |
| 1330 // So, we cannot use the previously cached linked bundle. |
| 1331 { |
| 1332 context.declaredVariables.define('dart.library.io', 'does-not-matter'); |
| 1333 _createManager(allowLinking: false); |
| 1334 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 1335 expect(linkedPackages, isEmpty); |
| 1336 } |
| 1337 } |
| 1338 |
| 1272 static PackageBundle _getBundleByPackageName( | 1339 static PackageBundle _getBundleByPackageName( |
| 1273 Map<PubPackage, PackageBundle> bundles, String name) { | 1340 Map<PubPackage, PackageBundle> bundles, String name) { |
| 1274 PubPackage package = | 1341 PubPackage package = |
| 1275 bundles.keys.singleWhere((package) => package.name == name); | 1342 bundles.keys.singleWhere((package) => package.name == name); |
| 1276 return bundles[package]; | 1343 return bundles[package]; |
| 1277 } | 1344 } |
| 1278 } | 1345 } |
| OLD | NEW |