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 ()
getDocumentSymbols doc
-- should now timeout
skipManyTill anyMessage message :: Session ApplyWorkspaceEditRequest
- in sesh `shouldThrow` (== Timeout)
+ isTimeout (Timeout _) = True
+ isTimeout _ = False
+ in sesh `shouldThrow` isTimeout
describe "SessionException" $ do
it "don't throw when no time out" $ runSessionWithConfig (def {messageTimeout = 5}) "hie" fullCaps "test/data/renamePass" $ do
loggingNotification
- liftIO $ threadDelay 10
+ liftIO $ threadDelay $ 10 * 1000000
_ <- openDoc "Desktop/simple.hs" "haskell"
return ()
selector _ = False
sesh = do
doc <- openDoc "Desktop/simple.hs" "haskell"
- sendRequest TextDocumentDocumentSymbol (DocumentSymbolParams doc)
+ sendRequest TextDocumentDocumentSymbol (DocumentSymbolParams doc Nothing)
skipMany anyNotification
message :: Session RenameResponse -- the wrong type
in runSession "hie" fullCaps "test/data/renamePass" sesh
let args = toJSON $ AOP (doc ^. uri)
(Position 1 14)
"Redundant bracket"
- reqParams = ExecuteCommandParams "applyrefact:applyOne" (Just (List [args]))
+ reqParams = ExecuteCommandParams "applyrefact:applyOne" (Just (List [args])) Nothing
request_ WorkspaceExecuteCommand reqParams
editReq <- message :: Session ApplyWorkspaceEditRequest
let args = toJSON $ AOP (doc ^. uri)
(Position 1 14)
"Redundant bracket"
- reqParams = ExecuteCommandParams "applyrefact:applyOne" (Just (List [args]))
+ reqParams = ExecuteCommandParams "applyrefact:applyOne" (Just (List [args])) Nothing
request_ WorkspaceExecuteCommand reqParams
contents <- getDocumentEdit doc
liftIO $ contents `shouldBe` "main :: IO Int\nmain = return 42\n"
noDiagnostics
noDiagnostics
- item:_ <- getCompletions doc (Position 5 5)
+ comps <- getCompletions doc (Position 5 5)
+ let item = head (filter (\x -> x ^. label == "interactWithUser") comps)
liftIO $ do
item ^. label `shouldBe` "interactWithUser"
item ^. kind `shouldBe` Just CiFunction
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 15 19)] -- Type definition
+ liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 10 0 14 19)] -- Type definition
describe "waitForDiagnosticsSource" $
it "works" $ runSession "hie" fullCaps "test/data" $ do
openDoc "Error.hs" "haskell"
- [diag] <- waitForDiagnosticsSource "ghcmod"
+ [diag] <- waitForDiagnosticsSource "bios"
liftIO $ do
diag ^. severity `shouldBe` Just DsError
- diag ^. source `shouldBe` Just "ghcmod"
+ diag ^. source `shouldBe` Just "bios"
- describe "rename" $
- it "works" $ runSession "hie" fullCaps "test/data" $ do
- doc <- openDoc "Rename.hs" "haskell"
- rename doc (Position 1 0) "bar"
- documentContents doc >>= liftIO . shouldBe "main = bar\nbar = return 42\n"
+ describe "rename" $ do
+ it "works" $ pendingWith "HaRe not in hie-bios yet"
+ it "works on javascript" $
+ runSession "javascript-typescript-stdio" fullCaps "test/data/javascriptPass" $ do
+ doc <- openDoc "test.js" "javascript"
+ rename doc (Position 2 11) "bar"
+ documentContents doc >>= liftIO . (`shouldContain` "function bar()") . T.unpack
+
+ -- runSession "hie" fullCaps "test/data" $ do
+ -- doc <- openDoc "Rename.hs" "haskell"
+ -- rename doc (Position 1 0) "bar"
+ -- documentContents doc >>= liftIO . shouldBe "main = bar\nbar = return 42\n"
describe "getHover" $
it "works" $ runSession "hie" fullCaps "test/data/renamePass" $ 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
+
+ describe "ignoreLogNotifications" $
+ it "works" $
+ runSessionWithConfig (defaultConfig { ignoreLogNotifications = True }) "hie" fullCaps "test/data" $ do
+ openDoc "Format.hs" "haskell"
+ void publishDiagnosticsNotification
+
mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
didChangeCaps :: ClientCapabilities