]> granicus.if.org Git - vim/commitdiff
patch 8.2.0899: assert_equalfile() does not give a hint about the difference v8.2.0899
authorBram Moolenaar <Bram@vim.org>
Thu, 4 Jun 2020 14:52:40 +0000 (16:52 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 4 Jun 2020 14:52:40 +0000 (16:52 +0200)
Problem:    Assert_equalfile() does not give a hint about the difference.
Solution:   Display the last seen text.

src/testdir/test_assert.vim
src/testing.c
src/version.c

index 5037d87b8a03b6ee817296dca289839cf593252d..2147e3de4023bc75c715e92bb233228d1512bc3b 100644 (file)
@@ -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')
index fa8cc42418648815aea6e889768cc05c72979246..0eee72a832702a29834d7c218d35ad39783bf7e6 100644 (file)
@@ -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;
index ce8bbf14f22d14e98506aa88ffa8ad5d1b8906c2..462e772ec5bc6218ee9770dfcfcf785678015630 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    899,
 /**/
     898,
 /**/