Mercurial > vim
diff src/testdir/test_popupwin.vim @ 17551:8cca2654d459 v8.1.1773
patch 8.1.1773: the preview popup window may be too far to the right
commit https://github.com/vim/vim/commit/13d5c3f6162694a7e925e66fc4eea35436643384
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 28 21:42:38 2019 +0200
patch 8.1.1773: the preview popup window may be too far to the right
Problem: The preview popup window may be too far to the right.
Solution: Keep it inside the screen. Also keep the close button and
scrollbar visible if possible.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 28 Jul 2019 21:45:05 +0200 |
parents | 57b9fca8c7d2 |
children | d5e5d0fc3fa8 |
line wrap: on
line diff
--- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -1009,9 +1009,9 @@ func Test_popup_atcursor() 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) @@ -1020,9 +1020,9 @@ func Test_popup_atcursor() 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) @@ -1347,11 +1347,11 @@ func Test_popup_never_behind() 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() @@ -1364,24 +1364,24 @@ 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 @@ -1395,61 +1395,61 @@ func Test_popup_position_adjust() " - 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) @@ -1465,62 +1465,62 @@ func Test_adjust_left_past_screen_width( " 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() @@ -1715,7 +1715,7 @@ func Test_popup_settext() 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', {}) @@ -2155,16 +2155,17 @@ func Test_previewpopup() 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') @@ -2177,6 +2178,13 @@ func Test_previewpopup() 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')