0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.1.0760: no proper test for using 'termencoding'

Problem:    No proper test for using 'termencoding'.
Solution:   Add a screendump test.  Fix using double width characters in a
            screendump.
This commit is contained in:
Bram Moolenaar
2019-01-17 13:04:30 +01:00
parent 83a52171ba
commit 617d7ef046
5 changed files with 110 additions and 53 deletions

View File

@@ -4031,7 +4031,6 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
if (cell.width == 2) if (cell.width == 2)
{ {
fputs("*", fd); fputs("*", fd);
++pos.col;
} }
else else
fputs("+", fd); fputs("+", fd);
@@ -4062,6 +4061,9 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
prev_cell = cell; prev_cell = cell;
} }
if (cell.width == 2)
++pos.col;
} }
if (repeat > 0) if (repeat > 0)
fprintf(fd, "@%d", repeat); fprintf(fd, "@%d", repeat);
@@ -4103,6 +4105,7 @@ read_dump_file(FILE *fd, VTermPos *cursor_pos)
char_u *prev_char = NULL; char_u *prev_char = NULL;
int attr = 0; int attr = 0;
cellattr_T cell; cellattr_T cell;
cellattr_T empty_cell;
term_T *term = curbuf->b_term; term_T *term = curbuf->b_term;
int max_cells = 0; int max_cells = 0;
int start_row = term->tl_scrollback.ga_len; int start_row = term->tl_scrollback.ga_len;
@@ -4110,6 +4113,7 @@ read_dump_file(FILE *fd, VTermPos *cursor_pos)
ga_init2(&ga_text, 1, 90); ga_init2(&ga_text, 1, 90);
ga_init2(&ga_cell, sizeof(cellattr_T), 90); ga_init2(&ga_cell, sizeof(cellattr_T), 90);
vim_memset(&cell, 0, sizeof(cell)); vim_memset(&cell, 0, sizeof(cell));
vim_memset(&empty_cell, 0, sizeof(empty_cell));
cursor_pos->row = -1; cursor_pos->row = -1;
cursor_pos->col = -1; cursor_pos->col = -1;
@@ -4208,9 +4212,6 @@ read_dump_file(FILE *fd, VTermPos *cursor_pos)
c = fgetc(fd); c = fgetc(fd);
} }
hl2vtermAttr(attr, &cell); hl2vtermAttr(attr, &cell);
}
else
dump_is_corrupt(&ga_text);
/* is_bg == 0: fg, is_bg == 1: bg */ /* is_bg == 0: fg, is_bg == 1: bg */
for (is_bg = 0; is_bg <= 1; ++is_bg) for (is_bg = 0; is_bg <= 1; ++is_bg)
@@ -4266,8 +4267,13 @@ read_dump_file(FILE *fd, VTermPos *cursor_pos)
} }
else else
dump_is_corrupt(&ga_text); dump_is_corrupt(&ga_text);
}
else
dump_is_corrupt(&ga_text);
append_cell(&ga_cell, &cell); append_cell(&ga_cell, &cell);
if (cell.width == 2)
append_cell(&ga_cell, &empty_cell);
} }
else if (c == '@') else if (c == '@')
{ {

View File

@@ -243,6 +243,7 @@ NEW_TESTS = \
test_tagjump \ test_tagjump \
test_taglist \ test_taglist \
test_tcl \ test_tcl \
test_termencoding \
test_terminal \ test_terminal \
test_terminal_fail \ test_terminal_fail \
test_textformat \ test_textformat \
@@ -389,6 +390,7 @@ NEW_TESTS_RES = \
test_system.res \ test_system.res \
test_tab.res \ test_tab.res \
test_tcl.res \ test_tcl.res \
test_termencoding.res \
test_terminal.res \ test_terminal.res \
test_terminal_fail.res \ test_terminal_fail.res \
test_textformat.res \ test_textformat.res \

View File

@@ -0,0 +1,10 @@
>E+0&#ffffff0|8|9|:| |バ*&|ッ|フ|ァ| +&|%|l|d| |の*&|変|更|は|保|存|さ|れ|て|い|ま|せ|ん| +&|(|!| |で*&|変|更|を|破|棄|)+&| @13
|~+0#4040ff13&| @73
|~| @73
|~| @73
|X+3#0000000&|e|u|c|_|j|p|.|t|x|t| @45|1|,|1| @11|A|l@1
|E+0&&|8|3|:| |バ*&|ッ|フ|ァ|を|作|成|で|き|な|い|の|で|、|他|の|を|使|用|し|ま|す|.+&@2| @22
|~+0#4040ff13&| @73
|~| @73
|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|5|2| @10|A|l@1
| +0&&@74

View File

@@ -0,0 +1,37 @@
" Test for setting 'encoding' to something else than the terminal uses, then
" setting 'termencoding' to make it work.
" This only works with "iconv".
if !has('multi_byte') || !has('iconv')
finish
endif
source screendump.vim
if !CanRunVimInTerminal()
finish
endif
" This Vim is running with 'encoding' "utf-8", the Vim in the terminal is
" running with 'encoding' "euc-jp". We need to make sure the text is in the
" right encoding, this is a bit tricky.
func Test_termencoding_euc_jp()
new
call setline(1, 'E89: バッファ %ld の変更は保存されていません (! で変更を破棄)')
write ++enc=euc-jp Xeuc_jp.txt
quit
call writefile([
\ 'set encoding=euc-jp',
\ 'set termencoding=utf-8',
\ 'scriptencoding utf-8',
\ 'exe "normal aE83: バッファを作成できないので、他のを使用します...\<Esc>"',
\ 'split Xeuc_jp.txt',
\ ], 'XTest_tenc_euc_jp')
let buf = RunVimInTerminal('-S XTest_tenc_euc_jp', {'rows': 10})
call VerifyScreenDump(buf, 'Test_tenc_euc_jp_01', {})
" clean up
call StopVimInTerminal(buf)
call delete('Xeuc_jp.txt')
call delete('XTest_tenc_euc_jp')
endfunc

View File

@@ -795,6 +795,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
760,
/**/ /**/
759, 759,
/**/ /**/