Create a unified place to declare experiments used in tests
Change-Id: Ifb9a82391be6c7a92ce9641b4b708add3eaa387e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/375540 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
committed by
Commit Queue
parent
9dd8b66cc4
commit
99130844d6
@@ -5,7 +5,6 @@
|
||||
import 'package:analysis_server/src/protocol_server.dart';
|
||||
import 'package:analysis_server/src/services/correction/fix_internal.dart';
|
||||
import 'package:analyzer/dart/analysis/analysis_context.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/analysis/results.dart';
|
||||
import 'package:analyzer/dart/analysis/session.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
@@ -19,6 +18,7 @@ import 'package:analyzer/src/test_utilities/platform.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';
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:analyzer_utilities/test/mock_packages/mock_packages.dart';
|
||||
import 'package:linter/src/rules.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
@@ -64,13 +64,7 @@ class AbstractContextTest
|
||||
|
||||
/// Return a list of the experiments that are to be enabled for tests in this
|
||||
/// class, an empty list if there are no experiments that should be enabled.
|
||||
List<String> get experiments => [
|
||||
Feature.digit_separators.enableString,
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
Feature.wildcard_variables.enableString,
|
||||
];
|
||||
List<String> get experiments => experimentsForTests;
|
||||
|
||||
/// The path that is not in [workspaceRootPath], contains external packages.
|
||||
@override
|
||||
|
||||
@@ -11,13 +11,13 @@ 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/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/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/resource_provider_mixin.dart';
|
||||
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:analyzer_utilities/test/mock_packages/mock_packages.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:test/test.dart';
|
||||
@@ -214,14 +214,9 @@ class PubPackageAnalysisServerTest extends ContextResolutionTest
|
||||
// TODO(scheglov): Consider turning it back into a getter.
|
||||
late String testFilePath = '$testPackageLibPath/test.dart';
|
||||
|
||||
// If experiments are needed,
|
||||
// add `import 'package:analyzer/dart/analysis/features.dart';`
|
||||
// and list the necessary experiments here.
|
||||
List<String> get experiments => [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
];
|
||||
/// Return a list of the experiments that are to be enabled for tests in this
|
||||
/// class, an empty list if there are no experiments that should be enabled.
|
||||
List<String> get experiments => experimentsForTests;
|
||||
|
||||
/// The path that is not in [workspaceRootPath], contains external packages.
|
||||
@override
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analysis_server/src/legacy_analysis_server.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:language_server_protocol/protocol_generated.dart';
|
||||
import 'package:test/expect.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
@@ -25,9 +25,7 @@ class DartTextDocumentContentProviderTest
|
||||
AnalysisServerOptions get serverOptions => AnalysisServerOptions()
|
||||
..enabledExperiments = [
|
||||
...super.serverOptions.enabledExperiments,
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
...experimentsForTests,
|
||||
];
|
||||
|
||||
@override
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
import 'package:analysis_server/lsp_protocol/protocol.dart' as lsp;
|
||||
import 'package:analysis_server/src/analysis_server.dart';
|
||||
import 'package:analysis_server/src/legacy_analysis_server.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
@@ -27,9 +27,7 @@ class DefinitionTest extends AbstractLspAnalysisServerTest {
|
||||
AnalysisServerOptions get serverOptions => AnalysisServerOptions()
|
||||
..enabledExperiments = [
|
||||
...super.serverOptions.enabledExperiments,
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
...experimentsForTests,
|
||||
];
|
||||
|
||||
Future<void> test_acrossFiles() async {
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
import 'package:analysis_server/lsp_protocol/protocol.dart';
|
||||
import 'package:analysis_server/src/legacy_analysis_server.dart';
|
||||
import 'package:analysis_server/src/lsp/constants.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
@@ -23,12 +23,8 @@ void main() {
|
||||
@reflectiveTest
|
||||
class HoverTest extends AbstractLspAnalysisServerTest {
|
||||
@override
|
||||
AnalysisServerOptions get serverOptions => AnalysisServerOptions()
|
||||
..enabledExperiments = [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
];
|
||||
AnalysisServerOptions get serverOptions =>
|
||||
AnalysisServerOptions()..enabledExperiments = experimentsForTests;
|
||||
|
||||
/// Checks whether the correct types of documentation are returned in a Hover
|
||||
/// based on [preference].
|
||||
|
||||
@@ -9,10 +9,10 @@ import 'package:analysis_server/src/legacy_analysis_server.dart';
|
||||
import 'package:analysis_server/src/lsp/constants.dart';
|
||||
import 'package:analysis_server/src/lsp/semantic_tokens/legend.dart';
|
||||
import 'package:analysis_server/src/protocol/protocol_internal.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
|
||||
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
@@ -28,12 +28,8 @@ void main() {
|
||||
@reflectiveTest
|
||||
class SemanticTokensTest extends AbstractLspAnalysisServerTest {
|
||||
@override
|
||||
AnalysisServerOptions get serverOptions => AnalysisServerOptions()
|
||||
..enabledExperiments = [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
];
|
||||
AnalysisServerOptions get serverOptions =>
|
||||
AnalysisServerOptions()..enabledExperiments = experimentsForTests;
|
||||
|
||||
Future<void> test_annotation() async {
|
||||
var content = '''
|
||||
|
||||
@@ -11,7 +11,21 @@ feature. In almost all cases new tests will need to be written to ensure that
|
||||
the feature isn't broken when run over code that uses the new language feature.
|
||||
In some cases, new support will need to be added.
|
||||
|
||||
Separate issues should be created for each of the items in the list.
|
||||
## Add an experiment flag
|
||||
|
||||
New language features are always implemented behind an experiment flag.
|
||||
|
||||
If the experiment flag hasn't already been created, add it.
|
||||
|
||||
In the analyzer packages we almost always immediately enable the experiment flag
|
||||
for all of our tests. This allows us to ensure that existing functionality isn't
|
||||
broken by the implementation of the new feature. The exception to this rule is
|
||||
when there's a language feature that is breaking enough in semantics that the
|
||||
meaning of existing tests would change as a result, in which case we usually
|
||||
have to take a different approach (not described here).
|
||||
|
||||
The list of enabled features is maintained in the file
|
||||
`pkg/analyzer_utilities/lib/test/experiments/experiments.dart`.
|
||||
|
||||
## Template
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
import 'package:analyzer/dart/analysis/analysis_context.dart';
|
||||
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
|
||||
import 'package:analyzer/dart/analysis/context_root.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/analysis/results.dart';
|
||||
import 'package:analyzer/dart/sdk/build_sdk_summary.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
@@ -28,6 +27,7 @@ import 'package:analyzer/src/workspace/basic.dart';
|
||||
import 'package:analyzer/src/workspace/blaze.dart';
|
||||
import 'package:analyzer/src/workspace/gn.dart';
|
||||
import 'package:analyzer/src/workspace/pub.dart';
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:analyzer_utilities/test/mock_packages/mock_packages.dart';
|
||||
import 'package:linter/src/rules.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
@@ -335,15 +335,7 @@ class PubPackageResolutionTest extends ContextResolutionTest
|
||||
@override
|
||||
List<String> get collectionIncludedPaths => [workspaceRootPath];
|
||||
|
||||
List<String> get experiments {
|
||||
return [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.digit_separators.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
Feature.wildcard_variables.enableString,
|
||||
];
|
||||
}
|
||||
List<String> get experiments => experimentsForTests;
|
||||
|
||||
@override
|
||||
String get packagesRootPath => '/packages';
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
||||
import 'package:analyzer_utilities/test/experiments/experiments.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
|
||||
class FeatureSets {
|
||||
@@ -46,11 +47,7 @@ class FeatureSets {
|
||||
|
||||
static final FeatureSet latestWithExperiments = FeatureSet.fromEnableFlags2(
|
||||
sdkLanguageVersion: ExperimentStatus.currentVersion,
|
||||
flags: [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
],
|
||||
flags: experimentsForTests,
|
||||
);
|
||||
|
||||
static final FeatureSet latestWithVariance = FeatureSet.fromEnableFlags2(
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
|
||||
// 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/dart/analysis/features.dart';
|
||||
|
||||
/// A list of the experiments that are to be enabled for tests.
|
||||
///
|
||||
/// The list will be empty if there are no experiments that should be enabled.
|
||||
///
|
||||
/// Experiments should be added to this list when work on a new experiment
|
||||
/// begins. Experiments should be removed from this list when they are marked
|
||||
/// as being enable by default.
|
||||
///
|
||||
/// The flags in the list are kept in alphabetic order for ease of determining
|
||||
/// whether a given flag is already included.
|
||||
List<String> experimentsForTests = [
|
||||
Feature.augmentations.enableString,
|
||||
Feature.digit_separators.enableString,
|
||||
Feature.enhanced_parts.enableString,
|
||||
Feature.macros.enableString,
|
||||
Feature.null_aware_elements.enableString,
|
||||
Feature.wildcard_variables.enableString,
|
||||
];
|
||||
Reference in New Issue
Block a user