Rewrite remaining named argument tests to checks.
Change-Id: Iedab51f44bf17512f5aa7d7270a5f7f880cba90c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226600
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 6c4801c..8128659 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -2,14 +2,11 @@
// 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:analysis_server/src/protocol_server.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_utilities/check/check.dart';
-import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'completion_check.dart';
@@ -49,21 +46,22 @@
}
''';
addTestSource(content);
- await computeSuggestions();
- expect(suggestions, hasLength(1));
- var suggestion = suggestions[0];
- expect(suggestion.docSummary, 'aaa');
- expect(suggestion.docComplete, 'aaa\n\nbbb\nccc');
-
- var element = suggestion.element!;
- expect(element.kind, ElementKind.PARAMETER);
- expect(element.name, 'fff');
- expect(element.location!.offset, content.indexOf('fff})'));
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('fff: ')
+ ..docComplete.isEqualTo('aaa\n\nbbb\nccc')
+ ..docSummary.isEqualTo('aaa')
+ ..hasSelection(offset: 5)
+ ..element.isNotNull.which((e) => e
+ ..isParameter
+ ..name.isEqualTo('fff'))
+ ]);
}
Future<void> test_fieldFormal_noDocumentation() async {
- var content = '''
+ addTestSource('''
class A {
int fff;
A({this.fff});
@@ -71,19 +69,19 @@
main() {
new A(^);
}
-''';
- addTestSource(content);
- await computeSuggestions();
- expect(suggestions, hasLength(1));
+''');
- var suggestion = suggestions[0];
- expect(suggestion.docSummary, isNull);
- expect(suggestion.docComplete, isNull);
-
- var element = suggestion.element!;
- expect(element.kind, ElementKind.PARAMETER);
- expect(element.name, 'fff');
- expect(element.location!.offset, content.indexOf('fff})'));
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('fff: ')
+ ..docComplete.isNull
+ ..docSummary.isNull
+ ..hasSelection(offset: 5)
+ ..element.isNotNull.which((e) => e
+ ..isParameter
+ ..name.isEqualTo('fff'))
+ ]);
}
Future<void> test_flutter_InstanceCreationExpression_0() async {
@@ -97,13 +95,13 @@
);
''');
- await computeSuggestions();
-
- assertSuggest('children: [],',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null,
- selectionOffset: 11,
- defaultArgumentListTextRanges: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).containsMatch((suggestion) {
+ suggestion
+ ..completion.isEqualTo('children: [],')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 11);
+ });
}
Future<void> test_flutter_InstanceCreationExpression_01() async {
@@ -119,12 +117,13 @@
);
''');
- await computeSuggestions();
-
- assertSuggest('backgroundColor: ,',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null, // No default values.
- selectionOffset: 17);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).containsMatch((suggestion) {
+ suggestion
+ ..completion.isEqualTo('backgroundColor: ,')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 17);
+ });
}
Future<void> test_flutter_InstanceCreationExpression_1() async {
@@ -139,13 +138,13 @@
);
''');
- await computeSuggestions();
-
- assertSuggest('children: [],',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null,
- selectionOffset: 11,
- defaultArgumentListTextRanges: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).containsMatch((suggestion) {
+ suggestion
+ ..completion.isEqualTo('children: [],')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 11);
+ });
}
Future<void> test_flutter_InstanceCreationExpression_2() async {
@@ -160,13 +159,13 @@
);
''');
- await computeSuggestions();
-
- assertSuggest('children: [],',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null,
- selectionOffset: 11,
- defaultArgumentListTextRanges: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).containsMatch((suggestion) {
+ suggestion
+ ..completion.isEqualTo('children: [],')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 11);
+ });
}
Future<void>
@@ -187,13 +186,13 @@
}
''');
- await computeSuggestions();
-
- assertSuggest('children: [],',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null,
- selectionOffset: 11,
- defaultArgumentListTextRanges: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('children: [],')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 11),
+ ]);
}
Future<void> test_flutter_InstanceCreationExpression_children_Map() async {
@@ -212,12 +211,13 @@
}
''');
- await computeSuggestions();
-
- assertSuggest('children: ,',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- selectionOffset: 10,
- defaultArgListString: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('children: ,')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 10),
+ ]);
}
Future<void> test_flutter_InstanceCreationExpression_slivers() async {
@@ -235,13 +235,13 @@
}
''');
- await computeSuggestions();
-
- assertSuggest('slivers: [],',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null,
- selectionOffset: 10,
- defaultArgumentListTextRanges: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('slivers: [],')
+ ..defaultArgumentListString.isNull
+ ..hasSelection(offset: 10),
+ ]);
}
Future<void> test_flutter_MethodExpression_children() async {
@@ -261,11 +261,13 @@
foo({String children}) {}
''');
- await computeSuggestions();
-
- assertSuggest('children: ',
- csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
- defaultArgListString: null);
+ var response = await computeSuggestions2();
+ _checkNamedArguments(response).matchesInAnyOrder([
+ (suggestion) => suggestion
+ ..completion.isEqualTo('children: ')
+ ..defaultArgumentListString.isNull
+ ..defaultArgumentListTextRanges.isNull,
+ ]);
}
Future<void> test_named_01() async {
@@ -273,7 +275,7 @@
parameters: '({bool one, int two})',
arguments: '(^)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -294,7 +296,7 @@
parameters: '({bool one, int two})',
arguments: '(o^)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -315,7 +317,7 @@
parameters: '({bool one, int two})',
arguments: '(o^ two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ,')
..parameterType.isEqualTo('bool')
@@ -331,7 +333,7 @@
parameters: '({bool one, int two})',
arguments: '(o^, two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -347,7 +349,7 @@
parameters: '({bool one, int two})',
arguments: '(o^ , two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -363,7 +365,7 @@
parameters: '({bool one, int two})',
arguments: '(^o,)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -384,7 +386,7 @@
parameters: '({bool one, int two})',
arguments: '(^ two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ,')
..parameterType.isEqualTo('bool')
@@ -400,7 +402,7 @@
parameters: '({bool one, int two})',
arguments: '(^two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ,')
..parameterType.isEqualTo('bool')
@@ -416,7 +418,7 @@
parameters: '({bool one, int two})',
arguments: '(^, two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -432,7 +434,7 @@
parameters: '({bool one, int two})',
arguments: '(^ , two: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -448,7 +450,7 @@
parameters: '(int one, {bool two, int three})',
arguments: '(1, ^, three: 3)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('two: ')
..parameterType.isEqualTo('bool')
@@ -464,7 +466,7 @@
parameters: '(int one, {bool two, int three})',
arguments: '(1, ^ three: 3)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('two: ,')
..parameterType.isEqualTo('bool')
@@ -480,7 +482,7 @@
parameters: '(int one, {bool two, int three})',
arguments: '(1, ^three: 3)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('two: ,')
..parameterType.isEqualTo('bool')
@@ -497,7 +499,7 @@
parameters: '({bool one, int two})',
arguments: '(two: 2^)',
check: (response) {
- check(response).suggestions.namedArguments.isEmpty;
+ _checkNamedArguments(response).isEmpty;
},
);
}
@@ -508,7 +510,7 @@
parameters: '({bool one, int two})',
arguments: '(two: 2 ^)',
check: (response) {
- check(response).suggestions.namedArguments.isEmpty;
+ _checkNamedArguments(response).isEmpty;
},
);
}
@@ -518,7 +520,7 @@
parameters: '({bool one, int two})',
arguments: '(two: 2, ^)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -534,7 +536,7 @@
parameters: '({bool one, int two})',
arguments: '(two: 2, o^)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -550,7 +552,7 @@
parameters: '({bool one, int two})',
arguments: '(two: 2, o^,)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one: ')
..parameterType.isEqualTo('bool')
@@ -566,7 +568,7 @@
parameters: '(int one, int two, int three, {int four, int five})',
arguments: '(1, ^, 3)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('four: ')
..parameterType.isEqualTo('int')
@@ -588,7 +590,7 @@
parameters: '(int one, int two, int three, {int four, int five})',
arguments: '(1, ^, 3)',
check: (response) {
- check(response).suggestions.namedArguments.isEmpty;
+ _checkNamedArguments(response).isEmpty;
},
);
}
@@ -598,7 +600,7 @@
parameters: '({bool one, int two})',
arguments: '(o^: false)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('one')
..parameterType.isEqualTo('bool')
@@ -619,7 +621,7 @@
parameters: '(bool one, {int two, double three})',
arguments: '(false, ^t: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('two: ,')
..parameterType.isEqualTo('int')
@@ -640,7 +642,7 @@
parameters: '(bool one, {int two})',
arguments: '(false, foo^ba: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
..completion.isEqualTo('two')
..parameterType.isEqualTo('int')
@@ -656,7 +658,7 @@
parameters: '(bool one, {int two, double three})',
arguments: '(false, ^: 2)',
check: (response) {
- check(response).suggestions.namedArguments.matchesInAnyOrder([
+ _checkNamedArguments(response).matchesInAnyOrder([
(suggestion) => suggestion
// TODO(scheglov) This does not seem right.
..completion.isEqualTo('two: ')
@@ -679,7 +681,7 @@
parameters: '({bool one, int two})',
arguments: '(one: ^)',
check: (response) {
- check(response).suggestions.namedArguments.isEmpty;
+ _checkNamedArguments(response).isEmpty;
},
);
}
@@ -695,15 +697,8 @@
: '// no language version override';
Future<void> computeAndCheck() async {
- await computeSuggestions();
- check(
- CompletionResponseForTesting(
- requestOffset: completionOffset,
- replacementOffset: replacementOffset,
- replacementLength: replacementLength,
- suggestions: suggestions,
- ),
- );
+ var response = await computeSuggestions2();
+ check(response);
}
// Annotation, local class.
@@ -851,4 +846,9 @@
await computeSuggestions();
assertNoSuggestions();
}
+
+ static CheckTarget<Iterable<CompletionSuggestionForTesting>>
+ _checkNamedArguments(CompletionResponseForTesting response) {
+ return check(response).suggestions.namedArguments;
+ }
}
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_check.dart b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
index 669cf76..f9cdaf1 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_check.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
@@ -56,10 +56,12 @@
extension CompletionResponseExtension
on CheckTarget<CompletionResponseForTesting> {
CheckTarget<List<CompletionSuggestionForTesting>> get suggestions {
- var suggestions = value.suggestions
- .map((e) =>
- CompletionSuggestionForTesting(response: value, suggestion: e))
- .toList();
+ var suggestions = value.suggestions.map((e) {
+ return CompletionSuggestionForTesting(
+ response: value,
+ suggestion: e,
+ );
+ }).toList();
return nest(
suggestions,
(selected) => 'suggestions ${valueStr(selected)}',
@@ -76,6 +78,41 @@
);
}
+ CheckTarget<String?> get defaultArgumentListString {
+ return nest(
+ value.suggestion.defaultArgumentListString,
+ (selected) => 'has defaultArgumentListString ${valueStr(selected)}',
+ );
+ }
+
+ CheckTarget<List<int>?> get defaultArgumentListTextRanges {
+ return nest(
+ value.suggestion.defaultArgumentListTextRanges,
+ (selected) => 'has defaultArgumentListTextRanges ${valueStr(selected)}',
+ );
+ }
+
+ CheckTarget<String?> get docComplete {
+ return nest(
+ value.suggestion.docComplete,
+ (selected) => 'has docComplete ${valueStr(selected)}',
+ );
+ }
+
+ CheckTarget<String?> get docSummary {
+ return nest(
+ value.suggestion.docSummary,
+ (selected) => 'has docSummary ${valueStr(selected)}',
+ );
+ }
+
+ CheckTarget<Element?> get element {
+ return nest(
+ value.suggestion.element,
+ (selected) => 'has element ${valueStr(selected)}',
+ );
+ }
+
CheckTarget<String?> get parameterType {
return nest(
value.suggestion.parameterType,
@@ -146,3 +183,23 @@
);
}
}
+
+extension ElementExtension on CheckTarget<Element> {
+ void get isParameter {
+ kind.isEqualTo(ElementKind.PARAMETER);
+ }
+
+ CheckTarget<ElementKind> get kind {
+ return nest(
+ value.kind,
+ (selected) => 'has kind ${valueStr(selected)}',
+ );
+ }
+
+ CheckTarget<String> get name {
+ return nest(
+ value.name,
+ (selected) => 'has name ${valueStr(selected)}',
+ );
+ }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 5d065fe..a750956 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -17,6 +17,7 @@
import 'package:test/test.dart';
import '../../../abstract_context.dart';
+import 'completion_check.dart';
SuggestionMatcher suggestionHas(
{required String completion,
@@ -575,6 +576,16 @@
expect(suggestions, isNotNull, reason: 'expected suggestions');
}
+ Future<CompletionResponseForTesting> computeSuggestions2() async {
+ await computeSuggestions();
+ return CompletionResponseForTesting(
+ requestOffset: completionOffset,
+ replacementOffset: replacementOffset,
+ replacementLength: replacementLength,
+ suggestions: suggestions,
+ );
+ }
+
Never failedCompletion(String message,
[Iterable<CompletionSuggestion>? completions]) {
var sb = StringBuffer(message);
diff --git a/pkg/analyzer_utilities/lib/check/iterable.dart b/pkg/analyzer_utilities/lib/check/iterable.dart
index e6415c3..5b43453 100644
--- a/pkg/analyzer_utilities/lib/check/iterable.dart
+++ b/pkg/analyzer_utilities/lib/check/iterable.dart
@@ -19,6 +19,28 @@
}
}
+ /// Succeeds if there is an element that matches the [matcher],
+ void containsMatch(void Function(CheckTarget<T> element) matcher) {
+ var elementList = value.toList();
+ for (var elementIndex = 0;
+ elementIndex < elementList.length;
+ elementIndex++) {
+ var element = elementList[elementIndex];
+ var elementTarget = nest(
+ element,
+ (element) =>
+ 'element ${valueStr(element)} at ${valueStr(elementIndex)}',
+ );
+ try {
+ matcher(elementTarget);
+ return;
+ } on test_package.TestFailure {
+ continue;
+ }
+ }
+ fail('Does not contain at least one element that matches');
+ }
+
@UseResult.unless(parameterDefined: 'expected')
CheckTarget<int> hasLength([int? expected]) {
var actual = value.length;
diff --git a/pkg/analyzer_utilities/test/check/check_test.dart b/pkg/analyzer_utilities/test/check/check_test.dart
index bab4572..20873c0 100644
--- a/pkg/analyzer_utilities/test/check/check_test.dart
+++ b/pkg/analyzer_utilities/test/check/check_test.dart
@@ -62,6 +62,12 @@
});
});
group('Iterable', () {
+ test('containsMatch', () {
+ check(<int>[0]).containsMatch((e) => e.isZero);
+ check(<int>[1, 0, 2]).containsMatch((e) => e.isZero);
+ _fails(() => check(<int>[]).containsMatch((e) => e.isZero));
+ _fails(() => check(<int>[1]).containsMatch((e) => e.isZero));
+ });
test('hasLength', () {
check(<int>[]).hasLength().isZero;
check(<int>[0]).hasLength().isEqualTo(1);