Skip to content

Commit b717faa

Browse files
committed
add a test
1 parent d9be407 commit b717faa

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

ghcide/src/Development/IDE/Core/FileStore.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ module Development.IDE.Core.FileStore(
1919
resetInterfaceStore,
2020
getModificationTimeImpl,
2121
addIdeGlobal,
22-
getFileContentsImpl
22+
getFileContentsImpl,
23+
getModTime
2324
) where
2425

2526
import Control.Concurrent.STM (atomically)
@@ -31,7 +32,6 @@ import Control.Monad.IO.Class
3132
import qualified Data.ByteString as BS
3233
import Data.Either.Extra
3334
import qualified Data.HashMap.Strict as HM
34-
import Data.Int (Int64)
3535
import qualified Data.Map.Strict as Map
3636
import Data.Maybe
3737
import qualified Data.Rope.UTF16 as Rope

ghcide/test/exe/Main.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ import Data.IORef.Extra (atomicModifyIORef_)
102102
import qualified Development.IDE.Plugin.HLS.GhcIde as Ghcide
103103
import Text.Regex.TDFA ((=~))
104104
import qualified Progress
105+
import Development.IDE.Core.FileStore (getModTime)
106+
import Control.Concurrent (threadDelay)
107+
import Text.Printf (printf)
105108

106109
waitForProgressBegin :: Session ()
107110
waitForProgressBegin = skipManyTill anyMessage $ satisfyMaybe $ \case
@@ -5492,9 +5495,24 @@ unitTests = do
54925495
actualOrder <- liftIO $ readIORef orderRef
54935496

54945497
liftIO $ actualOrder @?= reverse [(1::Int)..20]
5498+
, testCase "timestamps have millisecond resolution" $ do
5499+
resolution_us <- findResolution_us 1
5500+
let msg = printf "Timestamps do not have millisecond resolution: %dus" resolution_us
5501+
assertBool msg (resolution_us <= 1000)
54955502
, Progress.tests
54965503
]
54975504

5505+
findResolution_us :: Int -> IO Int
5506+
findResolution_us delay_us | delay_us >= 1000000 = error "Unable to compute timestamp resolution"
5507+
findResolution_us delay_us = withTempFile $ \f -> withTempFile $ \f' -> do
5508+
writeFile f ""
5509+
threadDelay delay_us
5510+
writeFile f' ""
5511+
t <- getModTime f
5512+
t' <- getModTime f'
5513+
if t /= t' then return delay_us else findResolution_us (delay_us * 10)
5514+
5515+
54985516
testIde :: IDE.Arguments -> Session () -> IO ()
54995517
testIde arguments session = do
55005518
config <- getConfigFromEnv

0 commit comments

Comments
 (0)