Skip to content

Commit 1d82903

Browse files
committed
add a test
1 parent 24d9ad4 commit 1d82903

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
@@ -101,6 +101,9 @@ import qualified Language.LSP.Types as LSP
101101
import Data.IORef.Extra (atomicModifyIORef_)
102102
import qualified Development.IDE.Plugin.HLS.GhcIde as Ghcide
103103
import Text.Regex.TDFA ((=~))
104+
import Development.IDE.Core.FileStore (getModTime)
105+
import Control.Concurrent (threadDelay)
106+
import Text.Printf (printf)
104107

105108
waitForProgressBegin :: Session ()
106109
waitForProgressBegin = skipManyTill anyMessage $ satisfyMaybe $ \case
@@ -5464,8 +5467,23 @@ unitTests = do
54645467
actualOrder <- liftIO $ readIORef orderRef
54655468

54665469
liftIO $ actualOrder @?= reverse [(1::Int)..20]
5470+
, testCase "timestamps have millisecond resolution" $ do
5471+
resolution_us <- findResolution_us 1
5472+
let msg = printf "Timestamps do not have millisecond resolution: %dus" resolution_us
5473+
assertBool msg (resolution_us <= 1000)
54675474
]
54685475

5476+
findResolution_us :: Int -> IO Int
5477+
findResolution_us delay_us | delay_us >= 1000000 = error "Unable to compute timestamp resolution"
5478+
findResolution_us delay_us = withTempFile $ \f -> withTempFile $ \f' -> do
5479+
writeFile f ""
5480+
threadDelay delay_us
5481+
writeFile f' ""
5482+
t <- getModTime f
5483+
t' <- getModTime f'
5484+
if t /= t' then return delay_us else findResolution_us (delay_us * 10)
5485+
5486+
54695487
testIde :: IDE.Arguments -> Session () -> IO ()
54705488
testIde arguments session = do
54715489
config <- getConfigFromEnv

0 commit comments

Comments
 (0)