diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-08-24 07:27:18 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-08-28 05:51:01 +0800 |
commit | 128091a256d64db2f983d70a888b379d7e63f131 (patch) | |
tree | 02d71afdc932cb051d648f9353e480934917aa7a /test/functional | |
parent | abb8c2c453d1e084f8ab3e9bbaa8b27515c81a9f (diff) | |
download | rneovim-128091a256d64db2f983d70a888b379d7e63f131.tar.gz rneovim-128091a256d64db2f983d70a888b379d7e63f131.tar.bz2 rneovim-128091a256d64db2f983d70a888b379d7e63f131.zip |
fix(ui): wrong cursor position with left gravity inline virt text at eol
Diffstat (limited to 'test/functional')
-rw-r--r-- | test/functional/legacy/breakindent_spec.lua | 13 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 141 |
2 files changed, 106 insertions, 48 deletions
diff --git a/test/functional/legacy/breakindent_spec.lua b/test/functional/legacy/breakindent_spec.lua index ecd2d47f47..3913ba935a 100644 --- a/test/functional/legacy/breakindent_spec.lua +++ b/test/functional/legacy/breakindent_spec.lua @@ -21,7 +21,6 @@ describe('breakindent', function() set listchars=eol:$ let &signcolumn = 'yes' let &showbreak = '++' - let &breakindent = v:true let &breakindentopt = 'shift:2' let leftcol = win_getid()->getwininfo()->get(0, {})->get('textoff') eval repeat('x', &columns - leftcol - 1)->setline(1) @@ -39,6 +38,9 @@ describe('breakindent', function() -- No line wraps, so changing 'showbreak' should lead to the same screen. command('setlocal showbreak=+') screen:expect_unchanged() + -- No line wraps, so setting 'breakindent' should lead to the same screen. + command('setlocal breakindent') + screen:expect_unchanged() -- The first line now wraps because of "eol" in 'listchars'. command('setlocal list') screen:expect{grid=[[ @@ -49,5 +51,14 @@ describe('breakindent', function() {0:~ }| {2:-- INSERT --} | ]]} + command('setlocal nobreakindent') + screen:expect{grid=[[ + {1: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX| + {1: }{0:+^$} | + {1: }second line{0:$} | + {0:~ }| + {0:~ }| + {2:-- INSERT --} | + ]]} end) end) diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 0dd8fd8ad9..c6d5c20649 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -2209,111 +2209,119 @@ bbbbbbb]]) end) it('cursor position is correct when inserting around a virtual text with left gravity', function() - insert('foo foo foo foo') - meths.buf_set_extmark(0, ns, 0, 8, { virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false }) - feed('0') - feed('8l') + screen:try_resize(27, 4) + insert(('a'):rep(15)) + meths.buf_set_extmark(0, ns, 0, 8, { virt_text = { { ('>'):rep(43), 'Special' } }, virt_text_pos = 'inline', right_gravity = false }) + command('setlocal showbreak=+ breakindent breakindentopt=shift:2') + feed('08l') screen:expect{grid=[[ - foo foo {10:virtual text}^foo foo | - {1:~ }| - | + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}^aaaaaaa | + | ]]} - feed('i') screen:expect{grid=[[ - foo foo {10:virtual text}^foo foo | - {1:~ }| - {8:-- INSERT --} | + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}^aaaaaaa | + {8:-- INSERT --} | ]]} - feed([[<C-\><C-O>]]) screen:expect{grid=[[ - foo foo {10:virtual text}^foo foo | - {1:~ }| - {8:-- (insert) --} | + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}^aaaaaaa | + {8:-- (insert) --} | ]]} - feed('D') screen:expect{grid=[[ - foo foo {10:virtual text}^ | - {1:~ }| - {8:-- INSERT --} | + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:^~ }| + {8:-- INSERT --} | + ]]} + command('setlocal list listchars=eol:$') + screen:expect{grid=[[ + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+^$} | + {8:-- INSERT --} | ]]} - feed('<C-U>') screen:expect{grid=[[ - {10:virtual text}^ | - {1:~ }| - {8:-- INSERT --} | + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>}{1:^$} | + {1:~ }| + {8:-- INSERT --} | ]]} - feed('a') screen:expect{grid=[[ - {10:virtual text}a^ | - {1:~ }| - {8:-- INSERT --} | + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>}a{1:^$} | + {1:~ }| + {8:-- INSERT --} | ]]} - feed('<Esc>') screen:expect{grid=[[ - {10:virtual text}^a | - {1:~ }| - | + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>}^a{1:$} | + {1:~ }| + | ]]} - feed('x') screen:expect{grid=[[ - {10:^virtual text} | - {1:~ }| - | + {10:^>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>>>>>>>>>>>>>>>}{1:$} | + {1:~ }| + | ]]} end) it('cursor position is correct when inserting around virtual texts with both left and right gravity', function() screen:try_resize(30, 4) command('setlocal showbreak=+ breakindent breakindentopt=shift:2') - insert('foo foo foo foo') + insert(('a'):rep(15)) meths.buf_set_extmark(0, ns, 0, 8, { virt_text = {{ ('>'):rep(32), 'Special' }}, virt_text_pos = 'inline', right_gravity = false }) meths.buf_set_extmark(0, ns, 0, 8, { virt_text = {{ ('<'):rep(32), 'Special' }}, virt_text_pos = 'inline', right_gravity = true }) - feed('08l') screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>><<<<<<<<<<<<<<<<<}| - {1:+}{10:<<<<<<<<<<<<<<<}^foo foo | + {1:+}{10:<<<<<<<<<<<<<<<}^aaaaaaa | | ]]} feed('i') screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>>^<<<<<<<<<<<<<<<<<}| - {1:+}{10:<<<<<<<<<<<<<<<}foo foo | + {1:+}{10:<<<<<<<<<<<<<<<}aaaaaaa | {8:-- INSERT --} | ]]} feed('a') screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>>}a{10:^<<<<<<<<<<<<<<<<}| - {1:+}{10:<<<<<<<<<<<<<<<<}foo foo | + {1:+}{10:<<<<<<<<<<<<<<<<}aaaaaaa | {8:-- INSERT --} | ]]} feed([[<C-\><C-O>]]) screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>>}a{10:<<<<<<<<<<<<<<<<}| - {1:+}{10:<<<<<<<<<<<<<<<<}^foo foo | + {1:+}{10:<<<<<<<<<<<<<<<<}^aaaaaaa | {8:-- (insert) --} | ]]} feed('D') screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>>}a{10:^<<<<<<<<<<<<<<<<}| {1:+}{10:<<<<<<<<<<<<<<<<} | {8:-- INSERT --} | ]]} feed('<BS>') screen:expect{grid=[[ - foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}| + aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}| {1:+}{10:>>>>>>>>>>^<<<<<<<<<<<<<<<<<}| {1:+}{10:<<<<<<<<<<<<<<<} | {8:-- INSERT --} | @@ -2346,6 +2354,27 @@ bbbbbbb]]) {1:+}{10:<<<<<<<} | | ]]} + feed('i') + screen:expect{grid=[[ + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:>>^<<<<<<<<<<<<<<<<<<<<<<<<<}| + {1:+}{10:<<<<<<<} | + {8:-- INSERT --} | + ]]} + screen:try_resize(32, 4) + screen:expect{grid=[[ + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}| + {1:+}{10:<<<} | + {8:-- INSERT --} | + ]]} + command('setlocal nobreakindent') + screen:expect{grid=[[ + {10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}| + {1:+}{10:^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}| + {1:+}{10:<} | + {8:-- INSERT --} | + ]]} end) it('draws correctly with no wrap multiple virtual text, where one is hidden', function() @@ -3002,6 +3031,24 @@ bbbbbbb]]) {1:~ }| | ]]} + feed('26ia<Esc>a') + screen:expect{grid=[[ + 1 aaaaaaaaaaaaaaaaaaaaaaaaaa| + {1:+}^12312312312312312312312| + {1:+}31231231231231231231231| + {1:+}23123123123123123123123| + {1:~ }| + {8:-- INSERT --} | + ]]} + feed([[<C-\><C-O>:setlocal breakindentopt=<CR>]]) + screen:expect{grid=[[ + 1 aaaaaaaaaaaaaaaaaaaaaaaaaa| + {1:+}^1231231231231231231231231| + {1:+}2312312312312312312312312| + {1:+}3123123123123123123 | + {1:~ }| + {8:-- INSERT --} | + ]]} end describe('with showbreak, smoothscroll', function() |