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

Unified Diff: pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart

Issue 2519443003: Compute names referenced in a unit. (Closed)
Patch Set: Fix for top-level declarations, more tests. Created 4 years, 1 month 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
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);
+ }
+}
« no previous file with comments | « pkg/analyzer/lib/src/dart/analysis/referenced_names.dart ('k') | pkg/analyzer/test/src/dart/analysis/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698