# 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. < 2009/1/1 a 1 # 2. When read from stdin with no reader prefix, the journal reader is used # (before 1.17, all readers were tried and the timedot reader would succeed), # giving an unbalanced error in this case. $ hledger -f - print >2 /real postings' sum should be 0 but is: 1/ >=1 # 3. We expect to have reference to line number with last posting # NB: \< and \> match start and end of a word. $ hledger -f journal:- print >2 /\<2\>/ >=1 # A posting without two spaces between account and amount. < 2018/1/1 (a) 1 # 4. 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 >= # 5. Two (or more) postings with implicit amount cannot be balanced. < 2018/1/1 a 1 b c $ hledger -f journal:- print >2 /can't have more than one real posting with no amount/ >=1 # 6. 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 # 7. Balancing error messages show the recorded precision, not the display precision. < 2010/1/1 a 1C @ $1.0049 a $-1.000 $ hledger -f- print >2 /real postings' sum should be 0 but is: \$0.0049/ >=1 # 8. Multiple postings all with the same sign gets a distinct error message. < 2020-01-01 a 1A b 1A $ hledger -f- print >2 /real postings all have the same sign/ >=1 # 9. Zeros don't trigger the same sign error. < 2020-01-01 a A 0 b B 0 $ hledger -f- print 2020-01-01 a 0 b 0 >=0 # 10. An inferred multicommodity amount doesn't trigger the same sign error. < 2020-01-01 a A 1 b B 1 c $ hledger -f- print 2020-01-01 a A 1 b B 1 c >=0 # 11. For multiple postings all with the same sign but in different commodities, # the error should show the original amounts, without inferring transaction prices. < 2020-01-01 a 1A b 1B $ hledger -f- print >2 hledger: "-" (lines 1-3) could not balance this transaction: real postings all have the same sign 2020-01-01 a 1A @@ 1B b 1B >=1