| 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.services.completion.suggestion; | 5 library test.services.completion.suggestion; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; | 10 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 return new Future.delayed(Duration.ZERO, () => pumpEventQueue(times - 1)); | 39 return new Future.delayed(Duration.ZERO, () => pumpEventQueue(times - 1)); |
| 40 } | 40 } |
| 41 | 41 |
| 42 @reflectiveTest | 42 @reflectiveTest |
| 43 class DartCompletionManagerTest extends AbstractSingleUnitTest { | 43 class DartCompletionManagerTest extends AbstractSingleUnitTest { |
| 44 Index index; | 44 Index index; |
| 45 SearchEngineImpl searchEngine; | 45 SearchEngineImpl searchEngine; |
| 46 Source source; | 46 Source source; |
| 47 CompletionPerformance perf; | 47 CompletionPerformance perf; |
| 48 DartCompletionManager manager; | 48 DartCompletionManager manager; |
| 49 MockCompletionComputer computer1; | 49 MockCompletionContributor contributor1; |
| 50 MockCompletionComputer computer2; | 50 MockCompletionContributor contributor2; |
| 51 CompletionSuggestion suggestion1; | 51 CompletionSuggestion suggestion1; |
| 52 CompletionSuggestion suggestion2; | 52 CompletionSuggestion suggestion2; |
| 53 bool _continuePerformingAnalysis = true; | 53 bool _continuePerformingAnalysis = true; |
| 54 | 54 |
| 55 void resolveLibrary() { | 55 void resolveLibrary() { |
| 56 context.resolveCompilationUnit( | 56 context.resolveCompilationUnit( |
| 57 source, context.computeLibraryElement(source)); | 57 source, context.computeLibraryElement(source)); |
| 58 } | 58 } |
| 59 | 59 |
| 60 @override | 60 @override |
| (...skipping 10 matching lines...) Expand all Loading... |
| 71 DART_RELEVANCE_DEFAULT, "suggestion2", 2, 2, false, false); | 71 DART_RELEVANCE_DEFAULT, "suggestion2", 2, 2, false, false); |
| 72 new Future(_performAnalysis); | 72 new Future(_performAnalysis); |
| 73 } | 73 } |
| 74 | 74 |
| 75 @override | 75 @override |
| 76 void tearDown() { | 76 void tearDown() { |
| 77 _continuePerformingAnalysis = false; | 77 _continuePerformingAnalysis = false; |
| 78 } | 78 } |
| 79 | 79 |
| 80 test_compute_fastAndFull() { | 80 test_compute_fastAndFull() { |
| 81 computer1 = new MockCompletionComputer(suggestion1, null); | 81 contributor1 = new MockCompletionContributor(suggestion1, null); |
| 82 computer2 = new MockCompletionComputer(null, suggestion2); | 82 contributor2 = new MockCompletionContributor(null, suggestion2); |
| 83 manager.computers = [computer1, computer2]; | 83 manager.contributors = [contributor1, contributor2]; |
| 84 int count = 0; | 84 int count = 0; |
| 85 bool done = false; | 85 bool done = false; |
| 86 CompletionRequest completionRequest = new CompletionRequest(0, perf); | 86 CompletionRequest completionRequest = new CompletionRequest(0, perf); |
| 87 manager.results(completionRequest).listen((CompletionResult r) { | 87 manager.results(completionRequest).listen((CompletionResult r) { |
| 88 switch (++count) { | 88 switch (++count) { |
| 89 case 1: | 89 case 1: |
| 90 computer1.assertCalls(context, source, 0, searchEngine); | 90 contributor1.assertCalls(context, source, 0, searchEngine); |
| 91 computer2.assertCalls(context, source, 0, searchEngine); | 91 contributor2.assertCalls(context, source, 0, searchEngine); |
| 92 expect(r.last, isFalse); | 92 expect(r.last, isFalse); |
| 93 expect(r.suggestions, hasLength(1)); | 93 expect(r.suggestions, hasLength(1)); |
| 94 expect(r.suggestions, contains(suggestion1)); | 94 expect(r.suggestions, contains(suggestion1)); |
| 95 resolveLibrary(); | 95 resolveLibrary(); |
| 96 break; | 96 break; |
| 97 case 2: | 97 case 2: |
| 98 computer1.assertFull(0); | 98 contributor1.assertFull(0); |
| 99 computer2.assertFull(1); | 99 contributor2.assertFull(1); |
| 100 expect(r.last, isTrue); | 100 expect(r.last, isTrue); |
| 101 expect(r.suggestions, hasLength(2)); | 101 expect(r.suggestions, hasLength(2)); |
| 102 expect(r.suggestions, contains(suggestion1)); | 102 expect(r.suggestions, contains(suggestion1)); |
| 103 expect(r.suggestions, contains(suggestion2)); | 103 expect(r.suggestions, contains(suggestion2)); |
| 104 break; | 104 break; |
| 105 default: | 105 default: |
| 106 fail('unexpected'); | 106 fail('unexpected'); |
| 107 } | 107 } |
| 108 }, onDone: () { | 108 }, onDone: () { |
| 109 done = true; | 109 done = true; |
| 110 expect(count, equals(2)); | 110 expect(count, equals(2)); |
| 111 }); | 111 }); |
| 112 return pumpEventQueue().then((_) { | 112 return pumpEventQueue().then((_) { |
| 113 expect(done, isTrue); | 113 expect(done, isTrue); |
| 114 }); | 114 }); |
| 115 } | 115 } |
| 116 | 116 |
| 117 test_compute_fastOnly() { | 117 test_compute_fastOnly() { |
| 118 computer1 = new MockCompletionComputer(suggestion1, null); | 118 contributor1 = new MockCompletionContributor(suggestion1, null); |
| 119 computer2 = new MockCompletionComputer(suggestion2, null); | 119 contributor2 = new MockCompletionContributor(suggestion2, null); |
| 120 manager.computers = [computer1, computer2]; | 120 manager.contributors = [contributor1, contributor2]; |
| 121 int count = 0; | 121 int count = 0; |
| 122 bool done = false; | 122 bool done = false; |
| 123 CompletionRequest completionRequest = new CompletionRequest(0, perf); | 123 CompletionRequest completionRequest = new CompletionRequest(0, perf); |
| 124 manager.results(completionRequest).listen((CompletionResult r) { | 124 manager.results(completionRequest).listen((CompletionResult r) { |
| 125 switch (++count) { | 125 switch (++count) { |
| 126 case 1: | 126 case 1: |
| 127 computer1.assertCalls(context, source, 0, searchEngine); | 127 contributor1.assertCalls(context, source, 0, searchEngine); |
| 128 computer2.assertCalls(context, source, 0, searchEngine); | 128 contributor2.assertCalls(context, source, 0, searchEngine); |
| 129 expect(r.last, isTrue); | 129 expect(r.last, isTrue); |
| 130 expect(r.suggestions, hasLength(2)); | 130 expect(r.suggestions, hasLength(2)); |
| 131 expect(r.suggestions, contains(suggestion1)); | 131 expect(r.suggestions, contains(suggestion1)); |
| 132 expect(r.suggestions, contains(suggestion2)); | 132 expect(r.suggestions, contains(suggestion2)); |
| 133 break; | 133 break; |
| 134 default: | 134 default: |
| 135 fail('unexpected'); | 135 fail('unexpected'); |
| 136 } | 136 } |
| 137 }, onDone: () { | 137 }, onDone: () { |
| 138 done = true; | 138 done = true; |
| 139 expect(count, equals(1)); | 139 expect(count, equals(1)); |
| 140 }); | 140 }); |
| 141 return pumpEventQueue().then((_) { | 141 return pumpEventQueue().then((_) { |
| 142 expect(done, isTrue); | 142 expect(done, isTrue); |
| 143 }); | 143 }); |
| 144 } | 144 } |
| 145 | 145 |
| 146 void _performAnalysis() { | 146 void _performAnalysis() { |
| 147 if (!_continuePerformingAnalysis) { | 147 if (!_continuePerformingAnalysis) { |
| 148 return; | 148 return; |
| 149 } | 149 } |
| 150 context.performAnalysisTask(); | 150 context.performAnalysisTask(); |
| 151 new Future(_performAnalysis); | 151 new Future(_performAnalysis); |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 | 154 |
| 155 class MockCompletionComputer extends DartCompletionComputer { | 155 class MockCompletionContributor extends DartCompletionContributor { |
| 156 final CompletionSuggestion fastSuggestion; | 156 final CompletionSuggestion fastSuggestion; |
| 157 final CompletionSuggestion fullSuggestion; | 157 final CompletionSuggestion fullSuggestion; |
| 158 int fastCount = 0; | 158 int fastCount = 0; |
| 159 int fullCount = 0; | 159 int fullCount = 0; |
| 160 DartCompletionRequest request; | 160 DartCompletionRequest request; |
| 161 | 161 |
| 162 MockCompletionComputer(this.fastSuggestion, this.fullSuggestion); | 162 MockCompletionContributor(this.fastSuggestion, this.fullSuggestion); |
| 163 | 163 |
| 164 assertCalls(AnalysisContext context, Source source, int offset, | 164 assertCalls(AnalysisContext context, Source source, int offset, |
| 165 SearchEngine searchEngine) { | 165 SearchEngine searchEngine) { |
| 166 expect(request.context, equals(context)); | 166 expect(request.context, equals(context)); |
| 167 expect(request.source, equals(source)); | 167 expect(request.source, equals(source)); |
| 168 expect(request.offset, equals(offset)); | 168 expect(request.offset, equals(offset)); |
| 169 expect(request.searchEngine, equals(searchEngine)); | 169 expect(request.searchEngine, equals(searchEngine)); |
| 170 expect(this.fastCount, equals(1)); | 170 expect(this.fastCount, equals(1)); |
| 171 expect(this.fullCount, equals(0)); | 171 expect(this.fullCount, equals(0)); |
| 172 } | 172 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 189 @override | 189 @override |
| 190 Future<bool> computeFull(DartCompletionRequest request) { | 190 Future<bool> computeFull(DartCompletionRequest request) { |
| 191 this.request = request; | 191 this.request = request; |
| 192 fullCount++; | 192 fullCount++; |
| 193 if (fullSuggestion != null) { | 193 if (fullSuggestion != null) { |
| 194 request.addSuggestion(fullSuggestion); | 194 request.addSuggestion(fullSuggestion); |
| 195 } | 195 } |
| 196 return new Future.value(fullSuggestion != null); | 196 return new Future.value(fullSuggestion != null); |
| 197 } | 197 } |
| 198 } | 198 } |
| OLD | NEW |