From 287c796412b995adc3bbcb8aaf7087dcaa37435f Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 10 Aug 2020 20:12:13 +0000 Subject: [PATCH] Migrate AnalysisDriverCachingTest to PubPackageResolutionTest. R=brianwilkerson@google.com Change-Id: Iafcc25686d1eb70f638347ed4af06e09eb965cc5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/158023 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../analysis/analysis_context_collection.dart | 3 ++ .../src/dart/analysis/context_builder.dart | 7 +-- .../dart/analysis/driver_caching_test.dart | 49 +++++++------------ .../context_collection_resolution.dart | 10 ++++ 4 files changed, 36 insertions(+), 33 deletions(-) diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart index 6fea185452d..c971b0748b1 100644 --- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart +++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart @@ -8,6 +8,7 @@ import 'package:analyzer/dart/analysis/context_locator.dart'; import 'package:analyzer/dart/analysis/declared_variables.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; +import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/context_builder.dart'; import 'package:cli_util/cli_util.dart'; import 'package:meta/meta.dart'; @@ -23,6 +24,7 @@ class AnalysisContextCollectionImpl implements AnalysisContextCollection { /// Initialize a newly created analysis context manager. AnalysisContextCollectionImpl({ + ByteStore byteStore, Map declaredVariables, bool enableIndex = false, @required List includedPaths, @@ -50,6 +52,7 @@ class AnalysisContextCollectionImpl implements AnalysisContextCollection { resourceProvider: this.resourceProvider, ); var context = contextBuilder.createContext( + byteStore: byteStore, contextRoot: root, declaredVariables: DeclaredVariables.fromMap(declaredVariables ?? {}), enableIndex: enableIndex, diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart index beba8d76e6e..f6634b6fc17 100644 --- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart +++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart @@ -12,7 +12,7 @@ import 'package:analyzer/src/context/builder.dart' as old show ContextBuilder, ContextBuilderOptions; import 'package:analyzer/src/context/context_root.dart' as old; import 'package:analyzer/src/dart/analysis/byte_store.dart' - show MemoryByteStore; + show ByteStore, MemoryByteStore; import 'package:analyzer/src/dart/analysis/driver.dart' show AnalysisDriver, AnalysisDriverScheduler; import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'; @@ -39,7 +39,8 @@ class ContextBuilderImpl implements ContextBuilder { @override AnalysisContext createContext( - {@required ContextRoot contextRoot, + {ByteStore byteStore, + @required ContextRoot contextRoot, DeclaredVariables declaredVariables, bool enableIndex = false, List librarySummaryPaths, @@ -51,7 +52,7 @@ class ContextBuilderImpl implements ContextBuilder { sdkPath ??= getSdkPath(); ArgumentError.checkNotNull(sdkPath, 'sdkPath'); - var byteStore = MemoryByteStore(); + byteStore ??= MemoryByteStore(); var fileContentOverlay = FileContentOverlay(); performanceLog ??= PerformanceLog(StringBuffer()); diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart index 0faaff9a510..779b01d6258 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart @@ -4,13 +4,10 @@ import 'package:analyzer/error/error.dart'; import 'package:analyzer/src/dart/error/lint_codes.dart'; -import 'package:analyzer/src/generated/engine.dart'; -import 'package:analyzer/src/lint/registry.dart'; -import 'package:linter/src/rules.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; -import '../resolution/driver_resolution.dart'; +import '../resolution/context_collection_resolution.dart'; main() { defineReflectiveSuite(() { @@ -19,55 +16,47 @@ main() { } @reflectiveTest -class AnalysisDriverCachingTest extends DriverResolutionTest { +class AnalysisDriverCachingTest extends PubPackageResolutionTest { List> get _linkedCycles { + var driver = driverFor(testFilePath); return driver.test.libraryContext.linkedCycles; } - @override - void setUp() { - super.setUp(); - registerLintRules(); - } - test_lints() async { - var path = convertPath('/test/lib/test.dart'); - - newFile(path, content: r''' + newFile(testFilePath, content: r''' void f() { ![0].isEmpty; } '''); // We don't have any lints configured, so no errors. - assertErrorsInList( - (await driver.getErrors(path)).errors, - [], - ); + await resolveTestFile(); + assertErrorsInResult([]); // The summary for the library was linked. - _assertHasLinkedCycle({path}, andClear: true); + _assertContainsLinkedCycle({testFilePath}, andClear: true); + + // We will recreate it with new analysis options. + // But we will reuse the byte store, so can reuse summaries. + disposeAnalysisContextCollection(); // Configure to run a lint. - driver.configure( - analysisOptions: AnalysisOptionsImpl() - ..lint = true - ..lintRules = [ - Registry.ruleRegistry.getRule('prefer_is_not_empty'), - ], + writeTestPackageAnalysisOptionsFile( + AnalysisOptionsFileConfig( + lints: ['prefer_is_not_empty'], + ), ); // Check that the lint was run, and reported. - _assertHasLintReported( - (await driver.getErrors(path)).errors, - 'prefer_is_not_empty', - ); + await resolveTestFile(); + _assertHasLintReported(result.errors, 'prefer_is_not_empty'); // Lints don't affect summaries, nothing should be linked. _assertNoLinkedCycles(); } - void _assertHasLinkedCycle(Set expected, {bool andClear = false}) { + void _assertContainsLinkedCycle(Set expected, + {bool andClear = false}) { expect(_linkedCycles, contains(unorderedEquals(expected))); if (andClear) { _linkedCycles.clear(); diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart index ea9f88003c6..d5555094521 100644 --- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart +++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart @@ -9,6 +9,7 @@ import 'package:analyzer/dart/analysis/analysis_context_collection.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart'; +import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'; import 'package:analyzer/src/dart/analysis/experiments.dart'; @@ -120,6 +121,8 @@ abstract class ContextResolutionTest with ResourceProviderMixin, ResolutionTest { static bool _lintRulesAreRegistered = false; + final ByteStore _byteStore = MemoryByteStore(); + Map _declaredVariables = {}; AnalysisContextCollection _analysisContextCollection; @@ -167,6 +170,12 @@ abstract class ContextResolutionTest return _analysisContextCollection.contextFor(path); } + void disposeAnalysisContextCollection() { + if (_analysisContextCollection != null) { + _analysisContextCollection = null; + } + } + /// TODO(scheglov) Replace this with a method that changes a file in /// [AnalysisContextCollectionImpl]. AnalysisDriver driverFor(String path) { @@ -212,6 +221,7 @@ abstract class ContextResolutionTest } _analysisContextCollection = AnalysisContextCollectionImpl( + byteStore: _byteStore, declaredVariables: _declaredVariables, enableIndex: true, includedPaths: collectionIncludedPaths.map(convertPath).toList(),