Add "rename suggestion" test
[lsp-test.git] / test / Test.hs
index 0fc2f53f73d2511b480a83b7ef770e83ba9acba9..81b5c7b131707c6180fb3ab5c2d39327409ea86b 100644 (file)
@@ -62,8 +62,12 @@ main = hspec $ do
 
       it "further timeout messages are ignored" $ runSession "hie" fullCaps "test/data/renamePass" $ do
         doc <- openDoc "Desktop/simple.hs" "haskell"
+        -- warm up the cache
+        getDocumentSymbols doc
+        -- shouldn't timeout
         withTimeout 3 $ getDocumentSymbols doc
-        liftIO $ threadDelay 5000000
+        -- longer than the original timeout
+        liftIO $ threadDelay (5 * 10^6)
         -- shouldn't throw an exception
         getDocumentSymbols doc
         return ()
@@ -259,12 +263,12 @@ main = hspec $ do
       defs <- getDefinitions doc pos
       liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 28 0 28 7)]
 
-  -- describe "getTypeDefinitions" $
-  --   it "works" $ runSession "hie" fullCaps "test/data/renamePass" $ do
-  --     doc <- openDoc "Desktop/simple.hs" "haskell"
-  --     let pos = Position 20 23  -- Quit value
-  --     defs <- getTypeDefinitions doc pos
-  --     liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 10 5 10 12)]  -- Type definition
+  describe "getTypeDefinitions" $
+    it "works" $ runSession "hie" fullCaps "test/data/renamePass" $ do
+      doc <- openDoc "Desktop/simple.hs" "haskell"
+      let pos = Position 20 23  -- Quit value
+      defs <- getTypeDefinitions doc pos
+      liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 10 0 14 19)]  -- Type definition
 
   describe "waitForDiagnosticsSource" $
     it "works" $ runSession "hie" fullCaps "test/data" $ do
@@ -280,6 +284,18 @@ main = hspec $ do
       rename doc (Position 1 0) "bar"
       documentContents doc >>= liftIO . shouldBe "main = bar\nbar = return 42\n"
 
+  describe "rename suggestion" $
+    it "works" $ runSession "hie" fullCaps "test/data" $ do
+      doc <- openDoc "RenameSuggestion.hs" "haskell"
+
+      _ <- waitForDiagnosticsSource "ghcmod"
+
+      CACodeAction cmd:_ <- getAllCodeActions doc
+      executeCodeAction cmd
+
+      x:_ <- T.lines <$> documentContents doc
+      liftIO $ x `shouldBe` "main = putStrLn \"hello\""
+
   describe "getHover" $
     it "works" $ runSession "hie" fullCaps "test/data/renamePass" $ do
       doc <- openDoc "Desktop/simple.hs" "haskell"
@@ -319,6 +335,13 @@ main = hspec $ do
               documentContents doc >>= liftIO . print
       in sesh `shouldThrow` anyException
 
+  describe "satisfy" $
+    it "works" $ runSession "hie" fullCaps "test/data" $ do
+      openDoc "Format.hs" "haskell"
+      let pred (NotLogMessage _) = True
+          pred _ = False
+      void $ satisfy pred
+
 mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
 
 didChangeCaps :: ClientCapabilities