@@ -8,18 +8,18 @@ import Control.Monad (forM_)
8
8
import Data.Bifunctor (Bifunctor (first ))
9
9
import Data.Either (isLeft )
10
10
import Data.List.Extra (lower )
11
- import Data.Time (DayOfWeek (.. ), TimeOfDay (.. ),
11
+ import Data.Time (Day , DayOfWeek (.. ), TimeOfDay (.. ),
12
12
defaultTimeLocale , formatTime ,
13
- secondsToNominalDiffTime )
13
+ fromGregorian , secondsToNominalDiffTime )
14
14
import Data.Void (Void )
15
15
import Test.Hspec (Spec , context , describe , it , shouldBe ,
16
16
shouldSatisfy )
17
17
import Test.QuickCheck (Arbitrary (.. ), Gen , elements , forAll ,
18
18
property , suchThat )
19
19
import Text.Megaparsec (Parsec , errorBundlePretty , runParser )
20
20
import Text.Megaparsec.Time (dateParser , dayParser , durationParser ,
21
- hoursParser , minutesParser ,
22
- secondsParser , timeParser )
21
+ gregorianDayParser , hoursParser ,
22
+ minutesParser , secondsParser , timeParser )
23
23
import Text.Printf (printf )
24
24
25
25
instance Arbitrary TimeOfDay where
@@ -32,6 +32,12 @@ instance Arbitrary TimeOfDay where
32
32
instance Arbitrary DayOfWeek where
33
33
arbitrary = elements [Monday .. Sunday ]
34
34
35
+ instance Arbitrary Day where
36
+ arbitrary = fromGregorian
37
+ <$> elements [1970 .. 2100 ]
38
+ <*> elements [1 .. 12 ]
39
+ <*> arbitrary
40
+
35
41
positive
36
42
:: Num a
37
43
=> Arbitrary a
@@ -156,6 +162,12 @@ spec = do
156
162
parseOrPrettyError durationParser (show s) `shouldBe`
157
163
Right (secondsToNominalDiffTime (fromInteger s))
158
164
165
+ describe " gregorian day" $ do
166
+ forM_ [" %F" , " %d/%m/%Y" ] $ \ format ->
167
+ it format . property $ \ d ->
168
+ parseOrPrettyError gregorianDayParser (formatTime defaultTimeLocale format d) `shouldBe`
169
+ Right d
170
+
159
171
describe " time" $ do
160
172
it " valid" . property $ \ t ->
161
173
parseOrPrettyError timeParser (formatTime defaultTimeLocale " %R" t) `shouldBe`
0 commit comments