mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-19 10:17:35 +03:00
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 = "ledger.dat"
|
||||
|
||||
ledgerFile :: IO String
|
||||
ledgerFile = do
|
||||
ledgerFilePath :: IO String
|
||||
ledgerFilePath = do
|
||||
getEnv "LEDGER" `catch` \_ -> return defaultLedgerFile >>= return
|
||||
|
21
Parse.hs
21
Parse.hs
@ -96,18 +96,17 @@ i, o, b, h
|
||||
timelog files."
|
||||
-}
|
||||
-- parsec example: http://pandoc.googlecode.com/svn/trunk/src/Text/Pandoc/Readers/RST.hs
|
||||
-- sample data in Tests.hs
|
||||
|
||||
module Parse where
|
||||
|
||||
import Text.ParserCombinators.Parsec
|
||||
import qualified Text.ParserCombinators.Parsec.Token as P
|
||||
import Text.ParserCombinators.Parsec.Language
|
||||
import qualified Text.ParserCombinators.Parsec.Token as P
|
||||
|
||||
import Types
|
||||
|
||||
-- see sample data in Tests.hs
|
||||
|
||||
-- set up token parsers, though we're not using these heavily yet
|
||||
-- set up token parsing, though we're not yet using these much
|
||||
ledgerLanguageDef = LanguageDef {
|
||||
commentStart = ""
|
||||
, commentEnd = ""
|
||||
@ -233,13 +232,11 @@ whiteSpace1 = do space; whiteSpace
|
||||
|
||||
-- ok, what can we do with it ?
|
||||
|
||||
printParseResult r =
|
||||
case r of
|
||||
Left err -> do putStr "ledger parse error at "; print err
|
||||
Right x -> do print x
|
||||
printParseResult r = case r of
|
||||
Left e -> parseError e
|
||||
Right v -> print v
|
||||
|
||||
parseError e = do putStr "ledger parse error at "; print e
|
||||
|
||||
parseLedgerFile :: IO String -> IO (Either ParseError Ledger)
|
||||
parseLedgerFile filepath = do
|
||||
f <- filepath
|
||||
parseFromFile ledger f >>= return
|
||||
|
||||
parseLedgerFile f = f >>= parseFromFile ledger
|
||||
|
77
Tests.hs
77
Tests.hs
@ -1,12 +1,12 @@
|
||||
module Tests where
|
||||
|
||||
import Text.ParserCombinators.Parsec
|
||||
import Test.QuickCheck
|
||||
import Test.HUnit
|
||||
import Text.ParserCombinators.Parsec
|
||||
--import Control.Exception (assert)
|
||||
|
||||
import Parse
|
||||
import Options
|
||||
import Types
|
||||
import Parse
|
||||
|
||||
-- sample data
|
||||
|
||||
@ -110,44 +110,57 @@ sample_ledger6 = "\
|
||||
\; equity:opening balances \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
|
||||
|
||||
test1 = TestCase (assertEqual "1==1" 1 1)
|
||||
sometests = TestList [TestLabel "test1" test1]
|
||||
test_parse_ledgertransaction = TestCase (
|
||||
assertParseEqual
|
||||
(Transaction "expenses:food:dining" (Amount "$" 10))
|
||||
(parse' ledgertransaction sample_transaction))
|
||||
|
||||
tests = Test.HUnit.test [
|
||||
"test1" ~: "1==1" ~: 1 ~=? 1,
|
||||
"test2" ~: assertEqual "2==2" 2 2
|
||||
-- parseTest ledgertransaction sample_transaction2
|
||||
-- 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
|
||||
|
||||
hunittests = TestList [
|
||||
TestLabel "test_parse_ledgertransaction" test_parse_ledgertransaction
|
||||
]
|
||||
|
||||
hunittests2 = Test.HUnit.test [
|
||||
"test1" ~: assertEqual "2 equals 2" 2 2
|
||||
]
|
||||
|
||||
-- quickcheck tests
|
||||
|
||||
prop_test1 = 1 == 1
|
||||
prop2 = 1 == 1
|
||||
prop1 = 1 == 1
|
||||
|
||||
--prop_test_parse_ledgertransaction = ?
|
||||
|
||||
-- commands
|
||||
|
||||
test :: IO ()
|
||||
test = do
|
||||
parseTest ledgertransaction sample_transaction
|
||||
parseTest ledgertransaction sample_transaction2
|
||||
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 ()
|
||||
|
||||
putStrLn "hunit: "; runTestTT hunittests; runTestTT hunittests2
|
||||
putStrLn "quickcheck: "; quickCheck prop1
|
||||
|
21
hledger.hs
21
hledger.hs
@ -10,22 +10,21 @@ import Types
|
||||
import Parse
|
||||
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 = do
|
||||
(opts, args) <- getArgs >>= getOptions
|
||||
--putStr "options: "; print opts
|
||||
--putStr "arguments: "; print args
|
||||
if "reg" `elem` args
|
||||
then register
|
||||
else if "test" `elem` args
|
||||
then test
|
||||
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