| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library test.search.member_declarations; |
| 6 |
| 7 import 'dart:async'; |
| 8 |
| 9 import 'package:analysis_server/src/computer/element.dart'; |
| 10 import 'package:analysis_server/src/constants.dart'; |
| 11 import 'package:analysis_server/src/protocol.dart'; |
| 12 import 'package:analysis_server/src/search/search_result.dart'; |
| 13 import 'package:analysis_testing/reflective_tests.dart'; |
| 14 import 'package:unittest/unittest.dart'; |
| 15 |
| 16 import 'abstract_search_domain.dart'; |
| 17 |
| 18 |
| 19 main() { |
| 20 groupSep = ' | '; |
| 21 group('findMemberDeclarations', () { |
| 22 runReflectiveTests(MemberDeclarationsTest); |
| 23 }); |
| 24 } |
| 25 |
| 26 |
| 27 @ReflectiveTestCase() |
| 28 class MemberDeclarationsTest extends AbstractSearchDomainTest { |
| 29 void assertHasDeclaration(ElementKind kind, String className) { |
| 30 result = findTopLevelResult(kind, className); |
| 31 if (result == null) { |
| 32 fail('Not found: kind=$kind in="$className"\nin\n' + results.join('\n')); |
| 33 } |
| 34 } |
| 35 |
| 36 void assertNoDeclaration(ElementKind kind, String className) { |
| 37 result = findTopLevelResult(kind, className); |
| 38 if (result != null) { |
| 39 fail('Unexpected: kind=$kind in="$className"\nin\n' + results.join('\n')); |
| 40 } |
| 41 } |
| 42 |
| 43 Future findMemberDeclarations(String name) { |
| 44 return waitForTasksFinished().then((_) { |
| 45 Request request = new Request('0', SEARCH_FIND_MEMBER_DECLARATIONS); |
| 46 request.setParameter(NAME, name); |
| 47 Response response = handleSuccessfulRequest(request); |
| 48 searchId = response.getResult(ID); |
| 49 results.clear(); |
| 50 return waitForSearchResults(); |
| 51 }); |
| 52 } |
| 53 |
| 54 SearchResult findTopLevelResult(ElementKind kind, String enclosingClass) { |
| 55 for (SearchResult result in results) { |
| 56 Element element = result.path[0]; |
| 57 Element clazz = result.path[1]; |
| 58 if (element.kind == kind && clazz.name == enclosingClass) { |
| 59 return result; |
| 60 } |
| 61 } |
| 62 return null; |
| 63 } |
| 64 |
| 65 test_methodField() { |
| 66 addTestFile(''' |
| 67 class A { |
| 68 foo() {} |
| 69 bar() {} |
| 70 } |
| 71 class B { |
| 72 int foo; |
| 73 } |
| 74 '''); |
| 75 return findMemberDeclarations('foo').then((_) { |
| 76 expect(results, hasLength(2)); |
| 77 assertHasDeclaration(ElementKind.METHOD, 'A'); |
| 78 assertHasDeclaration(ElementKind.FIELD, 'B'); |
| 79 }); |
| 80 } |
| 81 |
| 82 test_methodGetter() { |
| 83 addTestFile(''' |
| 84 class A { |
| 85 foo() {} |
| 86 bar() {} |
| 87 } |
| 88 class B { |
| 89 get foo => null; |
| 90 } |
| 91 '''); |
| 92 return findMemberDeclarations('foo').then((_) { |
| 93 expect(results, hasLength(2)); |
| 94 assertHasDeclaration(ElementKind.METHOD, 'A'); |
| 95 assertHasDeclaration(ElementKind.GETTER, 'B'); |
| 96 }); |
| 97 } |
| 98 |
| 99 test_methodGetterSetter() { |
| 100 addTestFile(''' |
| 101 class A { |
| 102 foo() {} |
| 103 bar() {} |
| 104 } |
| 105 class B { |
| 106 get foo => null; |
| 107 set foo(x) {} |
| 108 } |
| 109 '''); |
| 110 return findMemberDeclarations('foo').then((_) { |
| 111 expect(results, hasLength(3)); |
| 112 assertHasDeclaration(ElementKind.METHOD, 'A'); |
| 113 assertHasDeclaration(ElementKind.GETTER, 'B'); |
| 114 assertHasDeclaration(ElementKind.SETTER, 'B'); |
| 115 }); |
| 116 } |
| 117 |
| 118 test_methodMethod() { |
| 119 addTestFile(''' |
| 120 class A { |
| 121 foo() {} |
| 122 bar() {} |
| 123 } |
| 124 class B { |
| 125 foo() {} |
| 126 } |
| 127 '''); |
| 128 return findMemberDeclarations('foo').then((_) { |
| 129 expect(results, hasLength(2)); |
| 130 assertHasDeclaration(ElementKind.METHOD, 'A'); |
| 131 assertHasDeclaration(ElementKind.METHOD, 'B'); |
| 132 }); |
| 133 } |
| 134 |
| 135 test_methodSetter() { |
| 136 addTestFile(''' |
| 137 class A { |
| 138 foo() {} |
| 139 bar() {} |
| 140 } |
| 141 class B { |
| 142 set foo(x) {} |
| 143 } |
| 144 '''); |
| 145 return findMemberDeclarations('foo').then((_) { |
| 146 expect(results, hasLength(2)); |
| 147 assertHasDeclaration(ElementKind.METHOD, 'A'); |
| 148 assertHasDeclaration(ElementKind.SETTER, 'B'); |
| 149 }); |
| 150 } |
| 151 } |
| OLD | NEW |