aboutsummaryrefslogtreecommitdiff
path: root/tests/lang/framework.sh
diff options
context:
space:
mode:
authorMathnerd314 <mathnerd314.gph+hs@gmail.com>2015-09-04 14:23:08 -0600
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-07-11 21:43:09 -0400
commitc70484454f52a3bba994ac0c155b4a6f35a5013c (patch)
tree024cda6d4e26ffc6396bed4da9e172eeba2001d3 /tests/lang/framework.sh
parentc2c8187118c4bf2961aa175ff8667e1402a767c7 (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.sh33
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
+}