| Index: pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
|
| diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
|
| index 7849b7592acf0916769feeaf3208565547d3a055..3b2c087b0e93c8b0fbb253b1023384de0cd735e9 100644
|
| --- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
|
| +++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
|
| @@ -12,6 +12,10 @@ import 'package:unittest/unittest.dart';
|
| import '../../reflective_tests.dart';
|
| import '../integration_tests.dart';
|
|
|
| +main() {
|
| + runReflectiveTests(Test);
|
| +}
|
| +
|
| /**
|
| * Results of a getTypeHierarchy request, processed for easier testing.
|
| */
|
| @@ -38,7 +42,7 @@ class HierarchyResults {
|
| */
|
| HierarchyResults(this.items) {
|
| pivot = items[0];
|
| - nameToIndex = <String, int> {};
|
| + nameToIndex = <String, int>{};
|
| for (int i = 0; i < items.length; i++) {
|
| nameToIndex[items[i].classElement.name] = i;
|
| }
|
| @@ -58,33 +62,27 @@ class HierarchyResults {
|
| }
|
|
|
| @ReflectiveTestCase()
|
| -class Test extends AbstractAnalysisServerIntegrationTest
|
| - {
|
| +class Test extends AbstractAnalysisServerIntegrationTest {
|
| /**
|
| * Pathname of the main file to run tests in.
|
| */
|
| String pathname;
|
|
|
| - test_getTypeHierarchy() {
|
| - pathname = sourcePath('test.dart');
|
| - // Write a dummy file which will be overridden by tests using
|
| - // [sendAnalysisUpdateContent].
|
| - writeFile(pathname, '// dummy');
|
| - standardAnalysisSetup();
|
| -
|
| - // Run all the getTypeHierarchy tests at once so that the server can take
|
| - // advantage of incremental analysis and the test doesn't time out.
|
| - List tests = [getTypeHierarchy_classElement, getTypeHierarchy_displayName,
|
| - getTypeHierarchy_memberElement, getTypeHierarchy_superclass,
|
| - getTypeHierarchy_interfaces, getTypeHierarchy_mixins,
|
| - getTypeHierarchy_subclasses, getTypeHierarchy_badTarget,
|
| - getTypeHierarchy_functionTarget];
|
| - return Future.forEach(tests, (test) => test());
|
| + Future getTypeHierarchy_badTarget() {
|
| + String text = r'''
|
| +main() {
|
| + if /* target */ (true) {
|
| + print('Hello');
|
| + }
|
| +}
|
| +''';
|
| + return typeHierarchyTest(text).then((HierarchyResults results) {
|
| + expect(results, isNull);
|
| + });
|
| }
|
|
|
| Future getTypeHierarchy_classElement() {
|
| - String text =
|
| - r'''
|
| + String text = r'''
|
| class Base {}
|
| class Pivot /* target */ extends Base {}
|
| class Derived extends Pivot {}
|
| @@ -99,8 +97,9 @@ class Derived extends Pivot {}
|
| expect(element.kind, equals(ElementKind.CLASS));
|
| expect(element.name, equals(name));
|
| if (name != 'Object') {
|
| - expect(element.location.offset, equals(text.indexOf(
|
| - 'class $name') + 'class '.length));
|
| + expect(
|
| + element.location.offset,
|
| + equals(text.indexOf('class $name') + 'class '.length));
|
| }
|
| }
|
| checkElement('Object');
|
| @@ -111,8 +110,7 @@ class Derived extends Pivot {}
|
| }
|
|
|
| Future getTypeHierarchy_displayName() {
|
| - String text =
|
| - r'''
|
| + String text = r'''
|
| class Base<T> {}
|
| class Pivot /* target */ extends Base<int> {}
|
| ''';
|
| @@ -124,9 +122,39 @@ class Pivot /* target */ extends Base<int> {}
|
| });
|
| }
|
|
|
| + Future getTypeHierarchy_functionTarget() {
|
| + String text = r'''
|
| +main /* target */ () {
|
| +}
|
| +''';
|
| + return typeHierarchyTest(text).then((HierarchyResults results) {
|
| + expect(results, isNull);
|
| + });
|
| + }
|
| +
|
| + Future getTypeHierarchy_interfaces() {
|
| + String text = r'''
|
| +class Interface1 {}
|
| +class Interface2 {}
|
| +class Pivot /* target */ implements Interface1, Interface2 {}
|
| +''';
|
| + return typeHierarchyTest(text).then((HierarchyResults results) {
|
| + expect(results.items, hasLength(4));
|
| + expect(results.pivot.interfaces, hasLength(2));
|
| + expect(
|
| + results.pivot.interfaces,
|
| + contains(results.nameToIndex['Interface1']));
|
| + expect(
|
| + results.pivot.interfaces,
|
| + contains(results.nameToIndex['Interface2']));
|
| + expect(results.getItem('Object').interfaces, isEmpty);
|
| + expect(results.getItem('Interface1').interfaces, isEmpty);
|
| + expect(results.getItem('Interface2').interfaces, isEmpty);
|
| + });
|
| + }
|
| +
|
| Future getTypeHierarchy_memberElement() {
|
| - String text =
|
| - r'''
|
| + String text = r'''
|
| class Base1 {
|
| void foo /* base1 */ ();
|
| }
|
| @@ -141,59 +169,22 @@ class Derived2 extends Derived1 {
|
| return typeHierarchyTest(text).then((HierarchyResults results) {
|
| expect(results.items, hasLength(6));
|
| expect(results.getItem('Object').memberElement, isNull);
|
| - expect(results.getItem('Base1').memberElement.location.offset,
|
| + expect(
|
| + results.getItem('Base1').memberElement.location.offset,
|
| equals(text.indexOf('foo /* base1 */')));
|
| expect(results.getItem('Base2').memberElement, isNull);
|
| - expect(results.getItem('Pivot').memberElement.location.offset,
|
| + expect(
|
| + results.getItem('Pivot').memberElement.location.offset,
|
| equals(text.indexOf('foo /* target */')));
|
| expect(results.getItem('Derived1').memberElement, isNull);
|
| - expect(results.getItem('Derived2').memberElement.location.offset,
|
| + expect(
|
| + results.getItem('Derived2').memberElement.location.offset,
|
| equals(text.indexOf('foo /* derived2 */')));
|
| });
|
| }
|
|
|
| - Future getTypeHierarchy_superclass() {
|
| - String text =
|
| - r'''
|
| -class Base1 {}
|
| -class Base2 extends Base1 {}
|
| -class Pivot /* target */ extends Base2 {}
|
| -''';
|
| - return typeHierarchyTest(text).then((HierarchyResults results) {
|
| - expect(results.items, hasLength(4));
|
| - expect(results.getItem('Object').superclass, isNull);
|
| - expect(results.getItem('Base1').superclass, equals(
|
| - results.nameToIndex['Object']));
|
| - expect(results.getItem('Base2').superclass, equals(
|
| - results.nameToIndex['Base1']));
|
| - expect(results.getItem('Pivot').superclass, equals(
|
| - results.nameToIndex['Base2']));
|
| - });
|
| - }
|
| -
|
| - Future getTypeHierarchy_interfaces() {
|
| - String text =
|
| - r'''
|
| -class Interface1 {}
|
| -class Interface2 {}
|
| -class Pivot /* target */ implements Interface1, Interface2 {}
|
| -''';
|
| - return typeHierarchyTest(text).then((HierarchyResults results) {
|
| - expect(results.items, hasLength(4));
|
| - expect(results.pivot.interfaces, hasLength(2));
|
| - expect(results.pivot.interfaces, contains(
|
| - results.nameToIndex['Interface1']));
|
| - expect(results.pivot.interfaces, contains(
|
| - results.nameToIndex['Interface2']));
|
| - expect(results.getItem('Object').interfaces, isEmpty);
|
| - expect(results.getItem('Interface1').interfaces, isEmpty);
|
| - expect(results.getItem('Interface2').interfaces, isEmpty);
|
| - });
|
| - }
|
| -
|
| Future getTypeHierarchy_mixins() {
|
| - String text =
|
| - r'''
|
| + String text = r'''
|
| class Base {}
|
| class Mixin1 {}
|
| class Mixin2 {}
|
| @@ -212,8 +203,7 @@ class Pivot /* target */ extends Base with Mixin1, Mixin2 {}
|
| }
|
|
|
| Future getTypeHierarchy_subclasses() {
|
| - String text =
|
| - r'''
|
| + String text = r'''
|
| class Base {}
|
| class Pivot /* target */ extends Base {}
|
| class Sub1 extends Pivot {}
|
| @@ -223,41 +213,59 @@ class Sub2a extends Sub2 {}
|
| return typeHierarchyTest(text).then((HierarchyResults results) {
|
| expect(results.items, hasLength(6));
|
| expect(results.pivot.subclasses, hasLength(2));
|
| - expect(results.pivot.subclasses, contains(results.nameToIndex['Sub1'])
|
| - );
|
| - expect(results.pivot.subclasses, contains(results.nameToIndex['Sub2'])
|
| - );
|
| + expect(results.pivot.subclasses, contains(results.nameToIndex['Sub1']));
|
| + expect(results.pivot.subclasses, contains(results.nameToIndex['Sub2']));
|
| expect(results.getItem('Object').subclasses, isEmpty);
|
| expect(results.getItem('Base').subclasses, isEmpty);
|
| expect(results.getItem('Sub1').subclasses, isEmpty);
|
| - expect(results.getItem('Sub2').subclasses, equals(
|
| - [results.nameToIndex['Sub2a']]));
|
| + expect(
|
| + results.getItem('Sub2').subclasses,
|
| + equals([results.nameToIndex['Sub2a']]));
|
| expect(results.getItem('Sub2a').subclasses, isEmpty);
|
| });
|
| }
|
|
|
| - Future getTypeHierarchy_badTarget() {
|
| - String text =
|
| - r'''
|
| -main() {
|
| - if /* target */ (true) {
|
| - print('Hello');
|
| - }
|
| -}
|
| + Future getTypeHierarchy_superclass() {
|
| + String text = r'''
|
| +class Base1 {}
|
| +class Base2 extends Base1 {}
|
| +class Pivot /* target */ extends Base2 {}
|
| ''';
|
| return typeHierarchyTest(text).then((HierarchyResults results) {
|
| - expect(results, isNull);
|
| + expect(results.items, hasLength(4));
|
| + expect(results.getItem('Object').superclass, isNull);
|
| + expect(
|
| + results.getItem('Base1').superclass,
|
| + equals(results.nameToIndex['Object']));
|
| + expect(
|
| + results.getItem('Base2').superclass,
|
| + equals(results.nameToIndex['Base1']));
|
| + expect(
|
| + results.getItem('Pivot').superclass,
|
| + equals(results.nameToIndex['Base2']));
|
| });
|
| }
|
|
|
| - Future getTypeHierarchy_functionTarget() {
|
| - String text = r'''
|
| -main /* target */ () {
|
| -}
|
| -''';
|
| - return typeHierarchyTest(text).then((HierarchyResults results) {
|
| - expect(results, isNull);
|
| - });
|
| + test_getTypeHierarchy() {
|
| + pathname = sourcePath('test.dart');
|
| + // Write a dummy file which will be overridden by tests using
|
| + // [sendAnalysisUpdateContent].
|
| + writeFile(pathname, '// dummy');
|
| + standardAnalysisSetup();
|
| +
|
| + // Run all the getTypeHierarchy tests at once so that the server can take
|
| + // advantage of incremental analysis and the test doesn't time out.
|
| + List tests = [
|
| + getTypeHierarchy_classElement,
|
| + getTypeHierarchy_displayName,
|
| + getTypeHierarchy_memberElement,
|
| + getTypeHierarchy_superclass,
|
| + getTypeHierarchy_interfaces,
|
| + getTypeHierarchy_mixins,
|
| + getTypeHierarchy_subclasses,
|
| + getTypeHierarchy_badTarget,
|
| + getTypeHierarchy_functionTarget];
|
| + return Future.forEach(tests, (test) => test());
|
| }
|
|
|
| Future<HierarchyResults> typeHierarchyTest(String text) {
|
| @@ -265,8 +273,8 @@ main /* target */ () {
|
| sendAnalysisUpdateContent({
|
| pathname: new AddContentOverlay(text)
|
| });
|
| - return analysisFinished.then((_) => sendSearchGetTypeHierarchy(pathname,
|
| - offset)).then((result) {
|
| + return analysisFinished.then(
|
| + (_) => sendSearchGetTypeHierarchy(pathname, offset)).then((result) {
|
| if (result.hierarchyItems == null) {
|
| return null;
|
| } else {
|
| @@ -275,7 +283,3 @@ main /* target */ () {
|
| });
|
| }
|
| }
|
| -
|
| -main() {
|
| - runReflectiveTests(Test);
|
| -}
|
|
|