test: updated csv parser tests to nicer format
This commit is contained in:
		
							parent
							
								
									24bba96ea2
								
							
						
					
					
						commit
						f40d045251
					
				
							
								
								
									
										217
									
								
								tests/csv.test
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								tests/csv.test
									
									
									
									
									
								
							| @ -1,11 +1,13 @@ | |||||||
| # These tests read CSV from stdin for convenience, so to ensure we get the CSV reader's |  | ||||||
| # error, the csv: prefix is used.  |  | ||||||
| # |  | ||||||
| # The final cleanup command is chained with && so as not to mask hledger's exit code, |  | ||||||
| # but this means a temp file is left behind whenever hledger fails. What TODO ? |  | ||||||
| 
 |  | ||||||
| # 1. read CSV to hledger journal format | # 1. read CSV to hledger journal format | ||||||
| $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 |     assets:myacct               $50 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -16,7 +18,16 @@ $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $ | |||||||
| < | < | ||||||
| 10/2009/09,Flubber Co🎅,50, | 10/2009/09,Flubber Co🎅,50, | ||||||
| 11/2009/09,Flubber Co🎅,,50 | 11/2009/09,Flubber Co🎅,,50 | ||||||
| $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescription %%2\namount-in %%3\namount-out %%4\ncurrency $\n' >t.$$.csv.rules ; hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | RULES | ||||||
|  | account1 Assets:MyAccount | ||||||
|  | date %1 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | description %2 | ||||||
|  | amount-in %3 | ||||||
|  | amount-out %4 | ||||||
|  | currency $ | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co🎅 | 2009/09/10 Flubber Co🎅 | ||||||
|     Assets:MyAccount             $50 |     Assets:MyAccount             $50 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -28,7 +39,18 @@ $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescrip | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 3. handle conditions assigning multiple fields | # 3. handle conditions assigning multiple fields | ||||||
| $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\nif Flubber\n  account2 acct\n  comment cmt' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | if Flubber | ||||||
|  |   account2 acct | ||||||
|  |   comment cmt | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co  ; cmt | 2009/09/10 Flubber Co  ; cmt | ||||||
|     assets:myacct             $50 |     assets:myacct             $50 | ||||||
|     acct |     acct | ||||||
| @ -36,7 +58,16 @@ $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $ | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 4. read CSV with balance field | # 4. read CSV with balance field | ||||||
| $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,123\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,123 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 = $123 |     assets:myacct               $50 = $123 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -44,7 +75,17 @@ $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\nc | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 5. read CSV with empty balance field | # 5. read CSV with empty balance field | ||||||
| $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,123\n11/2009/09,Blubber Co,60,\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,123 | ||||||
|  | 11/2009/09,Blubber Co,60, | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 = $123 |     assets:myacct               $50 = $123 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -56,7 +97,17 @@ $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\nc | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 6. read CSV with only whitespace in balance field | # 6. read CSV with only whitespace in balance field | ||||||
| $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,123\n11/2009/09,Blubber Co,60,   \n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,123 | ||||||
|  | 11/2009/09,Blubber Co,60,    | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 = $123 |     assets:myacct               $50 = $123 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -68,7 +119,22 @@ $  printf 'fields date, description, amount, balance\ndate-format %%d/%%Y/%%m\nc | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 7. read CSV with rule double-negating column | # 7. read CSV with rule double-negating column | ||||||
| $  printf 'skip 1\n\ncurrency $\n\nfields date, payee, payment\n\namount -%%payment\naccount1 liabilities:bank\naccount2 expense:other' >t.$$.csv.rules; printf 'date,payee,amount\n2009/10/9,Flubber Co,50\n2009/11/09,Merchant Credit,-60\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | date,payee,amount | ||||||
|  | 2009/10/9,Flubber Co,50 | ||||||
|  | 2009/11/09,Merchant Credit,-60 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | skip 1 | ||||||
|  | 
 | ||||||
|  | currency $ | ||||||
|  | 
 | ||||||
|  | fields date, payee, payment | ||||||
|  | 
 | ||||||
|  | amount -%payment | ||||||
|  | account1 liabilities:bank | ||||||
|  | account2 expense:other | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/10/09 | 2009/10/09 | ||||||
|     liabilities:bank            $-50 |     liabilities:bank            $-50 | ||||||
|     expense:other |     expense:other | ||||||
| @ -83,7 +149,16 @@ $  printf 'skip 1\n\ncurrency $\n\nfields date, payee, payment\n\namount -%%paym | |||||||
| < | < | ||||||
| 10/2009/09;Flubber Co🎅;50; | 10/2009/09;Flubber Co🎅;50; | ||||||
| 11/2009/09;Flubber Co🎅;;50 | 11/2009/09;Flubber Co🎅;;50 | ||||||
| $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescription %%2\namount-in %%3\namount-out %%4\ncurrency $\n' >rules.$$ ; hledger --separator ';' -f csv:- --rules-file rules.$$ print && rm -rf rules.$$ | RULES | ||||||
|  | account1 Assets:MyAccount | ||||||
|  | date %1 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | description %2 | ||||||
|  | amount-in %3 | ||||||
|  | amount-out %4 | ||||||
|  | currency $ | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv --separator ';' | ||||||
| 2009/09/10 Flubber Co🎅 | 2009/09/10 Flubber Co🎅 | ||||||
|     Assets:MyAccount             $50 |     Assets:MyAccount             $50 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -95,7 +170,16 @@ $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescrip | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 9. read CSV with balance2 field | # 9. read CSV with balance2 field | ||||||
| $  printf 'fields date, description, amount, balance2\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,123\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,123 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance2 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 |     assets:myacct               $50 | ||||||
|     expense:unknown     = $123 |     expense:unknown     = $123 | ||||||
| @ -103,7 +187,16 @@ $  printf 'fields date, description, amount, balance2\ndate-format %%d/%%Y/%%m\n | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 10. read CSV with balance1 and balance2 fields | # 10. read CSV with balance1 and balance2 fields | ||||||
| $  printf 'fields date, description, amount, balance1, balance2\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,321,123\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,321,123 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance1, balance2 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct               $50 = $321 |     assets:myacct               $50 = $321 | ||||||
|     expense:unknown     = $123 |     expense:unknown     = $123 | ||||||
| @ -111,8 +204,18 @@ $  printf 'fields date, description, amount, balance1, balance2\ndate-format %%d | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # 11. More than two postings  | # 11. More than two postings | ||||||
| $  printf 'fields date, description, amount, balance1, balance2, amount3,comment3\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\naccount3   expenses:tax\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,321,123,0.234,VAT\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,321,123,0.234,VAT | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance1, balance2, amount3,comment3 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | account3   expenses:tax | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct             $50 = $321 |     assets:myacct             $50 = $321 | ||||||
|     unknown           = $123 |     unknown           = $123 | ||||||
| @ -120,8 +223,18 @@ $  printf 'fields date, description, amount, balance1, balance2, amount3,comment | |||||||
| 
 | 
 | ||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 12. More than two postings and different currencies  | # 12. More than two postings and different currencies | ||||||
| $  printf 'fields date, description, amount, balance1, balance2, currency3, amount3,comment3\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\naccount3   expenses:tax\n' >t.$$.csv.rules; printf '10/2009/09,Flubber Co,50,321,123,£,0.234,VAT\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,Flubber Co,50,321,123,£,0.234,VAT | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount, balance1, balance2, currency3, amount3,comment3 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | account3   expenses:tax | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct             $50 = $321 |     assets:myacct             $50 = $321 | ||||||
|     unknown           = $123 |     unknown           = $123 | ||||||
| @ -133,7 +246,16 @@ $  printf 'fields date, description, amount, balance1, balance2, currency3, amou | |||||||
| < | < | ||||||
| 10/2009/09,Flubber Co🎅,50,0 | 10/2009/09,Flubber Co🎅,50,0 | ||||||
| 11/2009/09,Flubber Co🎅,0.00,50 | 11/2009/09,Flubber Co🎅,0.00,50 | ||||||
| $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescription %%2\namount-in %%3\namount-out %%4\ncurrency $\n' >t.$$.csv.rules ; hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | RULES | ||||||
|  | account1 Assets:MyAccount | ||||||
|  | date %1 | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | description %2 | ||||||
|  | amount-in %3 | ||||||
|  | amount-out %4 | ||||||
|  | currency $ | ||||||
|  | 
 | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co🎅 | 2009/09/10 Flubber Co🎅 | ||||||
|     Assets:MyAccount             $50 |     Assets:MyAccount             $50 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -145,7 +267,25 @@ $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescrip | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 14. multiline descriptions | # 14. multiline descriptions | ||||||
| $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,"Flubber Co\n\n\n\nCo\nCo\n\n\n\n\n",50\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | 10/2009/09,"Flubber Co | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Co | ||||||
|  | Co | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ",50 | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | fields date, description, amount | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | account1 assets:myacct | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co Co Co | 2009/09/10 Flubber Co Co Co | ||||||
|     assets:myacct               $50 |     assets:myacct               $50 | ||||||
|     expense:unknown |     expense:unknown | ||||||
| @ -153,7 +293,18 @@ $  printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $ | |||||||
| >=0 | >=0 | ||||||
| 
 | 
 | ||||||
| # 15. recursive interpolation | # 15. recursive interpolation | ||||||
| $  printf 'fields account1, date, description, amount-in, amount-out\ndate-format %%d/%%Y/%%m\ncurrency $\nif Flubber\n    account1  assets:%%account1\n    amount-in  (%%amount-in)' >t.$$.csv.rules; printf 'myacct,10/2009/09,Flubber Co,50,\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules | < | ||||||
|  | myacct,10/2009/09,Flubber Co,50, | ||||||
|  | 
 | ||||||
|  | RULES | ||||||
|  | 
 | ||||||
|  | fields account1, date, description, amount-in, amount-out | ||||||
|  | date-format %d/%Y/%m | ||||||
|  | currency $ | ||||||
|  | if Flubber | ||||||
|  |    account1  assets:%account1 | ||||||
|  |    amount-in  (%amount-in) | ||||||
|  | $  ./hledger-csv | ||||||
| 2009/09/10 Flubber Co | 2009/09/10 Flubber Co | ||||||
|     assets:myacct             $-50 |     assets:myacct             $-50 | ||||||
|     income:unknown |     income:unknown | ||||||
| @ -187,7 +338,15 @@ $  ./hledger-csv | |||||||
| # < | # < | ||||||
| # 10/2009/09;Flubber Co🎅;50; | # 10/2009/09;Flubber Co🎅;50; | ||||||
| # 11/2009/09;Flubber Co🎅;;50 | # 11/2009/09;Flubber Co🎅;;50 | ||||||
| # $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescription %%2\namount-in %%3\namount-out %%4\ncurrency $\n' >rules.$$ ; hledger -f csv:- --rules-file rules.$$ print && rm -rf rules.$$ | # RULES | ||||||
|  | # account1 Assets:MyAccount | ||||||
|  | # date %1 | ||||||
|  | # date-format %d/%Y/%m | ||||||
|  | # description %2 | ||||||
|  | # amount-in %3 | ||||||
|  | # amount-out %4 | ||||||
|  | # currency $ | ||||||
|  | # $  ./hledger-csv | ||||||
| # 2009/09/10 Flubber Co🎅 | # 2009/09/10 Flubber Co🎅 | ||||||
| #     Assets:MyAccount             $50 | #     Assets:MyAccount             $50 | ||||||
| #     income:unknown              $-50 | #     income:unknown              $-50 | ||||||
| @ -202,7 +361,15 @@ $  ./hledger-csv | |||||||
| # < | # < | ||||||
| # 10/2009/09	Flubber Co🎅	50	 | # 10/2009/09	Flubber Co🎅	50	 | ||||||
| # 11/2009/09	Flubber Co🎅		50 | # 11/2009/09	Flubber Co🎅		50 | ||||||
| # $  printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescription %%2\namount-in %%3\namount-out %%4\ncurrency $\n' >rules.$$ ; hledger --separator "\t" -f csv:- --rules-file rules.$$ print && rm -rf rules.$$ | # RULES | ||||||
|  | # account1 Assets:MyAccount | ||||||
|  | # date %1 | ||||||
|  | # date-format %d/%Y/%m | ||||||
|  | # description %2 | ||||||
|  | # amount-in %3 | ||||||
|  | # amount-out %4 | ||||||
|  | # currency $ | ||||||
|  | # $  ./hledger-csv | ||||||
| # 2009/09/10 Flubber Co🎅 | # 2009/09/10 Flubber Co🎅 | ||||||
| #     Assets:MyAccount             $50 | #     Assets:MyAccount             $50 | ||||||
| #     income:unknown              $-50 | #     income:unknown              $-50 | ||||||
|  | |||||||
| @ -12,4 +12,4 @@ BEGIN{output=CSV} | |||||||
| 
 | 
 | ||||||
| trap "rm -f t.$$.csv t.$$.csv.rules" EXIT ERR | trap "rm -f t.$$.csv t.$$.csv.rules" EXIT ERR | ||||||
| 
 | 
 | ||||||
| hledger -f csv:t.$$.csv --rules-file t.$$.csv.rules print | hledger -f csv:t.$$.csv --rules-file t.$$.csv.rules print "$@" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user