From 3ea23d2f55ac3453ec2953fe258f3ea8d562c39b Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 5 Apr 2021 07:46:16 +0000 Subject: [PATCH] Migrate pkg/analysis_server/test/integration/analysis/ Change-Id: I6dc636c06e13d1ac1da6caf2e33443baca08315d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/194001 Commit-Queue: Konstantin Shcheglov Reviewed-by: Brian Wilkerson --- .../lib/src/domain_analysis.dart | 4 +- .../lib/src/domain_analysis_flags.dart | 6 + .../analysis/analysis_options_test.dart | 4 +- .../test/integration/analysis/error_test.dart | 6 +- .../get_errors_non_standard_sdk_test.dart | 6 +- .../integration/analysis/get_errors_test.dart | 2 - .../integration/analysis/get_hover_test.dart | 18 ++- .../analysis/get_imported_elements_test.dart | 8 +- .../get_library_dependencies_test.dart | 4 +- .../analysis/get_navigation_test.dart | 2 - .../analysis/get_reachable_sources_test.dart | 2 - .../integration/analysis/highlights_test.dart | 13 +- ...version_async_exported_from_core_test.dart | 2 - .../test/integration/analysis/lint_test.dart | 4 +- .../integration/analysis/navigation_test.dart | 21 ++- .../analysis/occurrences_test.dart | 53 ++++---- .../integration/analysis/outline_test.dart | 45 +++---- .../integration/analysis/overrides_test.dart | 122 +++++++++--------- .../analysis/package_root_test.dart | 2 - .../analysis/reanalyze_concurrent_test.dart | 2 - .../integration/analysis/reanalyze_test.dart | 9 +- .../analysis/set_analysis_roots_test.dart | 2 - .../set_general_subscriptions_test.dart | 2 - .../analysis/set_priority_files_test.dart | 5 +- .../analysis/set_subscriptions_test.dart | 2 - .../test/integration/analysis/test_all.dart | 2 - .../analysis/update_content_list_test.dart | 2 - .../analysis/update_content_test.dart | 6 +- .../analysis/update_options_test.dart | 2 - .../support/integration_tests.dart | 10 ++ 30 files changed, 161 insertions(+), 207 deletions(-) create mode 100644 pkg/analysis_server/lib/src/domain_analysis_flags.dart diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart index a34a0565dd0..a9b84645e0d 100644 --- a/pkg/analysis_server/lib/src/domain_analysis.dart +++ b/pkg/analysis_server/lib/src/domain_analysis.dart @@ -12,6 +12,7 @@ import 'package:analysis_server/src/computer/computer_hover.dart'; import 'package:analysis_server/src/computer/computer_signature.dart'; import 'package:analysis_server/src/computer/imported_elements_computer.dart'; import 'package:analysis_server/src/domain_abstract.dart'; +import 'package:analysis_server/src/domain_analysis_flags.dart'; import 'package:analysis_server/src/plugin/request_converter.dart'; import 'package:analysis_server/src/plugin/result_merger.dart'; import 'package:analysis_server/src/protocol/protocol_internal.dart'; @@ -22,9 +23,6 @@ import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin; import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart'; import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart'; -// TODO(devoncarew): See #31456 for the tracking issue to remove this flag. -final bool disableManageImportsOnPaste = true; - /// Instances of the class [AnalysisDomainHandler] implement a [RequestHandler] /// that handles requests in the `analysis` domain. class AnalysisDomainHandler extends AbstractRequestHandler { diff --git a/pkg/analysis_server/lib/src/domain_analysis_flags.dart b/pkg/analysis_server/lib/src/domain_analysis_flags.dart new file mode 100644 index 00000000000..c1196be36e3 --- /dev/null +++ b/pkg/analysis_server/lib/src/domain_analysis_flags.dart @@ -0,0 +1,6 @@ +// Copyright (c) 2021, 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. + +// TODO(devoncarew): See #31456 for the tracking issue to remove this flag. +final bool disableManageImportsOnPaste = true; diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart index d0afbc39f83..50339280ab7 100644 --- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart +++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analyzer/src/util/file_paths.dart' as file_paths; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -38,7 +36,7 @@ linter: await analysisFinished; expect(currentAnalysisErrors[options], isList); - var errors = currentAnalysisErrors[options]; + var errors = existingErrorsForFile(options); expect(errors, hasLength(1)); var error = errors[0]; expect(error.location.file, options); diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart index b5d5fb75f91..e674a767699 100644 --- a/pkg/analysis_server/test/integration/analysis/error_test.dart +++ b/pkg/analysis_server/test/integration/analysis/error_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -33,7 +31,7 @@ main() { await analysisFinished; expect(currentAnalysisErrors[filePath], isList); - var errors = currentAnalysisErrors[filePath]; + var errors = existingErrorsForFile(filePath); expect(errors, hasLength(1)); expect(errors[0].location.file, equals(filePath)); } @@ -47,7 +45,7 @@ main() { standardAnalysisSetup(); return analysisFinished.then((_) { expect(currentAnalysisErrors[pathname], isList); - var errors = currentAnalysisErrors[pathname]; + var errors = existingErrorsForFile(pathname); expect(errors, hasLength(1)); expect(errors[0].location.file, equals(pathname)); }); diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart index 1b0de2ddb50..fb8cb1ef9c7 100644 --- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'dart:io'; import 'package:path/path.dart' as path; @@ -78,7 +76,7 @@ final LIBRARIES = const { } @override - Future startServer({int diagnosticPort, int servicesPort}) { + Future startServer({int? diagnosticPort, int? servicesPort}) { var sdkPath = createNonStandardSdk(); return server.start( diagnosticPort: diagnosticPort, @@ -95,7 +93,7 @@ import 'dart:fake'; writeFile(pathname, text); standardAnalysisSetup(); await analysisFinished; - var errors = currentAnalysisErrors[pathname]; + var errors = existingErrorsForFile(pathname); expect(errors, hasLength(1)); expect(errors[0].code, 'unused_import'); } diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart index 61d8b524804..260cb6cb827 100644 --- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart index 6da5c927494..2c4828c99e3 100644 --- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; @@ -21,7 +19,7 @@ void main() { class AnalysisGetHoverIntegrationTest extends AbstractAnalysisServerIntegrationTest { /// Pathname of the file containing Dart code. - String pathname; + late String pathname; /// Dart code under test. final String text = r''' @@ -55,17 +53,17 @@ main() { /// literal value. [parameterRegexps] means is a set of regexps which should /// match the hover parameters. [propagatedType], if specified, is the /// expected propagated type of the element. - Future checkHover( + Future checkHover( String target, int length, - List descriptionRegexps, - String kind, - List staticTypeRegexps, { + List? descriptionRegexps, + String? kind, + List? staticTypeRegexps, { bool isLocal = false, bool isCore = false, - String docRegexp, + String? docRegexp, bool isLiteral = false, - List parameterRegexps, + List? parameterRegexps, }) { var offset = text.indexOf(target); return sendAnalysisGetHover(pathname, offset).then((result) async { @@ -74,7 +72,7 @@ main() { expect(info.offset, equals(offset)); expect(info.length, equals(length)); if (isCore) { - expect(path.basename(info.containingLibraryPath), equals('core.dart')); + expect(path.basename(info.containingLibraryPath!), equals('core.dart')); expect(info.containingLibraryName, equals('dart:core')); } else if (isLocal || isLiteral) { expect(info.containingLibraryPath, isNull); diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart index 6aac49a9a1b..547b6d954ca 100644 --- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart @@ -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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; -import 'package:analysis_server/src/domain_analysis.dart'; +import 'package:analysis_server/src/domain_analysis_flags.dart'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -22,10 +20,10 @@ void main() { class AnalysisGetImportedElementsIntegrationTest extends AbstractAnalysisServerIntegrationTest { /// Pathname of the file containing Dart code. - String pathname; + late String pathname; /// Dart code under test. - String text; + late String text; /// Check that an analysis.getImportedElements request on the region starting /// with the first character that matches [target] and having the given diff --git a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart index ff3fd0f2b03..caf757e59f6 100644 --- a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -41,7 +39,7 @@ class Bar { expect(libraries.any((String lib) => lib.endsWith('core/core.dart')), true); expect(packageMaps.keys, hasLength(1)); - var map = packageMaps[packageMaps.keys.first]; + var map = packageMaps[packageMaps.keys.first]!; expect(map.keys, isEmpty); } } diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart index fc0a57b380f..1288adb4893 100644 --- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart index 15309a66bc5..0073bde23d2 100644 --- a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'dart:io'; import 'package:test/test.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart index c4c8fe213df..cb5baf6c4ba 100644 --- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart +++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -19,7 +17,7 @@ void main() { @reflectiveTest class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest { - Map> highlights; + late Map> highlights; void check(HighlightRegionType type, List expected) { expect(highlights[type], equals(expected.toSet())); @@ -41,10 +39,7 @@ class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest { var endIndex = startIndex + region.length; var highlightedText = text.substring(startIndex, endIndex); var type = region.type; - if (!highlights.containsKey(type)) { - highlights[type] = {}; - } - highlights[type].add(highlightedText); + highlights.putIfAbsent(type, () => {}).add(highlightedText); } }); await analysisFinished; @@ -52,8 +47,8 @@ class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest { @override Future startServer({ - int diagnosticPort, - int servicesPort, + int? diagnosticPort, + int? servicesPort, }) { return server.start( diagnosticPort: diagnosticPort, diff --git a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart index 5398abf28da..38428ff5286 100644 --- a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart +++ b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart index 5b11ea06fb7..a41d0f597fa 100644 --- a/pkg/analysis_server/test/integration/analysis/lint_test.dart +++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analyzer/src/util/file_paths.dart' as file_paths; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -50,7 +48,7 @@ class a { // lint: not CamelCase await analysisFinished; expect(currentAnalysisErrors[source], isList); - var errors = currentAnalysisErrors[source]; + var errors = existingErrorsForFile(source); expect(errors, hasLength(1)); var error = errors[0]; expect(error.location.file, source); diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart index 763097e2548..7d217d26e7c 100644 --- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart +++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -60,22 +58,19 @@ part of foo; sendAnalysisSetSubscriptions({ AnalysisService.NAVIGATION: [pathname1] }); - List regions; - List targets; - List targetFiles; - onAnalysisNavigation.listen((AnalysisNavigationParams params) { - expect(params.file, equals(pathname1)); - regions = params.regions; - targets = params.targets; - targetFiles = params.files; - }); - - await analysisFinished; // There should be a single error, due to the fact that 'dart:async' is not // used. + await analysisFinished; expect(currentAnalysisErrors[pathname1], hasLength(1)); expect(currentAnalysisErrors[pathname2], isEmpty); + + var params = await onAnalysisNavigation.first; + expect(params.file, equals(pathname1)); + var regions = params.regions; + var targets = params.targets; + var targetFiles = params.files; + NavigationTarget findTargetElement(int index) { for (var region in regions) { if (region.offset <= index && index < region.offset + region.length) { diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart index 0332e236643..e1b8d1cc8b6 100644 --- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart +++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart @@ -2,10 +2,7 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; -import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -19,7 +16,7 @@ void main() { @reflectiveTest class OccurrencesTest extends AbstractAnalysisServerIntegrationTest { - Future test_occurrences() { + Future test_occurrences() async { var pathname = sourcePath('test.dart'); var text = r''' main() { @@ -37,33 +34,33 @@ main() { sendAnalysisSetSubscriptions({ AnalysisService.OCCURRENCES: [pathname] }); - List occurrences; - onAnalysisOccurrences.listen((AnalysisOccurrencesParams params) { - expect(params.file, equals(pathname)); - occurrences = params.occurrences; - }); - return analysisFinished.then((_) { - expect(currentAnalysisErrors[pathname], isEmpty); - Set findOffsets(String elementName) { - for (var occurrence in occurrences) { - if (occurrence.element.name == elementName) { - return occurrence.offsets.toSet(); - } + + await analysisFinished; + expect(currentAnalysisErrors[pathname], isEmpty); + + var params = await onAnalysisOccurrences.first; + expect(params.file, equals(pathname)); + var occurrences = params.occurrences; + + Set findOffsets(String elementName) { + for (var occurrence in occurrences) { + if (occurrence.element.name == elementName) { + return occurrence.offsets.toSet(); } - fail('No element found matching $elementName'); } + fail('No element found matching $elementName'); + } - void check(String elementName, Iterable expectedOccurrences) { - var expectedOffsets = expectedOccurrences - .map((String substring) => text.indexOf(substring)) - .toSet(); - var foundOffsets = findOffsets(elementName); - expect(foundOffsets, equals(expectedOffsets)); - } + void check(String elementName, Iterable expectedOccurrences) { + var expectedOffsets = expectedOccurrences + .map((String substring) => text.indexOf(substring)) + .toSet(); + var foundOffsets = findOffsets(elementName); + expect(foundOffsets, equals(expectedOffsets)); + } - check('i', ['i = 0', 'i < 10', 'i++', 'i;']); - check('j', ['j = 0', 'j < i', 'j++', 'j;']); - check('sum', ['sum = 0', 'sum +=', 'sum)']); - }); + check('i', ['i = 0', 'i < 10', 'i++', 'i;']); + check('j', ['j = 0', 'j < i', 'j++', 'j;']); + check('sum', ['sum = 0', 'sum +=', 'sum)']); } } diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart index bc498f8563e..df5a0ea0213 100644 --- a/pkg/analysis_server/test/integration/analysis/outline_test.dart +++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; @@ -19,7 +17,7 @@ void main() { @reflectiveTest class OutlineTest extends AbstractAnalysisServerIntegrationTest { - Future test_outline() { + Future test_outline() async { var pathname = sourcePath('test.dart'); var text = r''' class Class1 { @@ -47,27 +45,26 @@ class Class2 { sendAnalysisSetSubscriptions({ AnalysisService.OUTLINE: [pathname] }); - Outline outline; - onAnalysisOutline.listen((AnalysisOutlineParams params) { - expect(params.file, equals(pathname)); - outline = params.outline; - }); - return analysisFinished.then((_) { - expect(outline.element.kind, equals(ElementKind.COMPILATION_UNIT)); - expect(outline.offset, equals(0)); - expect(outline.length, equals(text.length)); - var classes = outline.children; - expect(classes, hasLength(2)); - expect(classes[0].element.name, equals('Class1')); - expect(classes[1].element.name, equals('Class2')); - var members = classes[0].children; - expect(members, hasLength(5)); - expect(members[0].element.name, equals('field')); - expect(members[1].element.name, equals('method')); - expect(members[2].element.name, equals('staticMethod')); - expect(members[3].element.name, equals('getter')); - expect(members[4].element.name, equals('setter')); - }); + var params = await onAnalysisOutline.first; + expect(params.file, equals(pathname)); + var outline = params.outline; + + expect(outline.element.kind, equals(ElementKind.COMPILATION_UNIT)); + expect(outline.offset, equals(0)); + expect(outline.length, equals(text.length)); + + var classes = outline.children!; + expect(classes, hasLength(2)); + expect(classes[0].element.name, equals('Class1')); + expect(classes[1].element.name, equals('Class2')); + + var members = classes[0].children!; + expect(members, hasLength(5)); + expect(members[0].element.name, equals('field')); + expect(members[1].element.name, equals('method')); + expect(members[2].element.name, equals('staticMethod')); + expect(members[3].element.name, equals('getter')); + expect(members[4].element.name, equals('setter')); } } diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart index 912ac03bfd1..0358bb49756 100644 --- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart +++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -18,7 +16,7 @@ void main() { @reflectiveTest class OverridesTest extends AbstractAnalysisServerIntegrationTest { - Future test_overrides() { + Future test_overrides() async { var pathname = sourcePath('test.dart'); var text = r''' abstract class Interface1 { @@ -58,67 +56,69 @@ class Target extends Base implements Interface1, Interface2 { sendAnalysisSetSubscriptions({ AnalysisService.OVERRIDES: [pathname] }); - List overrides; - onAnalysisOverrides.listen((AnalysisOverridesParams params) { - expect(params.file, equals(pathname)); - overrides = params.overrides; - }); - return analysisFinished.then((_) { - var targetOffset = text.indexOf('Target'); - Override findOverride(String methodName) { - var methodOffset = text.indexOf(methodName, targetOffset); - for (var override in overrides) { - if (override.offset == methodOffset) { - return override; - } - } - return null; - } - void checkOverrides(String methodName, bool expectedOverridesBase, - List expectedOverridesInterfaces) { - var override = findOverride(methodName); - if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) { - // This method overrides nothing, so it should not appear in the - // overrides list. - expect(override, isNull); - return; - } else { - expect(override, isNotNull); - } - expect(override.length, equals(methodName.length)); - var superclassMember = override.superclassMember; - if (expectedOverridesBase) { - expect(superclassMember.element.name, equals(methodName)); - expect(superclassMember.className, equals('Base')); - } else { - expect(superclassMember, isNull); - } - var interfaceMembers = override.interfaceMembers; - if (expectedOverridesInterfaces.isNotEmpty) { - expect(interfaceMembers, isNotNull); - var actualOverridesInterfaces = {}; - for (var overriddenMember in interfaceMembers) { - expect(overriddenMember.element.name, equals(methodName)); - var className = overriddenMember.className; - var wasAdded = actualOverridesInterfaces.add(className); - expect(wasAdded, isTrue); - } - expect(actualOverridesInterfaces, - equals(expectedOverridesInterfaces.toSet())); - } else { - expect(interfaceMembers, isNull); + var params = await onAnalysisOverrides.first; + expect(params.file, equals(pathname)); + var overrides = params.overrides; + + var targetOffset = text.indexOf('Target'); + + Override? findOverride(String methodName) { + var methodOffset = text.indexOf(methodName, targetOffset); + for (var override in overrides) { + if (override.offset == methodOffset) { + return override; } } + return null; + } - checkOverrides('method0', true, ['Interface1', 'Interface2']); - checkOverrides('method1', false, ['Interface1', 'Interface2']); - checkOverrides('method2', true, ['Interface1']); - checkOverrides('method3', false, ['Interface1']); - checkOverrides('method4', true, ['Interface2']); - checkOverrides('method5', false, ['Interface2']); - checkOverrides('method6', true, []); - checkOverrides('method7', false, []); - }); + void checkOverrides(String methodName, bool expectedOverridesBase, + List expectedOverridesInterfaces) { + var override = findOverride(methodName); + + if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) { + // This method overrides nothing, so it should not appear in the + // overrides list. + expect(override, isNull); + return; + } else { + override!; + } + + expect(override.length, equals(methodName.length)); + var superclassMember = override.superclassMember; + if (expectedOverridesBase) { + superclassMember!; + expect(superclassMember.element.name, equals(methodName)); + expect(superclassMember.className, equals('Base')); + } else { + expect(superclassMember, isNull); + } + var interfaceMembers = override.interfaceMembers; + if (expectedOverridesInterfaces.isNotEmpty) { + interfaceMembers!; + var actualOverridesInterfaces = {}; + for (var overriddenMember in interfaceMembers) { + expect(overriddenMember.element.name, equals(methodName)); + var className = overriddenMember.className; + var wasAdded = actualOverridesInterfaces.add(className); + expect(wasAdded, isTrue); + } + expect(actualOverridesInterfaces, + equals(expectedOverridesInterfaces.toSet())); + } else { + expect(interfaceMembers, isNull); + } + } + + checkOverrides('method0', true, ['Interface1', 'Interface2']); + checkOverrides('method1', false, ['Interface1', 'Interface2']); + checkOverrides('method2', true, ['Interface1']); + checkOverrides('method3', false, ['Interface1']); + checkOverrides('method4', true, ['Interface2']); + checkOverrides('method5', false, ['Interface2']); + checkOverrides('method6', true, []); + checkOverrides('method7', false, []); } } diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart index 6c7801b9f1a..3bb2096b09c 100644 --- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart +++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:path/path.dart' as path; diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart index 7cf43714817..1a42362fcf7 100644 --- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart +++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - /// This test verifies that if reanalysis is performed while reanalysis is in /// progress, no problems occur. /// diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart index ddfd145ecdb..6534bab0cb4 100644 --- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart +++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -27,10 +25,9 @@ class ReanalyzeTest extends AbstractAnalysisServerIntegrationTest { // Make sure that reanalyze causes analysis to restart. var analysisRestarted = false; onServerStatus.listen((ServerStatusParams data) { - if (data.analysis != null) { - if (data.analysis.isAnalyzing) { - analysisRestarted = true; - } + var analysisStatus = data.analysis; + if (analysisStatus != null && analysisStatus.isAnalyzing) { + analysisRestarted = true; } }); sendAnalysisReanalyze(); diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart index 2ef9e06ab5e..c8b991d7a7d 100644 --- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart +++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart index 3523f2a92c9..18cc92972fe 100644 --- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart +++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:path/path.dart' show join; import 'package:test/test.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart index 01898a7caa5..bc7b3e499c6 100644 --- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart +++ b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -26,6 +24,7 @@ class SetPriorityFilesTest extends AbstractAnalysisServerIntegrationTest { await sendAnalysisSetPriorityFiles([pathname]); var status = await analysisFinished; - expect(status.analysis.isAnalyzing, false); + var analysisStatus = status.analysis; + expect(analysisStatus != null && analysisStatus.isAnalyzing, false); } } diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart index bfb93657112..d9d22d0d1ef 100644 --- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart +++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/test_all.dart b/pkg/analysis_server/test/integration/analysis/test_all.dart index 7bb5fd1ec95..2e463f005dd 100644 --- a/pkg/analysis_server/test/integration/analysis/test_all.dart +++ b/pkg/analysis_server/test/integration/analysis/test_all.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:test_reflective_loader/test_reflective_loader.dart'; import 'analysis_options_test.dart' as analysis_options_test; diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart index adb66f3753f..40c015c09a1 100644 --- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart +++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart index 5760287b4c7..524b73cd731 100644 --- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart +++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analyzer_plugin/protocol/protocol_common.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -78,7 +76,7 @@ void main() { standardAnalysisSetup(); await analysisFinished; expect(currentAnalysisErrors[pathname], isList); - var errors1 = currentAnalysisErrors[pathname]; + var errors1 = existingErrorsForFile(pathname); expect(errors1, hasLength(1)); expect(errors1[0].location.file, equals(pathname)); @@ -99,7 +97,7 @@ void main() { }); await analysisFinished; expect(currentAnalysisErrors[pathname], isList); - var errors2 = currentAnalysisErrors[pathname]; + var errors2 = existingErrorsForFile(pathname); expect(errors2, hasLength(1)); expect(errors2[0].location.file, equals(pathname)); } diff --git a/pkg/analysis_server/test/integration/analysis/update_options_test.dart b/pkg/analysis_server/test/integration/analysis/update_options_test.dart index cd18c904a60..4864f2c5814 100644 --- a/pkg/analysis_server/test/integration/analysis/update_options_test.dart +++ b/pkg/analysis_server/test/integration/analysis/update_options_test.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.9 - import 'package:analysis_server/protocol/protocol_generated.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart index 71bc4ce652d..b1352803356 100644 --- a/pkg/analysis_server/test/integration/support/integration_tests.dart +++ b/pkg/analysis_server/test/integration/support/integration_tests.dart @@ -139,6 +139,16 @@ abstract class AbstractAnalysisServerIntegrationTest server.debugStdio(); } + /// If there was a set of errors (might be empty) received for the file + /// with the given [path], return it. If no errors - fail. + List existingErrorsForFile(String path) { + var errors = currentAnalysisErrors[path]; + if (errors == null) { + fail('Expected errors for: $path'); + } + return errors; + } + List? getErrors(String pathname) => currentAnalysisErrors[pathname];