Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: pkg/analyzer/test/src/dart/element/element_test.dart

Issue 1966323002: Add API to force the computation of constant values (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/member.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.test.src.dart.element.element_test; 5 library analyzer.test.src.dart.element.element_test;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/constant/value.dart';
8 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
10 import 'package:analyzer/src/dart/element/element.dart'; 11 import 'package:analyzer/src/dart/element/element.dart';
11 import 'package:analyzer/src/dart/element/handle.dart'; 12 import 'package:analyzer/src/dart/element/handle.dart';
12 import 'package:analyzer/src/dart/element/type.dart'; 13 import 'package:analyzer/src/dart/element/type.dart';
13 import 'package:analyzer/src/generated/engine.dart' 14 import 'package:analyzer/src/generated/engine.dart'
14 show AnalysisContext, AnalysisOptionsImpl; 15 show AnalysisContext, AnalysisOptionsImpl;
15 import 'package:analyzer/src/generated/java_core.dart'; 16 import 'package:analyzer/src/generated/java_core.dart';
16 import 'package:analyzer/src/generated/source_io.dart'; 17 import 'package:analyzer/src/generated/source_io.dart';
17 import 'package:analyzer/src/generated/testing/ast_factory.dart'; 18 import 'package:analyzer/src/generated/testing/ast_factory.dart';
18 import 'package:analyzer/src/generated/testing/element_factory.dart'; 19 import 'package:analyzer/src/generated/testing/element_factory.dart';
19 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; 20 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
20 import 'package:unittest/unittest.dart'; 21 import 'package:unittest/unittest.dart';
21 22
22 import '../../../generated/analysis_context_factory.dart' 23 import '../../../generated/analysis_context_factory.dart'
23 show AnalysisContextHelper; 24 show AnalysisContextHelper;
25 import '../../../generated/resolver_test_case.dart';
24 import '../../../generated/test_support.dart'; 26 import '../../../generated/test_support.dart';
25 import '../../../reflective_tests.dart'; 27 import '../../../reflective_tests.dart';
26 import '../../../utils.dart'; 28 import '../../../utils.dart';
27 29
28 main() { 30 main() {
29 initializeTestEnvironment(); 31 initializeTestEnvironment();
32 runReflectiveTests(ElementAnnotationImplTest);
30 runReflectiveTests(FieldElementImplTest); 33 runReflectiveTests(FieldElementImplTest);
31 runReflectiveTests(FunctionTypeImplTest); 34 runReflectiveTests(FunctionTypeImplTest);
32 runReflectiveTests(InterfaceTypeImplTest); 35 runReflectiveTests(InterfaceTypeImplTest);
33 runReflectiveTests(LocalVariableElementImplTest); 36 runReflectiveTests(LocalVariableElementImplTest);
34 runReflectiveTests(TypeParameterTypeImplTest); 37 runReflectiveTests(TypeParameterTypeImplTest);
35 runReflectiveTests(VoidTypeImplTest); 38 runReflectiveTests(VoidTypeImplTest);
36 runReflectiveTests(ClassElementImplTest); 39 runReflectiveTests(ClassElementImplTest);
37 runReflectiveTests(CompilationUnitElementImplTest); 40 runReflectiveTests(CompilationUnitElementImplTest);
38 runReflectiveTests(ElementLocationImplTest); 41 runReflectiveTests(ElementLocationImplTest);
39 runReflectiveTests(ElementImplTest); 42 runReflectiveTests(ElementImplTest);
40 runReflectiveTests(LibraryElementImplTest); 43 runReflectiveTests(LibraryElementImplTest);
41 runReflectiveTests(MethodElementImplTest); 44 runReflectiveTests(MethodElementImplTest);
42 runReflectiveTests(MultiplyDefinedElementImplTest); 45 runReflectiveTests(MultiplyDefinedElementImplTest);
43 runReflectiveTests(ParameterElementImplTest); 46 runReflectiveTests(ParameterElementImplTest);
47 runReflectiveTests(TopLevelVariableElementImplTest);
44 } 48 }
45 49
46 @reflectiveTest 50 @reflectiveTest
47 class ClassElementImplTest extends EngineTestCase { 51 class ClassElementImplTest extends EngineTestCase {
48 void test_computeNode_ClassDeclaration() { 52 void test_computeNode_ClassDeclaration() {
49 AnalysisContextHelper contextHelper = new AnalysisContextHelper(); 53 AnalysisContextHelper contextHelper = new AnalysisContextHelper();
50 AnalysisContext context = contextHelper.context; 54 AnalysisContext context = contextHelper.context;
51 Source source = contextHelper.addSource( 55 Source source = contextHelper.addSource(
52 "/test.dart", 56 "/test.dart",
53 r''' 57 r'''
(...skipping 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 CompilationUnitElementImpl unit = 1088 CompilationUnitElementImpl unit =
1085 ElementFactory.compilationUnit("/lib.dart"); 1089 ElementFactory.compilationUnit("/lib.dart");
1086 String className = "C"; 1090 String className = "C";
1087 ClassElement classElement = ElementFactory.classElement2(className); 1091 ClassElement classElement = ElementFactory.classElement2(className);
1088 unit.types = <ClassElement>[classElement]; 1092 unit.types = <ClassElement>[classElement];
1089 expect(unit.getType("${className}x"), isNull); 1093 expect(unit.getType("${className}x"), isNull);
1090 } 1094 }
1091 } 1095 }
1092 1096
1093 @reflectiveTest 1097 @reflectiveTest
1098 class ElementAnnotationImplTest extends ResolverTestCase {
1099 void test_computeConstantValue() {
1100 addNamedSource(
1101 '/a.dart',
1102 r'''
1103 class A {
1104 final String f;
1105 const A(this.f);
1106 }
1107 void f(@A('x') int p) {}
1108 ''');
1109 Source source = addSource(r'''
1110 import 'a.dart';
1111 main() {
1112 f(3);
1113 }
1114 ''');
1115 LibraryElement library = resolve2(source);
1116 CompilationUnit unit = resolveCompilationUnit(source, library);
1117 FunctionDeclaration main = unit.declarations[0];
1118 BlockFunctionBody body = main.functionExpression.body;
1119 ExpressionStatement statement = body.block.statements[0];
1120 MethodInvocation invocation = statement.expression;
1121 ParameterElement parameter =
1122 invocation.argumentList.arguments[0].bestParameterElement;
1123 ElementAnnotation annotation = parameter.metadata[0];
1124 expect(annotation.constantValue, isNull);
1125 DartObject value = annotation.computeConstantValue();
1126 expect(value, isNotNull);
1127 expect(value.getField('f').toStringValue(), 'x');
1128 expect(annotation.constantValue, value);
1129 }
1130 }
1131
1132 @reflectiveTest
1094 class ElementImplTest extends EngineTestCase { 1133 class ElementImplTest extends EngineTestCase {
1095 void test_equals() { 1134 void test_equals() {
1096 LibraryElementImpl library = 1135 LibraryElementImpl library =
1097 ElementFactory.library(createAnalysisContext(), "lib"); 1136 ElementFactory.library(createAnalysisContext(), "lib");
1098 ClassElementImpl classElement = ElementFactory.classElement2("C"); 1137 ClassElementImpl classElement = ElementFactory.classElement2("C");
1099 (library.definingCompilationUnit as CompilationUnitElementImpl).types = 1138 (library.definingCompilationUnit as CompilationUnitElementImpl).types =
1100 <ClassElement>[classElement]; 1139 <ClassElement>[classElement];
1101 FieldElement field = ElementFactory.fieldElement( 1140 FieldElement field = ElementFactory.fieldElement(
1102 "next", false, false, false, classElement.type); 1141 "next", false, false, false, classElement.type);
1103 classElement.fields = <FieldElement>[field]; 1142 classElement.fields = <FieldElement>[field];
(...skipping 3047 matching lines...) Expand 10 before | Expand all | Expand 10 after
4151 TestElementResynthesizer(AnalysisContext context, this.locationMap) 4190 TestElementResynthesizer(AnalysisContext context, this.locationMap)
4152 : super(context); 4191 : super(context);
4153 4192
4154 @override 4193 @override
4155 Element getElement(ElementLocation location) { 4194 Element getElement(ElementLocation location) {
4156 return locationMap[location]; 4195 return locationMap[location];
4157 } 4196 }
4158 } 4197 }
4159 4198
4160 @reflectiveTest 4199 @reflectiveTest
4200 class TopLevelVariableElementImplTest extends ResolverTestCase {
4201 void test_computeConstantValue() {
4202 addNamedSource(
4203 '/a.dart',
4204 r'''
4205 const int C = 42;
4206 ''');
4207 Source source = addSource(r'''
4208 import 'a.dart';
4209 main() {
4210 print(C);
4211 }
4212 ''');
4213 LibraryElement library = resolve2(source);
4214 CompilationUnit unit = resolveCompilationUnit(source, library);
4215 FunctionDeclaration main = unit.declarations[0];
4216 BlockFunctionBody body = main.functionExpression.body;
4217 ExpressionStatement statement = body.block.statements[0];
4218 MethodInvocation invocation = statement.expression;
4219 SimpleIdentifier argument = invocation.argumentList.arguments[0];
4220 PropertyAccessorElementImpl getter = argument.bestElement;
4221 TopLevelVariableElement constant = getter.variable;
4222 expect(constant.constantValue, isNull);
4223 DartObject value = constant.computeConstantValue();
4224 expect(value, isNotNull);
4225 expect(value.toIntValue(), 42);
4226 expect(constant.constantValue, value);
4227 }
4228 }
4229
4230 @reflectiveTest
4161 class TypeParameterTypeImplTest extends EngineTestCase { 4231 class TypeParameterTypeImplTest extends EngineTestCase {
4162 void test_creation() { 4232 void test_creation() {
4163 expect( 4233 expect(
4164 new TypeParameterTypeImpl( 4234 new TypeParameterTypeImpl(
4165 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))), 4235 new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"))),
4166 isNotNull); 4236 isNotNull);
4167 } 4237 }
4168 4238
4169 void test_getElement() { 4239 void test_getElement() {
4170 TypeParameterElementImpl element = 4240 TypeParameterElementImpl element =
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
4358 } 4428 }
4359 4429
4360 class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction 4430 class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction
4361 extends InterfaceTypeImpl { 4431 extends InterfaceTypeImpl {
4362 _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0) 4432 _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0)
4363 : super(arg0); 4433 : super(arg0);
4364 4434
4365 @override 4435 @override
4366 bool get isDartCoreFunction => true; 4436 bool get isDartCoreFunction => true;
4367 } 4437 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/member.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698