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