Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Side by Side Diff: pkg/analysis_server/test/analysis/get_errors_test.dart

Issue 417433003: Send responses for any pending 'analysis.getErrors' requests during context removal. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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.analysis.get_errors; 5 library test.analysis.get_errors;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/computer/error.dart'; 9 import 'package:analysis_server/src/computer/error.dart';
10 import 'package:analysis_server/src/constants.dart'; 10 import 'package:analysis_server/src/constants.dart';
11 import 'package:analysis_server/src/domain_analysis.dart'; 11 import 'package:analysis_server/src/domain_analysis.dart';
12 import 'package:analysis_server/src/protocol.dart'; 12 import 'package:analysis_server/src/protocol.dart';
13 import 'package:analysis_services/constants.dart'; 13 import 'package:analysis_services/constants.dart';
14 import 'package:analysis_testing/reflective_tests.dart'; 14 import 'package:analysis_testing/reflective_tests.dart';
15 import 'package:analyzer/file_system/file_system.dart';
15 import 'package:unittest/unittest.dart'; 16 import 'package:unittest/unittest.dart';
16 17
17 import '../analysis_abstract.dart'; 18 import '../analysis_abstract.dart';
18 19
19 20
20 main() { 21 main() {
21 group('notification.hover', () { 22 group('getErrors', () {
22 runReflectiveTests(GetErrorsTest); 23 runReflectiveTests(GetErrorsTest);
23 }); 24 });
24 } 25 }
25 26
26 27
27 @ReflectiveTestCase() 28 @ReflectiveTestCase()
28 class GetErrorsTest extends AbstractAnalysisTest { 29 class GetErrorsTest extends AbstractAnalysisTest {
29 Future<List<AnalysisError>> getErrors() { 30 static const String requestId = 'test-getError';
30 return getErrorsForFile(testFile);
31 }
32
33 Future<List<AnalysisError>> getErrorsForFile(String file) {
34 return waitForTasksFinished().then((_) {
35 String requestId = 'test-getError';
36 // send the Request
37 Request request = new Request(requestId, ANALYSIS_GET_ERRORS);
38 request.setParameter(FILE, file);
39 server.handleRequest(request);
40 // wait for the Response
41 waitForResponse() {
42 for (Response response in serverChannel.responsesReceived) {
43 if (response.id == requestId) {
44 List errorsJsons = response.getResult(ERRORS);
45 return errorsJsons.map(AnalysisError.fromJson).toList();
46 }
47 }
48 return new Future(waitForResponse);
49 }
50 return new Future(waitForResponse);
51 });
52 }
53 31
54 @override 32 @override
55 void setUp() { 33 void setUp() {
56 super.setUp(); 34 super.setUp();
57 server.handlers = [new AnalysisDomainHandler(server),]; 35 server.handlers = [new AnalysisDomainHandler(server),];
58 createProject(); 36 createProject();
59 } 37 }
60 38
39 test_fileDoesNotExist() {
40 String file = '$projectPath/doesNotExist.dart';
41 return _getErrorsForFile(file).then((List<AnalysisError> errors) {
42 expect(errors, isEmpty);
43 });
44 }
45
46 test_fileWithoutContext() {
47 String file = '/outside.dart';
48 addFile(file, '''
49 main() {
50 print(42);
51 }
52 ''');
53 return _getErrorsForFile(file).then((List<AnalysisError> errors) {
54 expect(errors, isEmpty);
55 });
56 }
57
61 test_hasErrors() { 58 test_hasErrors() {
62 addTestFile(''' 59 addTestFile('''
63 main() { 60 main() {
64 print(42) 61 print(42)
65 } 62 }
66 '''); 63 ''');
67 return getErrors().then((List<AnalysisError> errors) { 64 return _getErrors().then((List<AnalysisError> errors) {
68 expect(errors, hasLength(1)); 65 expect(errors, hasLength(1));
69 { 66 {
70 AnalysisError error = errors[0]; 67 AnalysisError error = errors[0];
71 expect(error.severity, 'ERROR'); 68 expect(error.severity, 'ERROR');
72 expect(error.type, 'SYNTACTIC_ERROR'); 69 expect(error.type, 'SYNTACTIC_ERROR');
73 expect(error.location.file, testFile); 70 expect(error.location.file, testFile);
74 expect(error.location.startLine, 2); 71 expect(error.location.startLine, 2);
75 } 72 }
76 }); 73 });
77 } 74 }
78 75
79 test_noErrors() { 76 test_noErrors() {
80 addTestFile(''' 77 addTestFile('''
81 main() { 78 main() {
82 print(42); 79 print(42);
83 } 80 }
84 '''); 81 ''');
85 return getErrors().then((List<AnalysisError> errors) { 82 return _getErrors().then((List<AnalysisError> errors) {
86 expect(errors, isEmpty); 83 expect(errors, isEmpty);
87 }); 84 });
88 } 85 }
89 86
90 test_fileWithoutContext() { 87 test_removeContextAfterRequest() {
91 String file = '/outside.dart'; 88 addTestFile('''
92 addFile(file, '''
93 main() { 89 main() {
94 print(42); 90 print(42)
95 } 91 }
96 '''); 92 ''');
97 return getErrorsForFile(file).then((List<AnalysisError> errors) { 93 _sendGetErrorsRequest(testFile);
98 expect(errors, isEmpty); 94 {
95 Folder projectFolder = resourceProvider.getResource(projectPath);
96 server.contextDirectoryManager.removeContext(projectFolder);
97 }
98 return _waitForResponse().then((Response response) {
99 expect(response.getResult(ERRORS), isEmpty);
100 RequestError error = response.error;
101 expect(error, isNotNull);
102 expect(error.code, -13);
99 }); 103 });
100 } 104 }
105
106 Future<List<AnalysisError>> _getErrors() {
107 return _getErrorsForFile(testFile);
108 }
109
110 Future<List<AnalysisError>> _getErrorsForFile(String file) {
111 _sendGetErrorsRequest(file);
112 return waitForTasksFinished().then((_) {
Paul Berry 2014/07/23 15:06:51 Shouldn't just "return _waitForGetErrorsResponse()
scheglov 2014/07/24 16:54:04 Yes, it is sufficient. Thanks.
113 return _waitForGetErrorsResponse();
114 });
115 }
116
117 void _sendGetErrorsRequest(String file) {
118 Request request = new Request(requestId, ANALYSIS_GET_ERRORS);
119 request.setParameter(FILE, file);
120 server.handleRequest(request);
121 }
122
123 Future<List<AnalysisError>> _waitForGetErrorsResponse() {
124 return _waitForResponse().then((Response response) {
125 List errorsJsons = response.getResult(ERRORS);
126 return errorsJsons.map(AnalysisError.fromJson).toList();
127 });
128 }
129
130 Future<Response> _waitForResponse() {
131 waitForResponse() {
Paul Berry 2014/07/23 15:06:51 It seems unfortunate that we have to busy wait for
scheglov 2014/07/24 16:54:04 OK Although I have to duplicate some code to simu
132 for (Response response in serverChannel.responsesReceived) {
133 if (response.id == requestId) {
134 return response;
135 }
136 }
137 return new Future(waitForResponse);
138 }
139 return new Future(waitForResponse);
140 }
101 } 141 }
OLDNEW
« pkg/analysis_server/lib/src/domain_analysis.dart ('K') | « pkg/analysis_server/lib/src/protocol.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698