timerep-2.0.0: test/Test.hs
module Test where
import Data.Fixed (E12, Fixed (..))
import Data.Text
import Data.Time.Calendar
import Data.Time.LocalTime
import Data.Time.RFC2822
import Data.Time.RFC3339
import Data.Time.RFC822
import Distribution.TestSuite.QuickCheck
import Test.QuickCheck hiding (Fixed)
instance Arbitrary TimeOfDay where
arbitrary = TimeOfDay <$> choose (0, 23) <*> choose (0, 59) <*> pure 0
instance Arbitrary Day where
arbitrary = ModifiedJulianDay <$> arbitrary
instance Arbitrary LocalTime where
arbitrary = LocalTime <$> arbitrary <*> arbitrary
instance Arbitrary TimeZone where
arbitrary = TimeZone <$> arbitrary <*> arbitrary <*> elements timeZones
where timeZones = [ "ACDT", "ACST", "ACT", "ACT", "ADT", "AEDT"
, "AEST", "AFT", "AKDT", "AKST", "AMST", "AMST"
, "AMT", "AMT", "ART", "AST", "AST", "AWDT", "AWST"
, "AZOST", "AZT", "BDT", "BIOT", "BIT", "BOT"
, "BRST", "BRT", "BST", "BST", "BTT", "CAT", "CCT"
, "CDT", "CDT", "CEDT", "CEST", "CET", "CHADT"
, "CHAST", "CHOT", "ChST", "CHUT", "CIST", "CIT"
, "CKT", "CLST", "CLT", "COST", "COT", "CST", "CST"
, "CST", "CST", "CST", "CT", "CVT", "CWST", "CXT"
, "DAVT", "DDUT", "DFT", "EASST", "EAST", "EAT"
, "ECT", "ECT", "EDT", "EEDT", "EEST", "EET"
, "EGST", "EGT", "EIT", "EST", "EST", "FET", "FJT"
, "FKST", "FKST", "FKT", "FNT", "GALT", "GAMT"
, "GET", "GFT", "GILT", "GIT", "GMT", "GST", "GST"
, "GYT", "HADT", "HAEC", "HAST", "HKT", "HMT"
, "HOVT", "HST", "ICT", "IDT", "IOT", "IRDT"
, "IRKT", "IRST", "IST", "IST", "IST", "JST", "KGT"
, "KOST", "KRAT", "KST", "LHST", "LHST", "LINT"
, "MAGT", "MART", "MAWT", "MDT", "MET", "MEST"
, "MHT", "MIST", "MIT", "MMT", "MSK", "MST", "MST"
, "MST", "MUT", "MVT", "MYT", "NCT", "NDT", "NFT"
, "NPT", "NST", "NT", "NUT", "NZDT", "NZST", "OMST"
, "ORAT", "PDT", "PET", "PETT", "PGT", "PHOT"
, "PKT", "PMDT", "PMST", "PONT", "PST", "PST"
, "PYST", "PYT", "RET", "ROTT", "SAKT", "SAMT"
, "SAST", "SBT", "SCT", "SGT", "SLST", "SRET"
, "SRT", "SST", "SST", "SYOT", "TAHT", "THA", "TFT"
, "TJT", "TKT", "TLT", "TMT", "TOT", "TVT", "UCT"
, "ULAT", "USZ1", "UTC", "UYST", "UYT", "UZT"
, "VET", "VLAT", "VOLT", "VOST", "VUT", "WAKT"
, "WAST", "WAT", "WEDT", "WEST", "WET", "WIT"
, "WST", "YAKT", "YEKT", "Z" ]
instance Arbitrary ZonedTime where
arbitrary = ZonedTime <$> arbitrary <*> arbitrary
tests :: IO [Test]
tests = return
[ testProperty "Inverse RFC 3339." prop_inverseRFC3339
, testProperty "Inverse RFC 2822." prop_inverseRFC2822
, testProperty "Inverse RFC 822." prop_inverseRFC822
]
prop_inverseRFC3339 :: ZonedTime -> Bool
prop_inverseRFC3339 zonedTime = (fmap zonedTimeToUTC . parseTimeRFC3339 . asText . formatTimeRFC3339) zonedTime == Just (zonedTimeToUTC zonedTime)
prop_inverseRFC2822 :: ZonedTime -> Bool
prop_inverseRFC2822 zonedTime = (fmap zonedTimeToUTC . parseTimeRFC2822 . asText . formatTimeRFC2822) zonedTime == Just (zonedTimeToUTC zonedTime)
prop_inverseRFC822 :: ZonedTime -> Bool
prop_inverseRFC822 zonedTime = (fmap zonedTimeToUTC . parseTimeRFC822 . asText . formatTimeRFC822) zonedTime == Just (zonedTimeToUTC zonedTime)
asText :: Text -> Text
asText = id