# HG changeset patch # User Bram Moolenaar # Date 1591282804 -7200 # Node ID b9a6a129b94ee034df34eef534a5bfef8fc6ee44 # Parent 709b116fb339db718af2e42e95d7dc26df8f50d7 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 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. diff --git a/src/testdir/test_assert.vim b/src/testdir/test_assert.vim --- 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') diff --git a/src/testing.c b/src/testing.c --- 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; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 899, +/**/ 898, /**/ 897,