blob: aabce6119bba0121bb01b5145eb35a733fd73075 [file] [log] [blame]
// Copyright (c) 2023, 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(LibraryPrefixTest);
});
}
@reflectiveTest
class LibraryPrefixTest extends AbstractCompletionDriverTest
with LibraryPrefixTestCases {}
mixin LibraryPrefixTestCases on AbstractCompletionDriverTest {
@override
bool get includeKeywords => false;
Future<void> test_block_afterStatement_beforeStatement() async {
newFile('$testPackageLibPath/ab.dart', '''
export "dart:math" hide max;
class A {
int x = 0;
}
@deprecated D1(_B b) {
int x = 0;
x;
}
class _B {
boo() {
partBoo() {}
partBoo();
}
}
''');
newFile('$testPackageLibPath/cd.dart', '''
String T1 = '';
var _T2;
class C {}
class D {}
void f() {
_T2;
}
''');
newFile('$testPackageLibPath/eef.dart', '''
class EE {}
class F {}
''');
newFile('$testPackageLibPath/g.dart', '''
class G {}
''');
// The following file is not imported.
newFile('$testPackageLibPath/h.dart', '''
class H {}
int T3 = 0;
var _T4;
void f() {
_T4;
}
''');
await computeSuggestions('''
import "ab.dart";
import "cd.dart" hide D;
import "eef.dart" show EE;
import "g.dart" as g0;
int T5;
var _T6;
String get T7 => 'hello';
set T8(int value) {
partT8() {}
}
Z D2() {
int x;
}
class X {
int get clog => 8;
set blog(value) {}
a() {
var f;
localF(int arg1) {}
{
var x;
}
^
var r;
}
void b() {}
}
class Z {}
''');
assertResponse(r'''
suggestions
g0.G
kind: class
D2
kind: functionInvocation
T1
kind: topLevelVariable
T5
kind: topLevelVariable
T7
kind: getter
T8
kind: setter
_T6
kind: topLevelVariable
g0
kind: library
g0.G
kind: constructorInvocation
D1
kind: functionInvocation
deprecated: true
T3
kind: topLevelVariable
''');
}
Future<void> test_classDeclaration_afterLeftBrace_beforeRightBrace() async {
newFile('$testPackageLibPath/b.dart', '''
class B { }
''');
await computeSuggestions('''
import "b.dart" as x0;
@deprecated class A {
^
}
class _B {}
A T;
''');
assertResponse(r'''
suggestions
@override
// TODO: implement hashCode
int get hashCode => super.hashCode;
kind: override
selection: 62 14
@override
// TODO: implement runtimeType
Type get runtimeType => super.runtimeType;
kind: override
selection: 69 17
@override
String toString() {
// TODO: implement toString
return super.toString();
}
kind: override
selection: 68 24
@override
bool operator ==(Object other) {
// TODO: implement ==
return super == other;
}
kind: override
selection: 75 22
@override
noSuchMethod(Invocation invocation) {
// TODO: implement noSuchMethod
return super.noSuchMethod(invocation);
}
kind: override
selection: 90 38
x0.B
kind: class
x0
kind: library
''');
}
Future<void> test_fieldDeclaration_afterFinal_beforeConstructor() async {
newFile('$testPackageLibPath/b.dart', '''
class B {}
''');
await computeSuggestions('''
import "b.dart" as x0;
class A {
final ^
A(){}
}
class _B {}
A T;
''');
assertResponse(r'''
suggestions
x0.B
kind: class
x0
kind: library
''');
}
Future<void>
test_fieldDeclaration_afterFinal_beforeConstructor_partial() async {
newFile('$testPackageLibPath/b.dart', '''
class B { }
''');
await computeSuggestions('''
import "b.dart" as S0;
class A {
final S^
A();
}
class _B {}
A Sew;
''');
assertResponse(r'''
replacement
left: 1
suggestions
S0
kind: library
''');
}
Future<void> test_fieldDeclaration_afterFinal_beforeField() async {
newFile('$testPackageLibPath/b.dart', '''
class B { }
''');
await computeSuggestions('''
import "b.dart" as x0;
class A {
final ^
final foo;
}
class _B {}
A T;
''');
assertResponse(r'''
suggestions
x0.B
kind: class
x0
kind: library
''');
}
Future<void> test_fieldDeclaration_afterFinal_beforeField2() async {
newFile('$testPackageLibPath/b.dart', '''
class B {}
''');
await computeSuggestions('''
import "b.dart" as x0;
class A {
final ^
var foo;
}
class _B {}
A T;
''');
assertResponse(r'''
suggestions
x0.B
kind: class
x0
kind: library
''');
}
Future<void> test_fieldDeclaration_afterFinal_beforeRightBrace() async {
newFile('$testPackageLibPath/b.dart', '''
class B { }
''');
await computeSuggestions('''
import "b.dart" as x0;
class A {
final ^
}
class _B {}
A T;
''');
assertResponse(r'''
suggestions
x0.B
kind: class
x0
kind: library
''');
}
Future<void> test_instanceCreationExpression_afterNew_beforeEnd() async {
newFile('$testPackageLibPath/a.dart', '''
class A {
foo() {
var f;
f;
{
var x;
x;
}
}
}
class B {
B(this.x, [String boo = '']) { }
int x;
}
class C {
C.bar({boo = 'hoo', int z = 0}) {}
}
''');
await computeSuggestions('''
import "a.dart" as t0;
import "dart:math" as m0;
void f() {
new ^
String x = "hello";
}
''');
assertResponse(r'''
suggestions
m0
kind: library
m0.Point
kind: constructorInvocation
m0.Random
kind: constructorInvocation
t0
kind: library
t0.A
kind: constructorInvocation
t0.B
kind: constructorInvocation
t0.C.bar
kind: constructorInvocation
''');
}
Future<void>
test_instanceCreationExpression_afterNew_beforeEnd_inPart() async {
newFile('$testPackageLibPath/a.dart', '''
class A {
foo() {
var f;
f;
{
var x;
x;
}
}
}
class B {
B(this.x, [String boo = '']) {}
int x;
}
class C {
C.bar({boo = 'hoo', int z = 0}) {}
}
''');
newFile(testFilePath, 'part of testB;');
newFile('$testPackageLibPath/b.dart', '''
// ignore_for_file: unused_import
library testB;
import "a.dart" as t0;
import "dart:math" as m0;
part "test.dart";
void f() {
String x = "hello";
x;
}
''');
await computeSuggestions('''
part of testB;
void f() {
new ^
String x = "hello";
}
''');
assertResponse(r'''
suggestions
m0
kind: library
m0.Point
kind: constructorInvocation
m0.Random
kind: constructorInvocation
t0
kind: library
t0.A
kind: constructorInvocation
t0.B
kind: constructorInvocation
t0.C.bar
kind: constructorInvocation
''');
}
Future<void>
test_instanceCreationExpression_afterNew_beforeEnd_inPart_detached() async {
newFile('$testPackageLibPath/a.dart', '''
class A {
foo() {
var f;
f;
{
var x;
x;
}
}
}
class B {
B(this.x, [String boo = '']) {}
int x;
}
class C {
C.bar({boo = 'hoo', int z = 0}) {}
}
''');
newFile(testFilePath, 'part of testB;');
newFile('$testPackageLibPath/b.dart', '''
// ignore_for_file: unused_import
library testB;
import "a.dart" as t;
import "dart:math" as math;
//part "test.dart"
void f() {
String x = "hello";
x;
}
''');
await computeSuggestions('''
//part of testB;
void f() {
new ^ String x = "hello";
}
''');
assertResponse(r'''
suggestions
''');
}
Future<void>
test_instanceCreationExpression_afterNew_beforeEnd_partial() async {
await computeSuggestions('''
import "dart:convert" as j0;
void f() {
var x = new j^
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
j0
kind: library
j0.JsonCodec
kind: constructorInvocation
j0.JsonDecoder
kind: constructorInvocation
''');
}
Future<void> test_localVariableDeclaration_afterFinal_beforeEnd() async {
newFile('/testAB.dart', '''
export "dart:math" hide max;
class A {
int x = 0;
}
@deprecated D1() {
int x;
x;
}
class _B {
boo() {
partBoo() {}
partBoo();
}
}
''');
newFile('/testCD.dart', '''
String T1 = '';
var _T2;
class C {}
class D {}
''');
newFile('/testEEF.dart', '''
class EE {}
class F {}
''');
newFile('/testG.dart', '''
class G {}
''');
// The following file is not imported.
newFile('/testH.dart', '''
class H {}
int T3;
var _T4;
''');
await computeSuggestions('''
import "testAB.dart";
import "testCD.dart" hide D;
import "testEEF.dart" show EE;
import "testG.dart" as g0;
int T5;
var _T6;
String get T7 => 'hello';
set T8(int value) {
partT8() {}
}
Z D2() {int x;}
class X {
int get clog => 8;
set blog(value) {}
a() {
final ^
final var f;
localF(int arg1) {}
{
var x;
}
}
void b() {}
}
class Z {}
''');
assertResponse(r'''
suggestions
g0
kind: library
''');
}
Future<void> test_localVariableDeclaration_afterFinal_beforeEnd2() async {
newFile('/testAB.dart', '''
export "dart:math" hide max;
class A {
int x = 0;
}
@deprecated D1() {
int x = 0;
x;
}
class _B {
boo() {
partBoo() {}
partBoo();
}
}
''');
newFile('/testCD.dart', '''
String T1 = '';
var _T2;
class C {}
class D {}
''');
newFile('/testEEF.dart', '''
class EE {}
class F {}
''');
newFile('/testG.dart', '''
class G {}
''');
// The following file is not imported.
newFile('/testH.dart', '''
class H {}
int T3;
var _T4;
''');
await computeSuggestions('''
import "testAB.dart";
import "testCD.dart" hide D;
import "testEEF.dart" show EE;
import "testG.dart" as g0;
int T5;
var _T6;
String get T7 => 'hello';
set T8(int value) {
partT8() {}
}
Z D2() {int x;}
class X {
int get clog => 8;
set blog(value) { }
a() {
final ^
var f;
localF(int arg1) { }
{
var x;
}
}
void b() {}
}
class Z {}
''');
assertResponse(r'''
suggestions
g0
kind: library
''');
}
}