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);