Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: pkg/analyzer/test/src/summary/pub_summary_test.dart

Issue 2358213002: Include referenced declared variables and their values into the linked bundle hash. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698