| 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.integration.analysis.overrides; | 5 library test.integration.analysis.overrides; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/protocol.dart'; | 7 import 'package:analysis_server/src/protocol.dart'; |
| 8 import 'package:unittest/unittest.dart'; | 8 import 'package:unittest/unittest.dart'; |
| 9 | 9 |
| 10 import '../../reflective_tests.dart'; | 10 import '../../reflective_tests.dart'; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 method5() {} | 46 method5() {} |
| 47 method6() {} | 47 method6() {} |
| 48 method7() {} | 48 method7() {} |
| 49 } | 49 } |
| 50 '''; | 50 '''; |
| 51 writeFile(pathname, text); | 51 writeFile(pathname, text); |
| 52 standardAnalysisSetup(); | 52 standardAnalysisSetup(); |
| 53 sendAnalysisSetSubscriptions({ | 53 sendAnalysisSetSubscriptions({ |
| 54 AnalysisService.OVERRIDES: [pathname] | 54 AnalysisService.OVERRIDES: [pathname] |
| 55 }); | 55 }); |
| 56 List overrides; | 56 List<Override> overrides; |
| 57 onAnalysisOverrides.listen((params) { | 57 onAnalysisOverrides.listen((AnalysisOverridesParams params) { |
| 58 expect(params['file'], equals(pathname)); | 58 expect(params.file, equals(pathname)); |
| 59 overrides = params['overrides']; | 59 overrides = params.overrides; |
| 60 }); | 60 }); |
| 61 return analysisFinished.then((_) { | 61 return analysisFinished.then((_) { |
| 62 int targetOffset = text.indexOf('Target'); | 62 int targetOffset = text.indexOf('Target'); |
| 63 Map findOverride(String methodName) { | 63 Override findOverride(String methodName) { |
| 64 int methodOffset = text.indexOf(methodName, targetOffset); | 64 int methodOffset = text.indexOf(methodName, targetOffset); |
| 65 for (Map override in overrides) { | 65 for (Override override in overrides) { |
| 66 if (override['offset'] == methodOffset) { | 66 if (override.offset == methodOffset) { |
| 67 return override; | 67 return override; |
| 68 } | 68 } |
| 69 } | 69 } |
| 70 return null; | 70 return null; |
| 71 } | 71 } |
| 72 void checkOverrides(String methodName, bool | 72 void checkOverrides(String methodName, bool |
| 73 expectedOverridesBase, List<String> expectedOverridesInterfaces) { | 73 expectedOverridesBase, List<String> expectedOverridesInterfaces) { |
| 74 Map override = findOverride(methodName); | 74 Override override = findOverride(methodName); |
| 75 if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) { | 75 if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) { |
| 76 // This method overrides nothing, so it should not appear in the | 76 // This method overrides nothing, so it should not appear in the |
| 77 // overrides list. | 77 // overrides list. |
| 78 expect(override, isNull); | 78 expect(override, isNull); |
| 79 return; | 79 return; |
| 80 } else { | 80 } else { |
| 81 expect(override, isNotNull); | 81 expect(override, isNotNull); |
| 82 } | 82 } |
| 83 expect(override['length'], equals(methodName.length)); | 83 expect(override.length, equals(methodName.length)); |
| 84 Map superclassMember = override['superclassMember']; | 84 OverriddenMember superclassMember = override.superclassMember; |
| 85 if (expectedOverridesBase) { | 85 if (expectedOverridesBase) { |
| 86 expect(superclassMember['element']['name'], equals(methodName)); | 86 expect(superclassMember.element.name, equals(methodName)); |
| 87 expect(superclassMember['className'], equals('Base')); | 87 expect(superclassMember.className, equals('Base')); |
| 88 } else { | 88 } else { |
| 89 expect(superclassMember, isNull); | 89 expect(superclassMember, isNull); |
| 90 } | 90 } |
| 91 List interfaceMembers = override['interfaceMembers']; | 91 List<OverriddenMember> interfaceMembers = override.interfaceMembers; |
| 92 if (expectedOverridesInterfaces.isNotEmpty) { | 92 if (expectedOverridesInterfaces.isNotEmpty) { |
| 93 expect(interfaceMembers, isNotNull); | 93 expect(interfaceMembers, isNotNull); |
| 94 Set<String> actualOverridesInterfaces = new Set<String>(); | 94 Set<String> actualOverridesInterfaces = new Set<String>(); |
| 95 for (Map overriddenMember in interfaceMembers) { | 95 for (OverriddenMember overriddenMember in interfaceMembers) { |
| 96 expect(overriddenMember['element']['name'], equals(methodName)); | 96 expect(overriddenMember.element.name, equals(methodName)); |
| 97 String className = overriddenMember['className']; | 97 String className = overriddenMember.className; |
| 98 bool wasAdded = actualOverridesInterfaces.add(className); | 98 bool wasAdded = actualOverridesInterfaces.add(className); |
| 99 expect(wasAdded, isTrue); | 99 expect(wasAdded, isTrue); |
| 100 } | 100 } |
| 101 expect(actualOverridesInterfaces, equals( | 101 expect(actualOverridesInterfaces, equals( |
| 102 expectedOverridesInterfaces.toSet())); | 102 expectedOverridesInterfaces.toSet())); |
| 103 } else { | 103 } else { |
| 104 expect(interfaceMembers, isNull); | 104 // TODO(paulberry): As a result of bug 21230, an Override with a |
| 105 // missing interfaceMembers field is misinterpreted as having an |
| 106 // interfaceMembers field which is an empty list. Once bug 21230 is |
| 107 // fixed this should be an "isNull" check. |
| 108 expect(interfaceMembers, isEmpty); |
| 105 } | 109 } |
| 106 } | 110 } |
| 107 checkOverrides('method0', true, ['Interface1', 'Interface2']); | 111 checkOverrides('method0', true, ['Interface1', 'Interface2']); |
| 108 checkOverrides('method1', false, ['Interface1', 'Interface2']); | 112 checkOverrides('method1', false, ['Interface1', 'Interface2']); |
| 109 checkOverrides('method2', true, ['Interface1']); | 113 checkOverrides('method2', true, ['Interface1']); |
| 110 checkOverrides('method3', false, ['Interface1']); | 114 checkOverrides('method3', false, ['Interface1']); |
| 111 checkOverrides('method4', true, ['Interface2']); | 115 checkOverrides('method4', true, ['Interface2']); |
| 112 checkOverrides('method5', false, ['Interface2']); | 116 checkOverrides('method5', false, ['Interface2']); |
| 113 checkOverrides('method6', true, []); | 117 checkOverrides('method6', true, []); |
| 114 checkOverrides('method7', false, []); | 118 checkOverrides('method7', false, []); |
| 115 }); | 119 }); |
| 116 } | 120 } |
| 117 } | 121 } |
| 118 | 122 |
| 119 main() { | 123 main() { |
| 120 runReflectiveTests(Test); | 124 runReflectiveTests(Test); |
| 121 } | 125 } |
| OLD | NEW |