33
44module WatchedFileTests (tests ) where
55
6- import Config (testWithDummyPluginEmpty' )
6+ import Config (mkIdeTestFs ,
7+ testWithDummyPlugin' ,
8+ testWithDummyPluginEmpty' )
79import Control.Applicative.Combinators
810import Control.Monad.IO.Class (liftIO )
911import qualified Data.Aeson as A
1012import qualified Data.Text as T
13+ import qualified Data.Text.IO as T
1114import Development.IDE.Test (expectDiagnostics )
1215import Language.LSP.Protocol.Message
1316import Language.LSP.Protocol.Types hiding
@@ -18,6 +21,7 @@ import Language.LSP.Protocol.Types hiding
1821import Language.LSP.Test
1922import System.Directory
2023import System.FilePath
24+ import Test.Hls.FileSystem
2125import Test.Tasty
2226import Test.Tasty.HUnit
2327
@@ -69,6 +73,17 @@ tests = testGroup "watched files"
6973 sendNotification SMethod_WorkspaceDidChangeWatchedFiles $ DidChangeWatchedFilesParams
7074 [FileEvent (filePathToUri $ sessionDir </> " B.hs" ) FileChangeType_Changed ]
7175 expectDiagnostics [(" A.hs" , [(DiagnosticSeverity_Error , (3 , 4 ), " Couldn't match expected type '()' with actual type 'Int'" , Just " GHC-83865" )])]
76+ , testWithDummyPlugin' " reload HLS after .cabal file changes" (mkIdeTestFs [copyDir (" watched-files" </> " reload" )]) $ \ sessionDir -> do
77+ let hsFile = " src" </> " MyLib.hs"
78+ _ <- openDoc hsFile " haskell"
79+ expectDiagnostics [(hsFile, [(DiagnosticSeverity_Error , (2 , 7 ), " Could not load module \8216Data.List.Split\8217" , Nothing )])]
80+ let cabalFile = " reload.cabal"
81+ cabalContent <- liftIO $ T. readFile cabalFile
82+ let fix = T. replace " build-depends: base" " build-depends: base, split"
83+ liftIO $ T. writeFile cabalFile (fix cabalContent)
84+ sendNotification SMethod_WorkspaceDidChangeWatchedFiles $ DidChangeWatchedFilesParams
85+ [ FileEvent (filePathToUri $ sessionDir </> cabalFile) FileChangeType_Changed ]
86+ expectDiagnostics [(hsFile, [] )]
7287 ]
7388 ]
7489
0 commit comments