parsing: show a better error for illegal month/day numbers in dates
This commit is contained in:
parent
cd8dffc485
commit
b2c8933af4
@ -262,11 +262,10 @@ ymd = do
|
|||||||
y <- many1 digit
|
y <- many1 digit
|
||||||
datesepchar
|
datesepchar
|
||||||
m <- try (count 2 digit) <|> count 1 digit
|
m <- try (count 2 digit) <|> count 1 digit
|
||||||
guard (read m >= 1 && (read m <= 12))
|
when (read m < 1 || (read m > 12)) $ error $ "bad month number: " ++ m
|
||||||
-- when (read m < 1 || (read m > 12)) $ fail "bad month number specified"
|
|
||||||
datesepchar
|
datesepchar
|
||||||
d <- try (count 2 digit) <|> count 1 digit
|
d <- try (count 2 digit) <|> count 1 digit
|
||||||
when (read d < 1 || (read d > 31)) $ fail "bad day number specified"
|
when (read d < 1 || (read d > 31)) $ error $ "bad day number: " ++ d
|
||||||
return $ (y,m,d)
|
return $ (y,m,d)
|
||||||
|
|
||||||
ym :: GenParser Char st SmartDate
|
ym :: GenParser Char st SmartDate
|
||||||
|
|||||||
15
tests/parse-dates.test
Normal file
15
tests/parse-dates.test
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# dates with bad month or day numbers should be rejected
|
||||||
|
-f- print
|
||||||
|
<<<
|
||||||
|
2010/31/12 x
|
||||||
|
a 1
|
||||||
|
b
|
||||||
|
>>>2 /bad month number: 31/
|
||||||
|
>>>= 1
|
||||||
|
-f- print
|
||||||
|
<<<
|
||||||
|
2010/12/32 x
|
||||||
|
a 1
|
||||||
|
b
|
||||||
|
>>>2 /bad day number: 32/
|
||||||
|
>>>= 1
|
||||||
Loading…
Reference in New Issue
Block a user