All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
1 function! s:set_text(lines)
9 return lsp#utils#buffer#_get_lines(bufnr('$'))
12 Describe lsp#utils#text_edit
15 let s:endofline_backup = &endofline
20 let &endofline = s:endofline_backup
27 Describe lsp#utils#text_edit#apply_text_edits
29 call s:set_text(['foo', 'bar'])
31 call lsp#utils#text_edit#apply_text_edits(
47 let l:buffer_text = s:get_text()
48 Assert Equals(l:buffer_text, ['foo', 'bbazar', ''])
51 It insert empty newText
52 call s:set_text(['foo', 'bar'])
54 call lsp#utils#text_edit#apply_text_edits(
70 let l:buffer_text = s:get_text()
71 Assert Equals(l:buffer_text, ['foo', 'bar', ''])
74 It replace range string to newText
75 call s:set_text(['foo', 'bar'])
77 call lsp#utils#text_edit#apply_text_edits(
90 \ 'newText': 'replaced'
93 let l:buffer_text = s:get_text()
94 Assert Equals(l:buffer_text, ['foo', 'replacedar', ''])
97 It replace range string to empty newText
98 call s:set_text(['foo', 'bar'])
100 call lsp#utils#text_edit#apply_text_edits(
116 let l:buffer_text = s:get_text()
117 Assert Equals(l:buffer_text, ['foo', 'ar', ''])
120 It single line start character is -1
121 call s:set_text(['foo', 'bar'])
123 call lsp#utils#text_edit#apply_text_edits(
139 let l:buffer_text = s:get_text()
140 Assert Equals(l:buffer_text, ['foo', '', ''])
143 It single line start character is 0
144 call s:set_text(['foo', 'bar'])
146 call lsp#utils#text_edit#apply_text_edits(
162 let l:buffer_text = s:get_text()
163 Assert Equals(l:buffer_text, ['foo', '', ''])
166 It single line start character is 1
167 call s:set_text(['foo', 'bar'])
169 call lsp#utils#text_edit#apply_text_edits(
185 let l:buffer_text = s:get_text()
186 Assert Equals(l:buffer_text, ['foo', 'b', ''])
189 It single line end character is `len(getline('.')) - 1`
190 call s:set_text(['foo', 'bar'])
192 call lsp#utils#text_edit#apply_text_edits(
208 let l:buffer_text = s:get_text()
209 Assert Equals(l:buffer_text, ['foo', 'r', ''])
212 It single line end character is `len(getline('.'))`
213 call s:set_text(['foo', 'bar'])
215 call lsp#utils#text_edit#apply_text_edits(
231 let l:buffer_text = s:get_text()
232 Assert Equals(l:buffer_text, ['foo', '', ''])
235 It single line end character is `len(getline('.')) + 1`
236 call s:set_text(['foo', 'bar'])
238 call lsp#utils#text_edit#apply_text_edits(
254 " if newline character deleting, need end position is next line zero character.
255 let l:buffer_text = s:get_text()
256 Assert Equals(l:buffer_text, ['foo', '', ''])
259 It replace range string to empty newText, multiline top to top
260 call s:set_text(['foo', 'bar', 'baz'])
262 call lsp#utils#text_edit#apply_text_edits(
278 let l:buffer_text = s:get_text()
279 Assert Equals(l:buffer_text, ['bar', 'baz', ''])
282 It replace range string to empty newText, multiline top to tail
283 call s:set_text(['foo', 'bar', 'baz'])
285 call lsp#utils#text_edit#apply_text_edits(
301 let l:buffer_text = s:get_text()
302 Assert Equals(l:buffer_text, ['r', 'baz', ''])
304 call s:set_text(['foo', 'bar', 'baz'])
306 call lsp#utils#text_edit#apply_text_edits(
322 let l:buffer_text = s:get_text()
323 Assert Equals(l:buffer_text, ['', 'baz', ''])
325 call s:set_text(['foo', 'bar', 'baz'])
327 call lsp#utils#text_edit#apply_text_edits(
343 " if newline character deleting, need end position is next line zero character.
344 let l:buffer_text = s:get_text()
345 Assert Equals(l:buffer_text, ['', 'baz', ''])
348 It replace range string to empty newText, multiline middle to middle
349 call s:set_text(['foo', 'bar', 'baz'])
351 call lsp#utils#text_edit#apply_text_edits(
367 let l:buffer_text = s:get_text()
368 Assert Equals(l:buffer_text, ['fr', 'baz', ''])
371 It replaces entire buffer correctly
372 call s:set_text(['foo', 'bar', 'baz'])
374 call lsp#utils#text_edit#apply_text_edits(
387 \ 'newText': "x\ny\nz\n"
390 let l:buffer_text = s:get_text()
391 Assert Equals(l:buffer_text, ['x', 'y', 'z', ''])
394 It multiple textEdit with inserting \r.
395 " Add some text to buffer
396 call s:set_text(['class ABC {', ' private:', ' ', 'int a;};', ])
399 call lsp#utils#text_edit#apply_text_edits(
443 let l:buffer_text = s:get_text()
444 Assert Equals(l:buffer_text, ['class ABC {', 'private:', ' int a;', '};', ''])
447 It preserves v:completed_item
448 " Add some text to buffer
449 call s:set_text(['foo', 'bar'])
451 " Go to end of file and invoke completion
452 execute "normal Gof\<C-p>\<Esc>"
454 " Make sure that v:completed_item is set
455 Assert Equals(v:completed_item["word"], "foo")
456 let l:old_completed_item = v:completed_item
458 " Perform some text edits
461 call lsp#utils#text_edit#apply_text_edits(
478 call lsp#utils#text_edit#apply_text_edits(
495 call lsp#utils#text_edit#apply_text_edits(
508 \ 'newText': 'replaced'
512 call lsp#utils#text_edit#apply_text_edits(
528 " Make sure v:completed_item is not changed
529 Assert Equals(v:completed_item, l:old_completed_item)
532 It replaces entire buffer correctly when end column is 1
533 call s:set_text(['foo', 'b'])
535 call lsp#utils#text_edit#apply_text_edits(
548 \ 'newText': "x\ny\nz\n"
551 let l:buffer_text = s:get_text()
552 Assert Equals(l:buffer_text, ['x', 'y', 'z', '', ''])
555 It should apply edit that contains \r\n
556 call s:set_text(['foo', 'b'])
558 call lsp#utils#text_edit#apply_text_edits(
571 \ 'newText': "x\r\ny\r\nz\r\n"
574 let l:buffer_text = s:get_text()
575 Assert Equals(l:buffer_text, ['x', 'y', 'z', '', ''])
578 It adds imports correctly
579 call s:set_text(['package main', '', 'import java.util.ArrayList;', '', 'public class Main {}'])
581 call lsp#utils#text_edit#apply_text_edits(
607 \ "newText": "import java.util.ArrayList;\n"
611 let l:buffer_text = s:get_text()
612 Assert Equals(l:buffer_text, ['package main', '', 'import java.util.ArrayList;', '', 'public class Main {}', ''])
616 let l:text = ['package main', '', 'import java.util.ArrayList;', '', 'public class Main {}']
617 call s:set_text(l:text)
619 call lsp#utils#text_edit#apply_text_edits(
623 let l:buffer_text = s:get_text()
624 Assert Equals(l:buffer_text, l:text + [''])
627 It should apply edits to unloaded file
628 let l:target = globpath(&runtimepath, 'test/lsp/utils/text_edit.vimspec')
629 call themis#log(l:target)
630 call lsp#utils#text_edit#apply_text_edits(lsp#utils#path_to_uri(l:target), [{
641 \ 'newText': "aiueo\n"
644 Assert Equals(getbufline(l:target, 1), ['aiueo'])
647 It should apply edits to buffer and unloaded file
648 let l:text = ['plop']
649 call s:set_text(l:text)
650 let l:buffer_text = s:get_text()
651 Assert Equals(l:buffer_text, ['plop', ''])
652 let l:target = globpath(&runtimepath, 'test/lsp/utils/text_edit.vimspec')
653 call lsp#utils#text_edit#apply_text_edits(
654 \ lsp#utils#path_to_uri(expand('%')),
666 \ 'newText': "buffer\n"
668 call lsp#utils#text_edit#apply_text_edits(lsp#utils#path_to_uri(l:target), [{
679 \ 'newText': "unloaded\n"
682 Assert Equals(getbufline(l:target, 1), ['unloaded'])
683 Assert Equals(getbufline(expand('%'), 1), ['buffer'])