Cabal-2.0.0.2: tests/UnitTests/Distribution/Compat/Time.hs
module UnitTests.Distribution.Compat.Time (tests) where
import Control.Concurrent (threadDelay)
import System.FilePath
import Distribution.Simple.Utils (withTempDirectory)
import Distribution.Verbosity
import Distribution.Compat.Time
import Test.Tasty
import Test.Tasty.HUnit
tests :: Int -> [TestTree]
tests mtimeChange =
[ testCase "getModTime has sub-second resolution" $ getModTimeTest mtimeChange
, testCase "getCurTime works as expected" $ getCurTimeTest mtimeChange
]
getModTimeTest :: Int -> Assertion
getModTimeTest mtimeChange =
withTempDirectory silent "." "getmodtime-" $ \dir -> do
let fileName = dir </> "foo"
writeFile fileName "bar"
t0 <- getModTime fileName
threadDelay mtimeChange
writeFile fileName "baz"
t1 <- getModTime fileName
assertBool "expected different file mtimes" (t1 > t0)
getCurTimeTest :: Int -> Assertion
getCurTimeTest mtimeChange =
withTempDirectory silent "." "getmodtime-" $ \dir -> do
let fileName = dir </> "foo"
writeFile fileName "bar"
t0 <- getModTime fileName
threadDelay mtimeChange
t1 <- getCurTime
assertBool("expected file mtime (" ++ show t0
++ ") to be earlier than current time (" ++ show t1 ++ ")")
(t0 < t1)
threadDelay mtimeChange
writeFile fileName "baz"
t2 <- getModTime fileName
assertBool ("expected current time (" ++ show t1
++ ") to be earlier than file mtime (" ++ show t2 ++ ")")
(t1 < t2)