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