aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Kevin Ballard <kevin@sb.org>2014-10-02 12:31:46 -0700
committerGravatar Kevin Ballard <kevin@sb.org>2014-10-02 12:33:42 -0700
commitae7b6156ac136f6cf7c30f5e0aeeda82dfc56af0 (patch)
tree2a066c22865071bf72584a6b8f680884af504529
parent4ba95ad1c307fe484d490e7ba5c2ece19c3ae90d (diff)
Rewrite fishscript testrunner for better output
Update the fishscript testrunner to use the same output style as the interactive testrunner.
-rw-r--r--tests/interactive.fish5
-rw-r--r--[-rwxr-xr-x]tests/test.fish114
-rw-r--r--[-rwxr-xr-x]tests/test6.in0
-rw-r--r--tests/top.err0
-rw-r--r--tests/top.status1
5 files changed, 50 insertions, 70 deletions
diff --git a/tests/interactive.fish b/tests/interactive.fish
index c3c7b609..dbc9bf88 100644
--- a/tests/interactive.fish
+++ b/tests/interactive.fish
@@ -63,13 +63,14 @@ function test_file
end
end
-set -l failed 0
+set -l failed
for i in *.expect
if not test_file $i
- set failed (expr $failed + 1)
+ set failed $failed $i
end
end
+set failed (count $failed)
if test $failed -eq 0
say green "All tests completed successfully"
exit 0
diff --git a/tests/test.fish b/tests/test.fish
index a74165b9..35850197 100755..100644
--- a/tests/test.fish
+++ b/tests/test.fish
@@ -1,83 +1,63 @@
#!/usr/local/bin/fish
#
-# Main loop of the test suite. I wrote this
-# instad of using autotest to provide additional
-# testing for fish. :-)
+# Fishscript tests
+source test_util.fish
-if [ "$argv" != '-n' ]
- set -l res ok
-
- # begin...end has bug in error redirecting...
- begin
- ../fish -n ./test.fish ^top.tmp.err
- ../fish -n ./test.fish -n ^^top.tmp.err
- ../fish ./test.fish -n ^^top.tmp.err
- end | tee top.tmp.out
- set -l tmp_status $status
- if not diff top.tmp.out top.out >/dev/null
- set res fail
- echo "Output differs for file test.fish. Diff follows:"
- diff -u top.out top.tmp.out
- end
+say -o cyan "Testing high level script functionality"
- if not diff top.tmp.err top.err >/dev/null
- set res fail
- echo "Error output differs for file test.fish. Diff follows:"
- diff -u top.err top.tmp.err
- end
+function test_file
+ set -l file $argv[1]
+ set -l base (basename $file .in)
- if test $tmp_status -ne (cat top.status)
- set res fail
- echo "Exit status differs for file test.fish"
- end
+ echo -n "Testing file $file ... "
- if not ../fish -p /dev/null -c 'echo testing' >/dev/null
- set res fail
- echo "Profiling failed"
- end
+ ../fish <$file >$base.tmp.out ^$base.tmp.err
+ set -l tmp_status $status
+ set -l res ok
- if test $res = ok
- echo "File test.fish tested ok"
- exit 0
+ 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
+ set -l exp_status (cat $base.status)[1]
+
+ if test $out_status -eq 0 -a $err_status -eq 0 -a $exp_status -eq $tmp_status
+ say green "ok"
+ # clean up tmp files
+ rm -f $base.tmp.{err,out}
+ return 0
else
- echo "File test.fish failed tests"
- exit 1
+ 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
-echo "Testing high level script functionality"
-
+set -l failed
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"
+ if not test_file $i
+ set failed $failed $i
end
+end
- if test $res = ok
- echo "File $i tested ok"
- else
- echo "File $i failed tests"
- end
+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
end
diff --git a/tests/test6.in b/tests/test6.in
index 252eb606..252eb606 100755..100644
--- a/tests/test6.in
+++ b/tests/test6.in
diff --git a/tests/top.err b/tests/top.err
deleted file mode 100644
index e69de29b..00000000
--- a/tests/top.err
+++ /dev/null
diff --git a/tests/top.status b/tests/top.status
deleted file mode 100644
index 573541ac..00000000
--- a/tests/top.status
+++ /dev/null
@@ -1 +0,0 @@
-0