Hi Jannick, > Le 6 mai 2020 à 11:28, Jannick <[email protected]> a écrit : > > Hi Akim, > > On Mon, 4 May 2020 19:14:08 +0200, Akim Demaille wrote: >> Hi Jannick, >> >>> Le 4 mai 2020 à 09:50, Jannick <[email protected]> a écrit : > >>> On Windows10/MSYS2 still two test failures - presumably EOL issues >>> which, if I am not mistaken, cannot be solved by 'diff -u'. >> >> I'm not sure, given that you don't have the problem with the other >> tests. Yet I have no idea what's going on. > > Testing against today's beta release 3.5.94 did not change anything, > unfortunately.
I was not expecting it to.
> I investigated that the above mentioned failure does stem from an EOL issue,
> since adding in 'examples/test' the diff flag '--strip-trailing-cr' solved it.
I'm confused.
First, it was my understanding that diff was supposed to compare
text files, which, for me, meant ignoring the difference between
DOS-EOL and Unix-EOL. The Autoconf documentation reads:
`cmp'
`cmp' performs a raw data comparison of two files, while `diff'
compares two text files. Therefore, if you might compare DOS
files, even if only checking whether two files are different, use
`diff' to avoid spurious differences due to differences of newline
encoding.
So I believed merely using 'diff' sufficed. I can confirm that on
this macOS box, GNU diff does not ignore the difference between \r\n
and \n, unless I pass the --strip-trailing-cr option.
Most tests pass on your box, except Bistro, and the Java ones. For
the Java ones, I am confused again, I expected 'println' to issue \r\n
on Windows, but I guess that's not the point of Java's portability.
So I'll have to use --strip-trailing-cr when available (and I suspect
it is available when I really need it: on Windows).
In the case of Bistro, I don't think we have an EOL issue: all the
first tests pass. The real problem starts when we begin testing
the <tab> completion:
bistromathic: FAIL: 13$
bistromathic: diff:$
--- exp^I2020-05-06 10:42:42.198098700 +0200$
+++ eff^I2020-05-06 10:42:42.421794800 +0200$
@@ -2,4 +2,4 @@$
( - atan cos exp ln number sin sqrt$
> (1+$
> $
-err: ^G1.4: syntax error: expected - or ( or number or function or variable
before end of file$
+err: 1.4: syntax error: expected - or ( or number or function or variable
before end of file$
I don't want to fight this, so I'll just bail out at this point.
So I plan to install the appended patch. Could you please try it?
I attach examples/test and examples/c/bistromathic/bistromathic.test
to drop into your source tree before testing again.
Cheers!
test
Description: Binary data
bistromathic.test
Description: Binary data
commit f9d6172a0fc9f395a526e8545f82070fcc29bcfc Author: Akim Demaille <[email protected]> Date: Thu May 7 08:00:17 2020 +0200 examples: beware of portability issue on Windows Reported by Jannick. https://lists.gnu.org/r/bug-bison/2020-05/msg00040.html https://lists.gnu.org/r/bug-bison/2020-05/msg00066.html * examples/test (diff_opts): Use --strip-trailing-cr if supported, to avoid \n vs. \r\n issues. * examples/c/bistromathic/bistromathic.test: When on MSYS, don't try to check autocompletion. diff --git a/examples/c/bistromathic/bistromathic.test b/examples/c/bistromathic/bistromathic.test index 495146bd..2ef8bc03 100755 --- a/examples/c/bistromathic/bistromathic.test +++ b/examples/c/bistromathic/bistromathic.test @@ -41,10 +41,11 @@ echo >perfect '> 0 echo >ok '0' echo '0' | prog >effective -if diff perfect effective >/dev/null 2>&1; then +echo "checking for readline output" +if diff perfect effective; then # Alles ist gut. strip_prompt=false -elif diff ok effective >/dev/null 2>&1; then +elif diff ok effective; then strip_prompt=true else skip "this is not the GNU Readline we expect" @@ -257,14 +258,22 @@ err: Cleanup: popping nterm input (1.1-4: )' -p # From now on, the differences between versions of GNU Readline are # too painful to try to cope with. if $strip_prompt; then - echo "SKIP: this is not the GNU Readline we expect" - if $exit; then - exit 0 - else - exit 1 - fi + echo "SKIP: this is not the GNU Readline we expect" + exit $status fi +# On Windows10/MSYS2 the ^G coming from <tab> completion is not +# emitted the same way +# (https://lists.gnu.org/r/bug-bison/2020-05/msg00076.html). +echo "checking for kernel name" +case `uname -s` in + (MSYS*) + echo "SKIP: this is Windows/MSYS" + exit $status + ;; +esac + + # Check completion after an operator. sed -e 's/\\t/ /g' >input <<EOF (1+\t\t diff --git a/examples/test b/examples/test index c80e919e..f58eed9e 100755 --- a/examples/test +++ b/examples/test @@ -34,6 +34,13 @@ cwd=$(pwd) # See bistromathic.test. strip_prompt=false +# If diff supports --strip-trailing-cr, use it, to avoid EOL issues +# when testing Java programs on Windows. +echo "checking for diff --strip-trailing-cr" +if diff --strip-trailing-cr "$1" "$1"; then + diff_opts=--strip-trailing-cr +fi + # The exercised program. abs_medir=$cwd/examples/$medir if test -x "$abs_medir/$me"; then @@ -129,7 +136,7 @@ run () } >eff if test $sta_eff -eq $sta_exp; then - if diff eff exp >/dev/null 2>&1; then + if diff $diff_opts eff exp >/dev/null 2>&1; then echo "$me: PASS: $number" else echo "$me: FAIL: $number" @@ -140,7 +147,7 @@ run () echo "$me: effective output:" sed -e 's/^/ /' eff echo "$me: diff:" - diff -u exp eff | sed -e 's/^/ /' + diff $diff_opts -u exp eff | sed -e 's/^/ /' status=1 fi else
