[analysis_server] Migrate remaining FoldingRegion tests to use TestCode.parse()
+ split large annotations test up
Change-Id: I5071f4310ea3bf784e40ae1bcd1f9e497551e912
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/260540
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index 5ceb1fe..a2b993d 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -29,15 +29,30 @@
late TestCode code;
List<FoldingRegion> regions = [];
+ /// Expects no [FoldingRegion]s.
+ ///
+ /// If [onlyVerify] is provided, folding regions of other kinds are allowed.
+ void expectNoRegions({Set<FoldingKind>? onlyVerify}) {
+ expectRegions({}, onlyVerify: onlyVerify);
+ }
+
/// Expects to find a [FoldingRegion] for the code marked [index] with a
/// [FoldingKind] of [kind].
- void expectRegions(Map<int, FoldingKind> expected) {
+ ///
+ /// If [onlyVerify] is provided, only folding regions with matching kinds will
+ /// be verified.
+ void expectRegions(Map<int, FoldingKind> expected,
+ {Set<FoldingKind>? onlyVerify}) {
final expectedRegions = expected.entries.map((entry) {
final range = code.ranges[entry.key].sourceRange;
return FoldingRegion(entry.value, range.offset, range.length);
}).toSet();
- expect(regions, expectedRegions);
+ final actualRegions = onlyVerify == null
+ ? regions.toSet()
+ : regions.where((region) => onlyVerify.contains(region.kind)).toSet();
+
+ expect(actualRegions, expectedRegions);
}
@override
@@ -46,213 +61,310 @@
sourcePath = convertPath('$testPackageLibPath/test.dart');
}
- Future<void> test_annotations() async {
+ Future<void> test_annotations_class() async {
var content = '''
-@myMultilineAnnotation/*[0*/(
- "this",
- "is a test"
-)/*0]*/
-void f() {}
-
-@noFoldNecessary
-main2() {}
-
-@multipleAnnotations1/*[1*/(
- "this",
- "is a test"
-)
-@multipleAnnotations2()
-@multipleAnnotations3/*1]*/
-main3() {}
-
-@noFoldsForSingleClassAnnotation
+@folded.classAnnotation1/*[0*/()
+@foldedClassAnnotation2/*0]*/
class MyClass {}
+''';
-@folded.classAnnotation1/*[2*/()
-@foldedClassAnnotation2/*2]*/
-class MyClass2 {/*[3*/
- @fieldAnnotation1/*[4*/
- @fieldAnnotation2/*4]*/
- int myField;
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ });
+ }
- @getterAnnotation1/*[5*/
- @getterAnnotation2/*5]*/
- int get myThing => 1;
+ Future<void> test_annotations_class_constructor() async {
+ var content = '''
+class MyClass {
+ @constructorAnnotation1/*[0*/
+ @constructorAnnotation1/*0]*/
+ MyClass() {}
- @setterAnnotation1/*[6*/
- @setterAnnotation2/*6]*/
- void set myThing(int value) {}
-
- @methodAnnotation1/*[7*/
- @methodAnnotation2/*7]*/
- void myMethod() {}
-
- @constructorAnnotation1/*[8*/
- @constructorAnnotation1/*8]*/
- MyClass2() {}
-/*3]*/}
+ @constructorAnnotation1/*[1*/
+ @constructorAnnotation1/*1]*/
+ MyClass.named() {}
+}
''';
await _computeRegions(content);
expectRegions({
0: FoldingKind.ANNOTATIONS,
1: FoldingKind.ANNOTATIONS,
- 2: FoldingKind.ANNOTATIONS,
- 3: FoldingKind.CLASS_BODY,
- 4: FoldingKind.ANNOTATIONS,
- 5: FoldingKind.ANNOTATIONS,
- 6: FoldingKind.ANNOTATIONS,
- 7: FoldingKind.ANNOTATIONS,
- 8: FoldingKind.ANNOTATIONS,
+ }, onlyVerify: {
+ FoldingKind.ANNOTATIONS
});
}
+ Future<void> test_annotations_class_field() async {
+ var content = '''
+class MyClass {
+ @fieldAnnotation1/*[0*/
+ @fieldAnnotation2/*0]*/
+ int myField;
+}
+''';
+
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ }, onlyVerify: {
+ FoldingKind.ANNOTATIONS
+ });
+ }
+
+ Future<void> test_annotations_class_getterSetter() async {
+ var content = '''
+class MyClass {
+ @getterAnnotation1/*[0*/
+ @getterAnnotation2/*0]*/
+ int get myThing => 1;
+
+ @setterAnnotation1/*[1*/
+ @setterAnnotation2/*1]*/
+ void set myThing(int value) {}
+}
+''';
+
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ 1: FoldingKind.ANNOTATIONS,
+ }, onlyVerify: {
+ FoldingKind.ANNOTATIONS
+ });
+ }
+
+ Future<void> test_annotations_class_method() async {
+ var content = '''
+class MyClass {
+ @methodAnnotation1/*[0*/
+ @methodAnnotation2/*0]*/
+ void myMethod() {}
+}
+''';
+
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ }, onlyVerify: {
+ FoldingKind.ANNOTATIONS
+ });
+ }
+
+ Future<void> test_annotations_multiline() async {
+ var content = '''
+@myMultilineAnnotation/*[0*/(
+ "this",
+ "is a test"
+)/*0]*/
+void f() {}
+''';
+
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ });
+ }
+
+ Future<void> test_annotations_multiple() async {
+ var content = '''
+@multipleAnnotations1/*[0*/(
+ "this",
+ "is a test"
+)
+@multipleAnnotations2()
+@multipleAnnotations3/*0]*/
+main3() {}
+''';
+
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.ANNOTATIONS,
+ });
+ }
+
+ Future<void> test_annotations_singleLine() async {
+ var content = '''
+@noFoldNecessary
+main2() {}
+
+@noFoldsForSingleClassAnnotation
+class MyClass {}
+''';
+
+ await _computeRegions(content);
+ expectNoRegions();
+ }
+
Future<void> test_assertInitializer() async {
var content = '''
-class C {/*1:INC*/
- C() : assert(/*2:INC*/
+class C {/*[0*/
+ C() : assert(/*[1*/
true,
''
- /*2:INC:INVOCATION*/);
-/*1:INC:CLASS_BODY*/}
+ /*1]*/);
+/*0]*/}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.CLASS_BODY,
+ 1: FoldingKind.INVOCATION,
+ });
}
Future<void> test_assertStatement() async {
var content = '''
-void f() {/*1:INC*/
- assert(/*2:INC*/
+void f() {/*[0*/
+ assert(/*[1*/
true,
''
- /*2:INC:INVOCATION*/);
-/*1:INC:FUNCTION_BODY*/}
+ /*1]*/);
+/*0]*/}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.INVOCATION,
+ });
}
Future<void> test_class() async {
var content = '''
// Content before
-class Person {/*1:INC*/
- Person() {/*2:INC*/
+class Person {/*[0*/
+ Person() {/*[1*/
print("Hello, world!");
- /*2:INC:FUNCTION_BODY*/}
+ /*1]*/}
- void sayHello() {/*3:INC*/
+ void sayHello() {/*[2*/
print("Hello, world!");
- /*3:INC:FUNCTION_BODY*/}
-/*1:INC:CLASS_BODY*/}
+ /*2]*/}
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.CLASS_BODY,
+ 1: FoldingKind.FUNCTION_BODY,
+ 2: FoldingKind.FUNCTION_BODY,
+ });
}
Future<void> test_comment_is_not_considered_file_header() async {
var content = """
-// This is not the file header/*1:EXC*/
-// It's just a comment/*1:INC:COMMENT*/
+// This is not the file header/*[0*/
+// It's just a comment/*0]*/
void f() {}
""";
- // Since there are no region comment markers above
- // just check the length instead of the contents
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.COMMENT,
+ });
}
Future<void> test_comment_multiline() async {
var content = '''
-void f() {
-/*/*1:EXC*/
+/*/*[0*/
* comment 1
- *//*1:EXC:COMMENT*/
+ *//*0]*/
-/* this comment starts on the same line as delimeters/*2:EXC*/
+/* this comment starts on the same line as delimeters/*[1*/
* second line
- *//*2:EXC:COMMENT*/
-}
+ *//*1]*/
+void f() {}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, commentKinds);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.COMMENT,
+ 1: FoldingKind.COMMENT,
+ });
}
Future<void> test_comment_singleFollowedByBlankLine() async {
var content = '''
void f() {
-// this is/*1:EXC*/
-// a comment/*1:INC:COMMENT*/
+// this is/*[0*/
+// a comment/*0]*/
/// this is not part of it
}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, commentKinds);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.COMMENT,
+ }, onlyVerify: commentKinds);
}
Future<void> test_comment_singleFollowedByMulti() async {
var content = '''
void f() {
- // this is/*1:EXC*/
- // a comment/*1:INC:COMMENT*/
+ // this is/*[0*/
+ // a comment/*0]*/
/* this is not part of it */
String foo;
}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, commentKinds);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.COMMENT,
+ }, onlyVerify: commentKinds);
}
Future<void> test_comment_singleFollowedByTripleSlash() async {
var content = '''
void f() {
-// this is/*1:EXC*/
-// a comment/*1:INC:COMMENT*/
+// this is/*[0*/
+// a comment/*0]*/
/// this is not part of it
}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, commentKinds);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.COMMENT,
+ }, onlyVerify: commentKinds);
}
Future<void> test_constructor_invocations() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- return new Text(/*2:INC*/
- "Hello, world!",
- /*2:INC:INVOCATION*/);
-/*1:INC:FUNCTION_BODY*/}
+final a = new Text(/*[0*/
+ "Hello, world!",
+/*0]*/);
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.INVOCATION,
+ });
}
Future<void> test_file_header() async {
var content = """
-// Copyright some year by some people/*1:EXC*/
-// See LICENCE etc./*1:INC:FILE_HEADER*/
+// Copyright some year by some people/*[0*/
+// See LICENCE etc./*0]*/
// This is not the file header
// It's just a comment
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, {FoldingKind.FILE_HEADER});
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FILE_HEADER,
+ }, onlyVerify: {
+ FoldingKind.FILE_HEADER
+ });
}
Future<void> test_file_header_does_not_include_block_comments() async {
@@ -266,306 +378,358 @@
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, {FoldingKind.FILE_HEADER});
+ await _computeRegions(content);
+ expectNoRegions(onlyVerify: {FoldingKind.FILE_HEADER});
}
Future<void> test_file_header_with_no_function_comment() async {
var content = '''
-// Copyright some year by some people/*1:EXC*/
-// See LICENCE etc./*1:INC:FILE_HEADER*/
+// Copyright some year by some people/*[0*/
+// See LICENCE etc./*0]*/
void f() {}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, {FoldingKind.FILE_HEADER});
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FILE_HEADER,
+ });
}
Future<void> test_file_header_with_non_end_of_line_comment() async {
var content = """
-// Copyright some year by some people/*1:EXC*/
-// See LICENCE etc./*1:INC:FILE_HEADER*/
+// Copyright some year by some people/*[0*/
+// See LICENCE etc./*0]*/
/* This shouldn't be part of the file header */
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, {FoldingKind.FILE_HEADER});
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FILE_HEADER,
+ });
}
Future<void> test_file_header_with_script_prefix() async {
var content = """
#! /usr/bin/dart
-// Copyright some year by some people/*1:EXC*/
-// See LICENCE etc./*1:INC:FILE_HEADER*/
+// Copyright some year by some people/*[0*/
+// See LICENCE etc./*0]*/
// This is not the file header
// It's just a comment
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content, {FoldingKind.FILE_HEADER});
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FILE_HEADER,
+ }, onlyVerify: {
+ FoldingKind.FILE_HEADER
+ });
}
Future<void> test_fileHeader_singleFollowedByBlank() async {
var content = '''
-// this is/*1:EXC*/
-// a file header/*1:INC:FILE_HEADER*/
+// this is/*[0*/
+// a file header/*0]*/
// this is not part of it
void f() {}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FILE_HEADER,
+ });
}
Future<void> test_function() async {
var content = '''
// Content before
-void f() {/*1:INC*/
+void f() {/*[0*/
print("Hello, world!");
-/*1:INC:FUNCTION_BODY*/}
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ });
}
Future<void> test_function_expression_invocation() async {
var content = '''
// Content before
-getFunc() => (String a, String b) {/*1:INC*/
+getFunc() => (String a, String b) {/*[0*/
print(a);
-/*1:INC:FUNCTION_BODY*/};
+/*0]*/};
-main2() {/*2:INC*/
- getFunc()(/*3:INC*/
+main2() {/*[1*/
+ getFunc()(/*[2*/
"one",
"two"
- /*3:INC:INVOCATION*/);
-/*2:INC:FUNCTION_BODY*/}
+ /*2]*/);
+/*1]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.FUNCTION_BODY,
+ 2: FoldingKind.INVOCATION,
+ });
}
Future<void> test_function_with_dart_doc() async {
var content = '''
// Content before
-/// This is a doc comment/*1:EXC*/
-/// that spans lines/*1:INC:DOCUMENTATION_COMMENT*/
-void f() {/*2:INC*/
+/// This is a doc comment/*[0*/
+/// that spans lines/*0]*/
+void f() {/*[1*/
print("Hello, world!");
-/*2:INC:FUNCTION_BODY*/}
+/*1]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.DOCUMENTATION_COMMENT,
+ 1: FoldingKind.FUNCTION_BODY,
+ });
}
Future<void> test_invocations() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- print(/*2:INC*/
+void f() {/*[0*/
+ print(/*[1*/
"Hello, world!",
- /*2:INC:INVOCATION*/);
-/*1:INC:FUNCTION_BODY*/}
+ /*1]*/);
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.INVOCATION,
+ });
}
Future<void> test_literal_list() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- final List<String> things = <String>[/*2:INC*/
+void f() {/*[0*/
+ final List<String> things = <String>[/*[1*/
"one",
"two"
- /*2:INC:LITERAL*/];
-/*1:INC:FUNCTION_BODY*/}
+ /*1]*/];
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.LITERAL,
+ });
}
Future<void> test_literal_map() async {
var content = '''
// Content before
-main2() {/*1:INC*/
- final Map<String, String> things = <String, String>{/*2:INC*/
+main2() {/*[0*/
+ final Map<String, String> things = <String, String>{/*[1*/
"one": "one",
"two": "two"
- /*2:INC:LITERAL*/};
-/*1:INC:FUNCTION_BODY*/}
+ /*1]*/};
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.LITERAL,
+ });
}
Future<void> test_literal_record() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- final r = (/*2:INC*/
+void f() {/*[0*/
+ final r = (/*[1*/
"one",
2,
- (/*3:INC*/
+ (/*[2*/
'nested',
3,
'field record',
- /*3:INC:LITERAL*/),
- /*2:INC:LITERAL*/);
-/*1:INC:FUNCTION_BODY*/}
+ /*2]*/),
+ /*1]*/);
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.LITERAL,
+ 2: FoldingKind.LITERAL,
+ });
}
Future<void> test_mixin() async {
var content = '''
// Content before
-mixin M {/*1:INC*/
- void m() {/*3:INC*/
+mixin M {/*[0*/
+ void m() {/*[1*/
print("Got to m");
- /*3:INC:FUNCTION_BODY*/}
-/*1:INC:CLASS_BODY*/}
+ /*1]*/}
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.CLASS_BODY,
+ 1: FoldingKind.FUNCTION_BODY,
+ });
}
Future<void> test_multiple_directive_types() async {
var content = """
-import/*1:INC*/ 'dart:async';
+import/*[0*/ 'dart:async';
// We can have comments
import 'package:a/b.dart';
import 'package:b/c.dart';
-export '../a.dart';/*1:EXC:DIRECTIVES*/
+export '../a.dart';/*0]*/
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.DIRECTIVES,
+ });
}
Future<void> test_multiple_import_directives() async {
var content = """
-import/*1:INC*/ 'dart:async';
+import/*[0*/ 'dart:async';
// We can have comments
import 'package:a/b.dart';
import 'package:b/c.dart';
-import '../a.dart';/*1:EXC:DIRECTIVES*/
+import '../a.dart';/*0]*/
void f() {}
""";
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.DIRECTIVES,
+ });
}
Future<void> test_nested_function() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- doPrint() {/*2:INC*/
+void f() {/*[0*/
+ doPrint() {/*[1*/
print("Hello, world!");
- /*2:INC:FUNCTION_BODY*/}
+ /*1]*/}
doPrint();
-/*1:INC:FUNCTION_BODY*/}
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.FUNCTION_BODY,
+ });
}
Future<void> test_nested_invocations() async {
var content = '''
// Content before
-void f() {/*1:INC*/
- a(/*2:INC*/
- b(/*3:INC*/
- c(/*4:INC*/
+void f() {/*[0*/
+ a(/*[1*/
+ b(/*[2*/
+ c(/*[3*/
d()
- /*4:INC:INVOCATION*/),
- /*3:INC:INVOCATION*/),
- /*2:INC:INVOCATION*/);
-/*1:INC:FUNCTION_BODY*/}
+ /*3]*/),
+ /*2]*/),
+ /*1]*/);
+/*0]*/}
// Content after
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.FUNCTION_BODY,
+ 1: FoldingKind.INVOCATION,
+ 2: FoldingKind.INVOCATION,
+ 3: FoldingKind.INVOCATION,
+ });
}
Future<void> test_parameters_function() async {
var content = '''
-foo(/*1:INC*/
+foo(/*[0*/
String aaaaa,
String bbbbb, {
String ccccc,
- }/*1:INC:PARAMETERS*/) {}
+ }/*0]*/) {}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.PARAMETERS,
+ });
}
Future<void> test_parameters_method() async {
var content = '''
-class C {/*1:INC*/
- C(/*2:INC*/
+class C {/*[0*/
+ C(/*[1*/
String aaaaa,
String bbbbb,
- /*2:INC:PARAMETERS*/) : super();
-/*1:INC:CLASS_BODY*/}
+ /*1]*/) : super();
+/*0]*/}
''';
- final regions = await _computeRegions(content);
- _compareRegions(regions, content);
+ await _computeRegions(content);
+ expectRegions({
+ 0: FoldingKind.CLASS_BODY,
+ 1: FoldingKind.PARAMETERS,
+ });
}
Future<void> test_single_import_directives() async {
@@ -575,64 +739,16 @@
void f() {}
""";
- // Since there are no region comment markers above
- // just check the length instead of the contents
- final regions = await _computeRegions(content);
- expect(regions, hasLength(0));
+ await _computeRegions(content);
+ expectNoRegions();
}
- /// Compares provided folding regions with expected
- /// regions extracted from the comments in the provided content.
- ///
- /// If [onlyKinds] is supplied only regions of that type will be compared.
- void _compareRegions(List<FoldingRegion> regions, String content,
- [Set<FoldingKind>? onlyKinds]) {
- // Find all numeric markers for region starts.
- final regex = RegExp(r'/\*(\d+):(INC|EXC)\*/');
- final expectedRegions = regex.allMatches(content);
-
- if (onlyKinds != null) {
- regions =
- regions.where((region) => onlyKinds.contains(region.kind)).toList();
- }
-
- // Check we didn't get more than expected, since the loop below only
- // checks for the presence of matches, not absence.
- expect(regions, hasLength(expectedRegions.length));
-
- // Go through each marker, find the expected region start/end and
- // ensure it's in the results.
- for (var m in expectedRegions) {
- final i = m.group(1);
- final inclusiveStart = m.group(2) == 'INC';
- // Find the end marker.
- final endMatch =
- RegExp('/\\*$i:(INC|EXC):(.+?)\\*/').firstMatch(content)!;
-
- final inclusiveEnd = endMatch.group(1) == 'INC';
- final expectedKindString = endMatch.group(2);
- final expectedKind = FoldingKind.VALUES.firstWhere(
- (f) => f.toString() == 'FoldingKind.$expectedKindString',
- orElse: () => throw Exception(
- 'Annotated test code references $expectedKindString but '
- 'this does not exist in FoldingKind'));
-
- final expectedStart = inclusiveStart ? m.start : m.end;
- final expectedLength =
- (inclusiveEnd ? endMatch.end : endMatch.start) - expectedStart;
-
- expect(regions,
- contains(FoldingRegion(expectedKind, expectedStart, expectedLength)));
- }
- }
-
- Future<List<FoldingRegion>> _computeRegions(String sourceContent) async {
+ Future<void> _computeRegions(String sourceContent) async {
code = TestCode.parse(sourceContent);
newFile(sourcePath, code.code);
var result =
await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
var computer = DartUnitFoldingComputer(result.lineInfo, result.unit);
regions = computer.compute();
- return regions;
}
}