mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 02:50:20 +00:00
Migrate the rest of element_test from task model.
R=brianwilkerson@google.com Change-Id: Iebc0b21b96ebef17503bf3ef672fbaf702144368 Reviewed-on: https://dart-review.googlesource.com/c/93142 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
94d8e730fb
commit
f4ec983fec
|
@ -131,6 +131,10 @@ class FindNode {
|
|||
return _node(search, (n) => n is InstanceCreationExpression);
|
||||
}
|
||||
|
||||
IntegerLiteral integerLiteral(String search) {
|
||||
return _node(search, (n) => n is IntegerLiteral);
|
||||
}
|
||||
|
||||
LibraryDirective library(String search) {
|
||||
return _node(search, (n) => n is LibraryDirective);
|
||||
}
|
||||
|
|
|
@ -486,53 +486,6 @@ class AnalysisContextForTests extends AnalysisContextImpl {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for creating and managing single [AnalysisContext].
|
||||
*/
|
||||
class AnalysisContextHelper {
|
||||
MemoryResourceProvider resourceProvider;
|
||||
AnalysisContext context;
|
||||
|
||||
/**
|
||||
* Creates new [AnalysisContext] using [AnalysisContextFactory].
|
||||
*/
|
||||
AnalysisContextHelper(
|
||||
[AnalysisOptionsImpl options, MemoryResourceProvider provider]) {
|
||||
resourceProvider = provider ?? new MemoryResourceProvider();
|
||||
context = AnalysisContextFactory.contextWithCoreAndOptions(
|
||||
options ?? new AnalysisOptionsImpl(),
|
||||
resourceProvider: resourceProvider);
|
||||
}
|
||||
|
||||
Source addSource(String path, String code) {
|
||||
Source source = resourceProvider
|
||||
.getFile(resourceProvider.convertPath(path))
|
||||
.createSource();
|
||||
if (path.endsWith(".dart") || path.endsWith(".html")) {
|
||||
ChangeSet changeSet = new ChangeSet();
|
||||
changeSet.addedSource(source);
|
||||
context.applyChanges(changeSet);
|
||||
}
|
||||
context.setContents(source, code);
|
||||
return source;
|
||||
}
|
||||
|
||||
CompilationUnitElement getDefiningUnitElement(Source source) =>
|
||||
context.getCompilationUnitElement(source, source);
|
||||
|
||||
CompilationUnit resolveDefiningUnit(Source source) {
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
return context.resolveCompilationUnit(source, libraryElement);
|
||||
}
|
||||
|
||||
void runTasks() {
|
||||
AnalysisResult result = context.performAnalysisTask();
|
||||
while (result.changeNotices != null) {
|
||||
result = context.performAnalysisTask();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TestPackageUriResolver extends UriResolver {
|
||||
Map<String, Source> sourceMap = new HashMap<String, Source>();
|
||||
|
||||
|
|
|
@ -9,8 +9,7 @@ import 'package:analyzer/dart/element/type.dart';
|
|||
import 'package:analyzer/src/dart/element/element.dart';
|
||||
import 'package:analyzer/src/dart/element/handle.dart';
|
||||
import 'package:analyzer/src/dart/element/type.dart';
|
||||
import 'package:analyzer/src/generated/engine.dart'
|
||||
show AnalysisContext, AnalysisOptionsImpl;
|
||||
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
|
||||
import 'package:analyzer/src/generated/source_io.dart';
|
||||
import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
|
||||
import 'package:analyzer/src/generated/testing/element_factory.dart';
|
||||
|
@ -18,10 +17,8 @@ import 'package:analyzer/src/generated/testing/test_type_provider.dart';
|
|||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../../../generated/analysis_context_factory.dart'
|
||||
show AnalysisContextHelper;
|
||||
import '../../../generated/resolver_test_case.dart';
|
||||
import '../../../generated/test_support.dart';
|
||||
import '../resolution/driver_resolution.dart';
|
||||
|
||||
main() {
|
||||
defineReflectiveSuite(() {
|
||||
|
@ -29,7 +26,6 @@ main() {
|
|||
defineReflectiveTests(FieldElementImplTest);
|
||||
defineReflectiveTests(FunctionTypeImplTest);
|
||||
defineReflectiveTests(InterfaceTypeImplTest);
|
||||
defineReflectiveTests(LocalVariableElementImplTest);
|
||||
defineReflectiveTests(TypeParameterTypeImplTest);
|
||||
defineReflectiveTests(VoidTypeImplTest);
|
||||
defineReflectiveTests(ClassElementImplTest);
|
||||
|
@ -37,9 +33,6 @@ main() {
|
|||
defineReflectiveTests(ElementLocationImplTest);
|
||||
defineReflectiveTests(ElementImplTest);
|
||||
defineReflectiveTests(LibraryElementImplTest);
|
||||
defineReflectiveTests(MethodElementImplTest);
|
||||
defineReflectiveTests(MethodMemberTest);
|
||||
defineReflectiveTests(ParameterElementImplTest);
|
||||
defineReflectiveTests(PropertyAccessorElementImplTest);
|
||||
defineReflectiveTests(TopLevelVariableElementImplTest);
|
||||
});
|
||||
|
@ -872,34 +865,30 @@ class CompilationUnitElementImplTest extends EngineTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class ElementAnnotationImplTest extends ResolverTestCase {
|
||||
void test_computeConstantValue() {
|
||||
addNamedSource('/a.dart', r'''
|
||||
class ElementAnnotationImplTest extends DriverResolutionTest {
|
||||
test_computeConstantValue() async {
|
||||
newFile('/test/lib/a.dart', content: r'''
|
||||
class A {
|
||||
final String f;
|
||||
const A(this.f);
|
||||
}
|
||||
void f(@A('x') int p) {}
|
||||
''');
|
||||
Source source = addSource(r'''
|
||||
addTestFile(r'''
|
||||
import 'a.dart';
|
||||
main() {
|
||||
f(3);
|
||||
}
|
||||
''');
|
||||
LibraryElement library = resolve2(source);
|
||||
CompilationUnit unit = resolveCompilationUnit(source, library);
|
||||
FunctionDeclaration main = unit.declarations[0];
|
||||
BlockFunctionBody body = main.functionExpression.body;
|
||||
ExpressionStatement statement = body.block.statements[0];
|
||||
MethodInvocation invocation = statement.expression;
|
||||
ParameterElement parameter =
|
||||
invocation.argumentList.arguments[0].staticParameterElement;
|
||||
await resolveTestFile();
|
||||
|
||||
var argument = findNode.integerLiteral('3');
|
||||
ParameterElement parameter = argument.staticParameterElement;
|
||||
|
||||
ElementAnnotation annotation = parameter.metadata[0];
|
||||
expect(annotation.constantValue, isNull);
|
||||
|
||||
DartObject value = annotation.computeConstantValue();
|
||||
expect(value, isNotNull);
|
||||
expect(value.getField('f').toStringValue(), 'x');
|
||||
|
@ -1068,54 +1057,20 @@ class ElementLocationImplTest extends EngineTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class FieldElementImplTest extends EngineTestCase {
|
||||
@deprecated
|
||||
void test_computeNode() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
class A {
|
||||
int a;
|
||||
}
|
||||
enum B {B1, B2, B3}''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// A
|
||||
{
|
||||
FieldElement elementA = unitElement.getType("A").getField('a');
|
||||
VariableDeclaration nodeA = elementA.computeNode();
|
||||
expect(nodeA, isNotNull);
|
||||
expect(nodeA.name.name, "a");
|
||||
expect(nodeA.declaredElement, same(elementA));
|
||||
}
|
||||
// B
|
||||
{
|
||||
FieldElement elementB = unitElement.getEnum("B").getField('B2');
|
||||
EnumConstantDeclaration nodeB = elementB.computeNode();
|
||||
expect(nodeB, isNotNull);
|
||||
expect(nodeB.name.name, "B2");
|
||||
expect(nodeB.declaredElement, same(elementB));
|
||||
}
|
||||
}
|
||||
|
||||
void test_isEnumConstant() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
class FieldElementImplTest extends DriverResolutionTest {
|
||||
test_isEnumConstant() async {
|
||||
addTestFile(r'''
|
||||
enum B {B1, B2, B3}
|
||||
''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
await resolveTestFile();
|
||||
|
||||
FieldElement b2Element = unitElement.getEnum("B").getField('B2');
|
||||
var B = findElement.enum_('B');
|
||||
|
||||
FieldElement b2Element = B.getField('B2');
|
||||
expect(b2Element.isEnumConstant, isTrue);
|
||||
|
||||
FieldElement indexElement = unitElement.getEnum("B").getField('index');
|
||||
FieldElement indexElement = B.getField('index');
|
||||
expect(indexElement.isEnumConstant, isFalse);
|
||||
}
|
||||
}
|
||||
|
@ -3673,214 +3628,6 @@ class LibraryElementImplTest extends EngineTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class LocalVariableElementImplTest extends EngineTestCase {}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class MethodElementImplTest extends EngineTestCase {
|
||||
@deprecated
|
||||
void test_computeNode() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
abstract class A {
|
||||
String m1() => null;
|
||||
m2();
|
||||
}
|
||||
''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// m1
|
||||
{
|
||||
MethodElement m1Element = unitElement.getType("A").getMethod('m1');
|
||||
MethodDeclaration m1Node = m1Element.computeNode();
|
||||
expect(m1Node, isNotNull);
|
||||
expect(m1Node.name.name, "m1");
|
||||
expect(m1Node.declaredElement, same(m1Element));
|
||||
}
|
||||
// m2
|
||||
{
|
||||
MethodElement m2Element = unitElement.getType("A").getMethod('m2');
|
||||
MethodDeclaration m2Node = m2Element.computeNode();
|
||||
expect(m2Node, isNotNull);
|
||||
expect(m2Node.name.name, "m2");
|
||||
expect(m2Node.declaredElement, same(m2Element));
|
||||
}
|
||||
}
|
||||
|
||||
@deprecated
|
||||
void test_computeNode_withoutFunctionBody() {
|
||||
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
|
||||
options.analyzeFunctionBodies = false;
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper(options);
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
abstract class A {
|
||||
String m1() => null;
|
||||
m2();
|
||||
}
|
||||
''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// m1
|
||||
{
|
||||
MethodElement m1Element = unitElement.getType("A").getMethod('m1');
|
||||
MethodDeclaration m1Node = m1Element.computeNode();
|
||||
expect(m1Node, isNotNull);
|
||||
expect(m1Node.name.name, "m1");
|
||||
expect(m1Node.declaredElement, same(m1Element));
|
||||
}
|
||||
// m2
|
||||
{
|
||||
MethodElement m2Element = unitElement.getType("A").getMethod('m2');
|
||||
MethodDeclaration m2Node = m2Element.computeNode();
|
||||
expect(m2Node, isNotNull);
|
||||
expect(m2Node.name.name, "m2");
|
||||
expect(m2Node.declaredElement, same(m2Element));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class MethodMemberTest extends EngineTestCase {
|
||||
/**
|
||||
* The type provider used to access the types.
|
||||
*/
|
||||
TestTypeProvider _typeProvider;
|
||||
|
||||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
_typeProvider = new TestTypeProvider();
|
||||
}
|
||||
|
||||
void test_getReifiedType_substituteFor() {
|
||||
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
|
||||
options.analyzeFunctionBodies = false;
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper(options);
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
class A<T> {
|
||||
T f(T x) => x;
|
||||
}
|
||||
class B<S> extends A<S> {
|
||||
S f(S x) => x;
|
||||
}
|
||||
''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
DartType objectType = _typeProvider.objectType;
|
||||
// B.f
|
||||
ClassElement elementB = unitElement.getType("B");
|
||||
MethodElement BfElement = elementB.type
|
||||
.lookUpInheritedMethod("f", library: libraryElement, thisType: true);
|
||||
MethodElement AfElement = elementB.type
|
||||
.lookUpInheritedMethod("f", library: libraryElement, thisType: false);
|
||||
expect(
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
BfElement.getReifiedType(objectType),
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
equals(AfElement.getReifiedType(objectType)));
|
||||
}
|
||||
}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class ParameterElementImplTest extends EngineTestCase {
|
||||
@deprecated
|
||||
void test_computeNode_DefaultFormalParameter() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
main([int p = 42]) {
|
||||
}''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// p
|
||||
{
|
||||
ParameterElement element = unitElement.functions[0].parameters[0];
|
||||
DefaultFormalParameter node = element.computeNode();
|
||||
expect(node, isNotNull);
|
||||
expect(node.identifier.name, 'p');
|
||||
expect(node.declaredElement, same(element));
|
||||
}
|
||||
}
|
||||
|
||||
@deprecated
|
||||
void test_computeNode_FieldFormalParameter() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
class A {
|
||||
int p;
|
||||
A(this.p) {
|
||||
}
|
||||
}''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// p
|
||||
{
|
||||
ClassElement classA = unitElement.types[0];
|
||||
ConstructorElement constructorA = classA.constructors[0];
|
||||
FieldFormalParameterElement element = constructorA.parameters[0];
|
||||
FieldFormalParameter node = element.computeNode();
|
||||
expect(node, isNotNull);
|
||||
expect(node.identifier.name, 'p');
|
||||
expect(node.declaredElement, same(element));
|
||||
}
|
||||
}
|
||||
|
||||
@deprecated
|
||||
void test_computeNode_FunctionTypedFormalParameter() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
main(p(int a, int b)) {
|
||||
}''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// p
|
||||
{
|
||||
ParameterElement element = unitElement.functions[0].parameters[0];
|
||||
FunctionTypedFormalParameter node = element.computeNode();
|
||||
expect(node, isNotNull);
|
||||
expect(node.identifier.name, 'p');
|
||||
expect(node.declaredElement, same(element));
|
||||
}
|
||||
}
|
||||
|
||||
@deprecated
|
||||
void test_computeNode_SimpleFormalParameter() {
|
||||
AnalysisContextHelper contextHelper = new AnalysisContextHelper();
|
||||
AnalysisContext context = contextHelper.context;
|
||||
Source source = contextHelper.addSource("/test.dart", r'''
|
||||
main(int p) {
|
||||
}''');
|
||||
// prepare CompilationUnitElement
|
||||
LibraryElement libraryElement = context.computeLibraryElement(source);
|
||||
CompilationUnitElement unitElement = libraryElement.definingCompilationUnit;
|
||||
// p
|
||||
{
|
||||
ParameterElement element = unitElement.functions[0].parameters[0];
|
||||
SimpleFormalParameter node = element.computeNode();
|
||||
expect(node, isNotNull);
|
||||
expect(node.identifier.name, 'p');
|
||||
expect(node.declaredElement, same(element));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class PropertyAccessorElementImplTest extends EngineTestCase {
|
||||
void test_matchesHandle_getter() {
|
||||
|
@ -3926,30 +3673,25 @@ class TestElementResynthesizer extends ElementResynthesizer {
|
|||
}
|
||||
}
|
||||
|
||||
/// TODO(paulberry): migrate this test away from the task model.
|
||||
/// See dartbug.com/35734.
|
||||
@reflectiveTest
|
||||
class TopLevelVariableElementImplTest extends ResolverTestCase {
|
||||
void test_computeConstantValue() {
|
||||
addNamedSource('/a.dart', r'''
|
||||
class TopLevelVariableElementImplTest extends DriverResolutionTest {
|
||||
test_computeConstantValue() async {
|
||||
newFile('/test/lib/a.dart', content: r'''
|
||||
const int C = 42;
|
||||
''');
|
||||
Source source = addSource(r'''
|
||||
addTestFile(r'''
|
||||
import 'a.dart';
|
||||
main() {
|
||||
print(C);
|
||||
}
|
||||
''');
|
||||
LibraryElement library = resolve2(source);
|
||||
CompilationUnit unit = resolveCompilationUnit(source, library);
|
||||
FunctionDeclaration main = unit.declarations[0];
|
||||
BlockFunctionBody body = main.functionExpression.body;
|
||||
ExpressionStatement statement = body.block.statements[0];
|
||||
MethodInvocation invocation = statement.expression;
|
||||
SimpleIdentifier argument = invocation.argumentList.arguments[0];
|
||||
await resolveTestFile();
|
||||
|
||||
SimpleIdentifier argument = findNode.simple('C);');
|
||||
PropertyAccessorElementImpl getter = argument.staticElement;
|
||||
TopLevelVariableElement constant = getter.variable;
|
||||
expect(constant.constantValue, isNull);
|
||||
|
||||
DartObject value = constant.computeConstantValue();
|
||||
expect(value, isNotNull);
|
||||
expect(value.toIntValue(), 42);
|
||||
|
|
Loading…
Reference in a new issue