Create AnalysisDriver using AnalysisContextCollectionImpl in pkg/analyzer_plugin tests.
Mostly to ensure that AnalysisDriver/Session knows its AnalysisContext,
so we can check that a file path belongs to the context root.
R=brianwilkerson@google.com
Change-Id: I45798bcf2441716ade89e9f6ee40f2053ab18bad
Reviewed-on: https://dart-review.googlesource.com/c/87268
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 6f4f753..29146c6 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -98,7 +98,6 @@
Source source = file.createSource(uri);
driver.addFile(file.path);
driver.changeFile(file.path);
- fileContentOverlay[file.path] = content;
return source;
}
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 9c14f2b..f06e837 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -10,17 +10,12 @@
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/performance_logger.dart';
-import 'package:analyzer/src/file_system/file_system.dart';
+import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/engine.dart' as engine;
-import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/generated/testing/element_search.dart';
-import 'package:analyzer/src/source/package_map_resolver.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
@@ -47,21 +42,15 @@
typedef void _ElementVisitorFunction(Element element);
class AbstractContextTest with ResourceProviderMixin {
- DartSdk sdk;
- Map<String, List<Folder>> packageMap;
- UriResolver resourceResolver;
-
- StringBuffer _logBuffer = new StringBuffer();
- FileContentOverlay _fileContentOverlay = new FileContentOverlay();
AnalysisDriver _driver;
AnalysisDriver get driver => _driver;
- /**
- * Return the analysis session associated with the driver.
- */
AnalysisSession get session => driver.currentSession;
+ /// The file system specific `/home/test/pubspec.yaml` path.
+ String get testPubspecPath => convertPath('/home/test/pubspec.yaml');
+
void addMetaPackage() {
addPackageFile('meta', 'meta.dart', r'''
library meta;
@@ -75,18 +64,21 @@
''');
}
+ /// Add a new file with the given [pathInLib] to the package with the
+ /// given [packageName]. Then ensure that the test package depends on the
+ /// [packageName].
File addPackageFile(String packageName, String pathInLib, String content) {
- var packageLibPath = '/.pub-cache/$packageName/lib';
- packageMap[packageName] = [newFolder(packageLibPath)];
- return newFile('$packageLibPath/$pathInLib', content: content);
+ var packagePath = '/.pub-cache/$packageName';
+ _addTestPackageDependency(packageName, packagePath);
+ return newFile('$packagePath/lib/$pathInLib', content: content);
}
Source addSource(String path, String content, [Uri uri]) {
- path = convertPath(path);
- driver.addFile(path);
- driver.changeFile(path);
- _fileContentOverlay[path] = content;
- return getFile(path).createSource();
+ File file = newFile(path, content: content);
+ Source source = file.createSource(uri);
+ driver.addFile(file.path);
+ driver.changeFile(file.path);
+ return source;
}
Element findElementInUnit(CompilationUnit unit, String name,
@@ -101,33 +93,50 @@
}
void setUp() {
- sdk = new MockSdk(resourceProvider: resourceProvider);
- resourceResolver = new ResourceUriResolver(resourceProvider);
- packageMap = new Map<String, List<Folder>>();
- PackageMapUriResolver packageResolver =
- new PackageMapUriResolver(resourceProvider, packageMap);
- SourceFactory sourceFactory = new SourceFactory(
- [new DartUriResolver(sdk), packageResolver, resourceResolver]);
- PerformanceLog log = new PerformanceLog(_logBuffer);
- AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log);
- AnalysisOptionsImpl options = new AnalysisOptionsImpl();
- _driver = new AnalysisDriver(
- scheduler,
- log,
- resourceProvider,
- new MemoryByteStore(),
- _fileContentOverlay,
- null,
- sourceFactory,
- options);
- scheduler.start();
- AnalysisEngine.instance.logger = PrintLogger.instance;
+ new MockSdk(resourceProvider: resourceProvider);
+
+ newFolder('/home/test');
+ newFile('/home/test/.packages', content: r'''
+test:file:///home/test/lib
+''');
+
+ _createDriver();
}
void tearDown() {
AnalysisEngine.instance.clearCaches();
AnalysisEngine.instance.logger = null;
}
+
+ void _addTestPackageDependency(String name, String rootPath) {
+ var packagesFile = getFile('/home/test/.packages');
+ var packagesContent = packagesFile.readAsStringSync();
+
+ // Ignore if there is already the same package dependency.
+ if (packagesContent.contains('$name:file://')) {
+ return;
+ }
+
+ packagesContent += '$name:${toUri('$rootPath/lib')}\n';
+
+ packagesFile.writeAsStringSync(packagesContent);
+
+ _createDriver();
+ }
+
+ void _createDriver() {
+ var collection = AnalysisContextCollectionImpl(
+ includedPaths: [convertPath('/home')],
+ enableIndex: true,
+ resourceProvider: resourceProvider,
+ sdkPath: convertPath('/sdk'),
+ );
+
+ var testPath = convertPath('/home/test');
+ var context = collection.contextFor(testPath) as DriverBasedAnalysisContext;
+
+ _driver = context.driver;
+ }
}
/**
diff --git a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
index b5c3384..665a350 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/completion_contributor_util.dart
@@ -5,9 +5,7 @@
import 'dart:async';
import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/source/package_map_resolver.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_core.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
@@ -16,7 +14,6 @@
import 'package:test/test.dart';
import '../../support/abstract_context.dart';
-import 'flutter_util.dart';
int suggestionComparator(CompletionSuggestion s1, CompletionSuggestion s2) {
String c1 = s1.completion.toLowerCase();
@@ -469,33 +466,6 @@
expect(suggestions, isNotNull, reason: 'expected suggestions');
}
- /**
- * Configures the [SourceFactory] to have the `flutter` package in
- * `/packages/flutter/lib` folder.
- */
- void configureFlutterPkg(Map<String, String> pathToCode) {
- pathToCode.forEach((path, code) {
- newFile('$flutterPkgLibPath/$path', content: code);
- });
- // configure SourceFactory
- Folder myPkgFolder = getFolder(flutterPkgLibPath);
- UriResolver pkgResolver = new PackageMapUriResolver(
- resourceProvider,
- {
- 'flutter': [myPkgFolder]
- },
- );
- SourceFactory sourceFactory = new SourceFactory(
- [new DartUriResolver(sdk), pkgResolver, resourceResolver]);
- driver.configure(sourceFactory: sourceFactory);
- // force 'flutter' resolution
- addSource(
- '/tmp/other.dart',
- pathToCode.keys
- .map((path) => "import 'package:flutter/$path';")
- .join('\n'));
- }
-
CompletionContributor createContributor();
void failedCompletion(String message,