| 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.integration.analysis.overrides; |
| 6 |
| 7 import 'package:analysis_testing/reflective_tests.dart'; |
| 8 import 'package:unittest/unittest.dart'; |
| 9 |
| 10 import '../integration_tests.dart'; |
| 11 |
| 12 @ReflectiveTestCase() |
| 13 class Test extends AbstractAnalysisServerIntegrationTest { |
| 14 test_overrides() { |
| 15 String pathname = sourcePath('test.dart'); |
| 16 String text = |
| 17 r''' |
| 18 abstract class Interface1 { |
| 19 method0(); |
| 20 method1(); |
| 21 method2(); |
| 22 method3(); |
| 23 } |
| 24 |
| 25 abstract class Interface2 { |
| 26 method0(); |
| 27 method1(); |
| 28 method4(); |
| 29 method5(); |
| 30 } |
| 31 |
| 32 abstract class Base { |
| 33 method0(); |
| 34 method2(); |
| 35 method4(); |
| 36 method6(); |
| 37 } |
| 38 |
| 39 class Target extends Base implements Interface1, Interface2 { |
| 40 method0() {} |
| 41 method1() {} |
| 42 method2() {} |
| 43 method3() {} |
| 44 method4() {} |
| 45 method5() {} |
| 46 method6() {} |
| 47 method7() {} |
| 48 } |
| 49 '''; |
| 50 writeFile(pathname, text); |
| 51 standardAnalysisSetup(); |
| 52 sendAnalysisSetSubscriptions({ |
| 53 'OVERRIDES': [pathname] |
| 54 }); |
| 55 List overrides; |
| 56 onAnalysisOverrides.listen((params) { |
| 57 expect(params['file'], equals(pathname)); |
| 58 overrides = params['overrides']; |
| 59 }); |
| 60 return analysisFinished.then((_) { |
| 61 int targetOffset = text.indexOf('Target'); |
| 62 Map findOverride(String methodName) { |
| 63 int methodOffset = text.indexOf(methodName, targetOffset); |
| 64 for (Map override in overrides) { |
| 65 if (override['offset'] == methodOffset) { |
| 66 return override; |
| 67 } |
| 68 } |
| 69 return null; |
| 70 } |
| 71 void checkOverrides(String methodName, bool |
| 72 expectedOverridesBase, List<String> expectedOverridesInterfaces) { |
| 73 Map override = findOverride(methodName); |
| 74 if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) { |
| 75 // This method overrides nothing, so it should not appear in the |
| 76 // overrides list. |
| 77 expect(override, isNull); |
| 78 return; |
| 79 } else { |
| 80 expect(override, isNotNull); |
| 81 } |
| 82 expect(override['length'], equals(methodName.length)); |
| 83 Map superclassMember = override['superclassMember']; |
| 84 if (expectedOverridesBase) { |
| 85 expect(superclassMember['element']['name'], equals(methodName)); |
| 86 expect(superclassMember['className'], equals('Base')); |
| 87 } else { |
| 88 expect(superclassMember, isNull); |
| 89 } |
| 90 List interfaceMembers = override['interfaceMembers']; |
| 91 if (expectedOverridesInterfaces.isNotEmpty) { |
| 92 expect(interfaceMembers, isNotNull); |
| 93 Set<String> actualOverridesInterfaces = new Set<String>(); |
| 94 for (Map overriddenMember in interfaceMembers) { |
| 95 expect(overriddenMember['element']['name'], equals(methodName)); |
| 96 String className = overriddenMember['className']; |
| 97 bool wasAdded = actualOverridesInterfaces.add(className); |
| 98 expect(wasAdded, isTrue); |
| 99 } |
| 100 expect(actualOverridesInterfaces, equals( |
| 101 expectedOverridesInterfaces.toSet())); |
| 102 } else { |
| 103 expect(interfaceMembers, isNull); |
| 104 } |
| 105 } |
| 106 checkOverrides('method0', true, ['Interface1', 'Interface2']); |
| 107 checkOverrides('method1', false, ['Interface1', 'Interface2']); |
| 108 checkOverrides('method2', true, ['Interface1']); |
| 109 checkOverrides('method3', false, ['Interface1']); |
| 110 checkOverrides('method4', true, ['Interface2']); |
| 111 checkOverrides('method5', false, ['Interface2']); |
| 112 checkOverrides('method6', true, []); |
| 113 checkOverrides('method7', false, []); |
| 114 }); |
| 115 } |
| 116 } |
| 117 |
| 118 main() { |
| 119 runReflectiveTests(Test); |
| 120 } |
| OLD | NEW |