mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:09:48 +00:00
[analysis_server] Consolidate some more writePackageConfig() methods
+ tidy up some redundant package versions that are inherited from the ConfigurationFiles mixin. Change-Id: I93329cbf65af3a68ed27284903e7becac01cf5ea Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/349380 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Phil Quitslund <pquitslund@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
19677cb591
commit
581686b8fb
|
@ -3,6 +3,10 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
mixin TestMacros {
|
||||
// TODO(dantup): Merge this into `test\test_macros.dart`. Currently it uses
|
||||
// another helper (`addMacros`) that isn't accessible where these one is
|
||||
// used.
|
||||
|
||||
/// A macro that can be applied to a class to add a `foo()` method that calls
|
||||
/// a bar() method.
|
||||
final withFooMethodMacro = r'''
|
||||
|
|
|
@ -15,7 +15,6 @@ import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
|
|||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
||||
import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
|
||||
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
|
||||
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
|
||||
import 'package:analyzer/src/utilities/extensions/file_system.dart';
|
||||
|
@ -24,8 +23,10 @@ import 'package:meta/meta.dart';
|
|||
import 'package:test/test.dart';
|
||||
|
||||
import 'src/utilities/mock_packages.dart';
|
||||
import 'support/configuration_files.dart';
|
||||
|
||||
class AbstractContextTest with ResourceProviderMixin {
|
||||
class AbstractContextTest
|
||||
with MockPackagesMixin, ConfigurationFilesMixin, ResourceProviderMixin {
|
||||
static bool _lintRulesAreRegistered = false;
|
||||
|
||||
static final ByteStore _byteStore = MemoryByteStore();
|
||||
|
@ -59,11 +60,8 @@ class AbstractContextTest with ResourceProviderMixin {
|
|||
EnableString.macros,
|
||||
];
|
||||
|
||||
String get latestLanguageVersion =>
|
||||
'${ExperimentStatus.currentVersion.major}.'
|
||||
'${ExperimentStatus.currentVersion.minor}';
|
||||
|
||||
/// The path that is not in [workspaceRootPath], contains external packages.
|
||||
@override
|
||||
String get packagesRootPath => '/packages';
|
||||
|
||||
Folder get sdkRoot => newFolder('/sdk');
|
||||
|
@ -76,10 +74,9 @@ class AbstractContextTest with ResourceProviderMixin {
|
|||
|
||||
File get testFile => getFile(testFilePath);
|
||||
|
||||
String? get testPackageLanguageVersion => latestLanguageVersion;
|
||||
|
||||
String get testPackageLibPath => '$testPackageRootPath/lib';
|
||||
|
||||
@override
|
||||
String get testPackageRootPath => '$workspaceRootPath/test';
|
||||
|
||||
String get testPackageTestPath => '$testPackageRootPath/test';
|
||||
|
@ -230,54 +227,6 @@ class AbstractContextTest with ResourceProviderMixin {
|
|||
|
||||
void verifyCreatedCollection() {}
|
||||
|
||||
void writePackageConfig(String path, PackageConfigFileBuilder config) {
|
||||
newFile(path, config.toContent(toUriStr: toUriStr));
|
||||
}
|
||||
|
||||
void writeTestPackageConfig({
|
||||
PackageConfigFileBuilder? config,
|
||||
String? languageVersion,
|
||||
bool flutter = false,
|
||||
bool meta = false,
|
||||
bool vector_math = false,
|
||||
}) {
|
||||
if (config == null) {
|
||||
config = PackageConfigFileBuilder();
|
||||
} else {
|
||||
config = config.copy();
|
||||
}
|
||||
|
||||
config.add(
|
||||
name: 'test',
|
||||
rootPath: testPackageRootPath,
|
||||
languageVersion: languageVersion ?? testPackageLanguageVersion,
|
||||
);
|
||||
|
||||
if (meta || flutter) {
|
||||
var libFolder = MockPackages.instance.addMeta(resourceProvider);
|
||||
config.add(name: 'meta', rootPath: libFolder.parent.path);
|
||||
}
|
||||
|
||||
if (flutter) {
|
||||
{
|
||||
var libFolder = MockPackages.instance.addUI(resourceProvider);
|
||||
config.add(name: 'ui', rootPath: libFolder.parent.path);
|
||||
}
|
||||
{
|
||||
var libFolder = MockPackages.instance.addFlutter(resourceProvider);
|
||||
config.add(name: 'flutter', rootPath: libFolder.parent.path);
|
||||
}
|
||||
}
|
||||
|
||||
if (vector_math) {
|
||||
var libFolder = MockPackages.instance.addVectorMath(resourceProvider);
|
||||
config.add(name: 'vector_math', rootPath: libFolder.parent.path);
|
||||
}
|
||||
|
||||
var path = '$testPackageRootPath/.dart_tool/package_config.json';
|
||||
writePackageConfig(path, config);
|
||||
}
|
||||
|
||||
void _addAnalyzedFilesToDrivers() {
|
||||
for (var analysisContext in _analysisContextCollection!.contexts) {
|
||||
for (var path in analysisContext.contextRoot.analyzedFiles()) {
|
||||
|
|
|
@ -15,7 +15,6 @@ import 'package:test/test.dart';
|
|||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../analysis_server_base.dart';
|
||||
import '../src/utilities/mock_packages.dart';
|
||||
|
||||
void main() {
|
||||
defineReflectiveSuite(() {
|
||||
|
@ -25,7 +24,6 @@ void main() {
|
|||
|
||||
@reflectiveTest
|
||||
class NotificationErrorsTest extends PubPackageAnalysisServerTest {
|
||||
late Folder pedanticFolder;
|
||||
Map<File, List<AnalysisError>?> filesErrors = {};
|
||||
|
||||
@override
|
||||
|
@ -45,7 +43,6 @@ class NotificationErrorsTest extends PubPackageAnalysisServerTest {
|
|||
void setUp() {
|
||||
registerLintRules();
|
||||
super.setUp();
|
||||
pedanticFolder = MockPackages.instance.addPedantic(resourceProvider);
|
||||
}
|
||||
|
||||
Future<void> test_analysisOptionsFile() async {
|
||||
|
@ -87,12 +84,7 @@ include: package:pedantic/analysis_options.yaml
|
|||
expect(error.type, AnalysisErrorType.STATIC_WARNING);
|
||||
|
||||
// Write a package file that allows resolving the include.
|
||||
newPackageConfigJsonFile(
|
||||
testPackageRootPath,
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'pedantic', rootPath: pedanticFolder.parent.path))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
);
|
||||
writeTestPackageConfig(pedantic: true);
|
||||
|
||||
// Ensure the errors disappear.
|
||||
await waitForTasksFinished();
|
||||
|
|
|
@ -81,8 +81,8 @@ analyzer:
|
|||
}
|
||||
|
||||
Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
|
||||
newPackageConfigJsonFile(testPackageRootPath, '');
|
||||
newPackageConfigJsonFile('$testPackageRootPath/child', '');
|
||||
writeTestPackageConfig();
|
||||
writePackageConfig(convertPath('$testPackageRootPath/child'));
|
||||
var sampleFile = newFile(
|
||||
'$testPackageRootPath/child/samples/sample.dart',
|
||||
'',
|
||||
|
@ -99,8 +99,8 @@ analyzer:
|
|||
}
|
||||
|
||||
Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
|
||||
newPackageConfigJsonFile(testPackageRootPath, '');
|
||||
newPackageConfigJsonFile('$testPackageRootPath/child', '');
|
||||
writeTestPackageConfig();
|
||||
writePackageConfig(convertPath('$testPackageRootPath/child'));
|
||||
var sampleFile = newFile(
|
||||
'$testPackageRootPath/child/samples/sample.dart',
|
||||
'',
|
||||
|
|
|
@ -13,10 +13,10 @@ import 'package:analysis_server/src/utilities/mocks.dart';
|
|||
import 'package:analyzer/dart/analysis/analysis_options.dart' as analysis;
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:analyzer/file_system/memory_file_system.dart';
|
||||
import 'package:analyzer/instrumentation/service.dart';
|
||||
import 'package:analyzer/src/generated/sdk.dart';
|
||||
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
|
||||
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
|
||||
import 'package:meta/meta.dart';
|
||||
|
@ -24,6 +24,7 @@ import 'package:test/test.dart';
|
|||
import 'package:unified_analytics/unified_analytics.dart';
|
||||
|
||||
import 'mocks.dart';
|
||||
import 'src/utilities/mock_packages.dart';
|
||||
import 'support/configuration_files.dart';
|
||||
import 'test_macros.dart';
|
||||
|
||||
|
@ -206,7 +207,10 @@ class ContextResolutionTest with ResourceProviderMixin {
|
|||
}
|
||||
|
||||
class PubPackageAnalysisServerTest extends ContextResolutionTest
|
||||
with ConfigurationFilesMixin, TestMacros {
|
||||
with
|
||||
MockPackagesMixin<MemoryResourceProvider>,
|
||||
ConfigurationFilesMixin,
|
||||
TestMacros {
|
||||
// If experiments are needed,
|
||||
// add `import 'package:analyzer/dart/analysis/features.dart';`
|
||||
// and list the necessary experiments here.
|
||||
|
@ -216,7 +220,8 @@ class PubPackageAnalysisServerTest extends ContextResolutionTest
|
|||
];
|
||||
|
||||
/// The path that is not in [workspaceRootPath], contains external packages.
|
||||
String get packagesRootPath => '/packages';
|
||||
@override
|
||||
String get packagesRootPath => resourceProvider.convertPath('/packages');
|
||||
|
||||
File get testFile => getFile(testFilePath);
|
||||
|
||||
|
@ -233,6 +238,7 @@ class PubPackageAnalysisServerTest extends ContextResolutionTest
|
|||
|
||||
Folder get testPackageRoot => getFolder(testPackageRootPath);
|
||||
|
||||
@override
|
||||
String get testPackageRootPath => '$workspaceRootPath/test';
|
||||
|
||||
String get testPackageTestPath => '$testPackageRootPath/test';
|
||||
|
@ -258,8 +264,7 @@ class PubPackageAnalysisServerTest extends ContextResolutionTest
|
|||
/// include imports, the imports for macros will be added automatically.
|
||||
void addMacros(List<String> macros) {
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder(),
|
||||
temporaryMacroSupport: true,
|
||||
macro: true,
|
||||
);
|
||||
newFile(
|
||||
'$testPackageLibPath/macros.dart',
|
||||
|
@ -323,23 +328,6 @@ import 'package:_fe_analyzer_shared/src/macros/api.dart';
|
|||
);
|
||||
}
|
||||
|
||||
void writeTestPackageConfig({
|
||||
PackageConfigFileBuilder? config,
|
||||
String? languageVersion,
|
||||
bool flutter = false,
|
||||
bool meta = false,
|
||||
bool temporaryMacroSupport = false,
|
||||
}) {
|
||||
writePackageConfig(
|
||||
testPackageRoot.path,
|
||||
config: config,
|
||||
languageVersion: languageVersion,
|
||||
flutter: flutter,
|
||||
meta: meta,
|
||||
temporaryMacroSupport: temporaryMacroSupport,
|
||||
);
|
||||
}
|
||||
|
||||
void writeTestPackagePubspecYamlFile(String content) {
|
||||
newPubspecYamlFile(testPackageRootPath, content);
|
||||
}
|
||||
|
|
|
@ -1996,11 +1996,10 @@ class SetSubscriptionsTest extends PubPackageAnalysisServerTest {
|
|||
library lib_a;
|
||||
class A {}
|
||||
''');
|
||||
newPackageConfigJsonFile(
|
||||
'/project',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: '/packages/pkgA'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writePackageConfig(
|
||||
convertPath('/project'),
|
||||
config: (PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: convertPath('/packages/pkgA'))),
|
||||
);
|
||||
//
|
||||
addTestFile('''
|
||||
|
@ -2049,11 +2048,10 @@ void f() {
|
|||
library lib_a;
|
||||
class A {}
|
||||
''');
|
||||
newPackageConfigJsonFile(
|
||||
'/project',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: '/packages/pkgA'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writePackageConfig(
|
||||
convertPath('/project'),
|
||||
config: (PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: convertPath('/packages/pkgA'))),
|
||||
);
|
||||
//
|
||||
addTestFile('// no "pkgA" reference');
|
||||
|
|
|
@ -152,23 +152,18 @@ print(1)
|
|||
}
|
||||
|
||||
Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
|
||||
newPackageConfigJsonFile(
|
||||
'$workspaceRootPath/aaa',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'aaa', rootPath: '$workspaceRootPath/aaa')
|
||||
..add(name: 'bbb', rootPath: '$workspaceRootPath/bbb'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writePackageConfig(
|
||||
convertPath('$workspaceRootPath/aaa'),
|
||||
config: (PackageConfigFileBuilder()
|
||||
..add(name: 'bbb', rootPath: '$workspaceRootPath/bbb')),
|
||||
);
|
||||
newPubspecYamlFile('$workspaceRootPath/aaa', r'''
|
||||
dependencies:
|
||||
bbb: any
|
||||
''');
|
||||
|
||||
newPackageConfigJsonFile(
|
||||
'$workspaceRootPath/bbb',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'bbb', rootPath: '$workspaceRootPath/bbb'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writePackageConfig(
|
||||
convertPath('$workspaceRootPath/bbb'),
|
||||
);
|
||||
newFile('$workspaceRootPath/bbb/lib/target.dart', 'class Foo() {}');
|
||||
newFile(
|
||||
|
|
|
@ -7,14 +7,12 @@ import 'dart:async';
|
|||
import 'package:analysis_server/protocol/protocol.dart';
|
||||
import 'package:analysis_server/protocol/protocol_generated.dart';
|
||||
import 'package:analysis_server/src/services/refactoring/legacy/refactoring_manager.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../analysis_server_base.dart';
|
||||
import '../mocks.dart';
|
||||
import '../src/utilities/mock_packages.dart';
|
||||
|
||||
void main() {
|
||||
defineReflectiveSuite(() {
|
||||
|
@ -846,11 +844,7 @@ class GetAvailableRefactoringsTest extends PubPackageAnalysisServerTest {
|
|||
late List<RefactoringKind> kinds;
|
||||
|
||||
void addFlutterPackage() {
|
||||
var flutterLib = MockPackages.instance.addFlutter(resourceProvider);
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder()
|
||||
..add(name: 'flutter', rootPath: flutterLib.parent.path),
|
||||
);
|
||||
writeTestPackageConfig(flutter: true);
|
||||
}
|
||||
|
||||
/// Tests that there is refactoring of the given [kind] is available at the
|
||||
|
|
|
@ -10,11 +10,13 @@ import 'dart:io';
|
|||
import 'package:analysis_server/protocol/protocol_constants.dart';
|
||||
import 'package:analysis_server/protocol/protocol_generated.dart';
|
||||
import 'package:analysis_server/src/services/pub/pub_command.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:analyzer/file_system/physical_file_system.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import '../../src/utilities/mock_packages.dart';
|
||||
import '../../support/configuration_files.dart';
|
||||
import 'integration_test_methods.dart';
|
||||
import 'protocol_matchers.dart';
|
||||
|
||||
|
@ -82,7 +84,8 @@ typedef NotificationProcessor = void Function(
|
|||
String event, Map<Object?, Object?> params);
|
||||
|
||||
/// Base class for analysis server integration tests.
|
||||
abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
||||
abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest
|
||||
with MockPackagesMixin<PhysicalResourceProvider>, ConfigurationFilesMixin {
|
||||
/// Amount of time to give the server to respond to a shutdown request before
|
||||
/// forcibly terminating it.
|
||||
static const Duration SHUTDOWN_TIMEOUT = Duration(seconds: 60);
|
||||
|
@ -94,6 +97,12 @@ abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
|||
/// Temporary directory in which source files can be stored.
|
||||
late Directory sourceDirectory;
|
||||
|
||||
/// Temporary directory in which additional packages can be stored.
|
||||
late Directory packagesDirectory;
|
||||
|
||||
@override
|
||||
final resourceProvider = PhysicalResourceProvider.INSTANCE;
|
||||
|
||||
/// Map from file path to the list of analysis errors which have most recently
|
||||
/// been received for the file.
|
||||
Map<String, List<AnalysisError>> currentAnalysisErrors =
|
||||
|
@ -135,6 +144,12 @@ abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
|||
return completer.future;
|
||||
}
|
||||
|
||||
@override
|
||||
String get packagesRootPath => packagesDirectory.path;
|
||||
|
||||
@override
|
||||
String get testPackageRootPath => sourceDirectory.path;
|
||||
|
||||
/// Print out any messages exchanged with the server. If some messages have
|
||||
/// already been exchanged with the server, they are printed out immediately.
|
||||
void debugStdio() {
|
||||
|
@ -166,9 +181,15 @@ abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
|||
/// The server is automatically started before every test, and a temporary
|
||||
/// [sourceDirectory] is created.
|
||||
Future<void> setUp() async {
|
||||
sourceDirectory = Directory(Directory.systemTemp
|
||||
var pathContext = resourceProvider.pathContext;
|
||||
var tempDirectoryPath = Directory.systemTemp
|
||||
.createTempSync('analysisServer')
|
||||
.resolveSymbolicLinksSync());
|
||||
.resolveSymbolicLinksSync();
|
||||
sourceDirectory = Directory(pathContext.join(tempDirectoryPath, 'app'))
|
||||
..createSync();
|
||||
packagesDirectory =
|
||||
Directory(pathContext.join(tempDirectoryPath, 'packages'))
|
||||
..createSync();
|
||||
writeTestPackageConfig();
|
||||
|
||||
onAnalysisErrors.listen((AnalysisErrorsParams params) {
|
||||
|
@ -242,10 +263,12 @@ abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
|||
);
|
||||
}
|
||||
|
||||
/// After every test, the server is stopped and [sourceDirectory] is deleted.
|
||||
/// After every test, the server is stopped and [sourceDirectory] and
|
||||
/// [packagesDirectory] are deleted.
|
||||
Future<void> tearDown() {
|
||||
return shutdownIfNeeded().then((_) {
|
||||
sourceDirectory.deleteSync(recursive: true);
|
||||
packagesDirectory.deleteSync(recursive: true);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -277,40 +300,6 @@ abstract class AbstractAnalysisServerIntegrationTest extends IntegrationTest {
|
|||
file.writeAsStringSync(contents);
|
||||
return file.resolveSymbolicLinksSync();
|
||||
}
|
||||
|
||||
void writePackageConfig(
|
||||
String pathname, {
|
||||
required PackageConfigFileBuilder config,
|
||||
}) {
|
||||
writeFile(
|
||||
pathname,
|
||||
config.toContent(
|
||||
toUriStr: (p) => '${path.toUri(p)}',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void writeTestPackageConfig({
|
||||
PackageConfigFileBuilder? config,
|
||||
String? languageVersion,
|
||||
}) {
|
||||
if (config == null) {
|
||||
config = PackageConfigFileBuilder();
|
||||
} else {
|
||||
config = config.copy();
|
||||
}
|
||||
|
||||
config.add(
|
||||
name: 'test',
|
||||
rootPath: sourceDirectory.path,
|
||||
languageVersion: languageVersion,
|
||||
);
|
||||
|
||||
writePackageConfig(
|
||||
sourcePath('.dart_tool/package_config.json'),
|
||||
config: config,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Wrapper class for Matcher which doesn't create the underlying Matcher object
|
||||
|
|
|
@ -26,8 +26,7 @@ class AssistsCodeActionsTest extends AbstractCodeActionsTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
setSupportedCodeActionKinds([CodeActionKind.Refactor]);
|
||||
|
|
|
@ -830,8 +830,7 @@ const NewWidget({
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
|
||||
|
|
|
@ -769,8 +769,7 @@ void f() {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
}
|
||||
|
@ -4366,8 +4365,7 @@ import 'package:flutter/widgets.dart';''';
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -85,7 +85,7 @@ class DartTextDocumentContentProviderTest extends AbstractLspAnalysisServerTest
|
|||
}
|
||||
|
||||
Future<void> test_valid_content() async {
|
||||
writePackageConfig(projectFolderPath, temporaryMacroSupport: true);
|
||||
writeTestPackageConfig(macro: true);
|
||||
|
||||
newFile(
|
||||
join(projectFolderPath, 'lib', 'with_foo.dart'), withFooMethodMacro);
|
||||
|
@ -124,7 +124,7 @@ class A {
|
|||
}
|
||||
|
||||
Future<void> test_valid_eventAndModifiedContent() async {
|
||||
writePackageConfig(projectFolderPath, temporaryMacroSupport: true);
|
||||
writeTestPackageConfig(macro: true);
|
||||
|
||||
var macroImplementationFilePath =
|
||||
join(projectFolderPath, 'lib', 'with_foo.dart');
|
||||
|
|
|
@ -425,7 +425,7 @@ foo(int m) {
|
|||
}
|
||||
|
||||
Future<void> test_macro_macroGeneratedFileToUserFile() async {
|
||||
writePackageConfig(projectFolderPath, temporaryMacroSupport: true);
|
||||
writeTestPackageConfig(macro: true);
|
||||
|
||||
setLocationLinkSupport(); // To verify the full set of ranges.
|
||||
setDartTextDocumentContentProviderSupport();
|
||||
|
@ -475,7 +475,7 @@ class A {
|
|||
}
|
||||
|
||||
Future<void> test_macro_userFileToMacroGeneratedFile() async {
|
||||
writePackageConfig(projectFolderPath, temporaryMacroSupport: true);
|
||||
writeTestPackageConfig(macro: true);
|
||||
|
||||
// TODO(dantup): Consider making LocationLink the default for tests (with
|
||||
// some specific tests for Location) because it's what VS Code uses and
|
||||
|
|
|
@ -120,7 +120,7 @@ include: package:pedantic/analysis_options.yaml
|
|||
|
||||
// // Write a package file that allows resolving the include.
|
||||
// final secondDiagnosticsUpdate = waitForDiagnostics(analysisOptionsUri);
|
||||
// writePackageConfig(projectFolderPath, pedantic: true);
|
||||
// writeTestPackageConfig(pedantic: true);
|
||||
//
|
||||
// // Ensure the error disappeared.
|
||||
// final updatedDiagnostics = await secondDiagnosticsUpdate;
|
||||
|
@ -178,8 +178,7 @@ void f() {
|
|||
setDiagnosticTagSupport([DiagnosticTag.Deprecated]);
|
||||
|
||||
var onePackagePath = convertPath('/home/one');
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder()
|
||||
..add(name: 'one', rootPath: onePackagePath),
|
||||
);
|
||||
|
@ -203,8 +202,7 @@ void f() {
|
|||
|
||||
Future<void> test_diagnosticTag_notSupported() async {
|
||||
var onePackagePath = convertPath('/home/one');
|
||||
writePackageConfig(
|
||||
projectFolderPath,
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder()
|
||||
..add(name: 'one', rootPath: onePackagePath),
|
||||
);
|
||||
|
|
|
@ -29,7 +29,7 @@ class DocumentColorPresentationTest extends AbstractLspAnalysisServerTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(projectFolderPath, flutter: true);
|
||||
writeTestPackageConfig(flutter: true);
|
||||
|
||||
content = '';
|
||||
testFilePath = mainFilePath;
|
||||
|
@ -305,7 +305,7 @@ class DocumentColorTest extends AbstractLspAnalysisServerTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(projectFolderPath, flutter: true);
|
||||
writeTestPackageConfig(flutter: true);
|
||||
}
|
||||
|
||||
Future<void> test_nonDartFile() async {
|
||||
|
|
|
@ -49,7 +49,7 @@ class FlutterOutlineTest extends AbstractLspAnalysisServerTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writePackageConfig(projectFolderPath, flutter: true);
|
||||
writeTestPackageConfig(flutter: true);
|
||||
}
|
||||
|
||||
Future<void> test_afterChange() async {
|
||||
|
|
|
@ -14,6 +14,7 @@ import 'package:analysis_server/src/plugin/plugin_manager.dart';
|
|||
import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
|
||||
import 'package:analysis_server/src/services/user_prompts/dart_fix_prompt_manager.dart';
|
||||
import 'package:analysis_server/src/utilities/mocks.dart';
|
||||
import 'package:analyzer/file_system/memory_file_system.dart';
|
||||
import 'package:analyzer/instrumentation/instrumentation.dart';
|
||||
import 'package:analyzer/src/generated/sdk.dart';
|
||||
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
|
||||
|
@ -31,6 +32,7 @@ import 'package:unified_analytics/unified_analytics.dart';
|
|||
|
||||
import '../mocks.dart';
|
||||
import '../mocks_lsp.dart';
|
||||
import '../src/utilities/mock_packages.dart';
|
||||
import '../support/configuration_files.dart';
|
||||
import 'change_verifier.dart';
|
||||
import 'request_helpers_mixin.dart';
|
||||
|
@ -49,6 +51,7 @@ abstract class AbstractLspAnalysisServerTest
|
|||
LspEditHelpersMixin,
|
||||
LspVerifyEditHelpersMixin,
|
||||
LspAnalysisServerTestMixin,
|
||||
MockPackagesMixin<MemoryResourceProvider>,
|
||||
ConfigurationFilesMixin {
|
||||
late MockLspServerChannel channel;
|
||||
late TestPluginManager pluginManager;
|
||||
|
@ -62,8 +65,9 @@ abstract class AbstractLspAnalysisServerTest
|
|||
|
||||
DartFixPromptManager? get dartFixPromptManager => null;
|
||||
|
||||
/// The path that is not in [projectFolderPath], contains external packages.
|
||||
@override
|
||||
path.Context get pathContext => server.resourceProvider.pathContext;
|
||||
String get packagesRootPath => resourceProvider.convertPath('/packages');
|
||||
|
||||
AnalysisServerOptions get serverOptions => AnalysisServerOptions();
|
||||
|
||||
|
@ -301,7 +305,7 @@ analyzer:
|
|||
''');
|
||||
|
||||
analysisOptionsUri = pathContext.toUri(analysisOptionsPath);
|
||||
writePackageConfig(projectFolderPath);
|
||||
writeTestPackageConfig();
|
||||
}
|
||||
|
||||
Future<void> tearDown() async {
|
||||
|
@ -864,6 +868,8 @@ mixin LspAnalysisServerTestMixin
|
|||
|
||||
Stream<Message> get serverToClient;
|
||||
|
||||
String get testPackageRootPath => projectFolderPath;
|
||||
|
||||
Future<void> changeFile(
|
||||
int newVersion,
|
||||
Uri uri,
|
||||
|
|
|
@ -50,7 +50,7 @@ class ServerDartFixPromptTest extends AbstractLspAnalysisServerTest {
|
|||
expect(promptManager.checksTriggered, 1);
|
||||
|
||||
// Expect that writing package config attempts to trigger another check.
|
||||
writePackageConfig(projectFolderPath);
|
||||
writeTestPackageConfig();
|
||||
await waitForAnalysisComplete();
|
||||
await pumpEventQueue(times: 5000);
|
||||
expect(promptManager.checksTriggered, 2);
|
||||
|
|
|
@ -22,7 +22,7 @@ void main() {
|
|||
@reflectiveTest
|
||||
class ConvertElementNullableTest extends AbstractSingleUnitTest {
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_CONSTRUCTOR_required_parameters_1() async {
|
||||
writeTestPackageConfig(meta: true);
|
||||
|
|
|
@ -163,19 +163,13 @@ library lib_a;
|
|||
class A {}
|
||||
class B extends A {}
|
||||
''');
|
||||
newPackageConfigJsonFile(
|
||||
'$packagesRootPath/pkgA',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: '$packagesRootPath/pkgA'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writePackageConfig(
|
||||
convertPath('$packagesRootPath/pkgA'),
|
||||
);
|
||||
// reference the package from a project
|
||||
newPackageConfigJsonFile(
|
||||
testPackageRootPath,
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: '$packagesRootPath/pkgA'))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
);
|
||||
writeTestPackageConfig(
|
||||
config: (PackageConfigFileBuilder()
|
||||
..add(name: 'pkgA', rootPath: '$packagesRootPath/pkgA')));
|
||||
addTestFile('''
|
||||
import 'package:pkgA/libA.dart';
|
||||
class C extends A {}
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../../../../src/utilities/mock_packages.dart';
|
||||
import 'completion_relevance.dart';
|
||||
|
||||
void main() {
|
||||
|
@ -21,12 +19,7 @@ class NamedArgumentTest extends CompletionRelevanceTest
|
|||
mixin NamedArgumentTestCases on CompletionRelevanceTest {
|
||||
@override
|
||||
Future<void> setUp() async {
|
||||
var metaLibFolder = MockPackages.instance.addMeta(resourceProvider);
|
||||
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder()
|
||||
..add(name: 'meta', rootPath: metaLibFolder.parent.path),
|
||||
);
|
||||
writeTestPackageConfig(meta: true);
|
||||
|
||||
await super.setUp();
|
||||
}
|
||||
|
|
|
@ -482,7 +482,7 @@ f() {
|
|||
@reflectiveTest
|
||||
class _NotNullTest extends PostfixCompletionTest {
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_nn() async {
|
||||
await _prepareCompletion('.nn', '''
|
||||
|
@ -590,7 +590,7 @@ f() {
|
|||
@reflectiveTest
|
||||
class _ParenTest extends PostfixCompletionTest {
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_paren() async {
|
||||
await _prepareCompletion('.par', '''
|
||||
|
@ -609,7 +609,7 @@ f(expr) {
|
|||
@reflectiveTest
|
||||
class _ReturnTest extends PostfixCompletionTest {
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_return() async {
|
||||
await _prepareCompletion('.return', '''
|
||||
|
@ -628,7 +628,7 @@ f(expr) {
|
|||
@reflectiveTest
|
||||
class _SwitchTest extends PostfixCompletionTest {
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_return() async {
|
||||
await _prepareCompletion('.switch', '''
|
||||
|
|
|
@ -605,10 +605,7 @@ class B extends A {}
|
|||
String _configureForPackage_aaa() {
|
||||
var aaaRootPath = '$workspaceRootPath/aaa';
|
||||
|
||||
writePackageConfig(
|
||||
'$aaaRootPath/.dart_tool/package_config.json',
|
||||
PackageConfigFileBuilder()..add(name: 'aaa', rootPath: aaaRootPath),
|
||||
);
|
||||
writePackageConfig(aaaRootPath, config: PackageConfigFileBuilder());
|
||||
|
||||
writeTestPackageConfig(
|
||||
config: PackageConfigFileBuilder()
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analysis_server/src/protocol_server.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../../../analysis_server_base.dart';
|
||||
import '../../utilities/mock_packages.dart';
|
||||
|
||||
@reflectiveTest
|
||||
class FlutterBase extends PubPackageAnalysisServerTest {
|
||||
|
@ -43,15 +41,9 @@ class FlutterBase extends PubPackageAnalysisServerTest {
|
|||
|
||||
newPubspecYamlFile(testPackageRootPath, '');
|
||||
|
||||
var metaLib = MockPackages.instance.addMeta(resourceProvider);
|
||||
var flutterLib = MockPackages.instance.addFlutter(resourceProvider);
|
||||
newPackageConfigJsonFile(
|
||||
'/home/test',
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'test', rootPath: testPackageRootPath)
|
||||
..add(name: 'meta', rootPath: metaLib.parent.path)
|
||||
..add(name: 'flutter', rootPath: flutterLib.parent.path))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
writeTestPackageConfig(
|
||||
meta: true,
|
||||
flutter: true,
|
||||
);
|
||||
|
||||
await setRoots(included: [workspaceRootPath], excluded: []);
|
||||
|
|
|
@ -8,12 +8,10 @@ import 'package:analysis_server/protocol/protocol.dart';
|
|||
import 'package:analysis_server/protocol/protocol_constants.dart';
|
||||
import 'package:analysis_server/protocol/protocol_generated.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../../analysis_server_base.dart';
|
||||
import '../utilities/mock_packages.dart';
|
||||
|
||||
void main() {
|
||||
defineReflectiveSuite(() {
|
||||
|
@ -23,8 +21,6 @@ void main() {
|
|||
|
||||
@reflectiveTest
|
||||
class FlutterNotificationOutlineTest extends PubPackageAnalysisServerTest {
|
||||
late Folder flutterFolder;
|
||||
|
||||
final Completer<void> _outlineReceived = Completer();
|
||||
late FlutterOutline outline;
|
||||
|
||||
|
@ -56,17 +52,11 @@ class FlutterNotificationOutlineTest extends PubPackageAnalysisServerTest {
|
|||
@override
|
||||
Future<void> setUp() async {
|
||||
super.setUp();
|
||||
writeTestPackageConfig(flutter: true);
|
||||
await setRoots(included: [workspaceRootPath], excluded: []);
|
||||
flutterFolder = MockPackages.instance.addFlutter(resourceProvider);
|
||||
}
|
||||
|
||||
Future<void> test_children() async {
|
||||
newPackageConfigJsonFile(
|
||||
testPackageRootPath,
|
||||
(PackageConfigFileBuilder()
|
||||
..add(name: 'flutter', rootPath: flutterFolder.parent.path))
|
||||
.toContent(toUriStr: toUriStr),
|
||||
);
|
||||
newAnalysisOptionsYamlFile(testPackageRootPath, '''
|
||||
analyzer:
|
||||
strong-mode: true
|
||||
|
|
|
@ -22,7 +22,7 @@ class AddLatePreNnbdTest extends FixProcessorTest {
|
|||
FixKind get kind => DartFixKind.ADD_LATE;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_withFinal() async {
|
||||
await resolveTestCode('''
|
||||
|
|
|
@ -22,7 +22,7 @@ class AddSwitchCaseBreakMultiTest extends FixProcessorTest {
|
|||
FixKind get kind => DartFixKind.ADD_SWITCH_CASE_BREAK_MULTI;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.19';
|
||||
String get testPackageLanguageVersion => '2.19';
|
||||
|
||||
Future<void> test_singleFile() async {
|
||||
await resolveTestCode('''
|
||||
|
@ -61,7 +61,7 @@ class AddSwitchCaseBreakTest extends FixProcessorTest {
|
|||
FixKind get kind => DartFixKind.ADD_SWITCH_CASE_BREAK;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.19';
|
||||
String get testPackageLanguageVersion => '2.19';
|
||||
|
||||
Future<void> test_sharedCaseBody() async {
|
||||
await resolveTestCode('''
|
||||
|
|
|
@ -52,7 +52,7 @@ class ConvertToWhereTypeTest extends FixProcessorLintTest {
|
|||
String get lintCode => LintNames.prefer_iterable_whereType;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.9';
|
||||
String get testPackageLanguageVersion => '2.9';
|
||||
|
||||
Future<void> test_default_declaredType() async {
|
||||
await resolveTestCode('''
|
||||
|
|
|
@ -22,7 +22,7 @@ class RemoveDuplicateCaseBulkTest extends BulkFixProcessorTest {
|
|||
String get lintCode => LintNames.no_duplicate_case_values;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.19';
|
||||
String get testPackageLanguageVersion => '2.19';
|
||||
|
||||
Future<void> test_singleFile() async {
|
||||
await resolveTestCode('''
|
||||
|
@ -65,7 +65,7 @@ class RemoveDuplicateCaseTest extends FixProcessorLintTest {
|
|||
String get lintCode => LintNames.no_duplicate_case_values;
|
||||
|
||||
@override
|
||||
String? get testPackageLanguageVersion => '2.19';
|
||||
String get testPackageLanguageVersion => '2.19';
|
||||
|
||||
Future<void> test_fallThroughFromPrevious() async {
|
||||
await resolveTestCode('''
|
||||
|
|
|
@ -23,9 +23,6 @@ class RemoveQuestionMarkBulkTest extends BulkFixProcessorTest {
|
|||
String get lintCode =>
|
||||
LintNames.unnecessary_nullable_for_final_variable_declarations;
|
||||
|
||||
@override
|
||||
String get testPackageLanguageVersion => latestLanguageVersion;
|
||||
|
||||
Future<void> test_singleFile() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
|
|
|
@ -21,7 +21,7 @@ class ReplaceColonWithEqualsDeprecatedTest extends FixProcessorTest {
|
|||
FixKind get kind => DartFixKind.REPLACE_COLON_WITH_EQUALS;
|
||||
|
||||
@override
|
||||
String get latestLanguageVersion => '2.19';
|
||||
String get testPackageLanguageVersion => '2.19';
|
||||
|
||||
Future<void> test_defaultFormalParameter() async {
|
||||
await resolveTestCode('''
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:analyzer/file_system/file_system.dart';
|
|||
import 'package:analyzer/file_system/memory_file_system.dart';
|
||||
import 'package:analyzer/file_system/physical_file_system.dart';
|
||||
import 'package:analyzer_utilities/package_root.dart' as package_root;
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
void _cacheFiles(Map<String, String> cachedFiles) {
|
||||
var resourceProvider = PhysicalResourceProvider.INSTANCE;
|
||||
|
@ -77,56 +78,82 @@ class BlazeMockPackages {
|
|||
}
|
||||
|
||||
/// Helper for copying files from "test/mock_packages" to memory file system.
|
||||
class MockPackages {
|
||||
static final MockPackages instance = MockPackages._();
|
||||
|
||||
mixin MockPackagesMixin<T extends ResourceProvider> {
|
||||
/// The mapping from relative Posix paths of files to the file contents.
|
||||
final Map<String, String> _cachedFiles = {};
|
||||
///
|
||||
/// `null` until the cache is first populated.
|
||||
Map<String, String>? _cachedFiles;
|
||||
|
||||
MockPackages._() {
|
||||
_cacheFiles(_cachedFiles);
|
||||
}
|
||||
/// The path to a folder where mock packages can be written.
|
||||
String get packagesRootPath;
|
||||
|
||||
Folder addFlutter(MemoryResourceProvider provider) {
|
||||
var packageFolder = _addFiles(provider, 'flutter');
|
||||
path.Context get pathContext => resourceProvider.pathContext;
|
||||
|
||||
T get resourceProvider;
|
||||
|
||||
Folder addFlutter() {
|
||||
var packageFolder = _addFiles('flutter');
|
||||
return packageFolder.getChildAssumingFolder('lib');
|
||||
}
|
||||
|
||||
Folder addMeta(MemoryResourceProvider provider) {
|
||||
var packageFolder = _addFiles(provider, 'meta');
|
||||
Folder addMeta() {
|
||||
var packageFolder = _addFiles('meta');
|
||||
return packageFolder.getChildAssumingFolder('lib');
|
||||
}
|
||||
|
||||
Folder addPedantic(MemoryResourceProvider provider) {
|
||||
var packageFolder = _addFiles(provider, 'pedantic');
|
||||
Folder addPedantic() {
|
||||
var packageFolder = _addFiles('pedantic');
|
||||
return packageFolder.getChildAssumingFolder('lib');
|
||||
}
|
||||
|
||||
Folder addUI(MemoryResourceProvider provider) {
|
||||
var packageFolder = _addFiles(provider, 'ui');
|
||||
Folder addUI() {
|
||||
var packageFolder = _addFiles('ui');
|
||||
return packageFolder.getChildAssumingFolder('lib');
|
||||
}
|
||||
|
||||
Folder addVectorMath(MemoryResourceProvider provider) {
|
||||
var packageFolder = _addFiles(provider, 'vector_math');
|
||||
Folder addVectorMath() {
|
||||
var packageFolder = _addFiles('vector_math');
|
||||
return packageFolder.getChildAssumingFolder('lib');
|
||||
}
|
||||
|
||||
/// Convert the given posix [path] to conform to this provider's path context.
|
||||
///
|
||||
/// This is a utility method for testing; paths passed in to other methods in
|
||||
/// this class are never converted automatically.
|
||||
String convertPath(String inputPath) {
|
||||
// TODO(dantup): Copied from MemoryResourceProvider so it can be used by
|
||||
// shared code that's also used in integration tests.
|
||||
if (pathContext.style == path.windows.style) {
|
||||
if (inputPath.startsWith(path.posix.separator)) {
|
||||
inputPath = r'C:' + inputPath;
|
||||
}
|
||||
inputPath =
|
||||
inputPath.replaceAll(path.posix.separator, path.windows.separator);
|
||||
}
|
||||
return inputPath;
|
||||
}
|
||||
|
||||
/// Add files of the given [packageName] to the [provider].
|
||||
Folder _addFiles(MemoryResourceProvider provider, String packageName) {
|
||||
var packagesPath = provider.convertPath('/packages');
|
||||
Folder _addFiles(String packageName) {
|
||||
var cachedFiles = _cachedFiles;
|
||||
if (cachedFiles == null) {
|
||||
cachedFiles = {};
|
||||
_cacheFiles(cachedFiles);
|
||||
_cachedFiles = cachedFiles;
|
||||
}
|
||||
|
||||
for (var entry in _cachedFiles.entries) {
|
||||
for (var entry in cachedFiles.entries) {
|
||||
var relativePosixPath = entry.key;
|
||||
var relativePathComponents = relativePosixPath.split('/');
|
||||
if (relativePathComponents[0] == packageName) {
|
||||
var relativePath = provider.pathContext.joinAll(relativePathComponents);
|
||||
var path = provider.pathContext.join(packagesPath, relativePath);
|
||||
provider.newFile(path, entry.value);
|
||||
var relativePath = pathContext.joinAll(relativePathComponents);
|
||||
var path = convertPath('$packagesRootPath/$relativePath');
|
||||
resourceProvider.getFile(path).writeAsStringSync(entry.value);
|
||||
}
|
||||
}
|
||||
|
||||
var packagesFolder = provider.getFolder(packagesPath);
|
||||
var packagesFolder =
|
||||
resourceProvider.getFolder(convertPath(packagesRootPath));
|
||||
return packagesFolder.getChildAssumingFolder(packageName);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,81 +2,98 @@
|
|||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:analyzer/file_system/physical_file_system.dart';
|
||||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
||||
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
|
||||
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
|
||||
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
|
||||
import 'package:analyzer_utilities/package_root.dart' as package_root;
|
||||
|
||||
import '../src/utilities/mock_packages.dart';
|
||||
|
||||
mixin ConfigurationFilesMixin on ResourceProviderMixin {
|
||||
/// A mixin adding functionality to write `.dart_tool/package_config.json`
|
||||
/// files along with mock packages to a [ResourceProvider].
|
||||
mixin ConfigurationFilesMixin<T extends ResourceProvider>
|
||||
on MockPackagesMixin<T> {
|
||||
String get latestLanguageVersion =>
|
||||
'${ExperimentStatus.currentVersion.major}.'
|
||||
'${ExperimentStatus.currentVersion.minor}';
|
||||
|
||||
String get testPackageLanguageVersion => latestLanguageVersion;
|
||||
|
||||
/// The path to the test package being used for testing.
|
||||
String get testPackageRootPath;
|
||||
|
||||
String toUriStr(String filePath) =>
|
||||
pathContext.toUri(convertPath(filePath)).toString();
|
||||
|
||||
/// Writes a package_config.json for the package at [projectFolderPath]. If
|
||||
/// [packageName] is not supplied, the last segment of [projectFolderPath] is
|
||||
/// used.
|
||||
void writePackageConfig(
|
||||
String projectFolderPath, {
|
||||
// The name of this package. If not provided, the last segment of the path
|
||||
// will be used.
|
||||
String? packageName,
|
||||
PackageConfigFileBuilder? config,
|
||||
String? languageVersion,
|
||||
bool flutter = false,
|
||||
bool meta = false,
|
||||
bool pedantic = false,
|
||||
bool vector_math = false,
|
||||
// TODO(dantup): Remove this flag when we no longer need to copy packages
|
||||
// for macro support.
|
||||
bool temporaryMacroSupport = false,
|
||||
bool macro = false,
|
||||
}) {
|
||||
projectFolderPath = convertPath(projectFolderPath);
|
||||
|
||||
if (config == null) {
|
||||
config = PackageConfigFileBuilder();
|
||||
} else {
|
||||
config = config.copy();
|
||||
}
|
||||
|
||||
// Add this package to its own config.
|
||||
config.add(
|
||||
name: 'test',
|
||||
name: packageName ?? pathContext.basename(projectFolderPath),
|
||||
rootPath: projectFolderPath,
|
||||
languageVersion: languageVersion ?? testPackageLanguageVersion,
|
||||
);
|
||||
|
||||
if (meta || flutter) {
|
||||
var libFolder = MockPackages.instance.addMeta(resourceProvider);
|
||||
var libFolder = addMeta();
|
||||
config.add(name: 'meta', rootPath: libFolder.parent.path);
|
||||
}
|
||||
|
||||
if (flutter) {
|
||||
{
|
||||
var libFolder = MockPackages.instance.addUI(resourceProvider);
|
||||
var libFolder = addUI();
|
||||
config.add(name: 'ui', rootPath: libFolder.parent.path);
|
||||
}
|
||||
{
|
||||
var libFolder = MockPackages.instance.addFlutter(resourceProvider);
|
||||
var libFolder = addFlutter();
|
||||
config.add(name: 'flutter', rootPath: libFolder.parent.path);
|
||||
}
|
||||
}
|
||||
|
||||
if (pedantic) {
|
||||
var libFolder = MockPackages.instance.addPedantic(resourceProvider);
|
||||
var libFolder = addPedantic();
|
||||
config.add(name: 'pedantic', rootPath: libFolder.parent.path);
|
||||
}
|
||||
|
||||
if (vector_math) {
|
||||
var libFolder = MockPackages.instance.addVectorMath(resourceProvider);
|
||||
var libFolder = addVectorMath();
|
||||
config.add(name: 'vector_math', rootPath: libFolder.parent.path);
|
||||
}
|
||||
|
||||
if (temporaryMacroSupport) {
|
||||
final testPackagesRootPath = resourceProvider.convertPath('/packages');
|
||||
|
||||
if (macro) {
|
||||
// TODO(dantup): This code may need to change/be removed depending on how
|
||||
// we ultimately reference the macro packages/libraries.
|
||||
final physical = PhysicalResourceProvider.INSTANCE;
|
||||
final packageRoot =
|
||||
physical.pathContext.normalize(package_root.packageRoot);
|
||||
|
||||
// Copy _fe_analyzer_shared from local SDK into the memory FS.
|
||||
final testSharedFolder =
|
||||
getFolder('$testPackagesRootPath/_fe_analyzer_shared');
|
||||
// Copy _fe_analyzer_shared from local SDK into the resource provider.
|
||||
final testSharedFolder = resourceProvider
|
||||
.getFolder(convertPath('$packagesRootPath/_fe_analyzer_shared'));
|
||||
physical
|
||||
.getFolder(packageRoot)
|
||||
.getChildAssumingFolder('_fe_analyzer_shared/lib/src/macros')
|
||||
|
@ -84,8 +101,8 @@ mixin ConfigurationFilesMixin on ResourceProviderMixin {
|
|||
config.add(name: '_fe_analyzer_shared', rootPath: testSharedFolder.path);
|
||||
|
||||
// Copy dart_internal from local SDK into the memory FS.
|
||||
final testInternalFolder =
|
||||
getFolder('$testPackagesRootPath/dart_internal');
|
||||
final testInternalFolder = resourceProvider
|
||||
.getFolder(convertPath('$packagesRootPath/dart_internal'));
|
||||
physical
|
||||
.getFolder(packageRoot)
|
||||
.getChildAssumingFolder('dart_internal')
|
||||
|
@ -93,7 +110,46 @@ mixin ConfigurationFilesMixin on ResourceProviderMixin {
|
|||
config.add(name: 'dart_internal', rootPath: testInternalFolder.path);
|
||||
}
|
||||
|
||||
newPackageConfigJsonFile(
|
||||
projectFolderPath, config.toContent(toUriStr: toUriStr));
|
||||
_newPackageConfigJsonFile(
|
||||
projectFolderPath,
|
||||
config.toContent(toUriStr: toUriStr),
|
||||
);
|
||||
}
|
||||
|
||||
/// Writes a package_config.json for the package under test (considered
|
||||
/// 'package:test') that lives in [testPackageRootPath].
|
||||
void writeTestPackageConfig({
|
||||
PackageConfigFileBuilder? config,
|
||||
String? languageVersion,
|
||||
bool flutter = false,
|
||||
bool meta = false,
|
||||
bool pedantic = false,
|
||||
bool vector_math = false,
|
||||
bool macro = false,
|
||||
}) {
|
||||
writePackageConfig(
|
||||
testPackageRootPath,
|
||||
config: config,
|
||||
languageVersion: languageVersion,
|
||||
packageName: 'test',
|
||||
flutter: flutter,
|
||||
meta: meta,
|
||||
pedantic: pedantic,
|
||||
vector_math: vector_math,
|
||||
macro: macro,
|
||||
);
|
||||
}
|
||||
|
||||
File _newPackageConfigJsonFile(String packageRootPath, String content) {
|
||||
var dartToolDirectoryPath = pathContext.join(
|
||||
packageRootPath,
|
||||
file_paths.dotDartTool,
|
||||
);
|
||||
var filePath = pathContext.join(
|
||||
dartToolDirectoryPath,
|
||||
file_paths.packageConfigJson,
|
||||
);
|
||||
resourceProvider.getFolder(dartToolDirectoryPath).create();
|
||||
return resourceProvider.getFile(filePath)..writeAsStringSync(content);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,11 +24,11 @@ void main() {
|
|||
}
|
||||
}
|
||||
|
||||
PhysicalResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
|
||||
PhysicalResourceProvider _resourceProvider = PhysicalResourceProvider.INSTANCE;
|
||||
|
||||
/// Returns the path to the file containing the status information.
|
||||
String statusFilePath() {
|
||||
var pathContext = resourceProvider.pathContext;
|
||||
var pathContext = _resourceProvider.pathContext;
|
||||
var packageRoot = pathContext.normalize(package_root.packageRoot);
|
||||
return pathContext.join(packageRoot, 'analysis_server', 'lib', 'src',
|
||||
'services', 'correction', 'error_fix_status.yaml');
|
||||
|
@ -117,7 +117,7 @@ String? verifyErrorFixStatus() {
|
|||
/// Returns the content of the file containing the status information, parsed
|
||||
/// as a YAML map.
|
||||
(String? error, YamlMap? info) _statusInfo() {
|
||||
var statusFile = resourceProvider.getFile(statusFilePath());
|
||||
var statusFile = _resourceProvider.getFile(statusFilePath());
|
||||
var document = loadYamlDocument(statusFile.readAsStringSync());
|
||||
var statusInfo = document.contents;
|
||||
if (statusInfo is! YamlMap) {
|
||||
|
|
Loading…
Reference in a new issue