| Index: pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
|
| diff --git a/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart b/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ee43d8d3020a358d89797799c0881c5b68744b48
|
| --- /dev/null
|
| +++ b/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
|
| @@ -0,0 +1,390 @@
|
| +// Copyright (c) 2016, 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:analyzer/dart/ast/ast.dart';
|
| +import 'package:analyzer/src/dart/analysis/referenced_names.dart';
|
| +import 'package:test/test.dart';
|
| +import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| +
|
| +import '../../../generated/parser_test.dart';
|
| +
|
| +main() {
|
| + defineReflectiveSuite(() {
|
| + defineReflectiveTests(ReferencedNamesBuilderTest);
|
| + });
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class ReferencedNamesBuilderTest {
|
| + test_class_constructor() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + U.named(A a, B b) {
|
| + C c = null;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_class_field() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + A f = new B();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_class_getter() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + A get a => new B();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_class_members() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + int a;
|
| + int get b;
|
| + set c(_) {}
|
| + m(D d) {
|
| + a;
|
| + b;
|
| + c = 1;
|
| + m();
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['int', 'D']));
|
| + }
|
| +
|
| + test_class_members_dontHideQualified() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + int a;
|
| + int get b;
|
| + set c(_) {}
|
| + m(D d) {
|
| + d.a;
|
| + d.b;
|
| + d.c;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['int', 'D', 'a', 'b', 'c']));
|
| + }
|
| +
|
| + test_class_method() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + A m(B p) {
|
| + C v = 0;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_class_method_localVariables() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + A m() {
|
| + B b = null;
|
| + b;
|
| + {
|
| + C c = null;
|
| + b;
|
| + c;
|
| + }
|
| + d;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'd']));
|
| + }
|
| +
|
| + test_class_method_parameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + m(A a) {
|
| + a;
|
| + b;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'b']));
|
| + }
|
| +
|
| + test_class_method_typeParameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + A m<T>(B b, T t) {
|
| + C c = 0;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_class_setter() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + set a(A a) {
|
| + B b = null;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_class_typeParameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U<T> {
|
| + T f = new A<T>();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A']));
|
| + }
|
| +
|
| + test_instantiatedNames_importPrefix() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +import 'a.dart' as p1;
|
| +import 'b.dart' as p2;
|
| +main() {
|
| + new p1.A();
|
| + new p1.A.c1();
|
| + new p1.B();
|
| + new p2.C();
|
| + new D();
|
| + new D.c2();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'D', 'c1', 'c2']));
|
| + }
|
| +
|
| + test_localFunction() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +f(A a) {
|
| + g(B b) {}
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_superToSubs_importPrefix() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +import 'a.dart' as p1;
|
| +import 'b.dart' as p2;
|
| +class U extends p1.A with p2.B implements p2.C {}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_topLevelVariable() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A v = new B(c);
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'c']));
|
| + }
|
| +
|
| + test_topLevelVariable_multiple() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A v1 = new B(c), v2 = new D<E>(f);
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'c', 'D', 'E', 'f']));
|
| + }
|
| +
|
| + test_unit_classTypeAlias() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U = A with B implements C;
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_unit_classTypeAlias_typeParameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U<T1, T2 extends D> = A<T1> with B<T2> implements C<T1, T2>;
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'D']));
|
| + }
|
| +
|
| + test_unit_function() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f(B b) {
|
| + C c = 0;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_unit_function_doc() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +/**
|
| + * Documentation [C.d] reference.
|
| + */
|
| +A f(B b) {}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'd']));
|
| + }
|
| +
|
| + test_unit_function_dontHideQualified() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class U {
|
| + int a;
|
| + int get b;
|
| + set c(_) {}
|
| + m(D d) {
|
| + d.a;
|
| + d.b;
|
| + d.c;
|
| + }
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['int', 'D', 'a', 'b', 'c']));
|
| + }
|
| +
|
| + test_unit_function_localFunction_parameter() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f() {
|
| + B g(x) {
|
| + x;
|
| + return null;
|
| + }
|
| + return null;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_unit_function_localFunctions() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f() {
|
| + B b = null;
|
| + C g() {}
|
| + g();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_unit_function_localsDontHideQualified() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +f(A a, B b) {
|
| + var v = 0;
|
| + a.v;
|
| + a.b;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'v', 'b']));
|
| + }
|
| +
|
| + test_unit_function_localVariables() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f() {
|
| + B b = null;
|
| + b;
|
| + {
|
| + C c = null;
|
| + b;
|
| + c;
|
| + }
|
| + d;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'd']));
|
| + }
|
| +
|
| + test_unit_function_parameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f(B b) {
|
| + C c = 0;
|
| + b;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_unit_function_parameters_dontHideQualified() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +f(x, C g()) {
|
| + g().x;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['C', 'x']));
|
| + }
|
| +
|
| + test_unit_function_typeParameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A f<T>(B b, T t) {
|
| + C c = 0;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + test_unit_functionTypeAlias() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +typedef A F(B B, C c(D d));
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C', 'D']));
|
| + }
|
| +
|
| + test_unit_functionTypeAlias_typeParameters() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +typedef A F<T>(B b, T t);
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_unit_getter() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +A get aaa {
|
| + return new B();
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_unit_setter() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +set aaa(A a) {
|
| + B b = null;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B']));
|
| + }
|
| +
|
| + test_unit_topLevelDeclarations() {
|
| + Set<String> names = _computeReferencedNames('''
|
| +class L1 {}
|
| +class L2 = A with B implements C;
|
| +A L3() => null;
|
| +typedef A L4(B b);
|
| +A get L5 => null;
|
| +set L6(_) {}
|
| +A L7, L8;
|
| +main() {
|
| + L1;
|
| + L2;
|
| + L3;
|
| + L4;
|
| + L5;
|
| + L6;
|
| + L7;
|
| + L8;
|
| +}
|
| +''');
|
| + expect(names, unorderedEquals(['A', 'B', 'C']));
|
| + }
|
| +
|
| + Set<String> _computeReferencedNames(String code) {
|
| + CompilationUnit unit =
|
| + ParserTestCase.parseCompilationUnit2(code, parseGenericMethods: true);
|
| + return computeReferencedNames(unit);
|
| + }
|
| +}
|
|
|