Rewrite fishscript testrunner for better output

Update the fishscript testrunner to use the same output style as the
interactive testrunner.
This commit is contained in:
Kevin Ballard 2014-10-02 12:31:46 -07:00
parent 4ba95ad1c3
commit ae7b6156ac
5 changed files with 52 additions and 72 deletions

View file

@ -63,13 +63,14 @@ function test_file
end end
end end
set -l failed 0 set -l failed
for i in *.expect for i in *.expect
if not test_file $i if not test_file $i
set failed (expr $failed + 1) set failed $failed $i
end end
end end
set failed (count $failed)
if test $failed -eq 0 if test $failed -eq 0
say green "All tests completed successfully" say green "All tests completed successfully"
exit 0 exit 0

118
tests/test.fish Executable file → Normal file
View file

@ -1,83 +1,63 @@
#!/usr/local/bin/fish #!/usr/local/bin/fish
# #
# Main loop of the test suite. I wrote this # Fishscript tests
# instad of using autotest to provide additional
# testing for fish. :-)
source test_util.fish
if [ "$argv" != '-n' ] say -o cyan "Testing high level script functionality"
function test_file
set -l file $argv[1]
set -l base (basename $file .in)
echo -n "Testing file $file ... "
../fish <$file >$base.tmp.out ^$base.tmp.err
set -l tmp_status $status
set -l res ok set -l res ok
# begin...end has bug in error redirecting... diff $base.tmp.out $base.out >/dev/null
begin set -l out_status $status
../fish -n ./test.fish ^top.tmp.err diff $base.tmp.err $base.err >/dev/null
../fish -n ./test.fish -n ^^top.tmp.err set -l err_status $status
../fish ./test.fish -n ^^top.tmp.err set -l exp_status (cat $base.status)[1]
end | tee top.tmp.out
set -l tmp_status $status if test $out_status -eq 0 -a $err_status -eq 0 -a $exp_status -eq $tmp_status
if not diff top.tmp.out top.out >/dev/null say green "ok"
set res fail # clean up tmp files
echo "Output differs for file test.fish. Diff follows:" rm -f $base.tmp.{err,out}
diff -u top.out top.tmp.out return 0
else
say red "fail"
if test $out_status -ne 0
say yellow "Output differs for file $file. Diff follows:"
colordiff -u $base.tmp.out $base.out
end
if test $err_status -ne 0
say yellow "Error output differs for file $file. Diff follows:"
colordiff -u $base.tmp.err $base.err
end
if test $exp_status -ne $tmp_status
say yellow "Exit status differs for file $file."
echo "Expected $exp_status, got $tmp_status."
end
return 1
end
end end
if not diff top.tmp.err top.err >/dev/null set -l failed
set res fail for i in *.in
echo "Error output differs for file test.fish. Diff follows:" if not test_file $i
diff -u top.err top.tmp.err set failed $failed $i
end
end end
if test $tmp_status -ne (cat top.status) set failed (count $failed)
set res fail if test $failed -eq 0
echo "Exit status differs for file test.fish" say green "All tests completed successfully"
end
if not ../fish -p /dev/null -c 'echo testing' >/dev/null
set res fail
echo "Profiling failed"
end
if test $res = ok
echo "File test.fish tested ok"
exit 0 exit 0
else else
echo "File test.fish failed tests" set plural (test $failed -eq 1; or echo s)
say red "$failed test$plural failed"
exit 1 exit 1
end end
end
echo "Testing high level script functionality"
for i in *.in
set -l res ok
set -l base (basename $i .in)
set template_out (basename $i .in).out
set template_err (basename $i .in).err
set template_status (basename $i .in).status
../fish <$i >tmp.out ^tmp.err
set -l tmp_status $status
if not diff tmp.out $base.out >/dev/null
set res fail
echo "Output differs for file $i. Diff follows:"
diff -u tmp.out $base.out
end
if not diff tmp.err $base.err >/dev/null
set res fail
echo "Error output differs for file $i. Diff follows:"
diff -u tmp.err $base.err
end
if test $tmp_status -ne (cat $template_status)
set res fail
echo "Exit status differs for file $i"
end
if test $res = ok
echo "File $i tested ok"
else
echo "File $i failed tests"
end
end

0
tests/test6.in Executable file → Normal file
View file

View file

View file

@ -1 +0,0 @@
0