call cursor(1, 1)
redraw
let winid = popup_create('vim', #{
- \ line: 'cursor+2',
- \ col: 'cursor+1',
- \})
+ \ line: 'cursor+2',
+ \ col: 'cursor+1',
+ \})
redraw
let line = join(map(range(1, 17), 'screenstring(3, v:val)'), '')
call assert_equal('xvimxxxxxxxxxxxxx', line)
call cursor(3, 3)
redraw
let winid = popup_create('vim', #{
- \ line: 'cursor-2',
- \ col: 'cursor-1',
- \})
+ \ line: 'cursor-2',
+ \ col: 'cursor-1',
+ \})
redraw
let line = join(map(range(1, 17), 'screenstring(1, v:val)'), '')
call assert_equal('xvimxxxxxxxxxxxxx', line)
call delete('XtestPopupBehind')
endfunc
-func s:VerifyPosition( p, msg, line, col, width, height )
- call assert_equal( a:line, popup_getpos( a:p ).line, a:msg . ' (l)' )
- call assert_equal( a:col, popup_getpos( a:p ).col, a:msg . ' (c)' )
- call assert_equal( a:width, popup_getpos( a:p ).width, a:msg . ' (w)' )
- call assert_equal( a:height, popup_getpos( a:p ).height, a:msg . ' (h)' )
+func s:VerifyPosition(p, msg, line, col, width, height)
+ call assert_equal(a:line, popup_getpos(a:p).line, a:msg . ' (l)')
+ call assert_equal(a:col, popup_getpos(a:p).col, a:msg . ' (c)')
+ call assert_equal(a:width, popup_getpos(a:p).width, a:msg . ' (w)')
+ call assert_equal(a:height, popup_getpos(a:p).height, a:msg . ' (h)')
endfunc
func Test_popup_position_adjust()
" Entries for cases which don't vary based on wrapping.
" Format is per tests described below
let both_wrap_tests = [
- \ [ 'a', 5, &columns, 5, &columns - 2, 1, 1 ],
- \ [ 'b', 5, &columns + 1, 5, &columns - 2, 1, 1 ],
- \ [ 'c', 5, &columns - 1, 5, &columns - 2, 1, 1 ],
- \ [ 'd', 5, &columns - 2, 5, &columns - 2, 1, 1 ],
- \ [ 'e', 5, &columns - 3, 5, &columns - 3, 1, 1 ],
- \
- \ [ 'aa', 5, &columns, 5, &columns - 2, 2, 1 ],
- \ [ 'bb', 5, &columns + 1, 5, &columns - 2, 2, 1 ],
- \ [ 'cc', 5, &columns - 1, 5, &columns - 2, 2, 1 ],
- \ [ 'dd', 5, &columns - 2, 5, &columns - 2, 2, 1 ],
- \ [ 'ee', 5, &columns - 3, 5, &columns - 3, 2, 1 ],
- \
- \ [ 'aaa', 5, &columns, 5, &columns - 2, 3, 1 ],
- \ [ 'bbb', 5, &columns + 1, 5, &columns - 2, 3, 1 ],
- \ [ 'ccc', 5, &columns - 1, 5, &columns - 2, 3, 1 ],
- \ [ 'ddd', 5, &columns - 2, 5, &columns - 2, 3, 1 ],
- \ [ 'eee', 5, &columns - 3, 5, &columns - 3, 3, 1 ],
- \ ]
+ \ ['a', 5, &columns, 5, &columns - 2, 1, 1],
+ \ ['b', 5, &columns + 1, 5, &columns - 2, 1, 1],
+ \ ['c', 5, &columns - 1, 5, &columns - 2, 1, 1],
+ \ ['d', 5, &columns - 2, 5, &columns - 2, 1, 1],
+ \ ['e', 5, &columns - 3, 5, &columns - 3, 1, 1],
+ \
+ \ ['aa', 5, &columns, 5, &columns - 2, 2, 1],
+ \ ['bb', 5, &columns + 1, 5, &columns - 2, 2, 1],
+ \ ['cc', 5, &columns - 1, 5, &columns - 2, 2, 1],
+ \ ['dd', 5, &columns - 2, 5, &columns - 2, 2, 1],
+ \ ['ee', 5, &columns - 3, 5, &columns - 3, 2, 1],
+ \
+ \ ['aaa', 5, &columns, 5, &columns - 2, 3, 1],
+ \ ['bbb', 5, &columns + 1, 5, &columns - 2, 3, 1],
+ \ ['ccc', 5, &columns - 1, 5, &columns - 2, 3, 1],
+ \ ['ddd', 5, &columns - 2, 5, &columns - 2, 3, 1],
+ \ ['eee', 5, &columns - 3, 5, &columns - 3, 3, 1],
+ \ ]
" these test groups are dicts with:
" - comment: something to identify the group of tests by
" - expected width
" - expected height
let tests = [
- \ #{
- \ comment: 'left-aligned with wrapping',
- \ options: #{
- \ wrap: 1,
- \ pos: 'botleft',
- \ },
- \ tests: both_wrap_tests + [
- \ [ 'aaaa', 5, &columns, 4, &columns - 2, 3, 2 ],
- \ [ 'bbbb', 5, &columns + 1, 4, &columns - 2, 3, 2 ],
- \ [ 'cccc', 5, &columns - 1, 4, &columns - 2, 3, 2 ],
- \ [ 'dddd', 5, &columns - 2, 4, &columns - 2, 3, 2 ],
- \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ],
- \ ],
- \ },
- \ #{
- \ comment: 'left aligned without wrapping',
- \ options: #{
- \ wrap: 0,
- \ pos: 'botleft',
- \ },
- \ tests: both_wrap_tests + [
- \ [ 'aaaa', 5, &columns, 5, &columns - 3, 4, 1 ],
- \ [ 'bbbb', 5, &columns + 1, 5, &columns - 3, 4, 1 ],
- \ [ 'cccc', 5, &columns - 1, 5, &columns - 3, 4, 1 ],
- \ [ 'dddd', 5, &columns - 2, 5, &columns - 3, 4, 1 ],
- \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ],
- \ ],
- \ },
- \ #{
- \ comment: 'left aligned with fixed position',
- \ options: #{
- \ wrap: 0,
- \ fixed: 1,
- \ pos: 'botleft',
- \ },
- \ tests: both_wrap_tests + [
- \ [ 'aaaa', 5, &columns, 5, &columns - 2, 3, 1 ],
- \ [ 'bbbb', 5, &columns + 1, 5, &columns - 2, 3, 1 ],
- \ [ 'cccc', 5, &columns - 1, 5, &columns - 2, 3, 1 ],
- \ [ 'dddd', 5, &columns - 2, 5, &columns - 2, 3, 1 ],
- \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ],
- \ ],
- \ },
- \ ]
+ \ #{
+ \ comment: 'left-aligned with wrapping',
+ \ options: #{
+ \ wrap: 1,
+ \ pos: 'botleft',
+ \ },
+ \ tests: both_wrap_tests + [
+ \ ['aaaa', 5, &columns, 4, &columns - 2, 3, 2],
+ \ ['bbbb', 5, &columns + 1, 4, &columns - 2, 3, 2],
+ \ ['cccc', 5, &columns - 1, 4, &columns - 2, 3, 2],
+ \ ['dddd', 5, &columns - 2, 4, &columns - 2, 3, 2],
+ \ ['eeee', 5, &columns - 3, 5, &columns - 3, 4, 1],
+ \ ],
+ \ },
+ \ #{
+ \ comment: 'left aligned without wrapping',
+ \ options: #{
+ \ wrap: 0,
+ \ pos: 'botleft',
+ \ },
+ \ tests: both_wrap_tests + [
+ \ ['aaaa', 5, &columns, 5, &columns - 3, 4, 1],
+ \ ['bbbb', 5, &columns + 1, 5, &columns - 3, 4, 1],
+ \ ['cccc', 5, &columns - 1, 5, &columns - 3, 4, 1],
+ \ ['dddd', 5, &columns - 2, 5, &columns - 3, 4, 1],
+ \ ['eeee', 5, &columns - 3, 5, &columns - 3, 4, 1],
+ \ ],
+ \ },
+ \ #{
+ \ comment: 'left aligned with fixed position',
+ \ options: #{
+ \ wrap: 0,
+ \ fixed: 1,
+ \ pos: 'botleft',
+ \ },
+ \ tests: both_wrap_tests + [
+ \ ['aaaa', 5, &columns, 5, &columns - 2, 3, 1],
+ \ ['bbbb', 5, &columns + 1, 5, &columns - 2, 3, 1],
+ \ ['cccc', 5, &columns - 1, 5, &columns - 2, 3, 1],
+ \ ['dddd', 5, &columns - 2, 5, &columns - 2, 3, 1],
+ \ ['eeee', 5, &columns - 3, 5, &columns - 3, 4, 1],
+ \ ],
+ \ },
+ \ ]
for test_group in tests
for test in test_group.tests
let [ text, line, col, e_line, e_col, e_width, e_height ] = test
let options = #{
- \ line: line,
- \ col: col,
- \ }
- call extend( options, test_group.options )
+ \ line: line,
+ \ col: col,
+ \ }
+ call extend(options, test_group.options)
- let p = popup_create( text, options )
+ let p = popup_create(text, options)
let msg = string(extend(options, #{text: text}))
call s:VerifyPosition(p, msg, e_line, e_col, e_width, e_height)
" width of screen
let X = join(map(range(&columns), {->'X'}), '')
- let p = popup_create( X, #{line: 1, col: 1, wrap: 0})
- call s:VerifyPosition( p, 'full width topleft', 1, 1, &columns, 1 )
+ let p = popup_create(X, #{line: 1, col: 1, wrap: 0})
+ call s:VerifyPosition(p, 'full width topleft', 1, 1, &columns, 1)
redraw
let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '')
call assert_equal(X, line)
- call popup_close( p )
+ call popup_close(p)
redraw
" Same if placed on the right hand side
- let p = popup_create( X, #{line: 1, col: &columns, wrap: 0})
- call s:VerifyPosition( p, 'full width topright', 1, 1, &columns, 1 )
+ let p = popup_create(X, #{line: 1, col: &columns, wrap: 0})
+ call s:VerifyPosition(p, 'full width topright', 1, 1, &columns, 1)
redraw
let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '')
call assert_equal(X, line)
- call popup_close( p )
+ call popup_close(p)
redraw
" Extend so > window width
let X .= 'x'
- let p = popup_create( X, #{line: 1, col: 1, wrap: 0})
- call s:VerifyPosition( p, 'full width + 1 topleft', 1, 1, &columns, 1 )
+ let p = popup_create(X, #{line: 1, col: 1, wrap: 0})
+ call s:VerifyPosition(p, 'full width + 1 topleft', 1, 1, &columns, 1)
redraw
let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '')
call assert_equal(X[ : -2 ], line)
- call popup_close( p )
+ call popup_close(p)
redraw
" Shifted then truncated (the x is not visible)
- let p = popup_create( X, #{line: 1, col: &columns - 3, wrap: 0})
- call s:VerifyPosition( p, 'full width + 1 topright', 1, 1, &columns, 1 )
+ let p = popup_create(X, #{line: 1, col: &columns - 3, wrap: 0})
+ call s:VerifyPosition(p, 'full width + 1 topright', 1, 1, &columns, 1)
redraw
let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '')
call assert_equal(X[ : -2 ], line)
- call popup_close( p )
+ call popup_close(p)
redraw
" Not shifted, just truncated
- let p = popup_create( X,
- \ #{line: 1, col: 2, wrap: 0, fixed: 1})
- call s:VerifyPosition( p, 'full width + 1 fixed', 1, 2, &columns - 1, 1)
+ let p = popup_create(X,
+ \ #{line: 1, col: 2, wrap: 0, fixed: 1})
+ call s:VerifyPosition(p, 'full width + 1 fixed', 1, 2, &columns - 1, 1)
redraw
let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '')
let e_line = ' ' . X[ 1 : -2 ]
call assert_equal(e_line, line)
- call popup_close( p )
+ call popup_close(p)
redraw
call popup_clear()
call popup_settext(p, 'this is a text')
END
- call writefile( lines, 'XtestPopupSetText' )
+ call writefile(lines, 'XtestPopupSetText')
let buf = RunVimInTerminal('-S XtestPopupSetText', #{rows: 10})
call VerifyScreenDump(buf, 'Test_popup_settext_01', {})
let lines =<< trim END
set tags=Xtags
call setline(1, [
- \ 'one',
- \ 'two',
- \ 'three',
- \ 'four',
- \ 'five',
- \ 'six',
- \ 'seven',
- \ 'find theword somewhere',
- \ 'nine',
- \ 'this is another word'])
+ \ 'one',
+ \ 'two',
+ \ 'three',
+ \ 'four',
+ \ 'five',
+ \ 'six',
+ \ 'seven',
+ \ 'find theword somewhere',
+ \ 'nine',
+ \ 'this is another word',
+ \ 'very long line where the word is also another'])
set previewpopup=height:4,width:40
END
call writefile(lines, 'XtestPreviewPopup')
call term_sendkeys(buf, "/another\<CR>\<C-W>}")
call VerifyScreenDump(buf, 'Test_popupwin_previewpopup_2', {})
+ call term_sendkeys(buf, ":call popup_move(popup_getpreview(), #{col: 15})\<CR>")
+ call term_sendkeys(buf, ":\<CR>")
+ call VerifyScreenDump(buf, 'Test_popupwin_previewpopup_3', {})
+
+ call term_sendkeys(buf, "/another\<CR>\<C-W>}")
+ call VerifyScreenDump(buf, 'Test_popupwin_previewpopup_4', {})
+
call StopVimInTerminal(buf)
call delete('Xtags')
call delete('Xtagfile')