xref: /vim-8.2.3635/src/testdir/test_marks.vim (revision e08aee60)
16d91bcb4SBram Moolenaar" Test for marks
219a1669fSBram Moolenaar
319a1669fSBram Moolenaar" Test that a deleted mark is restored after delete-undo-redo-undo.
41e115360SBram Moolenaarfunc Test_Restore_DelMark()
519a1669fSBram Moolenaar  enew!
619a1669fSBram Moolenaar  call append(0, ["	textline A", "	textline B", "	textline C"])
719a1669fSBram Moolenaar  normal! 2gg
819a1669fSBram Moolenaar  set nocp viminfo+=nviminfo
919a1669fSBram Moolenaar  exe "normal! i\<C-G>u\<Esc>"
1019a1669fSBram Moolenaar  exe "normal! maddu\<C-R>u"
1119a1669fSBram Moolenaar  let pos = getpos("'a")
1219a1669fSBram Moolenaar  call assert_equal(2, pos[1])
1319a1669fSBram Moolenaar  call assert_equal(1, pos[2])
1419a1669fSBram Moolenaar  enew!
151e115360SBram Moolenaarendfunc
1619a1669fSBram Moolenaar
1719a1669fSBram Moolenaar" Test that CTRL-A and CTRL-X updates last changed mark '[, '].
181e115360SBram Moolenaarfunc Test_Incr_Marks()
1919a1669fSBram Moolenaar  enew!
2019a1669fSBram Moolenaar  call append(0, ["123 123 123", "123 123 123", "123 123 123"])
2119a1669fSBram Moolenaar  normal! gg
2219a1669fSBram Moolenaar  execute "normal! \<C-A>`[v`]rAjwvjw\<C-X>`[v`]rX"
2319a1669fSBram Moolenaar  call assert_equal("AAA 123 123", getline(1))
2419a1669fSBram Moolenaar  call assert_equal("123 XXXXXXX", getline(2))
2519a1669fSBram Moolenaar  call assert_equal("XXX 123 123", getline(3))
2619a1669fSBram Moolenaar  enew!
271e115360SBram Moolenaarendfunc
28f13e00b2SBram Moolenaar
29*e08aee60SBram Moolenaarfunc Test_previous_jump_mark()
30*e08aee60SBram Moolenaar  new
31*e08aee60SBram Moolenaar  call setline(1, ['']->repeat(6))
32*e08aee60SBram Moolenaar  normal Ggg
33*e08aee60SBram Moolenaar  call assert_equal(6, getpos("''")[1])
34*e08aee60SBram Moolenaar  normal jjjjj
35*e08aee60SBram Moolenaar  call assert_equal(6, getpos("''")[1])
36*e08aee60SBram Moolenaar  bwipe!
37*e08aee60SBram Moolenaarendfunc
38*e08aee60SBram Moolenaar
39f13e00b2SBram Moolenaarfunc Test_setpos()
40b3d33d85SBram Moolenaar  new Xone
41f13e00b2SBram Moolenaar  let onebuf = bufnr('%')
42f13e00b2SBram Moolenaar  let onewin = win_getid()
43f13e00b2SBram Moolenaar  call setline(1, ['aaa', 'bbb', 'ccc'])
44b3d33d85SBram Moolenaar  new Xtwo
45f13e00b2SBram Moolenaar  let twobuf = bufnr('%')
46f13e00b2SBram Moolenaar  let twowin = win_getid()
47f13e00b2SBram Moolenaar  call setline(1, ['aaa', 'bbb', 'ccc'])
48f13e00b2SBram Moolenaar
49f13e00b2SBram Moolenaar  " for the cursor the buffer number is ignored
50f13e00b2SBram Moolenaar  call setpos(".", [0, 2, 1, 0])
51f13e00b2SBram Moolenaar  call assert_equal([0, 2, 1, 0], getpos("."))
52f13e00b2SBram Moolenaar  call setpos(".", [onebuf, 3, 3, 0])
53f13e00b2SBram Moolenaar  call assert_equal([0, 3, 3, 0], getpos("."))
54f13e00b2SBram Moolenaar
55f13e00b2SBram Moolenaar  call setpos("''", [0, 1, 3, 0])
56f13e00b2SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos("''"))
57f13e00b2SBram Moolenaar  call setpos("''", [onebuf, 2, 2, 0])
58f13e00b2SBram Moolenaar  call assert_equal([0, 2, 2, 0], getpos("''"))
59f13e00b2SBram Moolenaar
60f13e00b2SBram Moolenaar  " buffer-local marks
61f13e00b2SBram Moolenaar  for mark in ["'a", "'\"", "'[", "']", "'<", "'>"]
62f13e00b2SBram Moolenaar    call win_gotoid(twowin)
63f13e00b2SBram Moolenaar    call setpos(mark, [0, 2, 1, 0])
64f13e00b2SBram Moolenaar    call assert_equal([0, 2, 1, 0], getpos(mark), "for mark " . mark)
65f13e00b2SBram Moolenaar    call setpos(mark, [onebuf, 1, 3, 0])
66f13e00b2SBram Moolenaar    call win_gotoid(onewin)
67f13e00b2SBram Moolenaar    call assert_equal([0, 1, 3, 0], getpos(mark), "for mark " . mark)
68f13e00b2SBram Moolenaar  endfor
69f13e00b2SBram Moolenaar
70f13e00b2SBram Moolenaar  " global marks
71f13e00b2SBram Moolenaar  call win_gotoid(twowin)
72f13e00b2SBram Moolenaar  call setpos("'N", [0, 2, 1, 0])
73f13e00b2SBram Moolenaar  call assert_equal([twobuf, 2, 1, 0], getpos("'N"))
74f13e00b2SBram Moolenaar  call setpos("'N", [onebuf, 1, 3, 0])
75f13e00b2SBram Moolenaar  call assert_equal([onebuf, 1, 3, 0], getpos("'N"))
76f13e00b2SBram Moolenaar
77b3d33d85SBram Moolenaar  " try invalid column and check virtcol()
78f13e00b2SBram Moolenaar  call win_gotoid(onewin)
79b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, 2, 0])
80b3d33d85SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos("'a"))
81b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, -5, 0])
82b3d33d85SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos("'a"))
83b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, 0, 0])
84b3d33d85SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos("'a"))
85b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, 4, 0])
86b3d33d85SBram Moolenaar  call assert_equal([0, 1, 4, 0], getpos("'a"))
87b3d33d85SBram Moolenaar  call assert_equal(4, virtcol("'a"))
88b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, 5, 0])
89b3d33d85SBram Moolenaar  call assert_equal([0, 1, 5, 0], getpos("'a"))
90b3d33d85SBram Moolenaar  call assert_equal(4, virtcol("'a"))
91b3d33d85SBram Moolenaar  call setpos("'a", [0, 1, 21341234, 0])
92b3d33d85SBram Moolenaar  call assert_equal([0, 1, 21341234, 0], getpos("'a"))
93b3d33d85SBram Moolenaar  call assert_equal(4, virtcol("'a"))
94b3d33d85SBram Moolenaar
958b633135SBram Moolenaar  " Test with invalid buffer number, line number and column number
968b633135SBram Moolenaar  call cursor(2, 2)
978b633135SBram Moolenaar  call setpos('.', [-1, 1, 1, 0])
988b633135SBram Moolenaar  call assert_equal([2, 2], [line('.'), col('.')])
998b633135SBram Moolenaar  call setpos('.', [0, -1, 1, 0])
1008b633135SBram Moolenaar  call assert_equal([2, 2], [line('.'), col('.')])
1018b633135SBram Moolenaar  call setpos('.', [0, 1, -1, 0])
1028b633135SBram Moolenaar  call assert_equal([2, 2], [line('.'), col('.')])
1038b633135SBram Moolenaar
1040e05de46SBram Moolenaar  call assert_fails("call setpos('ab', [0, 1, 1, 0])", 'E474:')
1050e05de46SBram Moolenaar
106f13e00b2SBram Moolenaar  bwipe!
107f13e00b2SBram Moolenaar  call win_gotoid(twowin)
108f13e00b2SBram Moolenaar  bwipe!
109f13e00b2SBram Moolenaarendfunc
1109b69f22eSBram Moolenaar
1119b69f22eSBram Moolenaarfunc Test_marks_cmd()
1129b69f22eSBram Moolenaar  new Xone
1139b69f22eSBram Moolenaar  call setline(1, ['aaa', 'bbb'])
1149b69f22eSBram Moolenaar  norm! maG$mB
1159b69f22eSBram Moolenaar  w!
1169b69f22eSBram Moolenaar  new Xtwo
1179b69f22eSBram Moolenaar  call setline(1, ['ccc', 'ddd'])
1189b69f22eSBram Moolenaar  norm! $mcGmD
11954c3fcd8SBram Moolenaar  exe "norm! GVgg\<Esc>G"
1209b69f22eSBram Moolenaar  w!
1219b69f22eSBram Moolenaar
1229b69f22eSBram Moolenaar  b Xone
1239b69f22eSBram Moolenaar  let a = split(execute('marks'), "\n")
1249b69f22eSBram Moolenaar  call assert_equal(9, len(a))
12554c3fcd8SBram Moolenaar  call assert_equal(['mark line  col file/text',
12654c3fcd8SBram Moolenaar        \ " '      2    0 bbb",
12754c3fcd8SBram Moolenaar        \ ' a      1    0 aaa',
12854c3fcd8SBram Moolenaar        \ ' B      2    2 bbb',
12954c3fcd8SBram Moolenaar        \ ' D      2    0 Xtwo',
13054c3fcd8SBram Moolenaar        \ ' "      1    0 aaa',
13154c3fcd8SBram Moolenaar        \ ' [      1    0 aaa',
13254c3fcd8SBram Moolenaar        \ ' ]      2    0 bbb',
13354c3fcd8SBram Moolenaar        \ ' .      2    0 bbb'], a)
1349b69f22eSBram Moolenaar
1359b69f22eSBram Moolenaar  b Xtwo
1369b69f22eSBram Moolenaar  let a = split(execute('marks'), "\n")
13754c3fcd8SBram Moolenaar  call assert_equal(11, len(a))
13854c3fcd8SBram Moolenaar  call assert_equal(['mark line  col file/text',
13954c3fcd8SBram Moolenaar        \ " '      1    0 ccc",
14054c3fcd8SBram Moolenaar        \ ' c      1    2 ccc',
14154c3fcd8SBram Moolenaar        \ ' B      2    2 Xone',
14254c3fcd8SBram Moolenaar        \ ' D      2    0 ddd',
14354c3fcd8SBram Moolenaar        \ ' "      2    0 ddd',
14454c3fcd8SBram Moolenaar        \ ' [      1    0 ccc',
14554c3fcd8SBram Moolenaar        \ ' ]      2    0 ddd',
14654c3fcd8SBram Moolenaar        \ ' .      2    0 ddd',
14754c3fcd8SBram Moolenaar        \ ' <      1    0 ccc',
14854c3fcd8SBram Moolenaar        \ ' >      2    0 ddd'], a)
14954c3fcd8SBram Moolenaar  norm! Gdd
15054c3fcd8SBram Moolenaar  w!
15154c3fcd8SBram Moolenaar  let a = split(execute('marks <>'), "\n")
15254c3fcd8SBram Moolenaar  call assert_equal(3, len(a))
15354c3fcd8SBram Moolenaar  call assert_equal(['mark line  col file/text',
15454c3fcd8SBram Moolenaar        \ ' <      1    0 ccc',
15554c3fcd8SBram Moolenaar        \ ' >      2    0 -invalid-'], a)
1569b69f22eSBram Moolenaar
1579b69f22eSBram Moolenaar  b Xone
1589b69f22eSBram Moolenaar  delmarks aB
1599b69f22eSBram Moolenaar  let a = split(execute('marks aBcD'), "\n")
1609b69f22eSBram Moolenaar  call assert_equal(2, len(a))
1619b69f22eSBram Moolenaar  call assert_equal('mark line  col file/text', a[0])
1629b69f22eSBram Moolenaar  call assert_equal(' D      2    0 Xtwo', a[1])
1639b69f22eSBram Moolenaar
1649b69f22eSBram Moolenaar  b Xtwo
1659b69f22eSBram Moolenaar  delmarks cD
1669b69f22eSBram Moolenaar  call assert_fails('marks aBcD', 'E283:')
1679b69f22eSBram Moolenaar
1689b69f22eSBram Moolenaar  call delete('Xone')
1699b69f22eSBram Moolenaar  call delete('Xtwo')
1709b69f22eSBram Moolenaar  %bwipe
1719d5185bfSBram Moolenaarendfunc
1729d5185bfSBram Moolenaar
1739d5185bfSBram Moolenaarfunc Test_marks_cmd_multibyte()
1749d5185bfSBram Moolenaar  new Xone
175bde14d8eSBram Moolenaar  call setline(1, [repeat('á', &columns)])
1769d5185bfSBram Moolenaar  norm! ma
1779d5185bfSBram Moolenaar
1789d5185bfSBram Moolenaar  let a = split(execute('marks a'), "\n")
1799d5185bfSBram Moolenaar  call assert_equal(2, len(a))
180bde14d8eSBram Moolenaar  let expected = ' a      1    0 ' . repeat('á', &columns - 16)
1819d5185bfSBram Moolenaar  call assert_equal(expected, a[1])
1829d5185bfSBram Moolenaar
1839d5185bfSBram Moolenaar  bwipe!
1849b69f22eSBram Moolenaarendfunc
18571b13e92SBram Moolenaar
18671b13e92SBram Moolenaarfunc Test_delmarks()
18771b13e92SBram Moolenaar  new
18871b13e92SBram Moolenaar  norm mx
18971b13e92SBram Moolenaar  norm `x
19071b13e92SBram Moolenaar  delmarks x
19171b13e92SBram Moolenaar  call assert_fails('norm `x', 'E20:')
19271b13e92SBram Moolenaar
19371b13e92SBram Moolenaar  " Deleting an already deleted mark should not fail.
19471b13e92SBram Moolenaar  delmarks x
19571b13e92SBram Moolenaar
1968cd6cd80SBram Moolenaar  " getpos() should return all zeros after deleting a filemark.
1978cd6cd80SBram Moolenaar  norm mA
1988cd6cd80SBram Moolenaar  delmarks A
1998cd6cd80SBram Moolenaar  call assert_equal([0, 0, 0, 0], getpos("'A"))
2008cd6cd80SBram Moolenaar
20171b13e92SBram Moolenaar  " Test deleting a range of marks.
20271b13e92SBram Moolenaar  norm ma
20371b13e92SBram Moolenaar  norm mb
20471b13e92SBram Moolenaar  norm mc
20571b13e92SBram Moolenaar  norm mz
20671b13e92SBram Moolenaar  delmarks b-z
20771b13e92SBram Moolenaar  norm `a
20871b13e92SBram Moolenaar  call assert_fails('norm `b', 'E20:')
20971b13e92SBram Moolenaar  call assert_fails('norm `c', 'E20:')
21071b13e92SBram Moolenaar  call assert_fails('norm `z', 'E20:')
21171b13e92SBram Moolenaar  call assert_fails('delmarks z-b', 'E475:')
21271b13e92SBram Moolenaar
21371b13e92SBram Moolenaar  call assert_fails('delmarks', 'E471:')
21471b13e92SBram Moolenaar  call assert_fails('delmarks /', 'E475:')
21571b13e92SBram Moolenaar
21671b13e92SBram Moolenaar  " Test delmarks!
21771b13e92SBram Moolenaar  norm mx
21871b13e92SBram Moolenaar  norm `x
21971b13e92SBram Moolenaar  delmarks!
22071b13e92SBram Moolenaar  call assert_fails('norm `x', 'E20:')
22171b13e92SBram Moolenaar  call assert_fails('delmarks! x', 'E474:')
22271b13e92SBram Moolenaar
22371b13e92SBram Moolenaar  bwipe!
22471b13e92SBram Moolenaarendfunc
22571b13e92SBram Moolenaar
22671b13e92SBram Moolenaarfunc Test_mark_error()
22771b13e92SBram Moolenaar  call assert_fails('mark', 'E471:')
22871b13e92SBram Moolenaar  call assert_fails('mark xx', 'E488:')
22971b13e92SBram Moolenaar  call assert_fails('mark _', 'E191:')
2301671f448SBram Moolenaar  call assert_beeps('normal! m~')
2314d23c528SBram Moolenaar
2324d23c528SBram Moolenaar  call setpos("'k", [0, 100, 1, 0])
2334d23c528SBram Moolenaar  call assert_fails("normal 'k", 'E19:')
23471b13e92SBram Moolenaarendfunc
23554c8d229SBram Moolenaar
23654c8d229SBram Moolenaar" Test for :lockmarks when pasting content
23754c8d229SBram Moolenaarfunc Test_lockmarks_with_put()
23854c8d229SBram Moolenaar  new
23954c8d229SBram Moolenaar  call append(0, repeat(['sky is blue'], 4))
24054c8d229SBram Moolenaar  normal gg
24154c8d229SBram Moolenaar  1,2yank r
24254c8d229SBram Moolenaar  put r
24354c8d229SBram Moolenaar  normal G
24454c8d229SBram Moolenaar  lockmarks put r
24554c8d229SBram Moolenaar  call assert_equal(2, line("'["))
24654c8d229SBram Moolenaar  call assert_equal(3, line("']"))
24754c8d229SBram Moolenaar
24854c8d229SBram Moolenaar  bwipe!
24954c8d229SBram Moolenaarendfunc
25054c8d229SBram Moolenaar
251f0cee197SBram Moolenaar" Test for :k command to set a mark
252f0cee197SBram Moolenaarfunc Test_marks_k_cmd()
253f0cee197SBram Moolenaar  new
254f0cee197SBram Moolenaar  call setline(1, ['foo', 'bar', 'baz', 'qux'])
255f0cee197SBram Moolenaar  1,3kr
256f0cee197SBram Moolenaar  call assert_equal([0, 3, 1, 0], getpos("'r"))
257f0cee197SBram Moolenaar  close!
258f0cee197SBram Moolenaarendfunc
259f0cee197SBram Moolenaar
2601671f448SBram Moolenaar" Test for file marks (A-Z)
2611671f448SBram Moolenaarfunc Test_file_mark()
2621671f448SBram Moolenaar  new Xone
2631671f448SBram Moolenaar  call setline(1, ['aaa', 'bbb'])
2641671f448SBram Moolenaar  norm! G$mB
2651671f448SBram Moolenaar  w!
2661671f448SBram Moolenaar  new Xtwo
2671671f448SBram Moolenaar  call setline(1, ['ccc', 'ddd'])
2681671f448SBram Moolenaar  norm! GmD
2691671f448SBram Moolenaar  w!
2701671f448SBram Moolenaar
2711671f448SBram Moolenaar  enew
2721671f448SBram Moolenaar  normal! `B
2731671f448SBram Moolenaar  call assert_equal('Xone', bufname())
2741671f448SBram Moolenaar  call assert_equal([2, 3], [line('.'), col('.')])
2751671f448SBram Moolenaar  normal! 'D
2761671f448SBram Moolenaar  call assert_equal('Xtwo', bufname())
2771671f448SBram Moolenaar  call assert_equal([2, 1], [line('.'), col('.')])
2781671f448SBram Moolenaar
2791671f448SBram Moolenaar  call delete('Xone')
2801671f448SBram Moolenaar  call delete('Xtwo')
2811671f448SBram Moolenaarendfunc
2821671f448SBram Moolenaar
283cfb4b47dSBram Moolenaar" Test for the getmarklist() function
284cfb4b47dSBram Moolenaarfunc Test_getmarklist()
285cfb4b47dSBram Moolenaar  new
286cfb4b47dSBram Moolenaar  " global marks
287cfb4b47dSBram Moolenaar  delmarks A-Z 0-9 \" ^.[]
288cfb4b47dSBram Moolenaar  call assert_equal([], getmarklist())
289cfb4b47dSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
290cfb4b47dSBram Moolenaar  mark A
291cfb4b47dSBram Moolenaar  call cursor(3, 5)
292cfb4b47dSBram Moolenaar  normal mN
293f17e7ea6SBram Moolenaar  call assert_equal([{'file' : '', 'mark' : "'A", 'pos' : [bufnr(), 1, 1, 0]},
294f17e7ea6SBram Moolenaar        \ {'file' : '', 'mark' : "'N", 'pos' : [bufnr(), 3, 5, 0]}],
295cfb4b47dSBram Moolenaar        \ getmarklist())
296cfb4b47dSBram Moolenaar  " buffer local marks
297cfb4b47dSBram Moolenaar  delmarks!
298f17e7ea6SBram Moolenaar  call assert_equal([{'mark' : "''", 'pos' : [bufnr(), 1, 1, 0]},
299f17e7ea6SBram Moolenaar        \ {'mark' : "'\"", 'pos' : [bufnr(), 1, 1, 0]}], getmarklist(bufnr()))
300cfb4b47dSBram Moolenaar  call cursor(2, 2)
301cfb4b47dSBram Moolenaar  normal mr
302f17e7ea6SBram Moolenaar  call assert_equal({'mark' : "'r", 'pos' : [bufnr(), 2, 2, 0]},
303f17e7ea6SBram Moolenaar        \ bufnr()->getmarklist()[0])
304f17e7ea6SBram Moolenaar  call assert_equal([], {}->getmarklist())
305cfb4b47dSBram Moolenaar  close!
306cfb4b47dSBram Moolenaarendfunc
307cfb4b47dSBram Moolenaar
30854c8d229SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
309