working test framework
This commit is contained in:
		
							parent
							
								
									1fa5e09dfd
								
							
						
					
					
						commit
						2e8665a4d6
					
				| @ -29,6 +29,6 @@ get_content (File s) = Just s | |||||||
| --defaultLedgerFile = tildeExpand "~/ledger.dat" | --defaultLedgerFile = tildeExpand "~/ledger.dat" | ||||||
| defaultLedgerFile = "ledger.dat" | defaultLedgerFile = "ledger.dat" | ||||||
| 
 | 
 | ||||||
| ledgerFile :: IO String | ledgerFilePath :: IO String | ||||||
| ledgerFile = do | ledgerFilePath = do | ||||||
|   getEnv "LEDGER" `catch` \_ -> return defaultLedgerFile >>= return |   getEnv "LEDGER" `catch` \_ -> return defaultLedgerFile >>= return | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								Parse.hs
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								Parse.hs
									
									
									
									
									
								
							| @ -96,18 +96,17 @@ i, o, b, h | |||||||
|            timelog files." |            timelog files." | ||||||
| -} | -} | ||||||
| -- parsec example: http://pandoc.googlecode.com/svn/trunk/src/Text/Pandoc/Readers/RST.hs | -- parsec example: http://pandoc.googlecode.com/svn/trunk/src/Text/Pandoc/Readers/RST.hs | ||||||
|  | -- sample data in Tests.hs  | ||||||
| 
 | 
 | ||||||
| module Parse where | module Parse where | ||||||
| 
 | 
 | ||||||
| import Text.ParserCombinators.Parsec | import Text.ParserCombinators.Parsec | ||||||
| import qualified Text.ParserCombinators.Parsec.Token as P |  | ||||||
| import Text.ParserCombinators.Parsec.Language | import Text.ParserCombinators.Parsec.Language | ||||||
|  | import qualified Text.ParserCombinators.Parsec.Token as P | ||||||
| 
 | 
 | ||||||
| import Types | import Types | ||||||
| 
 | 
 | ||||||
| -- see sample data in Tests.hs  | -- set up token parsing, though we're not yet using these much | ||||||
| 
 |  | ||||||
| -- set up token parsers, though we're not using these heavily yet |  | ||||||
| ledgerLanguageDef = LanguageDef { | ledgerLanguageDef = LanguageDef { | ||||||
|    commentStart   = "" |    commentStart   = "" | ||||||
|    , commentEnd     = "" |    , commentEnd     = "" | ||||||
| @ -233,13 +232,11 @@ whiteSpace1 = do space; whiteSpace | |||||||
| 
 | 
 | ||||||
| -- ok, what can we do with it ? | -- ok, what can we do with it ? | ||||||
| 
 | 
 | ||||||
| printParseResult r = | printParseResult r = case r of | ||||||
|     case r of |                        Left e -> parseError e | ||||||
|       Left err -> do putStr "ledger parse error at "; print err |                        Right v  -> print v | ||||||
|       Right x  -> do print x | 
 | ||||||
|  | parseError e = do putStr "ledger parse error at "; print e | ||||||
| 
 | 
 | ||||||
| parseLedgerFile :: IO String -> IO (Either ParseError Ledger) | parseLedgerFile :: IO String -> IO (Either ParseError Ledger) | ||||||
| parseLedgerFile filepath = do | parseLedgerFile f = f >>= parseFromFile ledger | ||||||
|   f <- filepath |  | ||||||
|   parseFromFile ledger f >>= return |  | ||||||
| 
 |  | ||||||
|  | |||||||
							
								
								
									
										77
									
								
								Tests.hs
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								Tests.hs
									
									
									
									
									
								
							| @ -1,12 +1,12 @@ | |||||||
| module Tests where | module Tests where | ||||||
| 
 | 
 | ||||||
|  | import Text.ParserCombinators.Parsec | ||||||
| import Test.QuickCheck | import Test.QuickCheck | ||||||
| import Test.HUnit | import Test.HUnit | ||||||
| import Text.ParserCombinators.Parsec |  | ||||||
| --import Control.Exception (assert) |  | ||||||
| 
 | 
 | ||||||
| import Parse |  | ||||||
| import Options | import Options | ||||||
|  | import Types | ||||||
|  | import Parse | ||||||
| 
 | 
 | ||||||
| -- sample data | -- sample data | ||||||
| 
 | 
 | ||||||
| @ -110,44 +110,57 @@ sample_ledger6 = "\ | |||||||
| \;     equity:opening balances                         \n\ | \;     equity:opening balances                         \n\ | ||||||
| \\n" --" | \\n" --" | ||||||
| 
 | 
 | ||||||
|  | -- utils | ||||||
|  | 
 | ||||||
|  | assertParseEqual :: (Show a, Eq a) => a -> (Either ParseError a) -> Assertion | ||||||
|  | assertParseEqual expected parsed = | ||||||
|  |     case parsed of | ||||||
|  |       Left e -> parseError e | ||||||
|  |       Right v  -> assertEqual " " expected v | ||||||
|  | 
 | ||||||
|  | parse' p ts = parse p "" ts | ||||||
|  |      | ||||||
| -- hunit tests | -- hunit tests | ||||||
| 
 | 
 | ||||||
| test1 = TestCase (assertEqual "1==1" 1 1) | test_parse_ledgertransaction = TestCase ( | ||||||
| sometests = TestList [TestLabel "test1" test1] |   assertParseEqual | ||||||
|  |     (Transaction "expenses:food:dining" (Amount "$" 10)) | ||||||
|  |     (parse' ledgertransaction sample_transaction)) | ||||||
| 
 | 
 | ||||||
| tests = Test.HUnit.test [ | --   parseTest ledgertransaction sample_transaction2 | ||||||
|               "test1" ~: "1==1" ~: 1 ~=? 1, | --   parseTest ledgerentry sample_entry | ||||||
|               "test2" ~: assertEqual "2==2" 2 2 | --   parseTest ledgerentry sample_entry2 | ||||||
|  | --   parseTest ledgerentry sample_entry3 | ||||||
|  | --   parseTest ledgerperiodicentry sample_periodic_entry | ||||||
|  | --   parseTest ledgerperiodicentry sample_periodic_entry2 | ||||||
|  | --   parseTest ledgerperiodicentry sample_periodic_entry3 | ||||||
|  | --   parseTest ledger sample_ledger | ||||||
|  | --   parseTest ledger sample_ledger2 | ||||||
|  | --   parseTest ledger sample_ledger3 | ||||||
|  | --   parseTest ledger sample_ledger4 | ||||||
|  | --   parseTest ledger sample_ledger5 | ||||||
|  | --   parseTest ledger sample_ledger6 | ||||||
|  | --   parseTest ledger sample_periodic_entry | ||||||
|  | --   parseTest ledger sample_periodic_entry2 | ||||||
|  | --   parseLedgerFile ledgerFile >>= printParseResult | ||||||
|  | 
 | ||||||
|  | hunittests = TestList [ | ||||||
|  |                        TestLabel "test_parse_ledgertransaction" test_parse_ledgertransaction | ||||||
|  |                       ] | ||||||
|  | 
 | ||||||
|  | hunittests2 = Test.HUnit.test [ | ||||||
|  |               "test1" ~: assertEqual "2 equals 2" 2 2 | ||||||
|              ] |              ] | ||||||
| 
 | 
 | ||||||
| -- quickcheck tests | -- quickcheck tests | ||||||
| 
 | 
 | ||||||
| prop_test1 = 1 == 1 | prop1 = 1 == 1 | ||||||
| prop2 = 1 == 1 | 
 | ||||||
|  | --prop_test_parse_ledgertransaction = ? | ||||||
| 
 | 
 | ||||||
| -- commands | -- commands | ||||||
| 
 | 
 | ||||||
| test :: IO ()       | test :: IO ()       | ||||||
| test = do | test = do | ||||||
|   parseTest ledgertransaction sample_transaction |   putStrLn "hunit: "; runTestTT hunittests; runTestTT hunittests2 | ||||||
|   parseTest ledgertransaction sample_transaction2 |   putStrLn "quickcheck: "; quickCheck prop1 | ||||||
|   parseTest ledgerentry sample_entry |  | ||||||
|   parseTest ledgerentry sample_entry2 |  | ||||||
|   parseTest ledgerentry sample_entry3 |  | ||||||
|   parseTest ledgerperiodicentry sample_periodic_entry |  | ||||||
|   parseTest ledgerperiodicentry sample_periodic_entry2 |  | ||||||
|   parseTest ledgerperiodicentry sample_periodic_entry3 |  | ||||||
|   parseTest ledger sample_ledger |  | ||||||
|   parseTest ledger sample_ledger2 |  | ||||||
|   parseTest ledger sample_ledger3 |  | ||||||
|   parseTest ledger sample_ledger4 |  | ||||||
|   parseTest ledger sample_ledger5 |  | ||||||
|   parseTest ledger sample_ledger6 |  | ||||||
|   parseTest ledger sample_periodic_entry |  | ||||||
|   parseTest ledger sample_periodic_entry2 |  | ||||||
|   parseLedgerFile ledgerFile >>= printParseResult |  | ||||||
|   return () |  | ||||||
| --   assert_ $ amount t1 == 8.50 |  | ||||||
| --   putStrLn "ok" |  | ||||||
| --     where assert_ e = assert e return ()              |  | ||||||
| 
 |  | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								hledger.hs
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								hledger.hs
									
									
									
									
									
								
							| @ -10,22 +10,21 @@ import Types | |||||||
| import Parse | import Parse | ||||||
| import Tests | import Tests | ||||||
| 
 | 
 | ||||||
| -- commands |  | ||||||
| 
 |  | ||||||
| register :: IO () |  | ||||||
| register = do  |  | ||||||
|   p <- parseLedgerFile ledgerFile |  | ||||||
|   case p of |  | ||||||
|     Left e -> do putStr "ledger parse error at "; print e |  | ||||||
|     Right l  -> putStr $ showLedger l |  | ||||||
| 
 |  | ||||||
| main :: IO () | main :: IO () | ||||||
| main = do | main = do | ||||||
|   (opts, args) <- getArgs >>= getOptions |   (opts, args) <- getArgs >>= getOptions | ||||||
|   --putStr "options: "; print opts |  | ||||||
|   --putStr "arguments: "; print args |  | ||||||
|   if "reg" `elem` args |   if "reg" `elem` args | ||||||
|     then register |     then register | ||||||
|     else if "test" `elem` args  |     else if "test" `elem` args  | ||||||
|          then test |          then test | ||||||
|          else return () |          else return () | ||||||
|  | 
 | ||||||
|  | -- commands | ||||||
|  | 
 | ||||||
|  | register :: IO () | ||||||
|  | register = do  | ||||||
|  |   p <- parseLedgerFile ledgerFilePath | ||||||
|  |   case p of | ||||||
|  |     Left e -> do putStr "ledger parse error at "; print e | ||||||
|  |     Right l  -> putStr $ showLedger l | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user