on master help sign in
Merge
commita5ec316534e93eb3797db4bf15ab635e643e1f5a authorBryan O'Sullivan <bos@serpentine.com> dateFri 15 Jan 2016, 11:11 (11 years ago) parent8d32f785a8f06c
3 files changed+20−3
Data/Aeson/Types/Instances.hs+8−1 tests/Instances.hs+10−1 tests/Properties.hs+2−1
Data/Aeson/Types/Instances.hs+8−1
@@ -74,7 +74,7 @@ import Data.Monoid (Dual(..), First(..), Last(..))
7474import Data.Ratio (Ratio, (%), numerator, denominator)
7575import Data.Scientific (Scientific)
7676import Data.Text (Text, pack, unpack)
77−import Data.Time (Day, LocalTime, NominalDiffTime, UTCTime, ZonedTime)
77+import Data.Time (Day, LocalTime, NominalDiffTime, UTCTime, ZonedTime, TimeOfDay)
7878import Data.Time.Format (FormatTime, formatTime, parseTime)
7979import Data.Traversable as Tr (sequence)
8080import Data.Vector (Vector)
@@ -765,6 +765,13 @@ instance ToJSON Day where
765765instance FromJSON Day where
766766 parseJSON = withText "Day" (Time.run Time.day)
767767
768+instance ToJSON TimeOfDay where
769+ toJSON = stringEncoding
770+ toEncoding z = Encoding (E.quote $ E.timeOfDay z)
771+
772+instance FromJSON TimeOfDay where
773+ parseJSON = withText "TimeOfDay" (Time.run Time.timeOfDay)
774+
768775instance ToJSON LocalTime where
769776 toJSON = stringEncoding
770777 toEncoding z = Encoding (E.quote $ E.localTime z)
tests/Instances.hs+10−1
@@ -6,6 +6,7 @@ module Instances where
66import Types
77import Data.Function (on)
88import Control.Monad
9+import Test.QuickCheck (Arbitrary(..), Gen, choose, oneof, elements, Positive(..))
910import Test.QuickCheck
1011 ( Arbitrary(..), Gen, choose, oneof, elements
1112 , resize, listOf1, getNonNegative
@@ -19,6 +20,7 @@ import Data.Version
1920import qualified Data.Text as T
2021import qualified Data.Map as Map
2122import Data.Text (Text)
23+import Data.Maybe
2224import Data.Aeson.Types
2325import Control.Applicative
2426import Functions
@@ -31,8 +33,15 @@ instance Arbitrary Text where
3133instance (Ord k, Arbitrary k, Arbitrary v) => Arbitrary (Map.Map k v) where
3234 arbitrary = Map.fromList <$> arbitrary
3335
36+instance Arbitrary TimeOfDay where
37+ arbitrary = do
38+ h <- choose (0, 23)
39+ m <- choose (0, 59)
40+ s <- fromRational . toRational <$> choose (0, 59 :: Double)
41+ return $ TimeOfDay h m s
42+
3443instance Arbitrary LocalTime where
35− arbitrary = return $ LocalTime (ModifiedJulianDay 1) (TimeOfDay 1 2 3)
44+ arbitrary = LocalTime <$> arbitrary <*> arbitrary
3645
3746instance Arbitrary TimeZone where
3847 arbitrary = do
tests/Properties.hs+2−1
@@ -9,7 +9,7 @@ import Data.Aeson.Parser (value)
99import Data.Aeson.Types
1010import Data.ByteString.Builder (toLazyByteString)
1111import Data.Int (Int8)
12−import Data.Time (Day, LocalTime, NominalDiffTime, UTCTime, ZonedTime)
12+import Data.Time (Day, LocalTime, NominalDiffTime, UTCTime, ZonedTime, TimeOfDay)
1313import Data.Version (Version)
1414import Encoders
1515import Instances ()
@@ -130,6 +130,7 @@ tests = testGroup "properties" [
130130 , testProperty "Day" $ roundTripEq (undefined :: Day)
131131 , testProperty "DotNetTime" $ roundTripEq (undefined :: DotNetTime)
132132 , testProperty "LocalTime" $ roundTripEq (undefined :: LocalTime)
133+ , testProperty "TimeOfDay" $ roundTripEq (undefined :: TimeOfDay)
133134 , testProperty "UTCTime" $ roundTripEq (undefined :: UTCTime)
134135 , testProperty "ZonedTime" $ roundTripEq (undefined :: ZonedTime)
135136 , testProperty "NominalDiffTime" $ roundTripEq (undefined :: NominalDiffTime)