diff options
author | Mathnerd314 <mathnerd314.gph+hs@gmail.com> | 2015-09-04 14:23:08 -0600 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-07-11 21:43:09 -0400 |
commit | c70484454f52a3bba994ac0c155b4a6f35a5013c (patch) | |
tree | 024cda6d4e26ffc6396bed4da9e172eeba2001d3 /tests/lang/framework.sh | |
parent | c2c8187118c4bf2961aa175ff8667e1402a767c7 (diff) |
Expanded test suite
* Lang now verifies errors and parse output
* Some new miscellaneous tests
* Easy way to update the tests
* Document workflow in manual
* Use `!` not `~` as separater char for sed
It is confusing to use `~` when we are talking about paths and home
directories!
* Test test suite itself (`test/lang-test/infra.sh`)
Additionally, run shellcheck on `tests/lang.sh` to help ensure it is
correct, now that is is more complex.
Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Diffstat (limited to 'tests/lang/framework.sh')
-rw-r--r-- | tests/lang/framework.sh | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/lang/framework.sh b/tests/lang/framework.sh new file mode 100644 index 000000000..d6499e0e9 --- /dev/null +++ b/tests/lang/framework.sh @@ -0,0 +1,33 @@ +# Golden test support +# +# Test that the output of the given test matches what is expected. If +# `_NIX_TEST_ACCEPT` is non-empty also update the expected output so +# that next time the test succeeds. +function diffAndAcceptInner() { + local -r testName=$1 + local -r got="$2" + local -r expected="$3" + + # Absence of expected file indicates empty output expected. + if test -e "$expected"; then + local -r expectedOrEmpty="$expected" + else + local -r expectedOrEmpty=lang/empty.exp + fi + + # Diff so we get a nice message + if ! diff "$got" "$expectedOrEmpty"; then + echo "FAIL: evaluation result of $testName not as expected" + badDiff=1 + fi + + # Update expected if `_NIX_TEST_ACCEPT` is non-empty. + if test -n "${_NIX_TEST_ACCEPT-}"; then + cp "$got" "$expected" + # Delete empty expected files to avoid bloating the repo with + # empty files. + if ! test -s "$expected"; then + rm "$expected" + fi + fi +} |