journal: make numbers parsing more strict
- Hunt down adjacent punctuations with altering char. - Add some tests dedicated to parsing amounts.
This commit is contained in:
parent
53ad035b24
commit
bcf7a1add5
@ -531,7 +531,7 @@ numberp = do
|
||||
-- interspersed with periods, commas, or both
|
||||
-- ptrace "numberp"
|
||||
sign <- signp
|
||||
parts <- some $ choice' [some digitChar, some $ char ',', some $ char '.']
|
||||
parts <- some $ choice' [some digitChar, some $ oneOf ['.', ',']]
|
||||
dbg8 "numberp parsed" (sign,parts) `seq` return ()
|
||||
|
||||
-- check the number is well-formed and identify the decimal point and digit
|
||||
|
||||
112
tests/journal/numbers.test
Normal file
112
tests/journal/numbers.test
Normal file
@ -0,0 +1,112 @@
|
||||
# Simple case
|
||||
hledger bal -f - --no-total
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1,000.00 EUR
|
||||
b -1,000.00 EUR
|
||||
>>>
|
||||
1,000.00 EUR a
|
||||
-1,000.00 EUR b
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# No digits before decimal sep
|
||||
hledger bal -f - --no-total
|
||||
<<<
|
||||
2017/1/1
|
||||
a .01 EUR
|
||||
b
|
||||
>>>
|
||||
0.01 EUR a
|
||||
-0.01 EUR b
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# No digits after decimal sep
|
||||
hledger bal -f - --no-total
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1. EUR
|
||||
b
|
||||
>>>
|
||||
1 EUR a
|
||||
-1 EUR b
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# No digits at all
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a . EUR
|
||||
b
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# Omitted decimals
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1,000 EUR
|
||||
b -1,000.00 EUR
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# Big prices
|
||||
hledger bal -f - --no-total
|
||||
<<<
|
||||
2017/1/1
|
||||
a -1 BTC @ 24,840 UAH
|
||||
b 24,840.00 UAH
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# adjacent punctuation chars
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1,,0,,0.0 EUR
|
||||
b -1..0..0,0 EUR
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# adjacent punctuation chars of different types
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1,0,.0 EUR
|
||||
b -1.0.,0 EUR
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# separator chars vary
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a 1.0,0.0,0 EUR
|
||||
b -1,0.0,0.0 EUR
|
||||
>>>
|
||||
>>>=1
|
||||
|
||||
# number begins with a decimal char
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a .1 EUR
|
||||
b -.1 EUR
|
||||
>>>
|
||||
0.1 EUR a
|
||||
-0.1 EUR b
|
||||
--------------------
|
||||
0
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# number begins with a separator char
|
||||
hledger bal -f -
|
||||
<<<
|
||||
2017/1/1
|
||||
a ,100.0 EUR
|
||||
b -,100.0 EUR
|
||||
>>>
|
||||
>>>=1
|
||||
Loading…
Reference in New Issue
Block a user