blob: 0f894bf3fe5ee436e8fa85eb0db0f2973537104e [file] [log] [blame]
// Copyright (c) 2018, 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 'context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(CommentDriverResolutionTest);
});
}
@reflectiveTest
class CommentDriverResolutionTest extends PubPackageResolutionTest {
test_error_unqualifiedReferenceToNonLocalStaticMember() async {
await assertNoErrorsInCode(r'''
class A {
static void foo() {}
}
/// [foo]
class B extends A {}
''');
assertElement(
findNode.simple('foo]'),
findElement.method('foo', of: 'A'),
);
}
test_identifier_beforeClass() async {
await assertNoErrorsInCode(r'''
/// [foo]
class A {
foo() {}
}
''');
assertElement(
findNode.simple('foo]'),
findElement.method('foo'),
);
}
test_identifier_beforeConstructor() async {
await assertNoErrorsInCode(r'''
class A {
/// [p]
A(int p);
}''');
assertElement(
findNode.simple('p]'),
findElement.parameter('p'),
);
}
test_identifier_beforeEnum() async {
await assertNoErrorsInCode(r'''
/// This is the [Samurai] kind.
enum Samurai {
/// Use [int].
WITH_SWORD,
/// Like [WITH_SWORD], but only without one.
WITHOUT_SWORD
}''');
assertElement(
findNode.simple('Samurai]'),
findElement.enum_('Samurai'),
);
assertElement(
findNode.simple('int]'),
intElement,
);
assertElement(
findNode.simple('WITH_SWORD]'),
findElement.getter('WITH_SWORD'),
);
}
test_identifier_beforeFunction_blockBody() async {
await assertNoErrorsInCode(r'''
/// [p]
foo(int p) {}
''');
assertElement(
findNode.simple('p]'),
findElement.parameter('p'),
);
}
test_identifier_beforeFunction_expressionBody() async {
await assertNoErrorsInCode(r'''
/// [p]
foo(int p) => null;
''');
assertElement(
findNode.simple('p]'),
findElement.parameter('p'),
);
}
test_identifier_beforeFunctionTypeAlias() async {
await assertNoErrorsInCode(r'''
/// [p]
typedef Foo(int p);
''');
assertElement(
findNode.simple('p]'),
findElement.parameter('p'),
);
}
test_identifier_beforeGenericTypeAlias() async {
await assertNoErrorsInCode(r'''
/// Can resolve [T], [S], and [p].
typedef Foo<T> = Function<S>(int p);
''');
assertElement(
findNode.simple('T]'),
findElement.typeParameter('T'),
);
assertElement(findNode.simple('S]'), findElement.typeParameter('S'));
assertElement(
findNode.simple('p]'),
findElement.parameter('p'),
);
}
test_identifier_beforeGetter() async {
await assertNoErrorsInCode(r'''
/// [int]
get g => null;
''');
assertElement(findNode.simple('int]'), intElement);
}
test_identifier_beforeMethod() async {
await assertNoErrorsInCode(r'''
abstract class A {
/// [p1]
ma(int p1);
/// [p2]
mb(int p2);
/// [p3] and [p4]
mc(int p3, p4());
/// [p5]
md(int p5, {int p6});
}
''');
assertElement(findNode.simple('p1]'), findElement.parameter('p1'));
assertElement(findNode.simple('p2]'), findElement.parameter('p2'));
assertElement(findNode.simple('p3]'), findElement.parameter('p3'));
assertElement(findNode.simple('p4]'), findElement.parameter('p4'));
assertElement(findNode.simple('p5]'), findElement.parameter('p5'));
}
test_identifier_parameter_functionTyped() async {
await assertNoErrorsInCode(r'''
/// [bar]
foo(int bar()) {}
''');
assertElement(
findNode.simple('bar]'),
findElement.parameter('bar'),
);
}
test_identifier_setter() async {
await assertNoErrorsInCode(r'''
class A {
/// [x] in A
mA() {}
set x(value) {}
}
class B extends A {
/// [x] in B
mB() {}
}
''');
var x = findElement.setter('x', of: 'A');
assertElement(findNode.simple('x] in A'), x);
assertElement(findNode.simple('x] in B'), x);
}
test_new() async {
await assertNoErrorsInCode(r'''
class A {
A();
A.named();
}
/// [new A] or [new A.named]
main() {}
''');
assertElement(
findNode.simple('A]'),
findElement.unnamedConstructor('A'),
);
assertElement(
findNode.simple('A.named]'),
findElement.class_('A'),
);
assertElement(
findNode.simple('named]'),
findElement.constructor('named', of: 'A'),
);
}
}