mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-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.
30cc44a97f
This commit is contained in:
parent
93f2dc0d03
commit
bf88228180
@ -5708,6 +5708,9 @@ int assert_equalfile(typval_T *argvars)
|
|||||||
|
|
||||||
IObuff[0] = NUL;
|
IObuff[0] = NUL;
|
||||||
FILE *const fd1 = os_fopen(fname1, READBIN);
|
FILE *const fd1 = os_fopen(fname1, READBIN);
|
||||||
|
char line1[200];
|
||||||
|
char line2[200];
|
||||||
|
ptrdiff_t lineidx = 0;
|
||||||
if (fd1 == NULL) {
|
if (fd1 == NULL) {
|
||||||
snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname1);
|
snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname1);
|
||||||
} else {
|
} else {
|
||||||
@ -5716,6 +5719,7 @@ int assert_equalfile(typval_T *argvars)
|
|||||||
fclose(fd1);
|
fclose(fd1);
|
||||||
snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname2);
|
snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname2);
|
||||||
} else {
|
} else {
|
||||||
|
int64_t linecount = 1;
|
||||||
for (int64_t count = 0; ; count++) {
|
for (int64_t count = 0; ; count++) {
|
||||||
const int c1 = fgetc(fd1);
|
const int c1 = fgetc(fd1);
|
||||||
const int c2 = fgetc(fd2);
|
const int c2 = fgetc(fd2);
|
||||||
@ -5727,12 +5731,26 @@ int assert_equalfile(typval_T *argvars)
|
|||||||
} else if (c2 == EOF) {
|
} else if (c2 == EOF) {
|
||||||
STRCPY(IObuff, "second file is shorter");
|
STRCPY(IObuff, "second file is shorter");
|
||||||
break;
|
break;
|
||||||
} else if (c1 != c2) {
|
} else {
|
||||||
|
line1[lineidx] = c1;
|
||||||
|
line2[lineidx] = c2;
|
||||||
|
lineidx++;
|
||||||
|
if (c1 != c2) {
|
||||||
snprintf((char *)IObuff, IOSIZE,
|
snprintf((char *)IObuff, IOSIZE,
|
||||||
"difference at byte %" PRId64, count);
|
"difference at byte %" PRId64 ", line %" PRId64,
|
||||||
|
count, linecount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (c1 == NL) {
|
||||||
|
linecount++;
|
||||||
|
lineidx = 0;
|
||||||
|
} else if (lineidx + 2 == (ptrdiff_t)sizeof(line1)) {
|
||||||
|
memmove(line1, line1 + 100, lineidx - 100);
|
||||||
|
memmove(line2, line2 + 100, lineidx - 100);
|
||||||
|
lineidx -= 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
fclose(fd1);
|
fclose(fd1);
|
||||||
fclose(fd2);
|
fclose(fd2);
|
||||||
}
|
}
|
||||||
@ -5746,6 +5764,17 @@ int assert_equalfile(typval_T *argvars)
|
|||||||
ga_concat(&ga, (char_u *)": ");
|
ga_concat(&ga, (char_u *)": ");
|
||||||
}
|
}
|
||||||
ga_concat(&ga, IObuff);
|
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);
|
assert_error(&ga);
|
||||||
ga_clear(&ga);
|
ga_clear(&ga);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -28,11 +28,18 @@ func Test_assert_equalfile()
|
|||||||
call writefile(['1234X89'], 'Xone')
|
call writefile(['1234X89'], 'Xone')
|
||||||
call writefile(['1234Y89'], 'Xtwo')
|
call writefile(['1234Y89'], 'Xtwo')
|
||||||
call assert_equal(1, assert_equalfile('Xone', '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 remove(v:errors, 0)
|
||||||
|
|
||||||
call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message'))
|
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 remove(v:errors, 0)
|
||||||
|
|
||||||
call delete('Xone')
|
call delete('Xone')
|
||||||
|
Loading…
Reference in New Issue
Block a user