| 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.get.hover; | 5 library test.integration.analysis.get.hover; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:path/path.dart'; | 10 import 'package:path/path.dart'; |
| 11 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 11 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 12 import 'package:unittest/unittest.dart'; | 12 import 'package:unittest/unittest.dart'; |
| 13 | 13 |
| 14 import '../../utils.dart'; |
| 14 import '../integration_tests.dart'; | 15 import '../integration_tests.dart'; |
| 15 | 16 |
| 16 main() { | 17 main() { |
| 18 initializeTestEnvironment(); |
| 17 defineReflectiveTests(AnalysisGetHoverIntegrationTest); | 19 defineReflectiveTests(AnalysisGetHoverIntegrationTest); |
| 18 } | 20 } |
| 19 | 21 |
| 20 @reflectiveTest | 22 @reflectiveTest |
| 21 class AnalysisGetHoverIntegrationTest | 23 class AnalysisGetHoverIntegrationTest |
| 22 extends AbstractAnalysisServerIntegrationTest { | 24 extends AbstractAnalysisServerIntegrationTest { |
| 23 /** | 25 /** |
| 24 * Pathname of the file containing Dart code. | 26 * Pathname of the file containing Dart code. |
| 25 */ | 27 */ |
| 26 String pathname; | 28 String pathname; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 55 * matching [staticTypeRegexps]. | 57 * matching [staticTypeRegexps]. |
| 56 * | 58 * |
| 57 * [isCore] means the hover info should indicate that the element is defined | 59 * [isCore] means the hover info should indicate that the element is defined |
| 58 * in dart.core. [docRegexp], if specified, should match the documentation | 60 * in dart.core. [docRegexp], if specified, should match the documentation |
| 59 * string of the element. [isLiteral] means the hover should indicate a | 61 * string of the element. [isLiteral] means the hover should indicate a |
| 60 * literal value. [parameterRegexps] means is a set of regexps which should | 62 * literal value. [parameterRegexps] means is a set of regexps which should |
| 61 * match the hover parameters. [propagatedType], if specified, is the | 63 * match the hover parameters. [propagatedType], if specified, is the |
| 62 * expected propagated type of the element. | 64 * expected propagated type of the element. |
| 63 */ | 65 */ |
| 64 checkHover(String target, int length, List<String> descriptionRegexps, | 66 checkHover(String target, int length, List<String> descriptionRegexps, |
| 65 String kind, List<String> staticTypeRegexps, {bool isLocal: false, | 67 String kind, List<String> staticTypeRegexps, |
| 66 bool isCore: false, String docRegexp: null, bool isLiteral: false, | 68 {bool isLocal: false, |
| 67 List<String> parameterRegexps: null, propagatedType: null}) { | 69 bool isCore: false, |
| 70 String docRegexp: null, |
| 71 bool isLiteral: false, |
| 72 List<String> parameterRegexps: null, |
| 73 propagatedType: null}) { |
| 68 int offset = text.indexOf(target); | 74 int offset = text.indexOf(target); |
| 69 return sendAnalysisGetHover(pathname, offset).then((result) { | 75 return sendAnalysisGetHover(pathname, offset).then((result) { |
| 70 expect(result.hovers, hasLength(1)); | 76 expect(result.hovers, hasLength(1)); |
| 71 HoverInformation info = result.hovers[0]; | 77 HoverInformation info = result.hovers[0]; |
| 72 expect(info.offset, equals(offset)); | 78 expect(info.offset, equals(offset)); |
| 73 expect(info.length, equals(length)); | 79 expect(info.length, equals(length)); |
| 74 if (isCore) { | 80 if (isCore) { |
| 75 expect(basename(info.containingLibraryPath), equals('core.dart')); | 81 expect(basename(info.containingLibraryPath), equals('core.dart')); |
| 76 expect(info.containingLibraryName, equals('dart.core')); | 82 expect(info.containingLibraryName, equals('dart.core')); |
| 77 } else if (isLocal || isLiteral) { | 83 } else if (isLocal || isLiteral) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 | 140 |
| 135 test_getHover() { | 141 test_getHover() { |
| 136 writeFile(pathname, text); | 142 writeFile(pathname, text); |
| 137 standardAnalysisSetup(); | 143 standardAnalysisSetup(); |
| 138 | 144 |
| 139 // Note: analysis.getHover doesn't wait for analysis to complete--it simply | 145 // Note: analysis.getHover doesn't wait for analysis to complete--it simply |
| 140 // returns the latest results that are available at the time that the | 146 // returns the latest results that are available at the time that the |
| 141 // request is made. So wait for analysis to finish before testing anything. | 147 // request is made. So wait for analysis to finish before testing anything. |
| 142 return analysisFinished.then((_) { | 148 return analysisFinished.then((_) { |
| 143 List<Future> tests = []; | 149 List<Future> tests = []; |
| 144 tests.add(checkHover('topLevelVar;', 11, [ | 150 tests.add(checkHover('topLevelVar;', 11, ['List', 'topLevelVar'], |
| 145 'List', | 151 'top level variable', ['List'])); |
| 146 'topLevelVar' | |
| 147 ], 'top level variable', ['List'])); | |
| 148 tests.add(checkHover( | 152 tests.add(checkHover( |
| 149 'func(', 4, ['func', 'int', 'param'], 'function', ['int', 'void'], | 153 'func(', 4, ['func', 'int', 'param'], 'function', ['int', 'void'], |
| 150 docRegexp: 'Documentation for func')); | 154 docRegexp: 'Documentation for func')); |
| 151 tests.add(checkHover('int param', 3, ['int'], 'class', ['int'], | 155 tests.add(checkHover('int param', 3, ['int'], 'class', ['int'], |
| 152 isCore: true, docRegexp: '.*')); | 156 isCore: true, docRegexp: '.*')); |
| 153 tests.add(checkHover('param)', 5, ['int', 'param'], 'parameter', ['int'], | 157 tests.add(checkHover('param)', 5, ['int', 'param'], 'parameter', ['int'], |
| 154 isLocal: true, docRegexp: 'Documentation for func')); | 158 isLocal: true, docRegexp: 'Documentation for func')); |
| 155 tests.add(checkHover('num localVar', 3, ['num'], 'class', ['num'], | 159 tests.add(checkHover('num localVar', 3, ['num'], 'class', ['num'], |
| 156 isCore: true, docRegexp: '.*')); | 160 isCore: true, docRegexp: '.*')); |
| 157 tests.add(checkHover( | 161 tests.add(checkHover( |
| 158 'localVar =', 8, ['num', 'localVar'], 'local variable', ['num'], | 162 'localVar =', 8, ['num', 'localVar'], 'local variable', ['num'], |
| 159 isLocal: true, propagatedType: 'int')); | 163 isLocal: true, propagatedType: 'int')); |
| 160 tests.add(checkHover('topLevelVar.length;', 11, [ | 164 tests.add(checkHover('topLevelVar.length;', 11, ['List', 'topLevelVar'], |
| 161 'List', | 165 'top level variable', ['List'])); |
| 162 'topLevelVar' | |
| 163 ], 'top level variable', ['List'])); | |
| 164 tests.add(checkHover( | 166 tests.add(checkHover( |
| 165 'length;', 6, ['get', 'length', 'int'], 'getter', ['int'], | 167 'length;', 6, ['get', 'length', 'int'], 'getter', ['int'], |
| 166 isCore: true, docRegexp: '.*')); | 168 isCore: true, docRegexp: '.*')); |
| 167 tests.add(checkHover( | 169 tests.add(checkHover( |
| 168 'length =', 6, ['set', 'length', 'int'], 'setter', ['int'], | 170 'length =', 6, ['set', 'length', 'int'], 'setter', ['int'], |
| 169 isCore: true, docRegexp: '.*')); | 171 isCore: true, docRegexp: '.*')); |
| 170 tests.add(checkHover('param;', 5, ['int', 'param'], 'parameter', ['int'], | 172 tests.add(checkHover('param;', 5, ['int', 'param'], 'parameter', ['int'], |
| 171 isLocal: true, | 173 isLocal: true, |
| 172 docRegexp: 'Documentation for func', | 174 docRegexp: 'Documentation for func', |
| 173 parameterRegexps: ['.*'])); | 175 parameterRegexps: ['.*'])); |
| 174 tests.add(checkHover('add(', 3, ['List', 'add'], 'method', null, | 176 tests.add(checkHover('add(', 3, ['List', 'add'], 'method', null, |
| 175 isCore: true, docRegexp: '.*')); | 177 isCore: true, docRegexp: '.*')); |
| 176 tests.add(checkHover( | 178 tests.add(checkHover( |
| 177 'localVar)', 8, ['num', 'localVar'], 'local variable', ['num'], | 179 'localVar)', 8, ['num', 'localVar'], 'local variable', ['num'], |
| 178 isLocal: true, parameterRegexps: ['.*'], propagatedType: 'int')); | 180 isLocal: true, parameterRegexps: ['.*'], propagatedType: 'int')); |
| 179 tests.add(checkHover( | 181 tests.add(checkHover( |
| 180 'func(35', 4, ['func', 'int', 'param'], 'function', null, | 182 'func(35', 4, ['func', 'int', 'param'], 'function', null, |
| 181 docRegexp: 'Documentation for func')); | 183 docRegexp: 'Documentation for func')); |
| 182 tests.add(checkHover('35', 2, null, null, ['int'], | 184 tests.add(checkHover('35', 2, null, null, ['int'], |
| 183 isLiteral: true, parameterRegexps: ['int', 'param'])); | 185 isLiteral: true, parameterRegexps: ['int', 'param'])); |
| 184 tests.add(checkNoHover('comment')); | 186 tests.add(checkNoHover('comment')); |
| 185 return Future.wait(tests); | 187 return Future.wait(tests); |
| 186 }); | 188 }); |
| 187 } | 189 } |
| 188 } | 190 } |
| OLD | NEW |