parsing: parse time of day more carefully
This commit is contained in:
parent
1f24e025da
commit
946e5ffcbc
@ -388,12 +388,19 @@ ledgerdatetime = do
|
||||
day <- ledgerdate
|
||||
many1 spacenonewline
|
||||
h <- many1 digit
|
||||
let h' = read h
|
||||
guard $ h' >= 0 && h' <= 23
|
||||
char ':'
|
||||
m <- many1 digit
|
||||
let m' = read m
|
||||
guard $ m' >= 0 && m' <= 59
|
||||
s <- optionMaybe $ do
|
||||
char ':'
|
||||
many1 digit
|
||||
let tod = TimeOfDay (read h) (read m) (maybe 0 (fromIntegral.read) s)
|
||||
let s' = case s of Just sstr -> read sstr
|
||||
Nothing -> 0
|
||||
guard $ s' >= 0 && s' <= 59
|
||||
let tod = TimeOfDay h' m' (fromIntegral s')
|
||||
return $ LocalTime day tod
|
||||
|
||||
ledgereffectivedate :: Day -> GenParser Char JournalContext Day
|
||||
@ -721,6 +728,15 @@ tests_Hledger_Read_JournalReader = TestList [
|
||||
assertParseFailure (parseWithCtx nullctx ledgerdate "1/1")
|
||||
assertParse (parseWithCtx nullctx{ctxYear=Just 2011} ledgerdate "1/1")
|
||||
|
||||
,"ledgerdatetime" ~: do
|
||||
assertParseFailure (parseWithCtx nullctx ledgerdatetime "2011/1/1")
|
||||
assertParseFailure (parseWithCtx nullctx ledgerdatetime "2011/1/1 24:00:00")
|
||||
assertParseFailure (parseWithCtx nullctx ledgerdatetime "2011/1/1 00:60:00")
|
||||
assertParseFailure (parseWithCtx nullctx ledgerdatetime "2011/1/1 00:00:60")
|
||||
assertParse (parseWithCtx nullctx ledgerdatetime "2011/1/1 00:00")
|
||||
assertParse (parseWithCtx nullctx ledgerdatetime "2011/1/1 23:59:59")
|
||||
assertParse (parseWithCtx nullctx ledgerdatetime "2011/1/1 3:5:7")
|
||||
|
||||
,"ledgerDefaultYear" ~: do
|
||||
assertParse (parseWithCtx nullctx ledgerDefaultYear "Y 2010\n")
|
||||
assertParse (parseWithCtx nullctx ledgerDefaultYear "Y 10001\n")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user