hledger/tests/journal/parse-errors.test
2019-04-20 09:25:09 -07:00

81 lines
1.7 KiB
Plaintext

# Testing parse error messages for accuracy and usefulness.
# A journal with an incomplete date.
<
2018
# XXX depends on the executable being named "hledger" (prepended by GHC.Err.error)
# 1.
$ hledger -f - print
>2
hledger: -:1:5:
|
1 | 2018
| ^
unexpected newline
expecting date separator or digit
>=1
# A journal with an unbalanced transaction.
<
2018/1/1
a 1
# 2. When read from stdin, this example actually passes because hledger tries all readers.
# If they all failed, it would show the error from the first (journal reader).
# But in this case the timedot reader can parse it.
$ hledger -f - print
>
2018/01/01 *
(a) 1.00
>=
# 3. So in these tests we must sometimes force the desired format, like so.
# Now we see the error from the journal reader.
$ hledger -f journal:- print
>2 /could not balance this transaction \(real postings are off by 1\)/
>=1
# 4. We expect to have reference to line number with last posting
$ hledger -f journal:- print
>2 /\<2\>/
>=1
# A posting without two spaces between account and amount.
<
2018/1/1
(a) 1
# 5. hledger doesn't detect this as an error directly, it parses account name "(a) 1" and
# amount 0 here.
$ hledger -f - print -x
2018/01/01
(a) 1 0
>=
# 6. Two (or more) postings with implicit amount cannot be balanced.
<
2018/1/1
a 1
b
c
$ hledger -f journal:- print
>2 /could not balance this transaction - can't have more than one real posting with no amount/
>=1
# 7. Two (or more) virtual postings with implicit amount cannot be balanced.
# (And the error message contains line numbers).
<
2018/1/1
[a] 1
[b]
[c]
$ hledger -f journal:- print
>2 /lines 1-4/
>=1