From fcf0593dfb54b63598cc6c5ca9fa4b525e191e3b Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 9 Jun 2019 11:13:31 -0700 Subject: [PATCH] Port printf tests to littlecheck and teach the tester how to run it This adds support for .check files inside the tests directory. .check files are tests designed to be run with littlecheck. Port printf test to littlecheck and remove the printf.in test. --- cmake/Tests.cmake | 3 ++ tests/{printf.in => checks/printf.fish} | 50 ++++++++++++++++++++++--- tests/printf.err | 3 -- tests/printf.out | 29 -------------- tests/test.fish | 22 +++++++++-- 5 files changed, 66 insertions(+), 41 deletions(-) rename tests/{printf.in => checks/printf.fish} (72%) delete mode 100644 tests/printf.err delete mode 100644 tests/printf.out diff --git a/cmake/Tests.cmake b/cmake/Tests.cmake index 7b398744e..7c78ab6f4 100644 --- a/cmake/Tests.cmake +++ b/cmake/Tests.cmake @@ -26,6 +26,9 @@ IF(NOT FISH_IN_TREE_BUILD) ADD_DEPENDENCIES(fish_tests tests_dir) ENDIF() +# Copy littlecheck.py +CONFIGURE_FILE(build_tools/littlecheck.py littlecheck.py COPYONLY) + # Create the 'test' target. # Set a policy so CMake stops complaining about the name 'test'. CMAKE_POLICY(PUSH) diff --git a/tests/printf.in b/tests/checks/printf.fish similarity index 72% rename from tests/printf.in rename to tests/checks/printf.fish index d7174253e..16677f5ce 100644 --- a/tests/printf.in +++ b/tests/checks/printf.fish @@ -1,31 +1,53 @@ +# RUN: %fish %s + printf "Hello %d %i %f %F %g %G\n" 1 2 3 4 5 6 +# CHECK: Hello 1 2 3.000000 4.000000 5 6 printf "%x %X %o %llu\n" 10 11 8 -1 +# CHECK: a B 10 18446744073709551615 + # %a has OS-dependent output - see #1139 #printf "%a %A\n" 14 15 printf "%c %s\n" a hello +# CHECK: a hello + printf "%c%c%c\n" hello … o +# CHECK: h…o + printf "%e %E\n" 5 6 +# CHECK: 5.000000e+00 6.000000E+00 printf "%20d\n" 50 +# CHECK: 50 + printf "%-20d%d\n" 5 10 +# CHECK: 5 10 printf "%*d\n" 10 100 +# CHECK: 100 printf "%%\"\\\n" printf "%s\b%s\n" x y -printf "abc\rdef\n" -printf "Msg1\fMsg2\n" -printf "foo\vbar\vbaz\n" -printf "\111 \x50 \u0051 \U00000052" +# CHECK: %"\nxy +printf "abc\rdef\n" +# CHECK: abc{{\r}}def + +printf "Msg1\fMsg2\n" +# CHECK: Msg1{{\f}}Msg2 + +printf "foo\vbar\vbaz\n" +# CHECK: foo bar baz + +printf "\111 \x50 \u0051 \U00000052" echo -echo "Test escapes" +# CHECK: I P Q R # \c escape means "stop printing" printf 'a\cb' echo +# CHECK: a # Bogus printf specifier, should produce no stdout printf "%5" 10 2>/dev/null @@ -33,12 +55,18 @@ printf "%5" 10 2>/dev/null # Octal escapes produce literal bytes, not characters # \376 is 0xFE printf '\376' | display_bytes +# CHECK: 0000000 376 +# CHECK: 0000001 # Verify that floating point conversions and output work correctly with # different combinations of locales and floating point strings. See issue # #3334. This starts by assuming an locale using english conventions. printf '%e\n' "1.23" # should succeed, output should be 1.230000e+00 +# CHECK: 1.230000e+00 + printf '%e\n' "2,34" # should fail +# CHECK: 2.000000e+00 +# CHECKERR: 2,34: value not completely converted # Try to use one of several locales that use a comma as the decimal mark # rather than the period used in english speaking locales. If we don't find @@ -63,16 +91,28 @@ else echo '3,450000e+00' echo '4,560000e+00' end +# CHECK: 3,450000e+00 +# CHECK: 4,560000e+00 # Verify long long ints are handled correctly. See issue #3352. printf 'long hex1 %x\n' 498216206234 +# CHECK: long hex1 73ffffff9a printf 'long hex2 %X\n' 498216206234 +# CHECK: long hex2 73FFFFFF9A printf 'long hex3 %X\n' 0xABCDEF1234567890 +# CHECK: long hex3 ABCDEF1234567890 printf 'long hex4 %X\n' 0xABCDEF12345678901 +# CHECKERR: 0xABCDEF12345678901: Number out of range printf 'long decimal %d\n' 498216206594 +# CHECK: long hex4 long decimal 498216206594 printf 'long signed %d\n' -498216206595 +# CHECK: long signed -498216206595 printf 'long signed to unsigned %u\n' -498216206596 +# CHECK: long signed to unsigned 18446743575493345020 # Verify numeric conversion still happens even if it couldn't be fully converted printf '%d\n' 15.1 +# CHECK: 15 +# CHECKERR: 15.1: value not completely converted echo $status +# CHECK: 1 diff --git a/tests/printf.err b/tests/printf.err deleted file mode 100644 index d8d4de233..000000000 --- a/tests/printf.err +++ /dev/null @@ -1,3 +0,0 @@ -2,34: value not completely converted -0xABCDEF12345678901: Number out of range -15.1: value not completely converted diff --git a/tests/printf.out b/tests/printf.out deleted file mode 100644 index 40f19f791..000000000 --- a/tests/printf.out +++ /dev/null @@ -1,29 +0,0 @@ -Hello 1 2 3.000000 4.000000 5 6 -a B 10 18446744073709551615 -a hello -h…o -5.000000e+00 6.000000E+00 - 50 -5 10 - 100 -%"\nxy -abc def -Msg1 Msg2 -foo bar baz -I P Q R -Test escapes -a -0000000 376 -0000001 -1.230000e+00 -2.000000e+00 -3,450000e+00 -4,560000e+00 -long hex1 73ffffff9a -long hex2 73FFFFFF9A -long hex3 ABCDEF1234567890 -long hex4 long decimal 498216206594 -long signed -498216206595 -long signed to unsigned 18446743575493345020 -15 -1 diff --git a/tests/test.fish b/tests/test.fish index 62025fe0d..62e929794 100644 --- a/tests/test.fish +++ b/tests/test.fish @@ -15,7 +15,7 @@ cd (dirname (status -f)) if set -q argv[1] set files_to_test $argv.in else - set files_to_test *.in + set files_to_test *.in checks/*.fish end # These env vars should not be inherited from the user environment because they can affect the @@ -29,7 +29,7 @@ or exit say -o cyan "Testing high level script functionality" -function test_file +function test_in_file set -l file $argv[1] set -l base (basename $file .in) @@ -69,10 +69,24 @@ function test_file end end +function test_littlecheck_file + set -l file $argv[1] + echo "Testing file $file" + ../littlecheck.py -s fish=../test/root/bin/fish $file +end + set -l failed for i in $files_to_test - if not test_file $i - set failed $failed $i + if string match --quiet '*.fish' $i + if not test_littlecheck_file $i + # littlecheck test + set failed $failed $i + end + else + # .in test + if not test_in_file $i + set failed $failed $i + end end end