16f02b00bSBram Moolenaar" Tests for cursor() and other functions that get/set the cursor position
25a46a58eSBram Moolenaar
35a46a58eSBram Moolenaarfunc Test_wrong_arguments()
437175409SBram Moolenaar  call assert_fails('call cursor(1. 3)', 'E474:')
592b83ccfSBram Moolenaar  call assert_fails('call cursor(test_null_list())', 'E474:')
65a46a58eSBram Moolenaarendfunc
75a46a58eSBram Moolenaar
85a46a58eSBram Moolenaarfunc Test_move_cursor()
95a46a58eSBram Moolenaar  new
105a46a58eSBram Moolenaar  call setline(1, ['aaa', 'bbb', 'ccc', 'ddd'])
115a46a58eSBram Moolenaar
125a46a58eSBram Moolenaar  call cursor([1, 1, 0, 1])
135a46a58eSBram Moolenaar  call assert_equal([1, 1, 0, 1], getcurpos()[1:])
145a46a58eSBram Moolenaar  call cursor([4, 3, 0, 3])
155a46a58eSBram Moolenaar  call assert_equal([4, 3, 0, 3], getcurpos()[1:])
165a46a58eSBram Moolenaar
175a46a58eSBram Moolenaar  call cursor(2, 2)
182ab375e5SBram Moolenaar  call assert_equal([2, 2, 0, 2], getcurpos()[1:])
195a46a58eSBram Moolenaar  " line number zero keeps the line number
205a46a58eSBram Moolenaar  call cursor(0, 1)
212ab375e5SBram Moolenaar  call assert_equal([2, 1, 0, 1], getcurpos()[1:])
225a46a58eSBram Moolenaar  " col number zero keeps the column
235a46a58eSBram Moolenaar  call cursor(3, 0)
242ab375e5SBram Moolenaar  call assert_equal([3, 1, 0, 1], getcurpos()[1:])
255a46a58eSBram Moolenaar  " below last line goes to last line
261a3a8916SBram Moolenaar  eval [9, 1]->cursor()
272ab375e5SBram Moolenaar  call assert_equal([4, 1, 0, 1], getcurpos()[1:])
289ebcf231SBram Moolenaar  " pass string arguments
299ebcf231SBram Moolenaar  call cursor('3', '3')
309ebcf231SBram Moolenaar  call assert_equal([3, 3, 0, 3], getcurpos()[1:])
315a46a58eSBram Moolenaar
3217aca707SBram Moolenaar  call setline(1, ["\<TAB>"])
3317aca707SBram Moolenaar  call cursor(1, 1, 1)
3417aca707SBram Moolenaar  call assert_equal([1, 1, 1], getcurpos()[1:3])
3517aca707SBram Moolenaar
369a963377SBram Moolenaar  call assert_fails('call cursor(-1, -1)', 'E475:')
3717aca707SBram Moolenaar
385a46a58eSBram Moolenaar  quit!
395a46a58eSBram Moolenaarendfunc
402ab375e5SBram Moolenaar
412ab375e5SBram Moolenaar" Very short version of what matchparen does.
422ab375e5SBram Moolenaarfunction s:Highlight_Matching_Pair()
432ab375e5SBram Moolenaar  let save_cursor = getcurpos()
44aad222c9SBram Moolenaar  eval save_cursor->setpos('.')
452ab375e5SBram Moolenaarendfunc
462ab375e5SBram Moolenaar
472ab375e5SBram Moolenaarfunc Test_curswant_with_autocommand()
482ab375e5SBram Moolenaar  new
492ab375e5SBram Moolenaar  call setline(1, ['func()', '{', '}', '----'])
502ab375e5SBram Moolenaar  autocmd! CursorMovedI * call s:Highlight_Matching_Pair()
51eb992cb9SBram Moolenaar  call test_override("char_avail", 1)
522ab375e5SBram Moolenaar  exe "normal! 3Ga\<Down>X\<Esc>"
53eb992cb9SBram Moolenaar  call test_override("char_avail", 0)
542ab375e5SBram Moolenaar  call assert_equal('-X---', getline(4))
552ab375e5SBram Moolenaar  autocmd! CursorMovedI *
562ab375e5SBram Moolenaar  quit!
572ab375e5SBram Moolenaarendfunc
582ab375e5SBram Moolenaar
59177ab9e0SBram Moolenaar" Tests for behavior of curswant with cursorcolumn/line
60177ab9e0SBram Moolenaarfunc Test_curswant_with_cursorcolumn()
61177ab9e0SBram Moolenaar  new
62177ab9e0SBram Moolenaar  call setline(1, ['01234567', ''])
63177ab9e0SBram Moolenaar  exe "normal! ggf6j"
64177ab9e0SBram Moolenaar  call assert_equal(6, winsaveview().curswant)
65177ab9e0SBram Moolenaar  set cursorcolumn
66177ab9e0SBram Moolenaar  call assert_equal(6, winsaveview().curswant)
67177ab9e0SBram Moolenaar  quit!
68177ab9e0SBram Moolenaarendfunc
69177ab9e0SBram Moolenaar
70177ab9e0SBram Moolenaarfunc Test_curswant_with_cursorline()
71177ab9e0SBram Moolenaar  new
72177ab9e0SBram Moolenaar  call setline(1, ['01234567', ''])
73177ab9e0SBram Moolenaar  exe "normal! ggf6j"
74177ab9e0SBram Moolenaar  call assert_equal(6, winsaveview().curswant)
75177ab9e0SBram Moolenaar  set cursorline
76177ab9e0SBram Moolenaar  call assert_equal(6, winsaveview().curswant)
77177ab9e0SBram Moolenaar  quit!
78177ab9e0SBram Moolenaarendfunc
79b3d17a20SBram Moolenaar
80b3d17a20SBram Moolenaarfunc Test_screenpos()
81b3d17a20SBram Moolenaar  rightbelow new
82b3d17a20SBram Moolenaar  rightbelow 20vsplit
83b3d17a20SBram Moolenaar  call setline(1, ["\tsome text", "long wrapping line here", "next line"])
84b3d17a20SBram Moolenaar  redraw
85b3d17a20SBram Moolenaar  let winid = win_getid()
86b3d17a20SBram Moolenaar  let [winrow, wincol] = win_screenpos(winid)
87b3d17a20SBram Moolenaar  call assert_equal({'row': winrow,
88b3d17a20SBram Moolenaar	\ 'col': wincol + 0,
89b3d17a20SBram Moolenaar	\ 'curscol': wincol + 7,
90f92e58caSBram Moolenaar	\ 'endcol': wincol + 7}, winid->screenpos(1, 1))
91b3d17a20SBram Moolenaar  call assert_equal({'row': winrow,
92b3d17a20SBram Moolenaar	\ 'col': wincol + 13,
93b3d17a20SBram Moolenaar	\ 'curscol': wincol + 13,
94196b4664SBram Moolenaar	\ 'endcol': wincol + 13}, winid->screenpos(1, 7))
95b3d17a20SBram Moolenaar  call assert_equal({'row': winrow + 2,
96b3d17a20SBram Moolenaar	\ 'col': wincol + 1,
97b3d17a20SBram Moolenaar	\ 'curscol': wincol + 1,
98b3d17a20SBram Moolenaar	\ 'endcol': wincol + 1}, screenpos(winid, 2, 22))
99b3d17a20SBram Moolenaar  setlocal number
100b3d17a20SBram Moolenaar  call assert_equal({'row': winrow + 3,
101b3d17a20SBram Moolenaar	\ 'col': wincol + 9,
102b3d17a20SBram Moolenaar	\ 'curscol': wincol + 9,
103b3d17a20SBram Moolenaar	\ 'endcol': wincol + 9}, screenpos(winid, 2, 22))
104*189663bdSBram Moolenaar
105*189663bdSBram Moolenaar  let wininfo = getwininfo(winid)[0]
106*189663bdSBram Moolenaar  call setline(3, ['x']->repeat(wininfo.height))
107*189663bdSBram Moolenaar  call setline(line('$') + 1, 'x'->repeat(wininfo.width * 3))
108*189663bdSBram Moolenaar  setlocal nonumber display=lastline so=0
109*189663bdSBram Moolenaar  exe "normal G\<C-Y>\<C-Y>"
110*189663bdSBram Moolenaar  redraw
111*189663bdSBram Moolenaar  call assert_equal({'row': winrow + wininfo.height - 1,
112*189663bdSBram Moolenaar	\ 'col': wincol + 7,
113*189663bdSBram Moolenaar	\ 'curscol': wincol + 7,
114*189663bdSBram Moolenaar	\ 'endcol': wincol + 7}, winid->screenpos(line('$'), 8))
115*189663bdSBram Moolenaar  call assert_equal({'row': winrow - 1, 'col': 0, 'curscol': 0, 'endcol': 0},
116*189663bdSBram Moolenaar        \ winid->screenpos(line('$'), 22))
117*189663bdSBram Moolenaar
118b3d17a20SBram Moolenaar  close
119bdd2c290SBram Moolenaar  call assert_equal({}, screenpos(999, 1, 1))
120*189663bdSBram Moolenaar
121b3d17a20SBram Moolenaar  bwipe!
122*189663bdSBram Moolenaar  set display&
1238dd46e72SBram Moolenaar
1248dd46e72SBram Moolenaar  call assert_equal({'col': 1, 'row': 1, 'endcol': 1, 'curscol': 1}, screenpos(win_getid(), 1, 1))
1258dd46e72SBram Moolenaar  nmenu WinBar.TEST :
1268dd46e72SBram Moolenaar  call assert_equal({'col': 1, 'row': 2, 'endcol': 1, 'curscol': 1}, screenpos(win_getid(), 1, 1))
1278dd46e72SBram Moolenaar  nunmenu WinBar.TEST
128b3d17a20SBram Moolenaarendfunc
12938ba4dceSBram Moolenaar
13038ba4dceSBram Moolenaarfunc Test_screenpos_number()
13138ba4dceSBram Moolenaar  rightbelow new
13238ba4dceSBram Moolenaar  rightbelow 73vsplit
13338ba4dceSBram Moolenaar  call setline (1, repeat('x', 66))
13438ba4dceSBram Moolenaar  setlocal number
13538ba4dceSBram Moolenaar  redraw
13638ba4dceSBram Moolenaar  let winid = win_getid()
13738ba4dceSBram Moolenaar  let [winrow, wincol] = win_screenpos(winid)
13838ba4dceSBram Moolenaar  let pos = screenpos(winid, 1, 66)
13938ba4dceSBram Moolenaar  call assert_equal(winrow, pos.row)
14038ba4dceSBram Moolenaar  call assert_equal(wincol + 66 + 3, pos.col)
14138ba4dceSBram Moolenaar  close
14238ba4dceSBram Moolenaar  bwipe!
14338ba4dceSBram Moolenaarendfunc
14408f4157cSBram Moolenaar
1459145846bSBram Moolenaar" Save the visual start character position
1466f02b00bSBram Moolenaarfunc SaveVisualStartCharPos()
1476f02b00bSBram Moolenaar  call add(g:VisualStartPos, getcharpos('v'))
1486f02b00bSBram Moolenaar  return ''
1496f02b00bSBram Moolenaarendfunc
1506f02b00bSBram Moolenaar
1519145846bSBram Moolenaar" Save the current cursor character position in insert mode
1529145846bSBram Moolenaarfunc SaveInsertCurrentCharPos()
1539145846bSBram Moolenaar  call add(g:InsertCurrentPos, getcharpos('.'))
1549145846bSBram Moolenaar  return ''
1559145846bSBram Moolenaarendfunc
1569145846bSBram Moolenaar
1576f02b00bSBram Moolenaar" Test for the getcharpos() function
1586f02b00bSBram Moolenaarfunc Test_getcharpos()
1596f02b00bSBram Moolenaar  call assert_fails('call getcharpos({})', 'E731:')
1606f02b00bSBram Moolenaar  call assert_equal([0, 0, 0, 0], getcharpos(0))
1616f02b00bSBram Moolenaar  new
1626f02b00bSBram Moolenaar  call setline(1, ['', "01\tà4è678", 'Ⅵ', '012345678'])
1636f02b00bSBram Moolenaar
1646f02b00bSBram Moolenaar  " Test for '.' and '$'
1656f02b00bSBram Moolenaar  normal 1G
1666f02b00bSBram Moolenaar  call assert_equal([0, 1, 1, 0], getcharpos('.'))
1676f02b00bSBram Moolenaar  call assert_equal([0, 4, 1, 0], getcharpos('$'))
1686f02b00bSBram Moolenaar  normal 2G6l
1696f02b00bSBram Moolenaar  call assert_equal([0, 2, 7, 0], getcharpos('.'))
1706f02b00bSBram Moolenaar  normal 3G$
1716f02b00bSBram Moolenaar  call assert_equal([0, 3, 1, 0], getcharpos('.'))
1726f02b00bSBram Moolenaar  normal 4G$
1736f02b00bSBram Moolenaar  call assert_equal([0, 4, 9, 0], getcharpos('.'))
1746f02b00bSBram Moolenaar
1756f02b00bSBram Moolenaar  " Test for a mark
1766f02b00bSBram Moolenaar  normal 2G7lmmgg
1776f02b00bSBram Moolenaar  call assert_equal([0, 2, 8, 0], getcharpos("'m"))
1786f02b00bSBram Moolenaar  delmarks m
1796f02b00bSBram Moolenaar  call assert_equal([0, 0, 0, 0], getcharpos("'m"))
1806f02b00bSBram Moolenaar
1816f02b00bSBram Moolenaar  " Test for the visual start column
1826f02b00bSBram Moolenaar  vnoremap <expr> <F3> SaveVisualStartCharPos()
1836f02b00bSBram Moolenaar  let g:VisualStartPos = []
1846f02b00bSBram Moolenaar  exe "normal 2G6lv$\<F3>ohh\<F3>o\<F3>"
1859145846bSBram Moolenaar  call assert_equal([[0, 2, 7, 0], [0, 2, 10, 0], [0, 2, 5, 0]], g:VisualStartPos)
1866f02b00bSBram Moolenaar  call assert_equal([0, 2, 9, 0], getcharpos('v'))
1876f02b00bSBram Moolenaar  let g:VisualStartPos = []
1886f02b00bSBram Moolenaar  exe "normal 3Gv$\<F3>o\<F3>"
1899145846bSBram Moolenaar  call assert_equal([[0, 3, 1, 0], [0, 3, 2, 0]], g:VisualStartPos)
1906f02b00bSBram Moolenaar  let g:VisualStartPos = []
1916f02b00bSBram Moolenaar  exe "normal 1Gv$\<F3>o\<F3>"
1926f02b00bSBram Moolenaar  call assert_equal([[0, 1, 1, 0], [0, 1, 1, 0]], g:VisualStartPos)
1936f02b00bSBram Moolenaar  vunmap <F3>
1946f02b00bSBram Moolenaar
1959145846bSBram Moolenaar  " Test for getting the position in insert mode with the cursor after the
1969145846bSBram Moolenaar  " last character in a line
1979145846bSBram Moolenaar  inoremap <expr> <F3> SaveInsertCurrentCharPos()
1989145846bSBram Moolenaar  let g:InsertCurrentPos = []
1999145846bSBram Moolenaar  exe "normal 1GA\<F3>"
2009145846bSBram Moolenaar  exe "normal 2GA\<F3>"
2019145846bSBram Moolenaar  exe "normal 3GA\<F3>"
2029145846bSBram Moolenaar  exe "normal 4GA\<F3>"
2039145846bSBram Moolenaar  exe "normal 2G6li\<F3>"
2049145846bSBram Moolenaar  call assert_equal([[0, 1, 1, 0], [0, 2, 10, 0], [0, 3, 2, 0], [0, 4, 10, 0],
2059145846bSBram Moolenaar                        \ [0, 2, 7, 0]], g:InsertCurrentPos)
2069145846bSBram Moolenaar  iunmap <F3>
2079145846bSBram Moolenaar
2086f02b00bSBram Moolenaar  %bw!
2096f02b00bSBram Moolenaarendfunc
2106f02b00bSBram Moolenaar
2116f02b00bSBram Moolenaar" Test for the setcharpos() function
2126f02b00bSBram Moolenaarfunc Test_setcharpos()
2136f02b00bSBram Moolenaar  call assert_equal(-1, setcharpos('.', test_null_list()))
2146f02b00bSBram Moolenaar  new
2156f02b00bSBram Moolenaar  call setline(1, ['', "01\tà4è678", 'Ⅵ', '012345678'])
2166f02b00bSBram Moolenaar  call setcharpos('.', [0, 1, 1, 0])
2176f02b00bSBram Moolenaar  call assert_equal([1, 1], [line('.'), col('.')])
2186f02b00bSBram Moolenaar  call setcharpos('.', [0, 2, 7, 0])
2196f02b00bSBram Moolenaar  call assert_equal([2, 9], [line('.'), col('.')])
2206f02b00bSBram Moolenaar  call setcharpos('.', [0, 3, 4, 0])
2216f02b00bSBram Moolenaar  call assert_equal([3, 1], [line('.'), col('.')])
2226f02b00bSBram Moolenaar  call setcharpos('.', [0, 3, 1, 0])
2236f02b00bSBram Moolenaar  call assert_equal([3, 1], [line('.'), col('.')])
2246f02b00bSBram Moolenaar  call setcharpos('.', [0, 4, 0, 0])
2256f02b00bSBram Moolenaar  call assert_equal([4, 1], [line('.'), col('.')])
2266f02b00bSBram Moolenaar  call setcharpos('.', [0, 4, 20, 0])
2276f02b00bSBram Moolenaar  call assert_equal([4, 9], [line('.'), col('.')])
2286f02b00bSBram Moolenaar
2296f02b00bSBram Moolenaar  " Test for mark
2306f02b00bSBram Moolenaar  delmarks m
2316f02b00bSBram Moolenaar  call setcharpos("'m", [0, 2, 9, 0])
2326f02b00bSBram Moolenaar  normal `m
2336f02b00bSBram Moolenaar  call assert_equal([2, 11], [line('.'), col('.')])
2349145846bSBram Moolenaar  " unload the buffer and try to set the mark
2359145846bSBram Moolenaar  let bnr = bufnr()
2369145846bSBram Moolenaar  enew!
2379145846bSBram Moolenaar  call assert_equal(-1, setcharpos("'m", [bnr, 2, 2, 0]))
2386f02b00bSBram Moolenaar
2396f02b00bSBram Moolenaar  %bw!
2406f02b00bSBram Moolenaar  call assert_equal(-1, setcharpos('.', [10, 3, 1, 0]))
2416f02b00bSBram Moolenaarendfunc
2426f02b00bSBram Moolenaar
2436f02b00bSBram Moolenaarfunc SaveVisualStartCharCol()
2446f02b00bSBram Moolenaar  call add(g:VisualStartCol, charcol('v'))
2456f02b00bSBram Moolenaar  return ''
2466f02b00bSBram Moolenaarendfunc
2476f02b00bSBram Moolenaar
2489145846bSBram Moolenaarfunc SaveInsertCurrentCharCol()
2499145846bSBram Moolenaar  call add(g:InsertCurrentCol, charcol('.'))
2509145846bSBram Moolenaar  return ''
2519145846bSBram Moolenaarendfunc
2529145846bSBram Moolenaar
2536f02b00bSBram Moolenaar" Test for the charcol() function
2546f02b00bSBram Moolenaarfunc Test_charcol()
2556f02b00bSBram Moolenaar  call assert_fails('call charcol({})', 'E731:')
2566f02b00bSBram Moolenaar  call assert_equal(0, charcol(0))
2576f02b00bSBram Moolenaar  new
2586f02b00bSBram Moolenaar  call setline(1, ['', "01\tà4è678", 'Ⅵ', '012345678'])
2596f02b00bSBram Moolenaar
2606f02b00bSBram Moolenaar  " Test for '.' and '$'
2616f02b00bSBram Moolenaar  normal 1G
2626f02b00bSBram Moolenaar  call assert_equal(1, charcol('.'))
2636f02b00bSBram Moolenaar  call assert_equal(1, charcol('$'))
2646f02b00bSBram Moolenaar  normal 2G6l
2656f02b00bSBram Moolenaar  call assert_equal(7, charcol('.'))
2666f02b00bSBram Moolenaar  call assert_equal(10, charcol('$'))
2676f02b00bSBram Moolenaar  normal 3G$
2686f02b00bSBram Moolenaar  call assert_equal(1, charcol('.'))
2696f02b00bSBram Moolenaar  call assert_equal(2, charcol('$'))
2706f02b00bSBram Moolenaar  normal 4G$
2716f02b00bSBram Moolenaar  call assert_equal(9, charcol('.'))
2726f02b00bSBram Moolenaar  call assert_equal(10, charcol('$'))
2736f02b00bSBram Moolenaar
2746f02b00bSBram Moolenaar  " Test for [lnum, '$']
2756f02b00bSBram Moolenaar  call assert_equal(1, charcol([1, '$']))
2766f02b00bSBram Moolenaar  call assert_equal(10, charcol([2, '$']))
2776f02b00bSBram Moolenaar  call assert_equal(2, charcol([3, '$']))
2786f02b00bSBram Moolenaar  call assert_equal(0, charcol([5, '$']))
2796f02b00bSBram Moolenaar
2806f02b00bSBram Moolenaar  " Test for a mark
2816f02b00bSBram Moolenaar  normal 2G7lmmgg
2826f02b00bSBram Moolenaar  call assert_equal(8, charcol("'m"))
2836f02b00bSBram Moolenaar  delmarks m
2846f02b00bSBram Moolenaar  call assert_equal(0, charcol("'m"))
2856f02b00bSBram Moolenaar
2866f02b00bSBram Moolenaar  " Test for the visual start column
2876f02b00bSBram Moolenaar  vnoremap <expr> <F3> SaveVisualStartCharCol()
2886f02b00bSBram Moolenaar  let g:VisualStartCol = []
2896f02b00bSBram Moolenaar  exe "normal 2G6lv$\<F3>ohh\<F3>o\<F3>"
2909145846bSBram Moolenaar  call assert_equal([7, 10, 5], g:VisualStartCol)
2916f02b00bSBram Moolenaar  call assert_equal(9, charcol('v'))
2926f02b00bSBram Moolenaar  let g:VisualStartCol = []
2936f02b00bSBram Moolenaar  exe "normal 3Gv$\<F3>o\<F3>"
2949145846bSBram Moolenaar  call assert_equal([1, 2], g:VisualStartCol)
2956f02b00bSBram Moolenaar  let g:VisualStartCol = []
2966f02b00bSBram Moolenaar  exe "normal 1Gv$\<F3>o\<F3>"
2976f02b00bSBram Moolenaar  call assert_equal([1, 1], g:VisualStartCol)
2986f02b00bSBram Moolenaar  vunmap <F3>
2996f02b00bSBram Moolenaar
3009145846bSBram Moolenaar  " Test for getting the column number in insert mode with the cursor after
3019145846bSBram Moolenaar  " the last character in a line
3029145846bSBram Moolenaar  inoremap <expr> <F3> SaveInsertCurrentCharCol()
3039145846bSBram Moolenaar  let g:InsertCurrentCol = []
3049145846bSBram Moolenaar  exe "normal 1GA\<F3>"
3059145846bSBram Moolenaar  exe "normal 2GA\<F3>"
3069145846bSBram Moolenaar  exe "normal 3GA\<F3>"
3079145846bSBram Moolenaar  exe "normal 4GA\<F3>"
3089145846bSBram Moolenaar  exe "normal 2G6li\<F3>"
3099145846bSBram Moolenaar  call assert_equal([1, 10, 2, 10, 7], g:InsertCurrentCol)
3109145846bSBram Moolenaar  iunmap <F3>
3119145846bSBram Moolenaar
3126f02b00bSBram Moolenaar  %bw!
3136f02b00bSBram Moolenaarendfunc
3146f02b00bSBram Moolenaar
3159145846bSBram Moolenaarfunc SaveInsertCursorCharPos()
3169145846bSBram Moolenaar  call add(g:InsertCursorPos, getcursorcharpos('.'))
3179145846bSBram Moolenaar  return ''
3189145846bSBram Moolenaarendfunc
3199145846bSBram Moolenaar
3206f02b00bSBram Moolenaar" Test for getcursorcharpos()
3216f02b00bSBram Moolenaarfunc Test_getcursorcharpos()
3226f02b00bSBram Moolenaar  call assert_equal(getcursorcharpos(), getcursorcharpos(0))
3236f02b00bSBram Moolenaar  call assert_equal([0, 0, 0, 0, 0], getcursorcharpos(-1))
3246f02b00bSBram Moolenaar  call assert_equal([0, 0, 0, 0, 0], getcursorcharpos(1999))
3256f02b00bSBram Moolenaar
3266f02b00bSBram Moolenaar  new
3276f02b00bSBram Moolenaar  call setline(1, ['', "01\tà4è678", 'Ⅵ', '012345678'])
3286f02b00bSBram Moolenaar  normal 1G9l
3296f02b00bSBram Moolenaar  call assert_equal([0, 1, 1, 0, 1], getcursorcharpos())
3306f02b00bSBram Moolenaar  normal 2G9l
3316f02b00bSBram Moolenaar  call assert_equal([0, 2, 9, 0, 14], getcursorcharpos())
3326f02b00bSBram Moolenaar  normal 3G9l
3336f02b00bSBram Moolenaar  call assert_equal([0, 3, 1, 0, 1], getcursorcharpos())
3346f02b00bSBram Moolenaar  normal 4G9l
3356f02b00bSBram Moolenaar  call assert_equal([0, 4, 9, 0, 9], getcursorcharpos())
3366f02b00bSBram Moolenaar
3379145846bSBram Moolenaar  " Test for getting the cursor position in insert mode with the cursor after
3389145846bSBram Moolenaar  " the last character in a line
3399145846bSBram Moolenaar  inoremap <expr> <F3> SaveInsertCursorCharPos()
3409145846bSBram Moolenaar  let g:InsertCursorPos = []
3419145846bSBram Moolenaar  exe "normal 1GA\<F3>"
3429145846bSBram Moolenaar  exe "normal 2GA\<F3>"
3439145846bSBram Moolenaar  exe "normal 3GA\<F3>"
3449145846bSBram Moolenaar  exe "normal 4GA\<F3>"
3459145846bSBram Moolenaar  exe "normal 2G6li\<F3>"
3469145846bSBram Moolenaar  call assert_equal([[0, 1, 1, 0, 1], [0, 2, 10, 0, 15], [0, 3, 2, 0, 2],
3479145846bSBram Moolenaar                    \ [0, 4, 10, 0, 10], [0, 2, 7, 0, 12]], g:InsertCursorPos)
3489145846bSBram Moolenaar  iunmap <F3>
3499145846bSBram Moolenaar
3506f02b00bSBram Moolenaar  let winid = win_getid()
3516f02b00bSBram Moolenaar  normal 2G5l
3526f02b00bSBram Moolenaar  wincmd w
3536f02b00bSBram Moolenaar  call assert_equal([0, 2, 6, 0, 11], getcursorcharpos(winid))
3546f02b00bSBram Moolenaar  %bw!
3556f02b00bSBram Moolenaarendfunc
3566f02b00bSBram Moolenaar
3576f02b00bSBram Moolenaar" Test for setcursorcharpos()
3586f02b00bSBram Moolenaarfunc Test_setcursorcharpos()
3596f02b00bSBram Moolenaar  call assert_fails('call setcursorcharpos(test_null_list())', 'E474:')
3606f02b00bSBram Moolenaar  call assert_fails('call setcursorcharpos([1])', 'E474:')
3616f02b00bSBram Moolenaar  call assert_fails('call setcursorcharpos([1, 1, 1, 1, 1])', 'E474:')
3626f02b00bSBram Moolenaar  new
3636f02b00bSBram Moolenaar  call setline(1, ['', "01\tà4è678", 'Ⅵ', '012345678'])
3646f02b00bSBram Moolenaar  normal G
3656f02b00bSBram Moolenaar  call setcursorcharpos([1, 1])
3666f02b00bSBram Moolenaar  call assert_equal([1, 1], [line('.'), col('.')])
3676f02b00bSBram Moolenaar  call setcursorcharpos([2, 7, 0])
3686f02b00bSBram Moolenaar  call assert_equal([2, 9], [line('.'), col('.')])
3696f02b00bSBram Moolenaar  call setcursorcharpos(3, 4)
3706f02b00bSBram Moolenaar  call assert_equal([3, 1], [line('.'), col('.')])
3716f02b00bSBram Moolenaar  call setcursorcharpos([3, 1])
3726f02b00bSBram Moolenaar  call assert_equal([3, 1], [line('.'), col('.')])
3736f02b00bSBram Moolenaar  call setcursorcharpos([4, 0, 0, 0])
3746f02b00bSBram Moolenaar  call assert_equal([4, 1], [line('.'), col('.')])
3756f02b00bSBram Moolenaar  call setcursorcharpos([4, 20])
3766f02b00bSBram Moolenaar  call assert_equal([4, 9], [line('.'), col('.')])
3776f02b00bSBram Moolenaar  normal 1G
3786f02b00bSBram Moolenaar  call setcursorcharpos([100, 100, 100, 100])
3796f02b00bSBram Moolenaar  call assert_equal([4, 9], [line('.'), col('.')])
3806f02b00bSBram Moolenaar  normal 1G
3816f02b00bSBram Moolenaar  call setcursorcharpos('$', 1)
3826f02b00bSBram Moolenaar  call assert_equal([4, 1], [line('.'), col('.')])
3836f02b00bSBram Moolenaar
3846f02b00bSBram Moolenaar  %bw!
3856f02b00bSBram Moolenaarendfunc
3866f02b00bSBram Moolenaar
38708f4157cSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
388