@@ -72,32 +72,157 @@ func TestUpdateSourceMaps2(t *testing.T) {
72
72
}
73
73
74
74
func TestApplyTextChange (t * testing.T ) {
75
- text1 := applyTextChange ("foo\n bar\n baz\n !" , lsp.Range {
76
- Start : lsp.Position {Line : 1 , Character : 1 },
77
- End : lsp.Position {Line : 2 , Character : 2 },
78
- }, "i" )
79
- if text1 != "foo\n biz\n !" {
80
- t .Error (text1 )
75
+ tests := []struct {
76
+ InitialText string
77
+ Range lsp.Range
78
+ Insertion string
79
+ Expectation string
80
+ Err error
81
+ }{
82
+ {
83
+ "foo\n bar\n baz\n !" ,
84
+ lsp.Range {
85
+ Start : lsp.Position {Line : 1 , Character : 1 },
86
+ End : lsp.Position {Line : 2 , Character : 2 },
87
+ },
88
+ "i" ,
89
+ "foo\n biz\n !" ,
90
+ nil ,
91
+ },
92
+ {
93
+ "foo\n bar\n baz\n !" ,
94
+ lsp.Range {
95
+ Start : lsp.Position {Line : 1 , Character : 1 },
96
+ End : lsp.Position {Line : 1 , Character : 2 },
97
+ },
98
+ "ee" ,
99
+ "foo\n beer\n baz\n !" ,
100
+ nil ,
101
+ },
102
+ {
103
+ "foo\n bar\n baz\n !" ,
104
+ lsp.Range {
105
+ Start : lsp.Position {Line : 1 , Character : 1 },
106
+ End : lsp.Position {Line : 1 , Character : 1 },
107
+ },
108
+ "eer from the st" ,
109
+ "foo\n beer from the star\n baz\n !" ,
110
+ nil ,
111
+ },
112
+ {
113
+ "foo\n bar\n baz\n !" ,
114
+ lsp.Range {
115
+ Start : lsp.Position {Line : 0 , Character : 10 },
116
+ End : lsp.Position {Line : 2 , Character : 20 },
117
+ },
118
+ "i" ,
119
+ "fooi\n !" ,
120
+ nil ,
121
+ },
122
+ {
123
+ "foo\n bar\n baz\n !" ,
124
+ lsp.Range {
125
+ // out of range start offset
126
+ Start : lsp.Position {Line : 0 , Character : 100 },
127
+ End : lsp.Position {Line : 2 , Character : 0 },
128
+ },
129
+ "i" ,
130
+ "fooibaz\n !" ,
131
+ nil ,
132
+ },
133
+ {
134
+ "foo\n bar\n baz\n !" ,
135
+ lsp.Range {
136
+ // out of range start offset
137
+ Start : lsp.Position {Line : 20 , Character : 0 },
138
+ End : lsp.Position {Line : 2 , Character : 0 },
139
+ },
140
+ "i" ,
141
+ "" ,
142
+ OutOfRangeError {13 , lsp.Position {Line : 20 , Character : 0 }},
143
+ },
144
+ {
145
+ "foo\n bar\n baz\n !" ,
146
+ lsp.Range {
147
+ // out of range start offset
148
+ Start : lsp.Position {Line : 0 , Character : 0 },
149
+ End : lsp.Position {Line : 20 , Character : 0 },
150
+ },
151
+ "i" ,
152
+ "" ,
153
+ OutOfRangeError {13 , lsp.Position {Line : 20 , Character : 0 }},
154
+ },
81
155
}
82
- text2 := applyTextChange ("foo\n bar\n baz\n !" , lsp.Range {
83
- Start : lsp.Position {Line : 1 , Character : 1 },
84
- End : lsp.Position {Line : 1 , Character : 2 },
85
- }, "ee" )
86
- if text2 != "foo\n beer\n baz\n !" {
87
- t .Error (text2 )
156
+
157
+ for _ , test := range tests {
158
+ initial := strings .ReplaceAll (test .InitialText , "\n " , "\\ n" )
159
+ insertion := strings .ReplaceAll (test .Insertion , "\n " , "\\ n" )
160
+ expectation := strings .ReplaceAll (test .Expectation , "\n " , "\\ n" )
161
+
162
+ t .Logf ("applyTextChange(\" %s\" , %v, \" %s\" ) == \" %s\" " , initial , test .Range , insertion , expectation )
163
+ act , err := applyTextChange (test .InitialText , test .Range , test .Insertion )
164
+ if act != test .Expectation {
165
+ t .Errorf ("applyTextChange(\" %s\" , %v, \" %s\" ) != \" %s\" , got \" %s\" " , initial , test .Range , insertion , expectation , strings .ReplaceAll (act , "\n " , "\\ n" ))
166
+ }
167
+ if err != test .Err {
168
+ t .Errorf ("applyTextChange(\" %s\" , %v, \" %s\" ) error != %v, got %v instead" , initial , test .Range , insertion , test .Err , err )
169
+ }
170
+ }
171
+ }
172
+
173
+ func TestGetOffset (t * testing.T ) {
174
+ tests := []struct {
175
+ Text string
176
+ Line int
177
+ Char int
178
+ Exp int
179
+ Err error
180
+ }{
181
+ {"foo\n foobar\n baz" , 0 , 0 , 0 , nil },
182
+ {"foo\n foobar\n baz" , 1 , 0 , 4 , nil },
183
+ {"foo\n foobar\n baz" , 1 , 3 , 7 , nil },
184
+ {"foo\n ba\n r\n baz\n !" , 3 , 0 , 9 , nil },
185
+ {"foo\n ba\n r\n baz\n !" , 1 , 10 , 6 , nil },
186
+ {"foo\n ba\n r\n baz\n !" , - 1 , 0 , - 1 , OutOfRangeError {14 , lsp.Position {Line : - 1 , Character : 0 }}},
187
+ {"foo\n ba\n r\n baz\n !" , 4 , 20 , - 1 , OutOfRangeError {14 , lsp.Position {Line : 4 , Character : 20 }}},
88
188
}
89
- text3 := applyTextChange ("foo\n bar\n baz\n !" , lsp.Range {
90
- Start : lsp.Position {Line : 1 , Character : 1 },
91
- End : lsp.Position {Line : 1 , Character : 1 },
92
- }, "eer from the st" )
93
- if text3 != "foo\n beer from the star\n baz\n !" {
94
- t .Error (text3 )
189
+
190
+ for _ , test := range tests {
191
+ st := strings .Replace (test .Text , "\n " , "\\ n" , - 1 )
192
+
193
+ t .Logf ("getOffset(\" %s\" , {Line: %d, Character: %d}) == %d" , st , test .Line , test .Char , test .Exp )
194
+ act , err := getOffset (test .Text , lsp.Position {Line : test .Line , Character : test .Char })
195
+ if act != test .Exp {
196
+ t .Errorf ("getOffset(\" %s\" , {Line: %d, Character: %d}) != %d, got %d instead" , st , test .Line , test .Char , test .Exp , act )
197
+ }
198
+ if err != test .Err {
199
+ t .Errorf ("getOffset(\" %s\" , {Line: %d, Character: %d}) error != %v, got %v instead" , st , test .Line , test .Char , test .Err , err )
200
+ }
95
201
}
96
202
}
97
203
98
204
func TestGetLineOffset (t * testing.T ) {
99
- offset := getLineOffset ("foo\n ba\n r\n baz\n !" , 3 )
100
- if offset != 9 {
101
- t .Error (offset )
205
+ tests := []struct {
206
+ Text string
207
+ Line int
208
+ Offset int
209
+ }{
210
+ {"foo\n foobar\n baz" , 0 , 0 },
211
+ {"foo\n foobar\n baz" , 1 , 4 },
212
+ {"foo\n foobar\n baz" , 2 , 11 },
213
+ {"foo\n foobar\n baz" , 3 , - 1 },
214
+ {"foo\n ba\n r\n baz\n !" , 3 , 9 },
215
+ {"foo\n ba\n r\n baz\n !" , - 1 , - 1 },
216
+ {"foo\n ba\n r\n baz\n !" , 20 , - 1 },
217
+ }
218
+
219
+ for _ , test := range tests {
220
+ st := strings .Replace (test .Text , "\n " , "\\ n" , - 1 )
221
+
222
+ t .Logf ("getLineOffset(\" %s\" , %d) == %d" , st , test .Line , test .Offset )
223
+ act := getLineOffset (test .Text , test .Line )
224
+ if act != test .Offset {
225
+ t .Errorf ("getLineOffset(\" %s\" , %d) != %d, got %d instead" , st , test .Line , test .Offset , act )
226
+ }
102
227
}
103
228
}
0 commit comments