| 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.domain.analysis; | 5 library test.domain.analysis; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/analysis_server.dart'; | 9 import 'package:analysis_server/src/analysis_server.dart'; |
| 10 import 'package:analysis_server/src/constants.dart'; | 10 import 'package:analysis_server/src/constants.dart'; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 resourceProvider.newFolder('/project'); | 76 resourceProvider.newFolder('/project'); |
| 77 resourceProvider.newFile('/project/pubspec.yaml', 'name: project'); | 77 resourceProvider.newFile('/project/pubspec.yaml', 'name: project'); |
| 78 resourceProvider.newFile('/project/bin/test.dart', 'main() {}'); | 78 resourceProvider.newFile('/project/bin/test.dart', 'main() {}'); |
| 79 request.setParameter( | 79 request.setParameter( |
| 80 INCLUDED, | 80 INCLUDED, |
| 81 ['/project']); | 81 ['/project']); |
| 82 var response = handler.handleRequest(request); | 82 var response = handler.handleRequest(request); |
| 83 var serverRef = server; | 83 var serverRef = server; |
| 84 expect(response, isResponseSuccess('0')); | 84 expect(response, isResponseSuccess('0')); |
| 85 // verify that unit is resolved eventually | 85 // verify that unit is resolved eventually |
| 86 return waitForServerTasksFinished(server).then((_) { | 86 return waitForServerOperationsPerformed(server).then((_) { |
| 87 var unit = serverRef.test_getResolvedCompilationUnit('/project/bin/t
est.dart'); | 87 var unit = serverRef.test_getResolvedCompilationUnit('/project/bin/t
est.dart'); |
| 88 expect(unit, isNotNull); | 88 expect(unit, isNotNull); |
| 89 }); | 89 }); |
| 90 }); | 90 }); |
| 91 }); | 91 }); |
| 92 }); | 92 }); |
| 93 | 93 |
| 94 test('setPriorityFiles', () { | 94 test('setPriorityFiles', () { |
| 95 var request = new Request('0', METHOD_SET_PRIORITY_FILES); | 95 var request = new Request('0', METHOD_SET_PRIORITY_FILES); |
| 96 request.setParameter( | 96 request.setParameter( |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 // set subscriptions | 210 // set subscriptions |
| 211 Request request = new Request('0', METHOD_SET_ANALYSIS_SUBSCRIPTIONS); | 211 Request request = new Request('0', METHOD_SET_ANALYSIS_SUBSCRIPTIONS); |
| 212 request.setParameter(SUBSCRIPTIONS, analysisSubscriptions); | 212 request.setParameter(SUBSCRIPTIONS, analysisSubscriptions); |
| 213 handleSuccessfulRequest(request); | 213 handleSuccessfulRequest(request); |
| 214 } | 214 } |
| 215 | 215 |
| 216 /** | 216 /** |
| 217 * Returns a [Future] that completes when this this helper finished all its | 217 * Returns a [Future] that completes when this this helper finished all its |
| 218 * scheduled tasks. | 218 * scheduled tasks. |
| 219 */ | 219 */ |
| 220 Future waitForTasksFinished() { | 220 Future waitForOperationsFinished() { |
| 221 return waitForServerTasksFinished(server); | 221 return waitForServerOperationsPerformed(server); |
| 222 } | 222 } |
| 223 | 223 |
| 224 /** | 224 /** |
| 225 * Returns [AnalysisError]s recorded for the given [file]. | 225 * Returns [AnalysisError]s recorded for the given [file]. |
| 226 * May be empty, but not `null`. | 226 * May be empty, but not `null`. |
| 227 */ | 227 */ |
| 228 List<AnalysisError> getErrors(String file) { | 228 List<AnalysisError> getErrors(String file) { |
| 229 List<AnalysisError> errors = filesErrors[file]; | 229 List<AnalysisError> errors = filesErrors[file]; |
| 230 if (errors != null) { | 230 if (errors != null) { |
| 231 return errors; | 231 return errors; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 255 | 255 |
| 256 /** | 256 /** |
| 257 * Returns highlights recorded for the given [testFile]. | 257 * Returns highlights recorded for the given [testFile]. |
| 258 * May be empty, but not `null`. | 258 * May be empty, but not `null`. |
| 259 */ | 259 */ |
| 260 List<Map<String, Object>> getTestHighlights() { | 260 List<Map<String, Object>> getTestHighlights() { |
| 261 return getHighlights(testFile); | 261 return getHighlights(testFile); |
| 262 } | 262 } |
| 263 | 263 |
| 264 /** | 264 /** |
| 265 * Creates an empty project `/project/`. | 265 * Creates an empty project `/project`. |
| 266 */ | 266 */ |
| 267 void createEmptyProject() { | 267 void createEmptyProject() { |
| 268 resourceProvider.newFolder('/project'); | 268 resourceProvider.newFolder('/project'); |
| 269 Request request = new Request('0', METHOD_SET_ANALYSIS_ROOTS); | 269 Request request = new Request('0', METHOD_SET_ANALYSIS_ROOTS); |
| 270 request.setParameter(INCLUDED, ['/project']); | 270 request.setParameter(INCLUDED, ['/project']); |
| 271 request.setParameter(EXCLUDED, []); | 271 request.setParameter(EXCLUDED, []); |
| 272 handleSuccessfulRequest(request); | 272 handleSuccessfulRequest(request); |
| 273 } | 273 } |
| 274 | 274 |
| 275 /** | 275 /** |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 | 316 |
| 317 testNotificationErrors() { | 317 testNotificationErrors() { |
| 318 AnalysisTestHelper helper; | 318 AnalysisTestHelper helper; |
| 319 | 319 |
| 320 setUp(() { | 320 setUp(() { |
| 321 helper = new AnalysisTestHelper(); | 321 helper = new AnalysisTestHelper(); |
| 322 }); | 322 }); |
| 323 | 323 |
| 324 test('ParserErrorCode', () { | 324 test('ParserErrorCode', () { |
| 325 helper.createSingleFileProject('library lib'); | 325 helper.createSingleFileProject('library lib'); |
| 326 return helper.waitForTasksFinished().then((_) { | 326 return helper.waitForOperationsFinished().then((_) { |
| 327 List<AnalysisError> errors = helper.getTestErrors(); | 327 List<AnalysisError> errors = helper.getTestErrors(); |
| 328 expect(errors, hasLength(1)); | 328 expect(errors, hasLength(1)); |
| 329 AnalysisError error = errors[0]; | 329 AnalysisError error = errors[0]; |
| 330 expect(error.file, '/project/bin/test.dart'); | 330 expect(error.file, '/project/bin/test.dart'); |
| 331 expect(error.errorCode, 'ParserErrorCode.EXPECTED_TOKEN'); | 331 expect(error.errorCode, 'ParserErrorCode.EXPECTED_TOKEN'); |
| 332 expect(error.offset, isPositive); | 332 expect(error.offset, isPositive); |
| 333 expect(error.length, isNonNegative); | 333 expect(error.length, isNonNegative); |
| 334 expect(error.message, isNotNull); | 334 expect(error.message, isNotNull); |
| 335 }); | 335 }); |
| 336 }); | 336 }); |
| 337 | 337 |
| 338 test('StaticWarningCode', () { | 338 test('StaticWarningCode', () { |
| 339 helper.createSingleFileProject([ | 339 helper.createSingleFileProject([ |
| 340 'main() {', | 340 'main() {', |
| 341 ' print(unknown);', | 341 ' print(unknown);', |
| 342 '}']); | 342 '}']); |
| 343 return helper.waitForTasksFinished().then((_) { | 343 return helper.waitForOperationsFinished().then((_) { |
| 344 List<AnalysisError> errors = helper.getTestErrors(); | 344 List<AnalysisError> errors = helper.getTestErrors(); |
| 345 expect(errors, hasLength(1)); | 345 expect(errors, hasLength(1)); |
| 346 AnalysisError error = errors[0]; | 346 AnalysisError error = errors[0]; |
| 347 expect(error.errorCode, 'StaticWarningCode.UNDEFINED_IDENTIFIER'); | 347 expect(error.errorCode, 'StaticWarningCode.UNDEFINED_IDENTIFIER'); |
| 348 }); | 348 }); |
| 349 }); | 349 }); |
| 350 } | 350 } |
| 351 | 351 |
| 352 | 352 |
| 353 class NotificationHighlightHelper extends AnalysisTestHelper { | 353 class NotificationHighlightHelper extends AnalysisTestHelper { |
| 354 List<Map<String, Object>> regions; | 354 List<Map<String, Object>> regions; |
| 355 | 355 |
| 356 Future prepareRegions(then()) { | 356 Future prepareRegions(then()) { |
| 357 addAnalysisSubscriptionHighlight(testFile); | 357 addAnalysisSubscriptionHighlight(testFile); |
| 358 return waitForTasksFinished().then((_) { | 358 return waitForOperationsFinished().then((_) { |
| 359 regions = getTestHighlights(); | 359 regions = getTestHighlights(); |
| 360 then(); | 360 then(); |
| 361 }); | 361 }); |
| 362 } | 362 } |
| 363 | 363 |
| 364 void assertHasRawRegion(HighlightType type, int offset, int length) { | 364 void assertHasRawRegion(HighlightType type, int offset, int length) { |
| 365 for (Map<String, Object> region in regions) { | 365 for (Map<String, Object> region in regions) { |
| 366 if (region['offset'] == offset && region['length'] == length | 366 if (region['offset'] == offset && region['length'] == length |
| 367 && region['type'] == type.name) { | 367 && region['type'] == type.name) { |
| 368 return; | 368 return; |
| (...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1081 helper.assertHasRegion(HighlightType.TYPE_PARAMETER, 'T p)'); | 1081 helper.assertHasRegion(HighlightType.TYPE_PARAMETER, 'T p)'); |
| 1082 }); | 1082 }); |
| 1083 }); | 1083 }); |
| 1084 } | 1084 } |
| 1085 | 1085 |
| 1086 | 1086 |
| 1087 testUpdateContent() { | 1087 testUpdateContent() { |
| 1088 test('full content', () { | 1088 test('full content', () { |
| 1089 AnalysisTestHelper helper = new AnalysisTestHelper(); | 1089 AnalysisTestHelper helper = new AnalysisTestHelper(); |
| 1090 helper.createSingleFileProject('// empty'); | 1090 helper.createSingleFileProject('// empty'); |
| 1091 return helper.waitForTasksFinished().then((_) { | 1091 return helper.waitForOperationsFinished().then((_) { |
| 1092 // no errors initially | 1092 // no errors initially |
| 1093 List<AnalysisError> errors = helper.getTestErrors(); | 1093 List<AnalysisError> errors = helper.getTestErrors(); |
| 1094 expect(errors, isEmpty); | 1094 expect(errors, isEmpty); |
| 1095 // update code | 1095 // update code |
| 1096 { | 1096 { |
| 1097 Request request = new Request('0', METHOD_UPDATE_CONTENT); | 1097 Request request = new Request('0', METHOD_UPDATE_CONTENT); |
| 1098 request.setParameter('files', | 1098 request.setParameter('files', |
| 1099 { | 1099 { |
| 1100 helper.testFile : { | 1100 helper.testFile : { |
| 1101 CONTENT : 'library lib' | 1101 CONTENT : 'library lib' |
| 1102 } | 1102 } |
| 1103 }); | 1103 }); |
| 1104 helper.handleSuccessfulRequest(request); | 1104 helper.handleSuccessfulRequest(request); |
| 1105 } | 1105 } |
| 1106 // wait, there is an error | 1106 // wait, there is an error |
| 1107 helper.waitForTasksFinished().then((_) { | 1107 return helper.waitForOperationsFinished().then((_) { |
| 1108 List<AnalysisError> errors = helper.getTestErrors(); | 1108 List<AnalysisError> errors = helper.getTestErrors(); |
| 1109 expect(errors, hasLength(1)); | 1109 expect(errors, hasLength(1)); |
| 1110 }); | 1110 }); |
| 1111 }); | 1111 }); |
| 1112 }); | 1112 }); |
| 1113 | 1113 |
| 1114 test('incremental', () { | 1114 test('incremental', () { |
| 1115 AnalysisTestHelper helper = new AnalysisTestHelper(); | 1115 AnalysisTestHelper helper = new AnalysisTestHelper(); |
| 1116 helper.createSingleFileProject('library A;'); | 1116 helper.createSingleFileProject('library A;'); |
| 1117 return helper.waitForTasksFinished().then((_) { | 1117 return helper.waitForOperationsFinished().then((_) { |
| 1118 // no errors initially | 1118 // no errors initially |
| 1119 List<AnalysisError> errors = helper.getTestErrors(); | 1119 List<AnalysisError> errors = helper.getTestErrors(); |
| 1120 expect(errors, isEmpty); | 1120 expect(errors, isEmpty); |
| 1121 // update code | 1121 // update code |
| 1122 { | 1122 { |
| 1123 Request request = new Request('0', METHOD_UPDATE_CONTENT); | 1123 Request request = new Request('0', METHOD_UPDATE_CONTENT); |
| 1124 request.setParameter('files', | 1124 request.setParameter('files', |
| 1125 { | 1125 { |
| 1126 helper.testFile : { | 1126 helper.testFile : { |
| 1127 CONTENT : 'library lib', | 1127 CONTENT : 'library lib', |
| 1128 OFFSET : 'library '.length, | 1128 OFFSET : 'library '.length, |
| 1129 OLD_LENGTH : 'A;'.length, | 1129 OLD_LENGTH : 'A;'.length, |
| 1130 NEW_LENGTH : 'lib'.length, | 1130 NEW_LENGTH : 'lib'.length, |
| 1131 } | 1131 } |
| 1132 }); | 1132 }); |
| 1133 helper.handleSuccessfulRequest(request); | 1133 helper.handleSuccessfulRequest(request); |
| 1134 } | 1134 } |
| 1135 // wait, there is an error | 1135 // wait, there is an error |
| 1136 helper.waitForTasksFinished().then((_) { | 1136 return helper.waitForOperationsFinished().then((_) { |
| 1137 List<AnalysisError> errors = helper.getTestErrors(); | 1137 List<AnalysisError> errors = helper.getTestErrors(); |
| 1138 expect(errors, hasLength(1)); | 1138 expect(errors, hasLength(1)); |
| 1139 }); | 1139 }); |
| 1140 }); | 1140 }); |
| 1141 }); | 1141 }); |
| 1142 } | 1142 } |
| 1143 | 1143 |
| 1144 | 1144 |
| 1145 void test_setSubscriptions() { | 1145 void test_setSubscriptions() { |
| 1146 test('before analysis', () { | 1146 test('before analysis', () { |
| 1147 AnalysisTestHelper helper = new AnalysisTestHelper(); | 1147 AnalysisTestHelper helper = new AnalysisTestHelper(); |
| 1148 // subscribe | 1148 // subscribe |
| 1149 helper.addAnalysisSubscriptionHighlight(helper.testFile); | 1149 helper.addAnalysisSubscriptionHighlight(helper.testFile); |
| 1150 // create project | 1150 // create project |
| 1151 helper.createSingleFileProject('int V = 42;'); | 1151 helper.createSingleFileProject('int V = 42;'); |
| 1152 // wait, there are highlight regions | 1152 // wait, there are highlight regions |
| 1153 helper.waitForTasksFinished().then((_) { | 1153 helper.waitForOperationsFinished().then((_) { |
| 1154 var highlights = helper.getHighlights(helper.testFile); | 1154 var highlights = helper.getHighlights(helper.testFile); |
| 1155 expect(highlights, isNot(isEmpty)); | 1155 expect(highlights, isNot(isEmpty)); |
| 1156 }); | 1156 }); |
| 1157 }); | 1157 }); |
| 1158 | 1158 |
| 1159 test('after analysis', () { | 1159 test('after analysis', () { |
| 1160 AnalysisTestHelper helper = new AnalysisTestHelper(); | 1160 AnalysisTestHelper helper = new AnalysisTestHelper(); |
| 1161 // create project | 1161 // create project |
| 1162 helper.createSingleFileProject('int V = 42;'); | 1162 helper.createSingleFileProject('int V = 42;'); |
| 1163 // wait, no regions initially | 1163 // wait, no regions initially |
| 1164 return helper.waitForTasksFinished().then((_) { | 1164 return helper.waitForOperationsFinished().then((_) { |
| 1165 var highlights = helper.getHighlights(helper.testFile); | 1165 var highlights = helper.getHighlights(helper.testFile); |
| 1166 expect(highlights, isEmpty); | 1166 expect(highlights, isEmpty); |
| 1167 // subscribe | 1167 // subscribe |
| 1168 helper.addAnalysisSubscriptionHighlight(helper.testFile); | 1168 helper.addAnalysisSubscriptionHighlight(helper.testFile); |
| 1169 // wait, has regions | 1169 // wait, has regions |
| 1170 return helper.waitForTasksFinished().then((_) { | 1170 return helper.waitForOperationsFinished().then((_) { |
| 1171 var highlights = helper.getHighlights(helper.testFile); | 1171 var highlights = helper.getHighlights(helper.testFile); |
| 1172 expect(highlights, isNot(isEmpty)); | 1172 expect(highlights, isNot(isEmpty)); |
| 1173 }); | 1173 }); |
| 1174 }); | 1174 }); |
| 1175 }); | 1175 }); |
| 1176 } | 1176 } |
| OLD | NEW |