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.analysis.get_navigation; | 5 library test.analysis.get_navigation; |
6 | 6 |
7 import 'package:analysis_server/src/domain_analysis.dart'; | 7 import 'package:analysis_server/src/domain_analysis.dart'; |
8 import 'package:analysis_server/src/protocol.dart'; | 8 import 'package:analysis_server/src/protocol.dart'; |
9 import 'package:analyzer/file_system/file_system.dart'; | 9 import 'package:analyzer/file_system/file_system.dart'; |
10 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 10 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
(...skipping 10 matching lines...) Expand all Loading... |
21 class GetNavigationTest extends AbstractNavigationTest { | 21 class GetNavigationTest extends AbstractNavigationTest { |
22 static const String requestId = 'test-getNavigtion'; | 22 static const String requestId = 'test-getNavigtion'; |
23 | 23 |
24 @override | 24 @override |
25 void setUp() { | 25 void setUp() { |
26 super.setUp(); | 26 super.setUp(); |
27 server.handlers = [new AnalysisDomainHandler(server),]; | 27 server.handlers = [new AnalysisDomainHandler(server),]; |
28 createProject(); | 28 createProject(); |
29 } | 29 } |
30 | 30 |
31 test_afterAnalysisComplete() async { | |
32 addTestFile(''' | |
33 main() { | |
34 var test = 0; | |
35 print(test); | |
36 } | |
37 '''); | |
38 await waitForTasksFinished(); | |
39 await _getNavigation(testFile, testCode.indexOf('test);'), 0); | |
40 assertHasRegion('test);'); | |
41 assertHasTarget('test = 0'); | |
42 } | |
43 | |
44 test_beforeAnalysisComplete() async { | 31 test_beforeAnalysisComplete() async { |
45 addTestFile(''' | 32 addTestFile(''' |
46 main() { | 33 main() { |
47 var test = 0; | 34 var test = 0; |
48 print(test); | 35 print(test); |
49 } | 36 } |
50 '''); | 37 '''); |
51 await _getNavigation(testFile, testCode.indexOf('test);'), 0); | 38 await _getNavigation(testFile, testCode.indexOf('test);'), 0); |
52 assertHasRegion('test);'); | 39 assertHasRegion('test);'); |
53 assertHasTarget('test = 0'); | 40 assertHasTarget('test = 0'); |
54 } | 41 } |
55 | 42 |
56 test_fileDoesNotExist() { | 43 test_fileDoesNotExist() { |
57 String file = '$projectPath/doesNotExist.dart'; | 44 String file = '$projectPath/doesNotExist.dart'; |
58 return _checkInvalid(file, -1, -1); | 45 return _checkInvalid(file, -1, -1); |
59 } | 46 } |
60 | 47 |
61 test_fileWithoutContext() { | 48 test_fileWithoutContext() { |
62 String file = '/outside.dart'; | 49 String file = '/outside.dart'; |
63 addFile(file, ''' | 50 addFile(file, ''' |
64 main() { | 51 main() { |
65 print(42); | 52 print(42); |
66 } | 53 } |
67 '''); | 54 '''); |
68 return _checkInvalid(file, -1, -1); | 55 return _checkInvalid(file, -1, -1); |
69 } | 56 } |
70 | 57 |
| 58 test_multipleRegions() async { |
| 59 addTestFile(''' |
| 60 main() { |
| 61 var aaa = 1; |
| 62 var bbb = 2; |
| 63 var ccc = 3; |
| 64 var ddd = 4; |
| 65 print(aaa + bbb + ccc + ddd); |
| 66 } |
| 67 '''); |
| 68 await waitForTasksFinished(); |
| 69 // request navigation |
| 70 String navCode = ' + bbb + '; |
| 71 await _getNavigation(testFile, testCode.indexOf(navCode), navCode.length); |
| 72 // verify |
| 73 { |
| 74 assertHasRegion('aaa +'); |
| 75 assertHasTarget('aaa = 1'); |
| 76 } |
| 77 { |
| 78 assertHasRegion('bbb +'); |
| 79 assertHasTarget('bbb = 2'); |
| 80 } |
| 81 { |
| 82 assertHasRegion('ccc +'); |
| 83 assertHasTarget('ccc = 3'); |
| 84 } |
| 85 assertNoRegionAt('ddd)'); |
| 86 } |
| 87 |
71 test_removeContextAfterRequest() async { | 88 test_removeContextAfterRequest() async { |
72 addTestFile(''' | 89 addTestFile(''' |
73 main() { | 90 main() { |
74 var test = 0; | 91 var test = 0; |
75 print(test); | 92 print(test); |
76 } | 93 } |
77 '''); | 94 '''); |
78 // handle the request synchronously | 95 // handle the request synchronously |
79 Request request = | 96 Request request = |
80 _createGetNavigationRequest(testFile, testCode.indexOf('test);'), 0); | 97 _createGetNavigationRequest(testFile, testCode.indexOf('test);'), 0); |
81 server.handleRequest(request); | 98 server.handleRequest(request); |
82 // remove context, causes sending an "invalid file" error | 99 // remove context, causes sending an "invalid file" error |
83 { | 100 { |
84 Folder projectFolder = resourceProvider.getResource(projectPath); | 101 Folder projectFolder = resourceProvider.getResource(projectPath); |
85 server.contextManager.callbacks.removeContext(projectFolder, <String>[]); | 102 server.contextManager.callbacks.removeContext(projectFolder, <String>[]); |
86 } | 103 } |
87 // wait for an error response | 104 // wait for an error response |
88 Response response = await serverChannel.waitForResponse(request); | 105 Response response = await serverChannel.waitForResponse(request); |
89 expect(response.error, isNotNull); | 106 expect(response.error, isNotNull); |
90 expect(response.error.code, RequestErrorCode.GET_NAVIGATION_INVALID_FILE); | 107 expect(response.error.code, RequestErrorCode.GET_NAVIGATION_INVALID_FILE); |
91 } | 108 } |
92 | 109 |
| 110 test_zeroLength_end() async { |
| 111 addTestFile(''' |
| 112 main() { |
| 113 var test = 0; |
| 114 print(test); |
| 115 } |
| 116 '''); |
| 117 await waitForTasksFinished(); |
| 118 await _getNavigation(testFile, testCode.indexOf(');'), 0); |
| 119 assertHasRegion('test);'); |
| 120 assertHasTarget('test = 0'); |
| 121 } |
| 122 |
| 123 test_zeroLength_start() async { |
| 124 addTestFile(''' |
| 125 main() { |
| 126 var test = 0; |
| 127 print(test); |
| 128 } |
| 129 '''); |
| 130 await waitForTasksFinished(); |
| 131 await _getNavigation(testFile, testCode.indexOf('test);'), 0); |
| 132 assertHasRegion('test);'); |
| 133 assertHasTarget('test = 0'); |
| 134 } |
| 135 |
93 _checkInvalid(String file, int offset, int length) async { | 136 _checkInvalid(String file, int offset, int length) async { |
94 Request request = _createGetNavigationRequest(file, offset, length); | 137 Request request = _createGetNavigationRequest(file, offset, length); |
95 Response response = await serverChannel.sendRequest(request); | 138 Response response = await serverChannel.sendRequest(request); |
96 expect(response.error, isNotNull); | 139 expect(response.error, isNotNull); |
97 expect(response.error.code, RequestErrorCode.GET_NAVIGATION_INVALID_FILE); | 140 expect(response.error.code, RequestErrorCode.GET_NAVIGATION_INVALID_FILE); |
98 } | 141 } |
99 | 142 |
100 Request _createGetNavigationRequest(String file, int offset, int length) { | 143 Request _createGetNavigationRequest(String file, int offset, int length) { |
101 return new AnalysisGetNavigationParams(file, offset, length) | 144 return new AnalysisGetNavigationParams(file, offset, length) |
102 .toRequest(requestId); | 145 .toRequest(requestId); |
103 } | 146 } |
104 | 147 |
105 _getNavigation(String file, int offset, int length) async { | 148 _getNavigation(String file, int offset, int length) async { |
106 Request request = _createGetNavigationRequest(file, offset, length); | 149 Request request = _createGetNavigationRequest(file, offset, length); |
107 Response response = await serverChannel.sendRequest(request); | 150 Response response = await serverChannel.sendRequest(request); |
108 AnalysisGetNavigationResult result = | 151 AnalysisGetNavigationResult result = |
109 new AnalysisGetNavigationResult.fromResponse(response); | 152 new AnalysisGetNavigationResult.fromResponse(response); |
110 targetFiles = result.files; | 153 targetFiles = result.files; |
111 targets = result.targets; | 154 targets = result.targets; |
112 regions = result.regions; | 155 regions = result.regions; |
113 } | 156 } |
114 } | 157 } |
OLD | NEW |