| 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 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. |
| 7 |
| 8 library services.src.search.hierarchy_test; |
| 9 |
| 10 import 'dart:async'; |
| 11 |
| 12 import 'package:analysis_services/index/index.dart'; |
| 13 import 'package:analysis_services/index/local_memory_index.dart'; |
| 14 import 'package:analysis_services/search/hierarchy.dart'; |
| 15 import 'package:analysis_services/search/search_engine.dart'; |
| 16 import 'package:analysis_services/src/search/search_engine.dart'; |
| 17 import 'package:analysis_testing/mocks.dart'; |
| 18 import 'package:analysis_testing/reflective_tests.dart'; |
| 19 import 'package:analyzer/src/generated/element.dart'; |
| 20 import 'package:analyzer/src/generated/source.dart'; |
| 21 import 'package:typed_mock/typed_mock.dart'; |
| 22 import 'package:unittest/unittest.dart'; |
| 23 |
| 24 import '../index/abstract_single_unit.dart'; |
| 25 |
| 26 |
| 27 main() { |
| 28 groupSep = ' | '; |
| 29 group('HierarchyTest', () { |
| 30 runReflectiveTests(HierarchyTest); |
| 31 }); |
| 32 } |
| 33 |
| 34 |
| 35 @ReflectiveTestCase() |
| 36 class HierarchyTest extends AbstractSingleUnitTest { |
| 37 Index index; |
| 38 SearchEngineImpl searchEngine; |
| 39 |
| 40 void setUp() { |
| 41 super.setUp(); |
| 42 index = createLocalMemoryIndex(); |
| 43 searchEngine = new SearchEngineImpl(index); |
| 44 } |
| 45 |
| 46 void test_getDirectMembers() { |
| 47 _indexTestUnit(''' |
| 48 class A { |
| 49 A() {} |
| 50 var ma1; |
| 51 ma2() {} |
| 52 } |
| 53 class B extends A { |
| 54 B() {} |
| 55 B.named() {} |
| 56 var mb1; |
| 57 mb2() {} |
| 58 } |
| 59 '''); |
| 60 { |
| 61 ClassElement classA = findElement('A'); |
| 62 List<Element> members = getClassMembers(classA); |
| 63 expect(members.map((e) => e.name), unorderedEquals(['ma1', 'ma2'])); |
| 64 } |
| 65 { |
| 66 ClassElement classB = findElement('B'); |
| 67 List<Element> members = getClassMembers(classB); |
| 68 expect(members.map((e) => e.name), unorderedEquals(['mb1', 'mb2'])); |
| 69 } |
| 70 } |
| 71 |
| 72 Future test_getHierarchyMembers_constructors() { |
| 73 _indexTestUnit(''' |
| 74 class A { |
| 75 A() {} |
| 76 } |
| 77 class B extends A { |
| 78 B() {} |
| 79 } |
| 80 '''); |
| 81 ClassElement classA = findElement("A"); |
| 82 ClassElement classB = findElement("B"); |
| 83 ClassMemberElement memberA = classA.constructors[0]; |
| 84 ClassMemberElement memberB = classB.constructors[0]; |
| 85 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { |
| 86 expect(members, unorderedEquals([memberA])); |
| 87 }); |
| 88 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { |
| 89 expect(members, unorderedEquals([memberB])); |
| 90 }); |
| 91 return Future.wait([futureA, futureB]); |
| 92 } |
| 93 |
| 94 Future test_getHierarchyMembers_fields() { |
| 95 _indexTestUnit(''' |
| 96 class A { |
| 97 int foo; |
| 98 } |
| 99 class B extends A { |
| 100 get foo => null; |
| 101 } |
| 102 class C extends B { |
| 103 set foo(x) {} |
| 104 } |
| 105 class D { |
| 106 int foo; |
| 107 } |
| 108 '''); |
| 109 ClassElement classA = findElement("A"); |
| 110 ClassElement classB = findElement("B"); |
| 111 ClassElement classC = findElement("C"); |
| 112 ClassElement classD = findElement("D"); |
| 113 ClassElement classE = findElement("E"); |
| 114 ClassMemberElement memberA = classA.fields[0]; |
| 115 ClassMemberElement memberB = classB.fields[0]; |
| 116 ClassMemberElement memberC = classC.fields[0]; |
| 117 ClassMemberElement memberD = classD.fields[0]; |
| 118 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { |
| 119 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 120 }); |
| 121 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { |
| 122 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 123 }); |
| 124 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { |
| 125 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 126 }); |
| 127 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { |
| 128 expect(members, unorderedEquals([memberD])); |
| 129 }); |
| 130 return Future.wait([futureA, futureB, futureC, futureD]); |
| 131 } |
| 132 |
| 133 Future test_getHierarchyMembers_methods() { |
| 134 _indexTestUnit(''' |
| 135 class A { |
| 136 foo() {} |
| 137 } |
| 138 class B extends A { |
| 139 foo() {} |
| 140 } |
| 141 class C extends B { |
| 142 foo() {} |
| 143 } |
| 144 class D { |
| 145 foo() {} |
| 146 } |
| 147 class E extends D { |
| 148 foo() {} |
| 149 } |
| 150 '''); |
| 151 ClassElement classA = findElement("A"); |
| 152 ClassElement classB = findElement("B"); |
| 153 ClassElement classC = findElement("C"); |
| 154 ClassElement classD = findElement("D"); |
| 155 ClassElement classE = findElement("E"); |
| 156 ClassMemberElement memberA = classA.methods[0]; |
| 157 ClassMemberElement memberB = classB.methods[0]; |
| 158 ClassMemberElement memberC = classC.methods[0]; |
| 159 ClassMemberElement memberD = classD.methods[0]; |
| 160 ClassMemberElement memberE = classE.methods[0]; |
| 161 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { |
| 162 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 163 }); |
| 164 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { |
| 165 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 166 }); |
| 167 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { |
| 168 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 169 }); |
| 170 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { |
| 171 expect(members, unorderedEquals([memberD, memberE])); |
| 172 }); |
| 173 var futureE = getHierarchyMembers(searchEngine, memberE).then((members) { |
| 174 expect(members, unorderedEquals([memberD, memberE])); |
| 175 }); |
| 176 return Future.wait([futureA, futureB, futureC, futureD, futureE]); |
| 177 } |
| 178 |
| 179 Future test_getHierarchyMembers_withInterfaces() { |
| 180 _indexTestUnit(''' |
| 181 class A { |
| 182 foo() {} |
| 183 } |
| 184 class B implements A { |
| 185 foo() {} |
| 186 } |
| 187 abstract class C implements A { |
| 188 } |
| 189 class D extends C { |
| 190 foo() {} |
| 191 } |
| 192 class E { |
| 193 foo() {} |
| 194 } |
| 195 '''); |
| 196 ClassElement classA = findElement("A"); |
| 197 ClassElement classB = findElement("B"); |
| 198 ClassElement classC = findElement("C"); |
| 199 ClassElement classD = findElement("D"); |
| 200 ClassElement classE = findElement("E"); |
| 201 ClassMemberElement memberA = classA.methods[0]; |
| 202 ClassMemberElement memberB = classB.methods[0]; |
| 203 ClassMemberElement memberD = classD.methods[0]; |
| 204 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { |
| 205 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 206 }); |
| 207 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { |
| 208 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 209 }); |
| 210 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { |
| 211 expect(members, unorderedEquals([memberA, memberB, memberD])); |
| 212 }); |
| 213 return Future.wait([futureA, futureB, futureD]); |
| 214 } |
| 215 |
| 216 Future test_getSubClasses() { |
| 217 _indexTestUnit(''' |
| 218 class A {} |
| 219 class B extends A {} |
| 220 class C extends B {} |
| 221 class D extends B implements A {} |
| 222 class M {} |
| 223 class E extends A with M {} |
| 224 '''); |
| 225 ClassElement classA = findElement("A"); |
| 226 ClassElement classB = findElement("B"); |
| 227 ClassElement classC = findElement("C"); |
| 228 ClassElement classD = findElement("D"); |
| 229 ClassElement classM = findElement("M"); |
| 230 ClassElement classE = findElement("E"); |
| 231 var futureA = getSubClasses(searchEngine, classA).then((subs) { |
| 232 expect(subs, unorderedEquals([classB, classC, classD, classE])); |
| 233 }); |
| 234 var futureB = getSubClasses(searchEngine, classB).then((subs) { |
| 235 expect(subs, unorderedEquals([classC, classD])); |
| 236 }); |
| 237 var futureC = getSubClasses(searchEngine, classC).then((subs) { |
| 238 expect(subs, isEmpty); |
| 239 }); |
| 240 var futureM = getSubClasses(searchEngine, classM).then((subs) { |
| 241 expect(subs, unorderedEquals([classE])); |
| 242 }); |
| 243 return Future.wait([futureA, futureB, futureC, futureM]); |
| 244 } |
| 245 |
| 246 void test_getSuperClasses() { |
| 247 _indexTestUnit(''' |
| 248 class A {} |
| 249 class B extends A {} |
| 250 class C extends B {} |
| 251 class D extends B implements A {} |
| 252 class M {} |
| 253 class E extends A with M {} |
| 254 class F implements A {} |
| 255 '''); |
| 256 ClassElement classA = findElement("A"); |
| 257 ClassElement classB = findElement("B"); |
| 258 ClassElement classC = findElement("C"); |
| 259 ClassElement classD = findElement("D"); |
| 260 ClassElement classE = findElement("E"); |
| 261 ClassElement classF = findElement("F"); |
| 262 ClassElement objectElement = classA.supertype.element; |
| 263 // Object |
| 264 { |
| 265 Set<ClassElement> supers = getSuperClasses(objectElement); |
| 266 expect(supers, isEmpty); |
| 267 } |
| 268 // A |
| 269 { |
| 270 Set<ClassElement> supers = getSuperClasses(classA); |
| 271 expect(supers, unorderedEquals([objectElement])); |
| 272 } |
| 273 // B |
| 274 { |
| 275 Set<ClassElement> supers = getSuperClasses(classB); |
| 276 expect(supers, unorderedEquals([objectElement, classA])); |
| 277 } |
| 278 // C |
| 279 { |
| 280 Set<ClassElement> supers = getSuperClasses(classC); |
| 281 expect(supers, unorderedEquals([objectElement, classA, classB])); |
| 282 } |
| 283 // D |
| 284 { |
| 285 Set<ClassElement> supers = getSuperClasses(classD); |
| 286 expect(supers, unorderedEquals([objectElement, classA, classB])); |
| 287 } |
| 288 // E |
| 289 { |
| 290 Set<ClassElement> supers = getSuperClasses(classE); |
| 291 expect(supers, unorderedEquals([objectElement, classA])); |
| 292 } |
| 293 // F |
| 294 { |
| 295 Set<ClassElement> supers = getSuperClasses(classF); |
| 296 expect(supers, unorderedEquals([objectElement, classA])); |
| 297 } |
| 298 } |
| 299 |
| 300 void _indexTestUnit(String code) { |
| 301 resolveTestUnit(code); |
| 302 index.indexUnit(context, testUnit); |
| 303 } |
| 304 } |
| OLD | NEW |