blob: a6688eb3a3371d548f7490bf27b33d14a6a214f4 [file]
// Copyright (c) 2017, 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/src/dart/analysis/defined_names.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../diagnostics/parser_diagnostics.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(DefinedNamesTest);
});
}
@reflectiveTest
class DefinedNamesTest extends ParserDiagnosticsTest {
test_classMemberNames_class() {
var names = _computeDefinedNames('''
class A {
int a, b;
A();
A.c();
d() {}
get e => null;
set f(_) {}
}
class B {
g() {}
}
''');
expect(names.topLevelNames, unorderedEquals(['A', 'B']));
expect(
names.classMemberNames,
unorderedEquals(['a', 'b', 'd', 'e', 'f', 'g']),
);
}
test_classMemberNames_class_primaryConstructor_named() {
var names = _computeDefinedNames('''
class A.named(final int a1, int a2, var a3);
''');
expect(names.topLevelNames, unorderedEquals(['A']));
expect(names.classMemberNames, unorderedEquals(['a1', 'a3']));
}
test_classMemberNames_class_primaryConstructor_unnamed() {
var names = _computeDefinedNames('''
class A(final int a1, int a2, var a3);
''');
expect(names.topLevelNames, unorderedEquals(['A']));
expect(names.classMemberNames, unorderedEquals(['a1', 'a3']));
}
test_classMemberNames_enum() {
var names = _computeDefinedNames('''
enum E {
v1, v2;
final int d = 0;
void e() {}
}
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, unorderedEquals(['v1', 'v2', 'd', 'e']));
}
test_classMemberNames_enum_empty() {
var names = _computeDefinedNames('''
enum E;
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, isEmpty);
}
test_classMemberNames_enum_primaryConstructor_named() {
var names = _computeDefinedNames('''
enum E.named(final int a1, int a2, var a3) {
v1.named(1, 2, 3), v2.named(4, 5, 6);
}
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, unorderedEquals(['v1', 'v2', 'a1', 'a3']));
}
test_classMemberNames_enum_primaryConstructor_unnamed() {
var names = _computeDefinedNames('''
enum E(final int a1, int a2, var a3) {
v1(1, 2, 3), v2(4, 5, 6);
}
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, unorderedEquals(['v1', 'v2', 'a1', 'a3']));
}
test_classMemberNames_extension() {
var names = _computeDefinedNames('''
extension E on int {
int a;
void b() {}
int get c => 0;
set d(int _) {}
}
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, unorderedEquals(['a', 'b', 'c', 'd']));
}
test_classMemberNames_extension_empty() {
var names = _computeDefinedNames('''
extension E on int;
''');
expect(names.topLevelNames, unorderedEquals(['E']));
expect(names.classMemberNames, isEmpty);
}
test_classMemberNames_extensionType_primaryConstructor_multipleFormalParameters() {
var names = _computeDefinedNames('''
extension type A(int it1, final int it2, int it3) {
void foo() {}
}
''');
expect(names.topLevelNames, unorderedEquals(['A']));
expect(names.classMemberNames, unorderedEquals(['it1', 'it2', 'foo']));
}
test_classMemberNames_extensionType_primaryConstructor_named() {
var names = _computeDefinedNames('''
extension type A.named(int it) {
int a, b;
A();
A.other();
void d() {}
int get e => 0;
set f(int _) {}
}
''');
expect(names.topLevelNames, unorderedEquals(['A']));
expect(
names.classMemberNames,
unorderedEquals(['it', 'a', 'b', 'd', 'e', 'f']),
);
}
test_classMemberNames_extensionType_primaryConstructor_unnamed() {
var names = _computeDefinedNames('''
extension type A(int it) {
void foo() {}
}
''');
expect(names.topLevelNames, unorderedEquals(['A']));
expect(names.classMemberNames, unorderedEquals(['it', 'foo']));
}
test_classMemberNames_mixin() {
var names = _computeDefinedNames('''
mixin A {
int a, b;
d() {}
get e => null;
set f(_) {}
}
mixin B {
g() {}
}
''');
expect(names.topLevelNames, unorderedEquals(['A', 'B']));
expect(
names.classMemberNames,
unorderedEquals(['a', 'b', 'd', 'e', 'f', 'g']),
);
}
test_classMemberNames_mixin_empty() {
var names = _computeDefinedNames('''
mixin M;
''');
expect(names.topLevelNames, unorderedEquals(['M']));
expect(names.classMemberNames, isEmpty);
}
test_topLevelNames() {
var names = _computeDefinedNames('''
class A {}
class B = Object with A;
typedef C();
D() {}
get E => null;
set F(_) {}
var G, H;
mixin M {}
''');
expect(
names.topLevelNames,
unorderedEquals(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'M']),
);
expect(names.classMemberNames, isEmpty);
}
DefinedNames _computeDefinedNames(String code) {
var parseResult = parseTestCodeWithDiagnostics(code);
var unit = parseResult.unit as CompilationUnitImpl;
return computeDefinedNames(unit);
}
}