| 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.operation.queue; | 5 library test.operation.queue; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/analysis_server.dart'; | 7 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/operation/operation.dart'; | 8 import 'package:analysis_server/src/operation/operation.dart'; |
| 9 import 'package:analysis_server/src/operation/operation_analysis.dart'; | 9 import 'package:analysis_server/src/operation/operation_analysis.dart'; |
| 10 import 'package:analysis_server/src/operation/operation_queue.dart'; | 10 import 'package:analysis_server/src/operation/operation_queue.dart'; |
| 11 import 'package:analyzer/src/generated/engine.dart'; | 11 import 'package:analyzer/src/generated/engine.dart'; |
| 12 import 'package:typed_mock/typed_mock.dart'; | 12 import 'package:typed_mock/typed_mock.dart'; |
| 13 import 'package:unittest/unittest.dart'; | 13 import 'package:unittest/unittest.dart'; |
| 14 | 14 |
| 15 main() { | 15 main() { |
| 16 groupSep = ' | '; | 16 groupSep = ' | '; |
| 17 | 17 |
| 18 group('ServerOperationQueue', () { | 18 group('ServerOperationQueue', () { |
| 19 AnalysisServer server; | |
| 20 ServerOperationQueue queue; | 19 ServerOperationQueue queue; |
| 21 | 20 |
| 22 setUp(() { | 21 setUp(() { |
| 23 server = new AnalysisServerMock(); | 22 queue = new ServerOperationQueue(); |
| 24 queue = new ServerOperationQueue(server); | |
| 25 }); | 23 }); |
| 26 | 24 |
| 27 test('clear', () { | 25 test('clear', () { |
| 28 var operationA = mockOperation(ServerOperationPriority.SEARCH); | 26 var operationA = mockOperation(ServerOperationPriority.ANALYSIS); |
| 29 var operationB = mockOperation(ServerOperationPriority.REFACTORING); | 27 var operationB = mockOperation(ServerOperationPriority.ANALYSIS_CONTINUE); |
| 30 queue.add(operationA); | 28 queue.add(operationA); |
| 31 queue.add(operationB); | 29 queue.add(operationB); |
| 32 // there are some operations | 30 // there are some operations |
| 33 expect(queue.isEmpty, false); | 31 expect(queue.isEmpty, false); |
| 34 // clear - no operations | 32 // clear - no operations |
| 35 queue.clear(); | 33 queue.clear(); |
| 36 expect(queue.isEmpty, true); | 34 expect(queue.isEmpty, true); |
| 37 }); | 35 }); |
| 38 | 36 |
| 39 group('isEmpty', () { | 37 group('isEmpty', () { |
| 40 test('true', () { | 38 test('true', () { |
| 41 expect(queue.isEmpty, isTrue); | 39 expect(queue.isEmpty, isTrue); |
| 42 }); | 40 }); |
| 43 | 41 |
| 44 test('false', () { | 42 test('false', () { |
| 45 var operation = mockOperation(ServerOperationPriority.SEARCH); | 43 var operation = mockOperation(ServerOperationPriority.ANALYSIS); |
| 46 queue.add(operation); | 44 queue.add(operation); |
| 47 expect(queue.isEmpty, isFalse); | 45 expect(queue.isEmpty, isFalse); |
| 48 }); | 46 }); |
| 49 }); | 47 }); |
| 50 | 48 |
| 51 group('take', () { | 49 group('take', () { |
| 52 test('empty', () { | 50 test('empty', () { |
| 53 expect(queue.take(), isNull); | 51 expect(queue.take(), isNull); |
| 54 }); | 52 }); |
| 55 | 53 |
| 56 test('use operation priorities', () { | 54 test('use operation priorities', () { |
| 57 when(server.isPriorityContext(anyObject)).thenReturn(false); | 55 var operationA = mockOperation(ServerOperationPriority.ANALYSIS); |
| 58 var analysisContext = new AnalysisContextMock(); | 56 var operationB = |
| 59 var operationA = mockOperation(ServerOperationPriority.SEARCH); | 57 mockOperation(ServerOperationPriority.ANALYSIS_CONTINUE); |
| 60 var operationB = mockOperation(ServerOperationPriority.REFACTORING); | 58 var operationC = |
| 61 var operationC = new PerformAnalysisOperation(analysisContext, false); | 59 mockOperation(ServerOperationPriority.PRIORITY_ANALYSIS); |
| 62 queue.add(operationA); | 60 queue.add(operationA); |
| 63 queue.add(operationB); | 61 queue.add(operationB); |
| 64 queue.add(operationC); | 62 queue.add(operationC); |
| 65 expect(queue.take(), operationC); | 63 expect(queue.take(), operationC); |
| 64 expect(queue.take(), operationB); |
| 66 expect(queue.take(), operationA); | 65 expect(queue.take(), operationA); |
| 67 expect(queue.take(), operationB); | |
| 68 expect(queue.take(), isNull); | 66 expect(queue.take(), isNull); |
| 69 }); | 67 }); |
| 70 | 68 |
| 71 test('continue analysis first', () { | 69 test('continue analysis first', () { |
| 72 when(server.isPriorityContext(anyObject)).thenReturn(false); | |
| 73 var analysisContext = new AnalysisContextMock(); | 70 var analysisContext = new AnalysisContextMock(); |
| 74 var operationA = new PerformAnalysisOperation(analysisContext, false); | 71 var operationA = |
| 75 var operationB = new PerformAnalysisOperation(analysisContext, true); | 72 new PerformAnalysisOperation(analysisContext, false, false); |
| 73 var operationB = |
| 74 new PerformAnalysisOperation(analysisContext, false, true); |
| 76 queue.add(operationA); | 75 queue.add(operationA); |
| 77 queue.add(operationB); | 76 queue.add(operationB); |
| 78 expect(queue.take(), operationB); | 77 expect(queue.take(), operationB); |
| 79 expect(queue.take(), operationA); | 78 expect(queue.take(), operationA); |
| 80 expect(queue.take(), isNull); | 79 expect(queue.take(), isNull); |
| 81 }); | 80 }); |
| 82 | 81 |
| 83 test('priority context first', () { | 82 test('priority context first', () { |
| 84 var analysisContextA = new AnalysisContextMock(); | 83 var analysisContextA = new AnalysisContextMock(); |
| 85 var analysisContextB = new AnalysisContextMock(); | 84 var analysisContextB = new AnalysisContextMock(); |
| 86 var operationA = new PerformAnalysisOperation(analysisContextA, false); | 85 var operationA = |
| 87 var operationB = new PerformAnalysisOperation(analysisContextB, false); | 86 new PerformAnalysisOperation(analysisContextA, false, false); |
| 87 var operationB = |
| 88 new PerformAnalysisOperation(analysisContextB, true, false); |
| 88 queue.add(operationA); | 89 queue.add(operationA); |
| 89 queue.add(operationB); | 90 queue.add(operationB); |
| 90 when(server.isPriorityContext(analysisContextA)).thenReturn(false); | |
| 91 when(server.isPriorityContext(analysisContextB)).thenReturn(true); | |
| 92 expect(queue.take(), operationB); | 91 expect(queue.take(), operationB); |
| 93 expect(queue.take(), operationA); | 92 expect(queue.take(), operationA); |
| 94 expect(queue.take(), isNull); | 93 expect(queue.take(), isNull); |
| 95 }); | 94 }); |
| 96 }); | 95 }); |
| 97 }); | 96 }); |
| 98 } | 97 } |
| 99 | 98 |
| 100 | 99 |
| 101 /** | 100 /** |
| (...skipping 15 matching lines...) Expand all Loading... |
| 117 } | 116 } |
| 118 | 117 |
| 119 class ServerContextManagerMock extends TypedMock implements ServerContextManager | 118 class ServerContextManagerMock extends TypedMock implements ServerContextManager |
| 120 { | 119 { |
| 121 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 120 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 122 } | 121 } |
| 123 | 122 |
| 124 class ServerOperationMock extends TypedMock implements ServerOperation { | 123 class ServerOperationMock extends TypedMock implements ServerOperation { |
| 125 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 124 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 126 } | 125 } |
| OLD | NEW |