2014-10-02 12:31:46 -07:00
# Fishscript tests
2016-02-06 18:08:22 -08:00
#
# There is no shebang line because you shouldn't be running this by hand. You
# should be running it via `make test` to ensure the environment is properly
# setup.
2005-09-20 23:31:55 +10:00
2014-12-23 12:20:44 -08:00
# Change to directory containing this script
cd ( dirname ( status -f ) )
# Test files specified on commandline, or all *.in files
if set -q argv [ 1 ]
set files_to_test $argv .in
else
set files_to_test *.in
end
source test_util.fish ( status -f ) $argv ; or exit
2010-10-03 11:46:26 +08:00
2014-10-02 12:31:46 -07:00
say -o cyan "Testing high level script functionality"
2010-10-03 11:46:26 +08:00
2014-10-02 12:31:46 -07:00
function test_file
set -l file $argv [ 1 ]
set -l base ( basename $file .in)
2010-10-03 11:46:26 +08:00
2014-10-02 12:31:46 -07:00
echo -n " Testing file $file ... "
2013-01-14 01:33:40 +01:00
2016-02-06 18:08:22 -08:00
../test/root/bin/fish < $file > $base .tmp.out ^ $base .tmp.err
2016-07-05 23:12:28 -07:00
set -l exit_status $status
2014-10-02 12:31:46 -07:00
set -l res ok
2014-09-04 22:26:10 -07:00
2014-10-02 12:31:46 -07:00
diff $base .tmp.out $base .out > /dev/null
set -l out_status $status
diff $base .tmp.err $base .err > /dev/null
set -l err_status $status
2016-07-05 23:12:28 -07:00
if test $out_status -eq 0 -a $err_status -eq 0 -a $exit_status -eq 0
2014-10-02 12:31:46 -07:00
say green "ok"
# clean up tmp files
rm -f $base .tmp.{ err,out}
return 0
2014-09-04 22:26:10 -07:00
else
2014-10-02 12:31:46 -07:00
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
2016-07-05 23:12:28 -07:00
if test $exit_status -ne 0
2014-10-02 12:31:46 -07:00
say yellow " Exit status differs for file $file . "
2016-07-05 23:12:28 -07:00
echo " Unexpected test exit status $exit_status . "
2014-10-02 12:31:46 -07:00
end
return 1
2014-09-04 22:26:10 -07:00
end
2010-10-03 11:46:26 +08:00
end
2014-10-02 12:31:46 -07:00
set -l failed
2014-12-23 12:20:44 -08:00
for i in $files_to_test
2014-10-02 12:31:46 -07:00
if not test_file $i
set failed $failed $i
2014-09-04 22:26:10 -07:00
end
2014-10-02 12:31:46 -07:00
end
2005-09-20 23:31:55 +10:00
2014-10-02 12:31:46 -07:00
set failed ( count $failed )
if test $failed -eq 0
say green "All tests completed successfully"
exit 0
else
set plural ( test $failed -eq 1 ; or echo s)
say red " $failed test $plural failed "
exit 1
2005-09-20 23:31:55 +10:00
end