Z-Data-0.3.0.0: test/Z/Data/Builder/TimeSpec.hs
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Z.Data.Builder.TimeSpec where
import qualified Data.List as List
import Data.Word
import Data.Int
import GHC.Float
import Data.Time.Format
import qualified Z.Data.Builder.Time as B
import qualified Z.Data.Builder.Base as B
import qualified Z.Data.Text as T
import Test.QuickCheck
import Test.QuickCheck.Function
import Test.QuickCheck.Property
import Test.QuickCheck.Instances.Time
import Test.Hspec
import Test.Hspec.QuickCheck
import Data.Time.LocalTime
spec :: Spec
spec = describe "builder time" . modifyMaxSuccess (*10) . modifyMaxSize (*10) $ do
describe "utcTime === format" $ do
prop "utcTime === format" $ \ t ->
(formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%QZ" t) === (T.unpack . B.buildText $ B.utcTime t)
describe "localTime === format" $ do
prop "localTime === format" $ \ t ->
(formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Q" t) === (T.unpack . B.buildText $ B.localTime t)
describe "zonedTime === format" $ do
prop "zonedTime === format" $ \ t0 z0 ->
let z = abs z0 `div` 1440
t = ZonedTime t0 (minutesToTimeZone z)
in if z == 0
then (formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%QZ" t) === (T.unpack . B.buildText $ B.zonedTime t)
else (formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Q%Z" t) === (T.unpack . B.buildText $ B.zonedTime t)