unix-time-0.1.2: test/Test.hs
{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
module Main where
import qualified Data.ByteString.Char8 as BS
import Data.UnixTime
import System.Locale
import System.Time hiding (toClockTime)
import Test.Framework.Providers.HUnit
import Test.Framework.TH.Prime
import Test.Hspec.Expectations
----------------------------------------------------------------
main :: IO ()
main = $(defaultMainGenerator)
----------------------------------------------------------------
case_formatUnixTime :: Expectation
case_formatUnixTime = res `shouldBe` ans
where
res = formatUnixTime mailDateFormat $ UnixTime 0 0
ans = "Thu, 01 Jan 1970 09:00:00 +0900"
case_formatUnixTimeGMT :: Expectation
case_formatUnixTimeGMT = res `shouldBe` ans
where
res = formatUnixTimeGMT webDateFormat $ UnixTime 0 0
ans = "Thu, 01 Jan 1970 00:00:00 GMT"
case_parseUnixTime :: Expectation
case_parseUnixTime = res `shouldBe` ans
where
res = parseUnixTime mailDateFormat "Thu, 01 Jan 1970 09:00:00 +0900"
ans = UnixTime 0 0
case_parseUnixTime2 :: Expectation
case_parseUnixTime2 = res `shouldBe` ans
where
res = parseUnixTimeGMT webDateFormat "Thu, 01 Jan 1970 00:00:00 GMT"
ans = UnixTime 0 0
case_formatParse :: Expectation
case_formatParse = do
ut@(UnixTime sec _) <- getUnixTime
let ut' = parseUnixTime mailDateFormat $ formatUnixTime mailDateFormat ut
ut' `shouldBe` UnixTime sec 0
----------------------------------------------------------------
case_fromClockTime :: Expectation
case_fromClockTime = do
ct <- getClockTime
let fmt1 = formatUnixTime "%a, %d %b %Y %H:%M:%S" $ fromClockTime ct
cal <- toCalendarTime ct
let fmt2 = BS.pack $ formatCalendarTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S" cal
fmt1 `shouldBe` fmt2
case_toClockTime :: Expectation
case_toClockTime = do
ut <- getUnixTime
let fmt1 = formatUnixTime "%a, %d %b %Y %H:%M:%S" ut
ct = toClockTime ut
cal <- toCalendarTime ct
let fmt2 = BS.pack $ formatCalendarTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S" cal
fmt1 `shouldBe` fmt2
----------------------------------------------------------------
case_diffTime :: Expectation
case_diffTime = do
ut0 <- getUnixTime
ut1 <- getUnixTime
let ut0' = addUnixDiffTime ut1 $ diffUnixTime ut0 ut1
ut1' = addUnixDiffTime ut0 $ diffUnixTime ut1 ut0
ut0' `shouldBe` ut0
ut1' `shouldBe` ut1
----------------------------------------------------------------
case_diffTimeFromSeconds :: Expectation
case_diffTimeFromSeconds = do
res1 `shouldBe` ans
res2 `shouldBe` ans
res3 `shouldBe` ans
where
base = parseUnixTime mailDateFormat "Tue, 22 Nov 2011 06:49:58 +0900"
ans = parseUnixTime mailDateFormat "Tue, 22 Nov 2011 06:50:02 +0900"
res1 = addUnixDiffTime base 4
res2 = addUnixDiffTime base (secondsToUnixDiffTime (4 :: Int))
res3 = addUnixDiffTime base (microSecondsToUnixDiffTime (4000000 :: Int))
----------------------------------------------------------------
case_diffTimeToSeconds :: Expectation
case_diffTimeToSeconds = res `shouldBe` ans
where
ans :: Rational
ans = -12.345678
res = realToFrac $ microSecondsToUnixDiffTime (-12345678 :: Int)
----------------------------------------------------------------