@@ -7,8 +7,11 @@
77
88module Main (main) where
99
10−import Control.Monad (void)
10+import Control.Applicative.Combinators
11+import Control.Monad
1112import Control.Monad.IO.Class (liftIO)
13+import Data.Char (toLower)
14+import Data.Foldable
1215import qualified Data.Text as T
1316import Development.IDE.Test
1417import Development.IDE.Test.Runfiles
@@ -16,6 +19,7 @@ import Language.Haskell.LSP.Test
1619import Language.Haskell.LSP.Types
1720import Language.Haskell.LSP.Types.Capabilities
1821import System.Environment.Blank (setEnv)
22+import System.FilePath
1923import System.IO.Extra
2024import System.Directory
2125import Test.Tasty
@@ -329,6 +333,40 @@ diagnosticTests = testGroup "diagnostics"
329333 ]
330334 )
331335 ]
336+ , testSessionWait "lower-case drive" $ do
337+ let aContent = T.unlines
338+ [ "module A.A where"
339+ , "import A.B ()"
340+ ]
341+ bContent = T.unlines
342+ [ "{-# OPTIONS_GHC -Wall #-}"
343+ , "module A.B where"
344+ , "import Data.List"
345+ ]
346+ uriB <- getDocUri "A/B.hs"
347+ Just pathB <- pure $ uriToFilePath uriB
348+ uriB <- pure $
349+ let (drive, suffix) = splitDrive pathB
350+ in filePathToUri (joinDrive (map toLower drive ) suffix)
351+ liftIO $ createDirectoryIfMissing True (takeDirectory pathB)
352+ liftIO $ writeFileUTF8 pathB $ T.unpack bContent
353+ uriA <- getDocUri "A/A.hs"
354+ Just pathA <- pure $ uriToFilePath uriA
355+ uriA <- pure $
356+ let (drive, suffix) = splitDrive pathA
357+ in filePathToUri (joinDrive (map toLower drive ) suffix)
358+ let itemA = TextDocumentItem uriA "haskell" 0 aContent
359+ let a = TextDocumentIdentifier uriA
360+ sendNotification TextDocumentDidOpen (DidOpenTextDocumentParams itemA)
361+ diagsNot <- skipManyTill anyMessage message :: Session PublishDiagnosticsNotification
362+ let PublishDiagnosticsParams fileUri diags = _params (diagsNot :: PublishDiagnosticsNotification)
363+ -- Check that if we put a lower-case drive in for A.A
364+ -- the diagnostics for A.B will also be lower-case.
365+ liftIO $ fileUri @?= uriB
366+ let msg = _message (head (toList diags) :: Diagnostic)
367+ liftIO $ unless ("redundant" `T.isInfixOf` msg) $
368+ assertFailure ("Expected redundant import but got " <> T.unpack msg)
369+ closeDoc a
332370 ]
333371
334372codeActionTests :: TestTree