| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2017, 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/protocol/protocol.dart'; |
| 6 import 'package:analysis_server/protocol/protocol_generated.dart'; |
| 7 import 'package:analysis_server/src/edit/edit_domain.dart'; |
| 8 import 'package:analyzer_plugin/protocol/protocol_common.dart'; |
| 9 import 'package:plugin/manager.dart'; |
| 10 import 'package:test/test.dart'; |
| 11 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 12 |
| 13 import '../analysis_abstract.dart'; |
| 14 |
| 15 main() { |
| 16 defineReflectiveSuite(() { |
| 17 defineReflectiveTests(PostfixCompletionTest); |
| 18 }); |
| 19 } |
| 20 |
| 21 @reflectiveTest |
| 22 class PostfixCompletionTest extends AbstractAnalysisTest { |
| 23 SourceChange change; |
| 24 |
| 25 @override |
| 26 void setUp() { |
| 27 super.setUp(); |
| 28 createProject(); |
| 29 ExtensionManager manager = new ExtensionManager(); |
| 30 manager.processPlugins([server.serverPlugin]); |
| 31 handler = new EditDomainHandler(server); |
| 32 } |
| 33 |
| 34 test_for() async { |
| 35 addTestFile(''' |
| 36 main() { |
| 37 [].for |
| 38 } |
| 39 '''); |
| 40 await waitForTasksFinished(); |
| 41 await _prepareCompletion('.for', atStart: true); |
| 42 _assertHasChange( |
| 43 'Expand .for', |
| 44 ''' |
| 45 main() { |
| 46 for (var value in []) { |
| 47 /*caret*/ |
| 48 } |
| 49 } |
| 50 '''); |
| 51 } |
| 52 |
| 53 void _assertHasChange(String message, String expectedCode, [Function cmp]) { |
| 54 if (change.message == message) { |
| 55 if (!change.edits.isEmpty) { |
| 56 String resultCode = |
| 57 SourceEdit.applySequence(testCode, change.edits[0].edits); |
| 58 expect(resultCode, expectedCode.replaceAll('/*caret*/', '')); |
| 59 if (cmp != null) { |
| 60 int offset = cmp(resultCode); |
| 61 expect(change.selection.offset, offset); |
| 62 } |
| 63 } else { |
| 64 if (cmp != null) { |
| 65 int offset = cmp(testCode); |
| 66 expect(change.selection.offset, offset); |
| 67 } |
| 68 } |
| 69 return; |
| 70 } |
| 71 fail("Expected to find |$message| but got: " + change.message); |
| 72 } |
| 73 |
| 74 _prepareCompletion(String key, |
| 75 {bool atStart: false, bool atEnd: false, int delta: 0}) async { |
| 76 int offset = findOffset(key); |
| 77 String src = testCode.replaceFirst(key, '', offset); |
| 78 modifyTestFile(src); |
| 79 await _prepareCompletionAt(offset, key); |
| 80 } |
| 81 |
| 82 _prepareCompletionAt(int offset, String key) async { |
| 83 Request request = new EditGetPostfixCompletionParams(testFile, offset, key) |
| 84 .toIsApplicableRequest('0'); |
| 85 Response response = await waitResponse(request); |
| 86 var isApplicable = |
| 87 new EditIsPostfixCompletionApplicableResult.fromResponse(response); |
| 88 if (!isApplicable.value) { |
| 89 fail("Postfix completion not applicable at given location"); |
| 90 } |
| 91 request = new EditGetPostfixCompletionParams(testFile, offset, key) |
| 92 .toRequest('1'); |
| 93 response = await waitResponse(request); |
| 94 var result = new EditGetPostfixCompletionResult.fromResponse(response); |
| 95 change = result.change; |
| 96 } |
| 97 } |
| OLD | NEW |