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