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

Side by Side Diff: pkg/analysis_server/test/edit/postfix_completion_test.dart

Issue 2917943002: Postfix completion (Closed)
Patch Set: typo Created 3 years, 5 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) 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 var params = new EditGetPostfixCompletionParams(testFile, key, offset);
84 var request =
85 new Request('0', "edit.isPostfixCompletionApplicable", params.toJson());
86 Response response = await waitResponse(request);
87 var isApplicable =
88 new EditIsPostfixCompletionApplicableResult.fromResponse(response);
89 if (!isApplicable.value) {
90 fail("Postfix completion not applicable at given location");
91 }
92 request = new EditGetPostfixCompletionParams(testFile, key, offset)
93 .toRequest('1');
94 response = await waitResponse(request);
95 var result = new EditGetPostfixCompletionResult.fromResponse(response);
96 change = result.change;
97 }
98 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698