Mercurial > vim
changeset 20691:b9a6a129b94e v8.2.0899
patch 8.2.0899: assert_equalfile() does not give a hint about the difference
Commit: https://github.com/vim/vim/commit/30cc44a97f0ba1349e1a522dab22b11f47888183
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jun 4 16:52:40 2020 +0200
patch 8.2.0899: assert_equalfile() does not give a hint about the difference
Problem: Assert_equalfile() does not give a hint about the difference.
Solution: Display the last seen text.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 04 Jun 2020 17:00:04 +0200 |
parents | 709b116fb339 |
children | 6ba9ced9d801 |
files | src/testdir/test_assert.vim src/testing.c src/version.c |
diffstat | 3 files changed, 52 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_assert.vim +++ b/src/testdir/test_assert.vim @@ -78,11 +78,18 @@ func Test_assert_equalfile() call writefile(['1234X89'], 'Xone') call writefile(['1234Y89'], 'Xtwo') call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) - call assert_match("difference at byte 4", v:errors[0]) + call assert_match('difference at byte 4, line 1 after "1234X" vs "1234Y"', v:errors[0]) + call remove(v:errors, 0) + + call writefile([repeat('x', 234) .. 'X'], 'Xone') + call writefile([repeat('x', 234) .. 'Y'], 'Xtwo') + call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) + let xes = repeat('x', 134) + call assert_match('difference at byte 234, line 1 after "' .. xes .. 'X" vs "' .. xes .. 'Y"', v:errors[0]) call remove(v:errors, 0) call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message')) - call assert_match("a message: difference at byte 4", v:errors[0]) + call assert_match("a message: difference at byte 234, line 1 after", v:errors[0]) call remove(v:errors, 0) call delete('Xone')
--- a/src/testing.c +++ b/src/testing.c @@ -309,6 +309,9 @@ assert_equalfile(typval_T *argvars) garray_T ga; FILE *fd1; FILE *fd2; + char line1[200]; + char line2[200]; + int lineidx = 0; if (fname1 == NULL || fname2 == NULL) return 0; @@ -329,8 +332,9 @@ assert_equalfile(typval_T *argvars) } else { - int c1, c2; - long count = 0; + int c1, c2; + long count = 0; + long linecount = 1; for (;;) { @@ -347,13 +351,31 @@ assert_equalfile(typval_T *argvars) STRCPY(IObuff, "second file is shorter"); break; } - else if (c1 != c2) + else { - vim_snprintf((char *)IObuff, IOSIZE, - "difference at byte %ld", count); - break; + line1[lineidx] = c1; + line2[lineidx] = c2; + ++lineidx; + if (c1 != c2) + { + vim_snprintf((char *)IObuff, IOSIZE, + "difference at byte %ld, line %ld", + count, linecount); + break; + } } ++count; + if (c1 == NL) + { + ++linecount; + lineidx = 0; + } + else if (lineidx + 2 == (int)sizeof(line1)) + { + mch_memmove(line1, line1 + 100, lineidx - 100); + mch_memmove(line2, line2 + 100, lineidx - 100); + lineidx -= 100; + } } fclose(fd1); fclose(fd2); @@ -372,6 +394,19 @@ assert_equalfile(typval_T *argvars) ga_concat(&ga, (char_u *)": "); } ga_concat(&ga, IObuff); + if (lineidx > 0) + { + line1[lineidx] = NUL; + line2[lineidx] = NUL; + ga_concat(&ga, (char_u *)" after \""); + ga_concat(&ga, (char_u *)line1); + if (STRCMP(line1, line2) != 0) + { + ga_concat(&ga, (char_u *)"\" vs \""); + ga_concat(&ga, (char_u *)line2); + } + ga_concat(&ga, (char_u *)"\""); + } assert_error(&ga); ga_clear(&ga); return 1;