blob: e444707bf454ab5833bc3aa512f6c3b86c880362 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../../client/completion_driver_test.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(DartDocTest);
});
}
@reflectiveTest
class DartDocTest extends AbstractCompletionDriverTest {
Future<void> test_class() async {
allowedIdentifiers = const {'MyClass1'};
await computeSuggestions('''
/// This doc should suggest the commented class name [MyC^].
class MyClass1 {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyClass1
kind: class
''');
}
Future<void> test_constructorInvocation() async {
allowedIdentifiers = const {'constructor1'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented constructor name [MyClass1.^].
MyClass1.constructor1();
}
''');
assertResponse(r'''
suggestions
constructor1
kind: constructor
''');
}
Future<void> test_constructorParameter() async {
allowedIdentifiers = const {'param1'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented constructor parameter name [par^].
MyClass1([int param1 = 0]);
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
param1
kind: parameter
''');
}
Future<void> test_enum() async {
allowedIdentifiers = const {'MyEnum'};
await computeSuggestions('''
/// This doc should suggest the commented enum name [MyE^].
enum MyEnum { value1 }
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyEnum
kind: enum
''');
}
Future<void> test_enumConstant() async {
allowedIdentifiers = const {'value1'};
await computeSuggestions('''
enum MyEnum {
/// This doc should suggest the commented enum constant name [val^].
value1
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
value1
kind: enumConstant
''');
}
Future<void> test_extension() async {
allowedIdentifiers = const {'MyExt'};
await computeSuggestions('''
/// This doc should suggest the commented extension name [MyE^].
extension MyExt on int {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyExt
kind: extension
''');
}
Future<void> test_extension2() async {
allowedIdentifiers = const {'isEven'};
await computeSuggestions('''
/// This doc should suggest other things like [int.isE^].
extension MyExt on int {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
isEven
kind: getter
''');
}
Future<void> test_extensionType() async {
allowedIdentifiers = const {'MyExtensionType'};
await computeSuggestions('''
/// This doc should suggest the commented extension type name [MyE^].
extension type MyExtensionType(int i) {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyExtensionType
kind: extensionType
''');
}
Future<void> test_field1() async {
allowedIdentifiers = const {'myField'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented field name [myF^].
int myField = 0;
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myField
kind: field
''');
}
Future<void> test_field2() async {
allowedIdentifiers = const {'myField'};
await computeSuggestions('''
/// This is unrelated but should suggest name [MyClass1.myF^].
var myVariable = 0;
class MyClass1 {
int myField = 0;
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myField
kind: field
''');
}
Future<void> test_function() async {
allowedIdentifiers = const {'myFunction'};
await computeSuggestions('''
/// This doc should suggest the commented function name [myF^].
void myFunction() {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myFunction
kind: function
''');
}
Future<void> test_getter() async {
allowedIdentifiers = const {'myGetter'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented getter name [myG^].
int get myGetter => 0;
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myGetter
kind: getter
''');
}
Future<void> test_getter2() async {
allowedIdentifiers = const {'myGetter'};
await computeSuggestions('''
/// This is unrelated but should suggest name [MyExtension1.myG^].
var myVariable = 0;
extension MyExtension1 {
int get myGetter => 0;
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myGetter
kind: getter
''');
}
Future<void> test_getter3() async {
allowedIdentifiers = const {'myGetter'};
await computeSuggestions('''
/// This is unrelated but should suggest name [MyExtensionType1.myG^].
var myVariable = 0;
extension type MyExtensionType1(int i) {
int get myGetter => 0;
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myGetter
kind: getter
''');
}
Future<void> test_importPrefix() async {
allowedIdentifiers = const {'async'};
await computeSuggestions('''
/// This doc should suggest the commented import prefix name [asy^].
import 'dart:async' as async;
''');
assertResponse(r'''
replacement
left: 3
suggestions
async
kind: library
''');
}
Future<void> test_library() async {
allowedIdentifiers = const {'MyClass1'};
await computeSuggestions('''
/// This doc should suggest the class in the library [MyC^].
library;
class MyClass1 {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyClass1
kind: class
''');
}
Future<void> test_method() async {
allowedIdentifiers = const {'myMethod'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented method name [myM^].
void myMethod() {}
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myMethod
kind: method
''');
}
Future<void> test_mixin() async {
allowedIdentifiers = const {'MyMixin'};
await computeSuggestions('''
/// This doc should suggest the commented mixin name [MyM^].
mixin MyMixin {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyMixin
kind: mixin
''');
}
Future<void> test_namedParameter() async {
allowedIdentifiers = const {'param1'};
await computeSuggestions('''
/// This doc should suggest the commented named parameter name [par^].
void myFunction({int param1}) {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
param1
kind: parameter
''');
}
Future<void> test_notInSquareBraces() async {
allowedIdentifiers = const {'MyClass1'};
await computeSuggestions('''
/// This doc should not suggest the commented class name [] outside the braces ^
class MyClass1 {}
''');
assertResponse(r'''
suggestions
''');
}
Future<void> test_parameter() async {
allowedIdentifiers = const {'param1'};
await computeSuggestions('''
/// This doc should suggest the commented parameter name [par^].
void myFunction(int param1) {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
param1
kind: parameter
''');
}
Future<void> test_setter() async {
allowedIdentifiers = const {'mySetter'};
await computeSuggestions('''
class MyClass1 {
/// This doc should suggest the commented setter name [myS^].
set mySetter(int value) {}
}
''');
assertResponse(r'''
replacement
left: 3
suggestions
mySetter
kind: setter
''');
}
Future<void> test_start() async {
// There was a crash because we tried to walk before the (only) token
// of the documentation comment.
await computeSuggestions('''
^/// hello
class A {}
''');
assertResponse(r'''
suggestions
''');
}
Future<void> test_topLevelGetter() async {
allowedIdentifiers = const {'myTopLevelGetter'};
await computeSuggestions('''
/// This doc should suggest the commented top-level getter name [myT^].
int get myTopLevelGetter => 0;
''');
assertResponse(r'''
replacement
left: 3
suggestions
myTopLevelGetter
kind: getter
''');
}
Future<void> test_topLevelSetter() async {
allowedIdentifiers = const {'myTopLevelSetter'};
await computeSuggestions('''
/// This doc should suggest the commented top-level setter name [myT^].
set myTopLevelSetter(int value) {}
''');
assertResponse(r'''
replacement
left: 3
suggestions
myTopLevelSetter
kind: setter
''');
}
Future<void> test_typedef() async {
allowedIdentifiers = const {'MyTypedef'};
await computeSuggestions('''
/// This doc should suggest the commented typedef name [MyT^].
typedef MyTypedef = int Function();
''');
assertResponse(r'''
replacement
left: 3
suggestions
MyTypedef
kind: typeAlias
''');
}
Future<void> test_typedef2() async {
allowedIdentifiers = const {'delayed'};
await computeSuggestions('''
/// This doc should suggest other things like [Future.de^].
typedef MyTypedef = int Function();
''');
assertResponse(r'''
replacement
left: 2
suggestions
delayed
kind: constructor
''');
}
Future<void> test_typeParameter() async {
allowedIdentifiers = const {'TypeParam'};
await computeSuggestions('''
/// This doc should suggest the commented type parameter name [T^].
void myFunction<TypeParam>() {}
''');
assertResponse(r'''
replacement
left: 1
suggestions
TypeParam
kind: typeParameter
''');
}
Future<void> test_variable() async {
allowedIdentifiers = const {'myVar'};
await computeSuggestions('''
/// This doc should suggest the commented variable name [myV^].
int myVar = 0;
''');
assertResponse(r'''
replacement
left: 3
suggestions
myVar
kind: topLevelVariable
''');
}
}