Skip to content

Commit 94511f2

Browse files
committed
Fix flaky test
1 parent 41f917e commit 94511f2

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,6 @@ fromChange FcChanged = Nothing
131131
-------------------------------------------------------------------------------------
132132

133133
-- | Returns True if the file exists
134-
-- Note that a file is not considered to exist unless it is saved to disk.
135-
-- In particular, VFS existence is not enough.
136-
-- Consider the following example:
137-
-- 1. The file @A.hs@ containing the line @import B@ is added to the files of interest
138-
-- Since @B.hs@ is neither open nor exists, GetLocatedImports finds Nothing
139-
-- 2. The editor creates a new buffer @B.hs@
140-
-- Unless the editor also sends a @DidChangeWatchedFile@ event, ghcide will not pick it up
141-
-- Most editors, e.g. VSCode, only send the event when the file is saved to disk.
142134
getFileExists :: NormalizedFilePath -> Action Bool
143135
getFileExists fp = use_ GetFileExists fp
144136

ghcide/test/exe/Main.hs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ import System.Process.Extra (CreateProcess (cwd),
9595
import Test.QuickCheck
9696
-- import Test.QuickCheck.Instances ()
9797
import Control.Concurrent.Async
98-
import Control.Lens (to, (^.))
98+
import Control.Lens (to, (^.), (.~))
9999
import Control.Monad.Extra (whenJust)
100100
import Data.Function ((&))
101101
import Data.IORef
@@ -133,6 +133,7 @@ import Test.Tasty.Ingredients.Rerun
133133
import Test.Tasty.QuickCheck
134134
import Text.Printf (printf)
135135
import Text.Regex.TDFA ((=~))
136+
import Language.LSP.Types.Lens (workspace, didChangeWatchedFiles)
136137

137138
data Log
138139
= LogGhcIde Ghcide.Log
@@ -421,16 +422,16 @@ diagnosticTests = testGroup "diagnostics"
421422
let contentA = T.unlines [ "module ModuleA where" ]
422423
_ <- createDoc "ModuleA.hs" "haskell" contentA
423424
expectDiagnostics [("ModuleB.hs", [])]
424-
, ignoreTestBecause "Flaky #2831" $ testSessionWait "add missing module (non workspace)" $ do
425-
-- need to canonicalize in Mac Os
426-
tmpDir <- liftIO $ canonicalizePath =<< getTemporaryDirectory
425+
, testCase "add missing module (non workspace)" $
426+
withTempDir $ \tmpDir -> runInDir'' lspTestCapsNoFileWatches tmpDir "." "." [] $ do
427427
let contentB = T.unlines
428428
[ "module ModuleB where"
429429
, "import ModuleA ()"
430430
]
431431
_ <- createDoc (tmpDir </> "ModuleB.hs") "haskell" contentB
432432
expectDiagnostics [(tmpDir </> "ModuleB.hs", [(DsError, (1, 7), "Could not find module")])]
433433
let contentA = T.unlines [ "module ModuleA where" ]
434+
-- liftIO $ writeFile (tmpDir </> "ModuleA.hs") $ T.unpack contentA
434435
_ <- createDoc (tmpDir </> "ModuleA.hs") "haskell" contentA
435436
expectDiagnostics [(tmpDir </> "ModuleB.hs", [])]
436437
, testSessionWait "cyclic module dependency" $ do
@@ -6306,7 +6307,18 @@ withLongTimeout = bracket_ (setEnv "LSP_TIMEOUT" "120" True) (unsetEnv "LSP_TIME
63066307

63076308
-- | Takes a directory as well as relative paths to where we should launch the executable as well as the session root.
63086309
runInDir' :: FilePath -> FilePath -> FilePath -> [String] -> Session a -> IO a
6309-
runInDir' dir startExeIn startSessionIn extraOptions s = do
6310+
runInDir' = runInDir'' lspTestCaps
6311+
6312+
runInDir''
6313+
:: ClientCapabilities
6314+
-> FilePath
6315+
-> FilePath
6316+
-> FilePath
6317+
-> [String]
6318+
-> Session b
6319+
-> IO b
6320+
runInDir'' lspCaps dir startExeIn startSessionIn extraOptions s = do
6321+
63106322
ghcideExe <- locateGhcideExecutable
63116323
let startDir = dir </> startExeIn
63126324
let projDir = dir </> startSessionIn
@@ -6326,10 +6338,11 @@ runInDir' dir startExeIn startSessionIn extraOptions s = do
63266338
-- Only sets HOME if it wasn't already set.
63276339
setEnv "HOME" "/homeless-shelter" False
63286340
conf <- getConfigFromEnv
6329-
runSessionWithConfig conf cmd lspTestCaps projDir $ do
6341+
runSessionWithConfig conf cmd lspCaps projDir $ do
63306342
configureCheckProject False
63316343
s
63326344

6345+
63336346
getConfigFromEnv :: IO SessionConfig
63346347
getConfigFromEnv = do
63356348
logColor <- fromMaybe True <$> checkEnv "LSP_TEST_LOG_COLOR"
@@ -6347,6 +6360,9 @@ getConfigFromEnv = do
63476360
lspTestCaps :: ClientCapabilities
63486361
lspTestCaps = fullCaps { _window = Just $ WindowClientCapabilities (Just True) Nothing Nothing }
63496362

6363+
lspTestCapsNoFileWatches :: ClientCapabilities
6364+
lspTestCapsNoFileWatches = lspTestCaps & workspace . Lens._Just . didChangeWatchedFiles .~ Nothing
6365+
63506366
openTestDataDoc :: FilePath -> Session TextDocumentIdentifier
63516367
openTestDataDoc path = do
63526368
source <- liftIO $ readFileUtf8 $ "test/data" </> path

0 commit comments

Comments
 (0)