port remaining JournalReader tests
This commit is contained in:
		
							parent
							
								
									9733e0378e
								
							
						
					
					
						commit
						6568784bf6
					
				| @ -348,7 +348,6 @@ tests_Hledger_Read = TestList $ | ||||
|   tests_readJournal' | ||||
|   ++ [ | ||||
|    tests_Hledger_Read_Common, | ||||
|    JournalReader.tests_Hledger_Read_JournalReader, | ||||
| --    LedgerReader.tests_Hledger_Read_LedgerReader, | ||||
|    TimeclockReader.tests_Hledger_Read_TimeclockReader, | ||||
|    TimedotReader.tests_Hledger_Read_TimedotReader, | ||||
|  | ||||
| @ -51,20 +51,13 @@ module Hledger.Read.JournalReader ( | ||||
|   marketpricedirectivep, | ||||
|   datetimep, | ||||
|   datep, | ||||
|   -- codep, | ||||
|   -- accountnamep, | ||||
|   modifiedaccountnamep, | ||||
|   postingp, | ||||
|   -- amountp, | ||||
|   -- amountp', | ||||
|   -- mamountp', | ||||
|   -- numberp, | ||||
|   statusp, | ||||
|   emptyorcommentlinep, | ||||
|   followingcommentp | ||||
| 
 | ||||
|   -- * Tests | ||||
|   ,tests_Hledger_Read_JournalReader | ||||
|   ,easytests | ||||
| ) | ||||
| where | ||||
| @ -76,7 +69,6 @@ import Control.Monad | ||||
| import Control.Monad.Except (ExceptT(..)) | ||||
| import Control.Monad.State.Strict | ||||
| import Data.Bifunctor (first) | ||||
| import Data.Functor.Identity (Identity(..)) | ||||
| import qualified Data.Map.Strict as M | ||||
| import Data.Text (Text) | ||||
| import Data.String | ||||
| @ -540,77 +532,6 @@ transactionp = do | ||||
|   let sourcepos = journalSourcePos startpos endpos | ||||
|   return $ txnTieKnot $ Transaction 0 sourcepos date edate status code description comment tags postings "" | ||||
| 
 | ||||
| transactionp_tests = tests "transactionp" [ | ||||
| 
 | ||||
|    test "just-a-date" $ expectParseEq transactionp "2015/1/1\n" nulltransaction{tdate=parsedate "2015/01/01"} | ||||
| 
 | ||||
|   ,test "more-complex" $ expectParseEq transactionp  | ||||
|     (T.unlines [ | ||||
|       "2012/05/14=2012/05/15 (code) desc  ; tcomment1", | ||||
|       "    ; tcomment2", | ||||
|       "    ; ttag1: val1", | ||||
|       "    * a         $1.00  ; pcomment1", | ||||
|       "    ; pcomment2", | ||||
|       "    ; ptag1: val1", | ||||
|       "    ; ptag2: val2" | ||||
|       ]) | ||||
|     nulltransaction{ | ||||
|       tsourcepos=JournalSourcePos "" (1,7),  -- XXX why 7 here ? | ||||
|       tpreceding_comment_lines="", | ||||
|       tdate=parsedate "2012/05/14", | ||||
|       tdate2=Just $ parsedate "2012/05/15", | ||||
|       tstatus=Unmarked, | ||||
|       tcode="code", | ||||
|       tdescription="desc", | ||||
|       tcomment="tcomment1\ntcomment2\nttag1: val1\n", | ||||
|       ttags=[("ttag1","val1")], | ||||
|       tpostings=[ | ||||
|         nullposting{ | ||||
|           pdate=Nothing, | ||||
|           pstatus=Cleared, | ||||
|           paccount="a", | ||||
|           pamount=Mixed [usd 1], | ||||
|           pcomment="pcomment1\npcomment2\nptag1: val1\nptag2: val2\n", | ||||
|           ptype=RegularPosting, | ||||
|           ptags=[("ptag1","val1"),("ptag2","val2")], | ||||
|           ptransaction=Nothing | ||||
|           } | ||||
|         ] | ||||
|     } | ||||
| 
 | ||||
|   ,test "parses a well-formed transaction" $ | ||||
|     expect $ isRight $ rjp transactionp $ T.unlines | ||||
|       ["2007/01/28 coopportunity" | ||||
|       ,"    expenses:food:groceries                   $47.18" | ||||
|       ,"    assets:checking                          $-47.18" | ||||
|       ,"" | ||||
|       ] | ||||
| 
 | ||||
|   ,test "does not parse a following comment as part of the description" $ | ||||
|     expectParseEqOn transactionp "2009/1/1 a ;comment\n b 1\n" tdescription "a" | ||||
| 
 | ||||
|   ,test "transactionp parses a following whitespace line" $ | ||||
|     expect $ isRight $ rjp transactionp $ T.unlines | ||||
|       ["2012/1/1" | ||||
|       ,"  a  1" | ||||
|       ,"  b" | ||||
|       ," " | ||||
|       ] | ||||
| 
 | ||||
|   ,test "comments everywhere, two postings parsed" $ | ||||
|     expectParseEqOn transactionp  | ||||
|       (T.unlines | ||||
|         ["2009/1/1 x  ; transaction comment" | ||||
|         ," a  1  ; posting 1 comment" | ||||
|         ," ; posting 1 comment 2" | ||||
|         ," b" | ||||
|         ," ; posting 2 comment" | ||||
|         ]) | ||||
|       (length . tpostings) | ||||
|       2 | ||||
| 
 | ||||
|   ] | ||||
| 
 | ||||
| --- ** postings | ||||
| 
 | ||||
| -- Parse the following whitespace-beginning lines as postings, posting | ||||
| @ -653,56 +574,7 @@ postingp mTransactionYear = do | ||||
|    , pbalanceassertion=massertion | ||||
|    } | ||||
| 
 | ||||
| test_postingp = TestCase $ do | ||||
|     let s `gives` ep = do | ||||
|                          let parse = runIdentity $ parseWithState mempty (postingp Nothing) s | ||||
|                          assertBool "Example is parsed well" $ isRight parse | ||||
|                          let Right ap = parse | ||||
|                              same msg f = assertEqual ("Posting "++msg++" differs") (f ep) (f ap) | ||||
|                          same "date" pdate | ||||
|                          same "status" pstatus | ||||
|                          same "account" paccount | ||||
|                          -- same "amount" pamount | ||||
|                          -- more revealing: | ||||
|                          assertEqual "amount differs!" (showMixedAmountDebug $ pamount ep) (showMixedAmountDebug $ pamount ap) | ||||
|                          same "comment" pcomment | ||||
|                          same "type" ptype | ||||
|                          same "tags" ptags | ||||
|                          same "transaction" ptransaction | ||||
|     "  expenses:food:dining  $10.00   ; a: a a \n   ; b: b b \n" `gives` | ||||
|       posting{paccount="expenses:food:dining", pamount=Mixed [usd 10], pcomment="a: a a\nb: b b\n", ptags=[("a","a a"), ("b","b b")]} | ||||
|      | ||||
|     " a  1. ; [2012/11/28]\n" `gives`  -- trailing decimal point required to match num's asdecimalpoint | ||||
|       ("a" `post` num 1){pcomment="[2012/11/28]\n" | ||||
|                         ,pdate=parsedateM "2012/11/28"} | ||||
| 
 | ||||
|     " a  2. ; a:a, [=2012/11/28]\n" `gives` | ||||
|       ("a" `post` num 2){pcomment="a:a, [=2012/11/28]\n" | ||||
|                         ,ptags=[("a","a")] | ||||
|                         ,pdate=Nothing} | ||||
| 
 | ||||
|     " a  3. ; a:a\n  ; [2012/11/28=2012/11/29],b:b\n" `gives` | ||||
|       ("a" `post` num 3){pcomment="a:a\n[2012/11/28=2012/11/29],b:b\n" | ||||
|                         ,ptags=[("a","a"), ("[2012/11/28=2012/11/29],b","b")] -- XXX ugly tag name parsed | ||||
|                         ,pdate=parsedateM "2012/11/28"} | ||||
| 
 | ||||
|     assertBool "postingp parses a quoted commodity with numbers" | ||||
|       (isRight . runIdentity $ parseWithState mempty (postingp Nothing) "  a  1 \"DE123\"\n") | ||||
| 
 | ||||
|     assertBool "postingp parses balance assertions and fixed lot prices" | ||||
|       (isRight . runIdentity $ parseWithState mempty (postingp Nothing) "  a  1 \"DE123\" =$1 { =2.2 EUR} \n") | ||||
| 
 | ||||
|     -- let parse = parseWithState mempty postingp " a\n ;next-line comment\n" | ||||
|     -- assertRight parse | ||||
|     -- let Right p = parse | ||||
|     -- assertEqual "next-line comment\n" (pcomment p) | ||||
|     -- assertEqual (Just nullmixedamt) (pbalanceassertion p) | ||||
| 
 | ||||
| --- * more tests | ||||
| 
 | ||||
| tests_Hledger_Read_JournalReader = TestList [ | ||||
|     test_postingp | ||||
|   ] | ||||
| --- * tests | ||||
| 
 | ||||
| easytests = tests "JournalReader" [ | ||||
| 
 | ||||
| @ -790,6 +662,43 @@ easytests = tests "JournalReader" [ | ||||
| 
 | ||||
|     ] | ||||
| 
 | ||||
|   ,tests "postingp" [ | ||||
|      test "basic" $ expectParseEq (postingp Nothing)  | ||||
|       "  expenses:food:dining  $10.00   ; a: a a \n   ; b: b b \n" | ||||
|       posting{ | ||||
|         paccount="expenses:food:dining",  | ||||
|         pamount=Mixed [usd 10],  | ||||
|         pcomment="a: a a\nb: b b\n",  | ||||
|         ptags=[("a","a a"), ("b","b b")] | ||||
|         } | ||||
| 
 | ||||
|     ,test "posting dates" $ expectParseEq (postingp Nothing)  | ||||
|       " a  1. ; date:2012/11/28, date2=2012/11/29,b:b\n" | ||||
|       nullposting{ | ||||
|          paccount="a" | ||||
|         ,pamount=Mixed [num 1] | ||||
|         ,pcomment="date:2012/11/28, date2=2012/11/29,b:b\n" | ||||
|         ,ptags=[("date", "2012/11/28"), ("date2=2012/11/29,b", "b")] -- TODO tag name parsed too greedily | ||||
|         ,pdate=Just $ parsedate "2012/11/28" | ||||
|         ,pdate2=Nothing  -- Just $ parsedate "2012/11/29" | ||||
|         } | ||||
| 
 | ||||
|     ,test "posting dates bracket syntax" $ expectParseEq (postingp Nothing)  | ||||
|       " a  1. ; [2012/11/28=2012/11/29]\n" | ||||
|       nullposting{ | ||||
|          paccount="a" | ||||
|         ,pamount=Mixed [num 1] | ||||
|         ,pcomment="[2012/11/28=2012/11/29]\n" | ||||
|         ,ptags=[] | ||||
|         ,pdate= Just $ fromGregorian 2012 11 28  | ||||
|         ,pdate2=Just $ fromGregorian 2012 11 29 | ||||
|         } | ||||
| 
 | ||||
|     ,test "quoted commodity symbol with digits" $ expectParse (postingp Nothing) "  a  1 \"DE123\"\n" | ||||
| 
 | ||||
|     ,test "balance assertion and fixed lot price" $ expectParse (postingp Nothing) "  a  1 \"DE123\" =$1 { =2.2 EUR} \n" | ||||
|     ] | ||||
| 
 | ||||
|   ,tests "transactionmodifierp" [ | ||||
| 
 | ||||
|     test "basic" $ expectParseEq transactionmodifierp  | ||||
| @ -800,7 +709,76 @@ easytests = tests "JournalReader" [ | ||||
|       } | ||||
|     ] | ||||
| 
 | ||||
|   ,transactionp_tests | ||||
|   ,tests "transactionp" [ | ||||
|    | ||||
|      test "just-a-date" $ expectParseEq transactionp "2015/1/1\n" nulltransaction{tdate=parsedate "2015/01/01"} | ||||
|    | ||||
|     ,test "more-complex" $ expectParseEq transactionp  | ||||
|       (T.unlines [ | ||||
|         "2012/05/14=2012/05/15 (code) desc  ; tcomment1", | ||||
|         "    ; tcomment2", | ||||
|         "    ; ttag1: val1", | ||||
|         "    * a         $1.00  ; pcomment1", | ||||
|         "    ; pcomment2", | ||||
|         "    ; ptag1: val1", | ||||
|         "    ; ptag2: val2" | ||||
|         ]) | ||||
|       nulltransaction{ | ||||
|         tsourcepos=JournalSourcePos "" (1,7),  -- XXX why 7 here ? | ||||
|         tpreceding_comment_lines="", | ||||
|         tdate=parsedate "2012/05/14", | ||||
|         tdate2=Just $ parsedate "2012/05/15", | ||||
|         tstatus=Unmarked, | ||||
|         tcode="code", | ||||
|         tdescription="desc", | ||||
|         tcomment="tcomment1\ntcomment2\nttag1: val1\n", | ||||
|         ttags=[("ttag1","val1")], | ||||
|         tpostings=[ | ||||
|           nullposting{ | ||||
|             pdate=Nothing, | ||||
|             pstatus=Cleared, | ||||
|             paccount="a", | ||||
|             pamount=Mixed [usd 1], | ||||
|             pcomment="pcomment1\npcomment2\nptag1: val1\nptag2: val2\n", | ||||
|             ptype=RegularPosting, | ||||
|             ptags=[("ptag1","val1"),("ptag2","val2")], | ||||
|             ptransaction=Nothing | ||||
|             } | ||||
|           ] | ||||
|       } | ||||
|    | ||||
|     ,test "parses a well-formed transaction" $ | ||||
|       expect $ isRight $ rjp transactionp $ T.unlines | ||||
|         ["2007/01/28 coopportunity" | ||||
|         ,"    expenses:food:groceries                   $47.18" | ||||
|         ,"    assets:checking                          $-47.18" | ||||
|         ,"" | ||||
|         ] | ||||
|    | ||||
|     ,test "does not parse a following comment as part of the description" $ | ||||
|       expectParseEqOn transactionp "2009/1/1 a ;comment\n b 1\n" tdescription "a" | ||||
|    | ||||
|     ,test "transactionp parses a following whitespace line" $ | ||||
|       expect $ isRight $ rjp transactionp $ T.unlines | ||||
|         ["2012/1/1" | ||||
|         ,"  a  1" | ||||
|         ,"  b" | ||||
|         ," " | ||||
|         ] | ||||
|    | ||||
|     ,test "comments everywhere, two postings parsed" $ | ||||
|       expectParseEqOn transactionp  | ||||
|         (T.unlines | ||||
|           ["2009/1/1 x  ; transaction comment" | ||||
|           ," a  1  ; posting 1 comment" | ||||
|           ," ; posting 1 comment 2" | ||||
|           ," b" | ||||
|           ," ; posting 2 comment" | ||||
|           ]) | ||||
|         (length . tpostings) | ||||
|         2 | ||||
|    | ||||
|     ] | ||||
| 
 | ||||
|   -- directives | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user