# Testing parse error messages for accuracy and usefulness. # A journal with an incomplete date. < 2018 # 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