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

Side by Side Diff: pkg/analysis_server/test/operation/operation_queue_test.dart

Issue 2957643002: Remove the unused operations queue (Closed)
Patch Set: Created 3 years, 6 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:analysis_server/src/analysis_server.dart';
6 import 'package:analysis_server/src/context_manager.dart';
7 import 'package:analysis_server/src/operation/operation.dart';
8 import 'package:analysis_server/src/operation/operation_analysis.dart';
9 import 'package:analysis_server/src/operation/operation_queue.dart';
10 import 'package:analysis_server/src/services/search/search_engine.dart';
11 import 'package:analyzer/file_system/file_system.dart';
12 import 'package:analyzer/src/generated/engine.dart';
13 import 'package:analyzer/src/generated/source.dart';
14 import 'package:test/test.dart';
15 import 'package:test_reflective_loader/test_reflective_loader.dart';
16 import 'package:typed_mock/typed_mock.dart';
17
18 import '../mocks.dart';
19
20 main() {
21 defineReflectiveSuite(() {
22 defineReflectiveTests(ServerOperationQueueTest);
23 });
24 }
25
26 /**
27 * Return a [ServerOperation] mock with the given priority.
28 */
29 ServerOperation mockOperation(ServerOperationPriority priority) {
30 ServerOperation operation = new _ServerOperationMock();
31 when(operation.priority).thenReturn(priority);
32 return operation;
33 }
34
35 class AnalysisContextMock extends TypedMock implements InternalAnalysisContext {
36 List<Source> prioritySources = <Source>[];
37 }
38
39 class AnalysisServerMock extends TypedMock implements AnalysisServer {
40 @override
41 final ResourceProvider resourceProvider;
42
43 @override
44 final SearchEngine searchEngine;
45
46 AnalysisServerMock({this.resourceProvider, this.searchEngine});
47 }
48
49 class ServerContextManagerMock extends TypedMock implements ContextManager {}
50
51 @reflectiveTest
52 class ServerOperationQueueTest {
53 ServerOperationQueue queue = new ServerOperationQueue();
54
55 void test_add_withMerge() {
56 var opA = new _MergeableOperationMock();
57 var opB = new _MergeableOperationMock();
58 var opC = new _MergeableOperationMock();
59 when(opA.merge(opC)).thenReturn(true);
60 when(opA.merge(anyObject)).thenReturn(false);
61 when(opB.merge(anyObject)).thenReturn(false);
62 when(opC.merge(anyObject)).thenReturn(false);
63 queue.add(opA);
64 queue.add(opB);
65 queue.add(opC);
66 expect(queue.take(), same(opA));
67 expect(queue.take(), same(opB));
68 // no opC, it was merged into opA
69 expect(queue.isEmpty, isTrue);
70 }
71
72 void test_clear() {
73 var operationA = mockOperation(ServerOperationPriority.ANALYSIS);
74 var operationB = mockOperation(ServerOperationPriority.ANALYSIS_CONTINUE);
75 queue.add(operationA);
76 queue.add(operationB);
77 // there are some operations
78 expect(queue.isEmpty, false);
79 // clear - no operations
80 queue.clear();
81 expect(queue.isEmpty, true);
82 }
83
84 void test_contextRemoved() {
85 var contextA = new AnalysisContextMock();
86 var contextB = new AnalysisContextMock();
87 var opA1 = new _ServerOperationMock(contextA);
88 var opA2 = new _ServerOperationMock(contextA);
89 var opB1 = new _ServerOperationMock(contextB);
90 var opB2 = new _ServerOperationMock(contextB);
91 when(opA1.priority)
92 .thenReturn(ServerOperationPriority.ANALYSIS_NOTIFICATION);
93 when(opA2.priority)
94 .thenReturn(ServerOperationPriority.ANALYSIS_NOTIFICATION);
95 when(opB1.priority)
96 .thenReturn(ServerOperationPriority.ANALYSIS_NOTIFICATION);
97 when(opB2.priority)
98 .thenReturn(ServerOperationPriority.ANALYSIS_NOTIFICATION);
99 queue.add(opA1);
100 queue.add(opB1);
101 queue.add(opA2);
102 queue.add(opB2);
103 queue.contextRemoved(contextA);
104 expect(queue.take(), same(opB1));
105 expect(queue.take(), same(opB2));
106 }
107
108 void test_isEmpty_false() {
109 var operation = mockOperation(ServerOperationPriority.ANALYSIS);
110 queue.add(operation);
111 expect(queue.isEmpty, isFalse);
112 }
113
114 void test_isEmpty_true() {
115 expect(queue.isEmpty, isTrue);
116 }
117
118 void test_peek() {
119 var operationA = mockOperation(ServerOperationPriority.ANALYSIS);
120 var operationB = mockOperation(ServerOperationPriority.ANALYSIS);
121 queue.add(operationA);
122 queue.add(operationB);
123 expect(queue.peek(), operationA);
124 expect(queue.peek(), operationA);
125 expect(queue.peek(), operationA);
126 }
127
128 void test_peek_empty() {
129 expect(queue.peek(), isNull);
130 }
131
132 void test_reschedule() {
133 var prioritySource = new MockSource();
134 var analysisContextA = new AnalysisContextMock();
135 var analysisContextB = new AnalysisContextMock();
136 var operationA = new PerformAnalysisOperation(analysisContextA, false);
137 var operationB = new PerformAnalysisOperation(analysisContextB, false);
138 queue.add(operationA);
139 queue.add(operationB);
140 // update priority sources and reschedule
141 analysisContextB.prioritySources = [prioritySource];
142 queue.reschedule();
143 // verify order
144 expect(queue.take(), operationB);
145 expect(queue.take(), operationA);
146 expect(queue.take(), isNull);
147 }
148
149 void test_sourceAboutToChange() {
150 Source sourceA = new _SourceMock();
151 Source sourceB = new _SourceMock();
152 var opA1 = new _SourceSensitiveOperationMock(sourceA);
153 var opA2 = new _SourceSensitiveOperationMock(sourceA);
154 var opB1 = new _SourceSensitiveOperationMock(sourceB);
155 var opB2 = new _SourceSensitiveOperationMock(sourceB);
156 queue.add(opA1);
157 queue.add(opB1);
158 queue.add(opA2);
159 queue.add(opB2);
160 queue.sourceAboutToChange(sourceA);
161 expect(queue.take(), same(opB1));
162 expect(queue.take(), same(opB2));
163 }
164
165 void test_take_continueAnalysisFirst() {
166 var analysisContext = new AnalysisContextMock();
167 var operationA = new PerformAnalysisOperation(analysisContext, false);
168 var operationB = new PerformAnalysisOperation(analysisContext, true);
169 queue.add(operationA);
170 queue.add(operationB);
171 expect(queue.take(), operationB);
172 expect(queue.take(), operationA);
173 expect(queue.take(), isNull);
174 }
175
176 void test_take_empty() {
177 expect(queue.take(), isNull);
178 }
179
180 void test_take_priorityContextFirst() {
181 var prioritySource = new MockSource();
182 var analysisContextA = new AnalysisContextMock();
183 var analysisContextB = new AnalysisContextMock();
184 analysisContextB.prioritySources = [prioritySource];
185 var operationA = new PerformAnalysisOperation(analysisContextA, false);
186 var operationB = new PerformAnalysisOperation(analysisContextB, false);
187 queue.add(operationA);
188 queue.add(operationB);
189 expect(queue.take(), operationB);
190 expect(queue.take(), operationA);
191 expect(queue.take(), isNull);
192 }
193
194 void test_take_useOperationPriorities() {
195 var operationA = mockOperation(ServerOperationPriority.ANALYSIS);
196 var operationB = mockOperation(ServerOperationPriority.ANALYSIS_CONTINUE);
197 var operationC = mockOperation(ServerOperationPriority.PRIORITY_ANALYSIS);
198 queue.add(operationA);
199 queue.add(operationB);
200 queue.add(operationC);
201 expect(queue.take(), operationC);
202 expect(queue.take(), operationB);
203 expect(queue.take(), operationA);
204 expect(queue.take(), isNull);
205 }
206
207 void test_takeIf() {
208 var operationA = mockOperation(ServerOperationPriority.ANALYSIS);
209 var operationB = mockOperation(ServerOperationPriority.ANALYSIS);
210 queue.add(operationA);
211 queue.add(operationB);
212 expect(queue.takeIf((_) => false), isNull);
213 expect(queue.takeIf((operation) => operation == operationB), operationB);
214 expect(queue.takeIf((operation) => operation == operationB), isNull);
215 expect(queue.takeIf((operation) => operation == operationA), operationA);
216 expect(queue.isEmpty, isTrue);
217 }
218 }
219
220 class _MergeableOperationMock extends TypedMock implements MergeableOperation {
221 @override
222 ServerOperationPriority get priority {
223 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
224 }
225 }
226
227 class _ServerOperationMock extends TypedMock implements ServerOperation {
228 final AnalysisContext context;
229
230 _ServerOperationMock([this.context]);
231 }
232
233 class _SourceMock extends TypedMock implements Source {}
234
235 class _SourceSensitiveOperationMock extends TypedMock
236 implements SourceSensitiveOperation {
237 final Source source;
238
239 _SourceSensitiveOperationMock(this.source);
240
241 @override
242 ServerOperationPriority get priority {
243 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
244 }
245
246 @override
247 bool shouldBeDiscardedOnSourceChange(Source source) {
248 return source == this.source;
249 }
250 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/test/mocks.dart ('k') | pkg/analysis_server/test/operation/operation_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698