diff --git a/hledger/test/errors/Makefile b/hledger/test/errors/Makefile new file mode 100644 index 000000000..4df7c5fdd --- /dev/null +++ b/hledger/test/errors/Makefile @@ -0,0 +1,33 @@ +# Check error messages of hledger in $PATH against current error tests. +test: + @printf "Running error message tests with hledger $$(hledger --version | awk '{print $$2}'):\n" + shelltest *.test + +TESTJOURNALS=*.j + +# Update error message tests and readme based on the latest test journals +# and error output of hledger in $PATH. +update: tests readme + +tests: + @printf "Updating *.test with the error messages of hledger $$(hledger --version | awk '{print $$2}')\n" + @read -p "ok ? Press enter: " + for f in $(TESTJOURNALS); do make -s $$(basename $$f .j).test; done + make -s test + +%.test: %.j + head -1 $< | sed -E 's%#!/usr/bin/env -S (.*)%$$$$$$ \1 $<%' >$@ + echo ">>>2" >>$@ + shelltest $@ | awk '/Got stderr/{f=1;next}/Expected exit code/{f=0}f' >>$@ + echo ">>>=1" >>$@ + +readme: $(TESTJOURNALS) + @printf "Updating README.md with the error messages of hledger $$(hledger --version | awk '{print $$2}')\n" + @read -p "ok ? Press enter: " + sed '//q' README.md.tmp + echo "$$(hledger --version | cut -d, -f1) error messages:" >>README.md.tmp + for f in $(TESTJOURNALS); do \ + printf '\n### %s\n```\n%s\n```\n\n' "$$(basename "$$f" .j)" "$$(./"$$f" 2>&1)"; \ + done >>README.md.tmp + mv README.md.tmp README.md + diff --git a/hledger/test/errors/README.md b/hledger/test/errors/README.md index 181d49c3c..b25244a34 100644 --- a/hledger/test/errors/README.md +++ b/hledger/test/errors/README.md @@ -99,60 +99,18 @@ Notes (see also [#1436][]): ## Current journal errors -hledger 1.25.99-gb8d78661e-20220422 error messages, last updated 2022-04-22: + +hledger 1.25.99-gc5e159574-20220422 error messages: -### parseable +### accounts ``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/parseable.j:3:2: - | -3 | 1 - | ^ -unexpected newline -expecting date separator or digit - +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./accounts.j:4:6: + | 2022-01-01 +4 | (a) 1 + | ^ +undeclared account "a" ``` -### parseable-dates -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/parseable-dates.j:3:1: - | -3 | 2022/1/32 - | ^^^^^^^^^ -well-formed but invalid date: 2022/1/32 - -``` - -### parseable-regexps -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./parseable-regexps.j:3:8: - | -3 | alias /(/ = a - | ^ -this regular expression could not be compiled: ( - -``` - -### balanced -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./balanced.j:3-4 -could not balance this transaction: -real postings' sum should be 0 but is: 1 -2022-01-01 - a 1 - -``` - -### balancednoautoconversion -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./balancednoautoconversion.j:6-8 -could not balance this transaction: -real postings' sum should be 0 but is: 1 A --1 B -2022-01-01 - a 1 A - b -1 B - -``` ### assertions ``` @@ -168,38 +126,40 @@ commodity: calculated: 0 asserted: 1 difference: 1 - ``` -### accounts -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/accounts.j:4:6: - | 2022-01-01 -4 | (a) 1 - | ^ -undeclared account "a" +### balanced ``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./balanced.j:3-4 +could not balance this transaction: +real postings' sum should be 0 but is: 1 +2022-01-01 + a 1 +``` + + +### balancednoautoconversion +``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./balancednoautoconversion.j:6-8 +could not balance this transaction: +real postings' sum should be 0 but is: 1 A +-1 B +2022-01-01 + a 1 A + b -1 B +``` + ### commodities ``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/commodities.j:6: +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./commodities.j:6: | 2022-01-01 6 | (a) A 1 - | ^ + | ^^^ undeclared commodity "A" - ``` -### payees -``` -hledger: Error: /Users/simon/src/hledger/hledger/test/errors/payees.j:6:12: -6 | 2022-01-01 p - | ^ - | (a) A 1 -undeclared payee "p" - -``` ### ordereddates ``` @@ -212,9 +172,50 @@ at /Users/simon/src/hledger/hledger/test/errors/./ordereddates.j:10-11: > 2022-01-01 p (a) 1 - ``` + +### parseable-dates +``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./parseable-dates.j:3:1: + | +3 | 2022/1/32 + | ^^^^^^^^^ +well-formed but invalid date: 2022/1/32 +``` + + +### parseable-regexps +``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./parseable-regexps.j:3:8: + | +3 | alias /(/ = a + | ^ +this regular expression could not be compiled: ( +``` + + +### parseable +``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./parseable.j:3:2: + | +3 | 1 + | ^ +unexpected newline +expecting date separator or digit +``` + + +### payees +``` +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/./payees.j:6:12: +6 | 2022-01-01 p + | ^ + | (a) A 1 +undeclared payee "p" +``` + + ### uniqueleafnames ``` hledger: Error: account leaf names are not unique @@ -223,5 +224,5 @@ seen in "a:c" in transaction at: /Users/simon/src/hledger/hledger/test/errors/./ > 2022-01-01 p > (a:c) 1 - ``` + diff --git a/hledger/test/errors/accounts.test b/hledger/test/errors/accounts.test new file mode 100644 index 000000000..21eba1453 --- /dev/null +++ b/hledger/test/errors/accounts.test @@ -0,0 +1,9 @@ +$$$ hledger check accounts -f accounts.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/accounts.j:4:6: + | 2022-01-01 +4 | (a) 1 + | ^ +undeclared account "a" + +>>>=1 diff --git a/hledger/test/errors/assertions.test b/hledger/test/errors/assertions.test new file mode 100644 index 000000000..dbc77555e --- /dev/null +++ b/hledger/test/errors/assertions.test @@ -0,0 +1,16 @@ +$$$ hledger check -f assertions.j +>>>2 +hledger: Error: balance assertion: /Users/simon/src/hledger/hledger/test/errors/assertions.j:4:8 +transaction: +2022-01-01 + a 0 = 1 + +assertion details: +date: 2022-01-01 +account: a +commodity: +calculated: 0 +asserted: 1 +difference: 1 + +>>>=1 diff --git a/hledger/test/errors/balanced.test b/hledger/test/errors/balanced.test new file mode 100644 index 000000000..2cd41e99a --- /dev/null +++ b/hledger/test/errors/balanced.test @@ -0,0 +1,9 @@ +$$$ hledger check -f balanced.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/balanced.j:3-4 +could not balance this transaction: +real postings' sum should be 0 but is: 1 +2022-01-01 + a 1 + +>>>=1 diff --git a/hledger/test/errors/balancednoautoconversion.test b/hledger/test/errors/balancednoautoconversion.test new file mode 100644 index 000000000..fc3f54b74 --- /dev/null +++ b/hledger/test/errors/balancednoautoconversion.test @@ -0,0 +1,11 @@ +$$$ hledger check balancednoautoconversion -f balancednoautoconversion.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/balancednoautoconversion.j:6-8 +could not balance this transaction: +real postings' sum should be 0 but is: 1 A +-1 B +2022-01-01 + a 1 A + b -1 B + +>>>=1 diff --git a/hledger/test/errors/commodities.test b/hledger/test/errors/commodities.test new file mode 100644 index 000000000..01b44fc8f --- /dev/null +++ b/hledger/test/errors/commodities.test @@ -0,0 +1,9 @@ +$$$ hledger check commodities -f commodities.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/commodities.j:6: + | 2022-01-01 +6 | (a) A 1 + | ^^^ +undeclared commodity "A" + +>>>=1 diff --git a/hledger/test/errors/ordereddates.test b/hledger/test/errors/ordereddates.test new file mode 100644 index 000000000..40d1c2c46 --- /dev/null +++ b/hledger/test/errors/ordereddates.test @@ -0,0 +1,13 @@ +$$$ hledger check ordereddates -f ordereddates.j +>>>2 +hledger: Error: transaction date is out of order +at /Users/simon/src/hledger/hledger/test/errors/ordereddates.j:10-11: + + 2022-01-02 p + (a) 1 + +> 2022-01-01 p + (a) 1 + + +>>>=1 diff --git a/hledger/test/errors/parseable-dates.test b/hledger/test/errors/parseable-dates.test new file mode 100644 index 000000000..d237e3884 --- /dev/null +++ b/hledger/test/errors/parseable-dates.test @@ -0,0 +1,9 @@ +$$$ hledger check -f parseable-dates.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/parseable-dates.j:3:1: + | +3 | 2022/1/32 + | ^^^^^^^^^ +well-formed but invalid date: 2022/1/32 + +>>>=1 diff --git a/hledger/test/errors/parseable-regexps.test b/hledger/test/errors/parseable-regexps.test new file mode 100644 index 000000000..8f20f3bb7 --- /dev/null +++ b/hledger/test/errors/parseable-regexps.test @@ -0,0 +1,9 @@ +$$$ hledger check -f parseable-regexps.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/parseable-regexps.j:3:8: + | +3 | alias /(/ = a + | ^ +this regular expression could not be compiled: ( + +>>>=1 diff --git a/hledger/test/errors/parseable.test b/hledger/test/errors/parseable.test new file mode 100644 index 000000000..def3a42ff --- /dev/null +++ b/hledger/test/errors/parseable.test @@ -0,0 +1,10 @@ +$$$ hledger check -f parseable.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/parseable.j:3:2: + | +3 | 1 + | ^ +unexpected newline +expecting date separator or digit + +>>>=1 diff --git a/hledger/test/errors/payees.test b/hledger/test/errors/payees.test new file mode 100644 index 000000000..c4ba30092 --- /dev/null +++ b/hledger/test/errors/payees.test @@ -0,0 +1,9 @@ +$$$ hledger check payees -f payees.j +>>>2 +hledger: Error: /Users/simon/src/hledger/hledger/test/errors/payees.j:6:12: +6 | 2022-01-01 p + | ^ + | (a) A 1 +undeclared payee "p" + +>>>=1 diff --git a/hledger/test/errors/showall b/hledger/test/errors/showall deleted file mode 100755 index aa619a12b..000000000 --- a/hledger/test/errors/showall +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env sh -# Execute all test journals, showing their error messages -# (as README-ready markdown). - -# All test journals in this directory, in preferred test/display order -testfiles="\ - parseable.j \ - parseable-dates.j \ - parseable-regexps.j \ - balanced.j \ - balancednoautoconversion.j \ - assertions.j \ - accounts.j \ - commodities.j \ - payees.j \ - ordereddates.j \ - uniqueleafnames.j \ - " - -printf '%s error messages, last updated %s:\n\n' \ - "$(hledger --version | cut -d, -f1)" \ - "$(date +%Y-%m-%d)" - -for f in $testfiles; do - printf '### %s\n```\n' "$(echo "$f" | cut -d. -f1)" - ./"$f" || true - printf '```\n\n' -done diff --git a/hledger/test/errors/uniqueleafnames.test b/hledger/test/errors/uniqueleafnames.test new file mode 100644 index 000000000..f9c41a6ed --- /dev/null +++ b/hledger/test/errors/uniqueleafnames.test @@ -0,0 +1,10 @@ +$$$ hledger check uniqueleafnames -f uniqueleafnames.j +>>>2 +hledger: Error: account leaf names are not unique +leaf name "c" appears in account names: "a:c", "b:c" +seen in "a:c" in transaction at: /Users/simon/src/hledger/hledger/test/errors/uniqueleafnames.j:8-9 + +> 2022-01-01 p +> (a:c) 1 + +>>>=1