| Index: pkg/analyzer/test/src/task/strong_mode_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong_mode_test.dart b/pkg/analyzer/test/src/task/strong_mode_test.dart
|
| index 56637929b23bd3280793d9b2a49df42230e9b3f2..4459800a19aecc7fe67ae76f978172aa727edce3 100644
|
| --- a/pkg/analyzer/test/src/task/strong_mode_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong_mode_test.dart
|
| @@ -7,6 +7,8 @@ library test.src.task.strong_mode_test;
|
| import 'package:analyzer/src/generated/ast.dart';
|
| import 'package:analyzer/src/generated/element.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| +import 'package:analyzer/src/generated/testing/element_factory.dart';
|
| +import 'package:analyzer/src/task/dart.dart';
|
| import 'package:analyzer/src/task/strong_mode.dart';
|
| import 'package:analyzer/task/dart.dart';
|
| import 'package:unittest/unittest.dart';
|
| @@ -19,6 +21,7 @@ main() {
|
| initializeTestEnvironment();
|
| runReflectiveTests(InferrenceFinderTest);
|
| runReflectiveTests(InstanceMemberInferrerTest);
|
| + runReflectiveTests(VariableGathererTest);
|
| }
|
|
|
| @reflectiveTest
|
| @@ -37,8 +40,10 @@ class InferrenceFinderTest extends AbstractContextTest {
|
| const c = 1;
|
| final f = '';
|
| var v = const A();
|
| +int i;
|
| class A {
|
| static final fa = 0;
|
| + static int fi;
|
| const A();
|
| }
|
| class B extends A {
|
| @@ -51,8 +56,10 @@ class B extends A {
|
| class C = Object with A;
|
| typedef int F(int x);
|
| ''');
|
| - computeResult(source, PARSED_UNIT);
|
| - CompilationUnit unit = outputs[PARSED_UNIT];
|
| + LibrarySpecificUnit librarySpecificUnit =
|
| + new LibrarySpecificUnit(source, source);
|
| + computeResult(librarySpecificUnit, RESOLVED_UNIT5);
|
| + CompilationUnit unit = outputs[RESOLVED_UNIT5];
|
| InferrenceFinder finder = new InferrenceFinder();
|
| unit.accept(finder);
|
| expect(finder.classes, hasLength(3));
|
| @@ -877,3 +884,72 @@ class B<E> extends A<E> {
|
| expect(methodB.returnType, classB.typeParameters[0].type);
|
| }
|
| }
|
| +
|
| +@reflectiveTest
|
| +class VariableGathererTest extends AbstractContextTest {
|
| + void test_creation_withFilter() {
|
| + VariableFilter filter = (variable) => true;
|
| + VariableGatherer gatherer = new VariableGatherer(filter);
|
| + expect(gatherer, isNotNull);
|
| + expect(gatherer.filter, filter);
|
| + }
|
| +
|
| + void test_creation_withoutFilter() {
|
| + VariableGatherer gatherer = new VariableGatherer();
|
| + expect(gatherer, isNotNull);
|
| + expect(gatherer.filter, isNull);
|
| + }
|
| +
|
| + void test_visit_noReferences() {
|
| + Source source = addSource(
|
| + '/test.dart',
|
| + '''
|
| +library lib;
|
| +import 'dart:math';
|
| +int zero = 0;
|
| +class C {
|
| + void m() => null;
|
| +}
|
| +typedef void F();
|
| +''');
|
| + CompilationUnit unit = context.resolveCompilationUnit2(source, source);
|
| + VariableGatherer gatherer = new VariableGatherer();
|
| + unit.accept(gatherer);
|
| + expect(gatherer.results, hasLength(0));
|
| + }
|
| +
|
| + void test_visit_withFilter() {
|
| + VariableFilter filter = (VariableElement variable) => variable.isStatic;
|
| + expect(_gather(filter), hasLength(1));
|
| + }
|
| +
|
| + void test_visit_withoutFilter() {
|
| + expect(_gather(), hasLength(4));
|
| + }
|
| +
|
| + Set<VariableElement> _gather([VariableFilter filter = null]) {
|
| + Source source = addSource(
|
| + '/test.dart',
|
| + '''
|
| +const int zero = 0;
|
| +class Counter {
|
| + int value = zero;
|
| + void inc() {
|
| + value++;
|
| + }
|
| + void dec() {
|
| + value = value - 1;
|
| + }
|
| + void fromZero(f(int index)) {
|
| + for (int i = zero; i < value; i++) {
|
| + f(i);
|
| + }
|
| + }
|
| +}
|
| +''');
|
| + CompilationUnit unit = context.resolveCompilationUnit2(source, source);
|
| + VariableGatherer gatherer = new VariableGatherer(filter);
|
| + unit.accept(gatherer);
|
| + return gatherer.results;
|
| + }
|
| +}
|
|
|