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

Unified Diff: pkg/analyzer/test/src/task/dart_test.dart

Issue 1137873003: Add a task for computing all constant values in a compilation unit. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« pkg/analyzer/lib/task/dart.dart ('K') | « pkg/analyzer/lib/task/dart.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/task/dart_test.dart
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 963da3d70d98383a2593405b1ae5cb5aa1bf8628..a2628ce567da7bc3d8a8ed928334c943959efce0 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -38,6 +38,7 @@ main() {
runReflectiveTests(ComputeConstantValueTaskTest);
runReflectiveTests(ContainingLibrariesTaskTest);
runReflectiveTests(DartErrorsTaskTest);
+ runReflectiveTests(EvaluateUnitConstantsTaskTest);
runReflectiveTests(GatherUsedImportedElementsTaskTest);
runReflectiveTests(GatherUsedLocalElementsTaskTest);
runReflectiveTests(GenerateHintsTaskTest);
@@ -160,6 +161,8 @@ class C = B with M;
@reflectiveTest
class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest {
+ Source source;
+
test_buildInputs() {
LibrarySpecificUnit target =
new LibrarySpecificUnit(emptySource, emptySource);
@@ -197,6 +200,35 @@ class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest {
expect(descriptor, isNotNull);
}
+ test_perform_find_constants() {
+ _performBuildTask('''
+const x = 1;
+class C {
+ static const y = 1;
+ const C([p = 1]);
+}
+@x
+f() {
+ const z = 1;
+}
+''');
+ CompilationUnit unit = outputs[RESOLVED_UNIT1];
+ CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT];
+ Annotation annotation = unit.declarations
+ .firstWhere((m) => m is FunctionDeclaration).metadata[0];
+ List<ConstantEvaluationTarget> expectedConstants = [
+ unitElement.accessors.firstWhere((e) => e.isGetter).variable,
+ unitElement.types[0].fields[0],
+ unitElement.functions[0].localVariables[0],
+ unitElement.types[0].constructors[0],
+ new ConstantEvaluationTarget_Annotation(
+ context, source, source, annotation),
+ unitElement.types[0].constructors[0].parameters[0]
+ ];
+ expect(
+ outputs[COMPILATION_UNIT_CONSTANTS].toSet(), expectedConstants.toSet());
+ }
+
test_perform_library() {
_performBuildTask(r'''
library lib;
@@ -206,13 +238,14 @@ part 'part.dart';
class A {}
class B = Object with A;
''');
- expect(outputs, hasLength(2));
+ expect(outputs, hasLength(3));
expect(outputs[COMPILATION_UNIT_ELEMENT], isNotNull);
expect(outputs[RESOLVED_UNIT1], isNotNull);
+ expect(outputs[COMPILATION_UNIT_CONSTANTS], isNotNull);
}
void _performBuildTask(String content) {
- Source source = newSource('/test.dart', content);
+ source = newSource('/test.dart', content);
AnalysisTarget target = new LibrarySpecificUnit(source, source);
_computeResult(target, RESOLVED_UNIT1);
expect(task, new isInstanceOf<BuildCompilationUnitElementTask>());
@@ -1514,6 +1547,33 @@ class DartErrorsTaskTest extends _AbstractDartTaskTest {
}
@reflectiveTest
+class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest {
+ test_perform() {
+ Source source = newSource('/test.dart', '''
+class C {
+ const C();
+}
+
+@x
+f() {}
+
+const x = const C();
+''');
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
+ _computeResult(target, CONSTANT_RESOLVED_UNIT);
+ expect(task, new isInstanceOf<EvaluateUnitConstantsTask>());
+ CompilationUnit unit = outputs[CONSTANT_RESOLVED_UNIT];
+ CompilationUnitElement unitElement = unit.element;
+ expect((unitElement.types[0].constructors[
+ 0] as ConstructorElementImpl).isCycleFree, isTrue);
+ expect((unitElement.functions[0].metadata[
+ 0] as ElementAnnotationImpl).evaluationResult, isNotNull);
+ expect((unitElement.topLevelVariables[
+ 0] as TopLevelVariableElementImpl).evaluationResult, isNotNull);
+ }
+}
+
+@reflectiveTest
class GatherUsedImportedElementsTaskTest extends _AbstractDartTaskTest {
UsedImportedElements usedElements;
Set<String> usedElementNames;
@@ -2061,27 +2121,17 @@ main(A a) {
''');
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
// prepare unit and "a.m()" invocation
- CompilationUnit unit;
- MethodInvocation invocation;
- {
- _computeResult(target, RESOLVED_UNIT1);
- unit = outputs[RESOLVED_UNIT1];
- // walk the AST
- FunctionDeclaration function = unit.declarations[1];
- BlockFunctionBody body = function.functionExpression.body;
- ExpressionStatement statement = body.block.statements[0];
- invocation = statement.expression;
- // not resolved yet
- expect(invocation.methodName.staticElement, isNull);
- }
- // fully resolve
- {
- _computeResult(target, RESOLVED_UNIT);
- expect(task, new isInstanceOf<ResolveReferencesTask>());
- expect(outputs[RESOLVED_UNIT], same(outputs[RESOLVED_UNIT]));
- // a.m() is resolved now
- expect(invocation.methodName.staticElement, isNotNull);
- }
+ _computeResult(target, RESOLVED_UNIT);
+ CompilationUnit unit = outputs[RESOLVED_UNIT];
+ // walk the AST
+ FunctionDeclaration function = unit.declarations[1];
+ BlockFunctionBody body = function.functionExpression.body;
+ ExpressionStatement statement = body.block.statements[0];
+ MethodInvocation invocation = statement.expression;
+ expect(task, new isInstanceOf<ResolveReferencesTask>());
+ expect(unit, same(outputs[RESOLVED_UNIT]));
+ // a.m() is resolved now
+ expect(invocation.methodName.staticElement, isNotNull);
}
test_perform_errors() {
« pkg/analyzer/lib/task/dart.dart ('K') | « pkg/analyzer/lib/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698