33// BSD-style license that can be found in the LICENSE file.
44
55import 'package:analysis_server/protocol/protocol_generated.dart' ;
6+ import 'package:analyzer/src/test_utilities/test_code_format.dart' ;
67import 'package:analyzer_plugin/protocol/protocol_common.dart' ;
78import 'package:test/test.dart' ;
89import 'package:test_reflective_loader/test_reflective_loader.dart' ;
@@ -17,6 +18,8 @@ void main() {
1718
1819@reflectiveTest
1920class PostfixCompletionTest extends PubPackageAnalysisServerTest {
21+ late TestCode testCode;
22+
2023 late SourceChange change;
2124
2225 @override
@@ -26,18 +29,17 @@ class PostfixCompletionTest extends PubPackageAnalysisServerTest {
2629 }
2730
2831 Future <void > test_for () async {
29- var key = '.for' ;
30- var offset = _newFileForCompletion (key, '''
32+ _newFileForCompletion ('''
3133void f() {
32- [].for
34+ []^
3335}
3436''' );
3537
36- await _prepareCompletionAt (offset, key );
38+ await _prepareCompletionAt (testCode.position. offset, '.for' );
3739 _assertHasChange ('Expand .for' , '''
3840void f() {
3941 for (var value in []) {
40- /*caret*/
42+ ^
4143 }
4244}
4345''' );
@@ -72,31 +74,34 @@ void f() {
7274 }
7375
7476 Future <void > test_notApplicable_inComment_try () async {
75- var key = '.try' ;
76- var offset = _newFileForCompletion (key, '''
77+ _newFileForCompletion ('''
7778void f() {
7879 () {
79- // comment.try
80+ // comment^
8081 };
8182}
8283''' );
8384
84- var result = await _isApplicable (offset: offset, key: key);
85+ var result = await _isApplicable (
86+ offset: testCode.position.offset,
87+ key: '.try' ,
88+ );
8589 expect (result, isFalse);
8690 }
8791
88- void _assertHasChange (String message, String expectedCode) {
89- if (change.message == message) {
90- if (change.edits.isNotEmpty) {
91- var resultCode = SourceEdit .applySequence (
92- testFileContent,
93- change.edits[0 ].edits,
94- );
95- expect (resultCode, expectedCode.replaceAll ('/*caret*/' , '' ));
96- }
97- return ;
92+ void _assertHasChange (String message, String expected) {
93+ var expectedCode = TestCode .parse (expected);
94+ if (change.message != message) {
95+ fail ('Expected to find |$message | but got: ${change .message }' );
96+ }
97+ if (change.edits.isNotEmpty) {
98+ var resultCode = SourceEdit .applySequence (
99+ testFileContent,
100+ change.edits[0 ].edits,
101+ );
102+ expect (resultCode, expectedCode.code);
98103 }
99- fail ( 'Expected to find |$ message | but got: ${ change .message }' );
104+ expect ( change.selection ? .offset, expectedCode.position.offset );
100105 }
101106
102107 Future <bool > _isApplicable ({required int offset, required String key}) async {
@@ -114,17 +119,10 @@ void f() {
114119 return result.value;
115120 }
116121
117- int _newFileForCompletion (String key, String content) {
118- var keyOffset = content.indexOf (key);
119- expect (keyOffset, isNot (equals (- 1 )), reason: 'missing "$key "' );
120-
121- modifyFile2 (
122- testFile,
123- content.substring (0 , keyOffset) +
124- content.substring (keyOffset + key.length),
125- );
122+ void _newFileForCompletion (String content) {
123+ testCode = TestCode .parse (content);
126124
127- return keyOffset ;
125+ modifyFile2 (testFile, testCode.code) ;
128126 }
129127
130128 Future <void > _prepareCompletionAt (int offset, String key) async {
0 commit comments