| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.services.src.search.hierarchy; | 5 library test.services.src.search.hierarchy; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/services/index/index.dart'; | 9 import 'package:analysis_server/src/services/index/index.dart'; |
| 10 import 'package:analysis_server/src/services/index/local_memory_index.dart'; | 10 import 'package:analysis_server/src/services/index/local_memory_index.dart'; |
| 11 import 'package:analysis_server/src/services/search/hierarchy.dart'; | 11 import 'package:analysis_server/src/services/search/hierarchy.dart'; |
| 12 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; | 12 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; |
| 13 import 'package:analyzer/src/generated/element.dart'; |
| 14 import 'package:unittest/unittest.dart'; |
| 15 |
| 13 import '../../abstract_single_unit.dart'; | 16 import '../../abstract_single_unit.dart'; |
| 14 import '../../reflective_tests.dart'; | 17 import '../../reflective_tests.dart'; |
| 15 import 'package:analyzer/src/generated/element.dart'; | |
| 16 import 'package:unittest/unittest.dart'; | |
| 17 | 18 |
| 18 | 19 |
| 19 main() { | 20 main() { |
| 20 groupSep = ' | '; | 21 groupSep = ' | '; |
| 21 runReflectiveTests(HierarchyTest); | 22 runReflectiveTests(HierarchyTest); |
| 22 } | 23 } |
| 23 | 24 |
| 24 | 25 |
| 25 @ReflectiveTestCase() | 26 @ReflectiveTestCase() |
| 26 class HierarchyTest extends AbstractSingleUnitTest { | 27 class HierarchyTest extends AbstractSingleUnitTest { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 A() {} | 66 A() {} |
| 66 } | 67 } |
| 67 class B extends A { | 68 class B extends A { |
| 68 B() {} | 69 B() {} |
| 69 } | 70 } |
| 70 '''); | 71 '''); |
| 71 ClassElement classA = findElement("A"); | 72 ClassElement classA = findElement("A"); |
| 72 ClassElement classB = findElement("B"); | 73 ClassElement classB = findElement("B"); |
| 73 ClassMemberElement memberA = classA.constructors[0]; | 74 ClassMemberElement memberA = classA.constructors[0]; |
| 74 ClassMemberElement memberB = classB.constructors[0]; | 75 ClassMemberElement memberB = classB.constructors[0]; |
| 75 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 76 var futureA = |
| 77 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
| 76 expect(members, unorderedEquals([memberA])); | 78 expect(members, unorderedEquals([memberA])); |
| 77 }); | 79 }); |
| 78 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 80 var futureB = |
| 81 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
| 79 expect(members, unorderedEquals([memberB])); | 82 expect(members, unorderedEquals([memberB])); |
| 80 }); | 83 }); |
| 81 return Future.wait([futureA, futureB]); | 84 return Future.wait([futureA, futureB]); |
| 82 } | 85 } |
| 83 | 86 |
| 84 Future test_getHierarchyMembers_fields() { | 87 Future test_getHierarchyMembers_fields() { |
| 85 _indexTestUnit(''' | 88 _indexTestUnit(''' |
| 86 class A { | 89 class A { |
| 87 int foo; | 90 int foo; |
| 88 } | 91 } |
| 89 class B extends A { | 92 class B extends A { |
| 90 get foo => null; | 93 get foo => null; |
| 91 } | 94 } |
| 92 class C extends B { | 95 class C extends B { |
| 93 set foo(x) {} | 96 set foo(x) {} |
| 94 } | 97 } |
| 95 class D { | 98 class D { |
| 96 int foo; | 99 int foo; |
| 97 } | 100 } |
| 98 '''); | 101 '''); |
| 99 ClassElement classA = findElement("A"); | 102 ClassElement classA = findElement("A"); |
| 100 ClassElement classB = findElement("B"); | 103 ClassElement classB = findElement("B"); |
| 101 ClassElement classC = findElement("C"); | 104 ClassElement classC = findElement("C"); |
| 102 ClassElement classD = findElement("D"); | 105 ClassElement classD = findElement("D"); |
| 103 ClassElement classE = findElement("E"); | 106 ClassElement classE = findElement("E"); |
| 104 ClassMemberElement memberA = classA.fields[0]; | 107 ClassMemberElement memberA = classA.fields[0]; |
| 105 ClassMemberElement memberB = classB.fields[0]; | 108 ClassMemberElement memberB = classB.fields[0]; |
| 106 ClassMemberElement memberC = classC.fields[0]; | 109 ClassMemberElement memberC = classC.fields[0]; |
| 107 ClassMemberElement memberD = classD.fields[0]; | 110 ClassMemberElement memberD = classD.fields[0]; |
| 108 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 111 var futureA = |
| 112 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
| 109 expect(members, unorderedEquals([memberA, memberB, memberC])); | 113 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 110 }); | 114 }); |
| 111 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 115 var futureB = |
| 116 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
| 112 expect(members, unorderedEquals([memberA, memberB, memberC])); | 117 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 113 }); | 118 }); |
| 114 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { | 119 var futureC = |
| 120 getHierarchyMembers(searchEngine, memberC, false).then((members) { |
| 115 expect(members, unorderedEquals([memberA, memberB, memberC])); | 121 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 116 }); | 122 }); |
| 117 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 123 var futureD = |
| 124 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
| 118 expect(members, unorderedEquals([memberD])); | 125 expect(members, unorderedEquals([memberD])); |
| 119 }); | 126 }); |
| 120 return Future.wait([futureA, futureB, futureC, futureD]); | 127 return Future.wait([futureA, futureB, futureC, futureD]); |
| 121 } | 128 } |
| 122 | 129 |
| 123 Future test_getHierarchyMembers_methods() { | 130 Future test_getHierarchyMembers_methods() { |
| 124 _indexTestUnit(''' | 131 _indexTestUnit(''' |
| 125 class A { | 132 class A { |
| 126 foo() {} | 133 foo() {} |
| 127 } | 134 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 141 ClassElement classA = findElement("A"); | 148 ClassElement classA = findElement("A"); |
| 142 ClassElement classB = findElement("B"); | 149 ClassElement classB = findElement("B"); |
| 143 ClassElement classC = findElement("C"); | 150 ClassElement classC = findElement("C"); |
| 144 ClassElement classD = findElement("D"); | 151 ClassElement classD = findElement("D"); |
| 145 ClassElement classE = findElement("E"); | 152 ClassElement classE = findElement("E"); |
| 146 ClassMemberElement memberA = classA.methods[0]; | 153 ClassMemberElement memberA = classA.methods[0]; |
| 147 ClassMemberElement memberB = classB.methods[0]; | 154 ClassMemberElement memberB = classB.methods[0]; |
| 148 ClassMemberElement memberC = classC.methods[0]; | 155 ClassMemberElement memberC = classC.methods[0]; |
| 149 ClassMemberElement memberD = classD.methods[0]; | 156 ClassMemberElement memberD = classD.methods[0]; |
| 150 ClassMemberElement memberE = classE.methods[0]; | 157 ClassMemberElement memberE = classE.methods[0]; |
| 151 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 158 var futureA = |
| 159 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
| 152 expect(members, unorderedEquals([memberA, memberB, memberC])); | 160 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 153 }); | 161 }); |
| 154 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 162 var futureB = |
| 163 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
| 155 expect(members, unorderedEquals([memberA, memberB, memberC])); | 164 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 156 }); | 165 }); |
| 157 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { | 166 var futureC = |
| 167 getHierarchyMembers(searchEngine, memberC, false).then((members) { |
| 158 expect(members, unorderedEquals([memberA, memberB, memberC])); | 168 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 159 }); | 169 }); |
| 160 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 170 var futureD = |
| 171 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
| 161 expect(members, unorderedEquals([memberD, memberE])); | 172 expect(members, unorderedEquals([memberD, memberE])); |
| 162 }); | 173 }); |
| 163 var futureE = getHierarchyMembers(searchEngine, memberE).then((members) { | 174 var futureE = |
| 175 getHierarchyMembers(searchEngine, memberE, false).then((members) { |
| 164 expect(members, unorderedEquals([memberD, memberE])); | 176 expect(members, unorderedEquals([memberD, memberE])); |
| 165 }); | 177 }); |
| 166 return Future.wait([futureA, futureB, futureC, futureD, futureE]); | 178 return Future.wait([futureA, futureB, futureC, futureD, futureE]); |
| 167 } | 179 } |
| 168 | 180 |
| 181 Future test_getHierarchyMembers_methods_onlySuper() { |
| 182 _indexTestUnit(''' |
| 183 class A { |
| 184 foo() {} |
| 185 } |
| 186 class B extends A { |
| 187 foo() {} |
| 188 } |
| 189 class C extends B { |
| 190 foo() {} |
| 191 } |
| 192 '''); |
| 193 ClassElement classA = findElement("A"); |
| 194 ClassElement classB = findElement("B"); |
| 195 ClassElement classC = findElement("C"); |
| 196 ClassMemberElement memberA = classA.methods[0]; |
| 197 ClassMemberElement memberB = classB.methods[0]; |
| 198 ClassMemberElement memberC = classC.methods[0]; |
| 199 var futureA = |
| 200 getHierarchyMembers(searchEngine, memberA, true).then((members) { |
| 201 expect(members, unorderedEquals([memberA])); |
| 202 }); |
| 203 var futureB = |
| 204 getHierarchyMembers(searchEngine, memberB, true).then((members) { |
| 205 expect(members, unorderedEquals([memberA, memberB])); |
| 206 }); |
| 207 var futureC = |
| 208 getHierarchyMembers(searchEngine, memberC, true).then((members) { |
| 209 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 210 }); |
| 211 return Future.wait([futureA, futureB, futureC]); |
| 212 } |
| 213 |
| 169 Future test_getHierarchyMembers_withInterfaces() { | 214 Future test_getHierarchyMembers_withInterfaces() { |
| 170 _indexTestUnit(''' | 215 _indexTestUnit(''' |
| 171 class A { | 216 class A { |
| 172 foo() {} | 217 foo() {} |
| 173 } | 218 } |
| 174 class B implements A { | 219 class B implements A { |
| 175 foo() {} | 220 foo() {} |
| 176 } | 221 } |
| 177 abstract class C implements A { | 222 abstract class C implements A { |
| 178 } | 223 } |
| 179 class D extends C { | 224 class D extends C { |
| 180 foo() {} | 225 foo() {} |
| 181 } | 226 } |
| 182 class E { | 227 class E { |
| 183 foo() {} | 228 foo() {} |
| 184 } | 229 } |
| 185 '''); | 230 '''); |
| 186 ClassElement classA = findElement("A"); | 231 ClassElement classA = findElement("A"); |
| 187 ClassElement classB = findElement("B"); | 232 ClassElement classB = findElement("B"); |
| 188 ClassElement classC = findElement("C"); | 233 ClassElement classC = findElement("C"); |
| 189 ClassElement classD = findElement("D"); | 234 ClassElement classD = findElement("D"); |
| 190 ClassElement classE = findElement("E"); | 235 ClassElement classE = findElement("E"); |
| 191 ClassMemberElement memberA = classA.methods[0]; | 236 ClassMemberElement memberA = classA.methods[0]; |
| 192 ClassMemberElement memberB = classB.methods[0]; | 237 ClassMemberElement memberB = classB.methods[0]; |
| 193 ClassMemberElement memberD = classD.methods[0]; | 238 ClassMemberElement memberD = classD.methods[0]; |
| 194 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 239 var futureA = |
| 240 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
| 195 expect(members, unorderedEquals([memberA, memberB, memberD])); | 241 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 196 }); | 242 }); |
| 197 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 243 var futureB = |
| 244 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
| 198 expect(members, unorderedEquals([memberA, memberB, memberD])); | 245 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 199 }); | 246 }); |
| 200 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 247 var futureD = |
| 248 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
| 201 expect(members, unorderedEquals([memberA, memberB, memberD])); | 249 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 202 }); | 250 }); |
| 203 return Future.wait([futureA, futureB, futureD]); | 251 return Future.wait([futureA, futureB, futureD]); |
| 204 } | 252 } |
| 205 | 253 |
| 206 void test_getMembers() { | 254 void test_getMembers() { |
| 207 _indexTestUnit(''' | 255 _indexTestUnit(''' |
| 208 class A { | 256 class A { |
| 209 A() {} | 257 A() {} |
| 210 var ma1; | 258 var ma1; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 Set<ClassElement> supers = getSuperClasses(classF); | 361 Set<ClassElement> supers = getSuperClasses(classF); |
| 314 expect(supers, unorderedEquals([objectElement, classA])); | 362 expect(supers, unorderedEquals([objectElement, classA])); |
| 315 } | 363 } |
| 316 } | 364 } |
| 317 | 365 |
| 318 void _indexTestUnit(String code) { | 366 void _indexTestUnit(String code) { |
| 319 resolveTestUnit(code); | 367 resolveTestUnit(code); |
| 320 index.indexUnit(context, testUnit); | 368 index.indexUnit(context, testUnit); |
| 321 } | 369 } |
| 322 } | 370 } |
| OLD | NEW |