diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-08-10 06:35:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-10 06:35:51 +0800 |
commit | 4e8efe002e976de1a22dcce6a1e800aeb6acad70 (patch) | |
tree | 734bbdbd7a1ac6413818609a892615694770bb3a | |
parent | 0d3f2c4904d552635da07a6e2b4e75520b514940 (diff) | |
download | rneovim-4e8efe002e976de1a22dcce6a1e800aeb6acad70.tar.gz rneovim-4e8efe002e976de1a22dcce6a1e800aeb6acad70.tar.bz2 rneovim-4e8efe002e976de1a22dcce6a1e800aeb6acad70.zip |
vim-patch:9.1.0666: assert_equal() doesn't show multibyte string correctly (#30018)
Problem: assert_equal() doesn't show multibyte string correctly
Solution: Properly advance over a multibyte char.
(zeertzjq)
closes: vim/vim#15456
https://github.com/vim/vim/commit/9c4b2462bb498f44044616f7309d111d12170369
-rw-r--r-- | src/nvim/testing.c | 5 | ||||
-rw-r--r-- | test/old/testdir/test_assert.vim | 9 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/nvim/testing.c b/src/nvim/testing.c index 4dc8984fa9..adbdd3e611 100644 --- a/src/nvim/testing.c +++ b/src/nvim/testing.c @@ -130,7 +130,7 @@ static void ga_concat_shorten_esc(garray_T *gap, const char *str) return; } - for (const char *p = str; *p != NUL; p++) { + for (const char *p = str; *p != NUL;) { int same_len = 1; const char *s = p; const int c = mb_cptr2char_adv(&s); @@ -146,9 +146,10 @@ static void ga_concat_shorten_esc(garray_T *gap, const char *str) vim_snprintf(buf, NUMBUFLEN, "%d", same_len); ga_concat(gap, buf); ga_concat(gap, " times]"); - p = s - 1; + p = s; } else { ga_concat_esc(gap, p, clen); + p += clen; } } } diff --git a/test/old/testdir/test_assert.vim b/test/old/testdir/test_assert.vim index bc79ef9296..fa63af687d 100644 --- a/test/old/testdir/test_assert.vim +++ b/test/old/testdir/test_assert.vim @@ -48,10 +48,19 @@ func Test_assert_equal() call assert_match("Expected 'bar' but got 'foo'", v:errors[0]) call remove(v:errors, 0) + let s = 'αβγ' + call assert_equal(1, assert_equal('δεζ', s)) + call assert_match("Expected 'δεζ' but got 'αβγ'", v:errors[0]) + call remove(v:errors, 0) + call assert_equal('XxxxxxxxxxxxxxxxxxxxxxX', 'XyyyyyyyyyyyyyyyyyyyyyyyyyX') call assert_match("Expected 'X\\\\\\[x occurs 21 times]X' but got 'X\\\\\\[y occurs 25 times]X'", v:errors[0]) call remove(v:errors, 0) + call assert_equal('ΩωωωωωωωωωωωωωωωωωωωωωΩ', 'ΩψψψψψψψψψψψψψψψψψψψψψψψψψΩ') + call assert_match("Expected 'Ω\\\\\\[ω occurs 21 times]Ω' but got 'Ω\\\\\\[ψ occurs 25 times]Ω'", v:errors[0]) + call remove(v:errors, 0) + " special characters are escaped call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x') call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0]) |