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
|
-- interspersed with periods, commas, or both
|
||||||
-- ptrace "numberp"
|
-- ptrace "numberp"
|
||||||
sign <- signp
|
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 ()
|
dbg8 "numberp parsed" (sign,parts) `seq` return ()
|
||||||
|
|
||||||
-- check the number is well-formed and identify the decimal point and digit
|
-- 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