Skip to content

Commit 439c4be

Browse files
committed
test: Overhaul regex tests for change-type-signature-plugin
1 parent f5ae504 commit 439c4be

File tree

13 files changed

+73
-89
lines changed

13 files changed

+73
-89
lines changed

plugins/hls-change-type-signature-plugin/src/Ide/Plugin/ChangeTypeSignature.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Control.Monad.Trans.Except (ExceptT (..))
1515
import Control.Monad.Trans.Maybe (MaybeT(..), hoistMaybe)
1616
import Data.Foldable (asum)
1717
import qualified Data.Map as Map
18-
import Data.Maybe (mapMaybe, catMaybes)
18+
import Data.Maybe (catMaybes)
1919
import Data.Text (Text)
2020
import qualified Data.Text as T
2121
import Development.IDE (realSrcSpanToRange,
@@ -130,7 +130,6 @@ generateAction recorder plId uri decls fileDiag = do
130130
pure $
131131
changeSigToCodeAction plId uri <$> changeSig
132132

133-
134133
-- | Convert a diagnostic into a ChangeSignature and add the proper SrcSpan
135134
diagnosticToChangeSig
136135
:: Recorder (WithPriority Log)
@@ -177,6 +176,7 @@ findSolverReport _ = Nothing
177176
-- TODO: Make this a prism?
178177
findMismatchMessage :: TcSolverReportMsg -> Maybe MismatchMsg
179178
findMismatchMessage (Mismatch m _ _ _) = Just m
179+
findMismatchMessage (CannotUnifyVariable m _) = Just m
180180
findMismatchMessage _ = Nothing
181181

182182
-- TODO: Make this a prism?

plugins/hls-change-type-signature-plugin/test/Main.hs

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Data.Either (rights)
55
import Data.Text (Text)
66
import qualified Data.Text as T
77
import qualified Data.Text.IO as TIO
8-
import Ide.Plugin.ChangeTypeSignature (errorMessageRegexes)
8+
import Ide.Plugin.ChangeTypeSignature (Log(..), errorMessageRegexes)
99
import qualified Ide.Plugin.ChangeTypeSignature as ChangeTypeSignature
1010
import System.FilePath ((<.>), (</>))
1111
import Test.Hls (CodeAction (..), Command,
@@ -22,18 +22,20 @@ import Test.Hls (CodeAction (..), Command,
2222
goldenWithHaskellDoc,
2323
knownBrokenForGhcVersions,
2424
liftIO,
25-
mkPluginTestDescriptor',
2625
openDoc, runSessionWithServer,
2726
testCase, testGroup, toEither,
2827
type (|?), waitForBuildQueue,
29-
waitForDiagnostics, (@?=))
28+
waitForDiagnostics, (@?=), mkPluginTestDescriptor)
3029
import Text.Regex.TDFA ((=~))
3130

3231
main :: IO ()
3332
main = defaultTestRunner test
3433

35-
changeTypeSignaturePlugin :: PluginTestDescriptor ()
36-
changeTypeSignaturePlugin = mkPluginTestDescriptor' ChangeTypeSignature.descriptor "changeTypeSignature"
34+
changeTypeSignaturePlugin :: PluginTestDescriptor Log
35+
changeTypeSignaturePlugin =
36+
mkPluginTestDescriptor
37+
ChangeTypeSignature.descriptor
38+
"changeTypeSignature"
3739

3840
test :: TestTree
3941
test = testGroup "changeTypeSignature" [
@@ -50,33 +52,16 @@ test = testGroup "changeTypeSignature" [
5052

5153
testRegexes :: TestTree
5254
testRegexes = testGroup "Regex Testing" [
53-
testRegexOne
54-
, testRegexTwo
55-
, testRegex921One
56-
]
57-
58-
testRegexOne :: TestTree
59-
testRegexOne = testGroup "Regex One" [
60-
regexTest "error1.txt" regex True
61-
, regexTest "error2.txt" regex True
62-
, regexTest "error3.txt" regex False
63-
, regexTest "error4.txt" regex True
64-
, regexTest "error5.txt" regex True
55+
regexTest "TExpectedActual.txt" regex True
56+
, regexTest "TLocalBinding.txt" regex True
57+
, regexTest "TLocalBindingShadow1.txt" regex True
58+
, regexTest "TLocalBindingShadow2.txt" regex True
59+
, regexTest "TRigidType.txt" regex False
60+
, regexTest "TRigidType2.txt" regex True
6561
]
6662
where
6763
regex = errorMessageRegexes !! 0
6864

69-
testRegexTwo :: TestTree
70-
testRegexTwo = testGroup "Regex Two" [
71-
regexTest "error1.txt" regex False
72-
, regexTest "error2.txt" regex False
73-
, regexTest "error3.txt" regex True
74-
, regexTest "error4.txt" regex False
75-
, regexTest "error5.txt" regex False
76-
]
77-
where
78-
regex = errorMessageRegexes !! 1
79-
8065
-- test ghc-9.2 error message regex
8166
testRegex921One :: TestTree
8267
testRegex921One = testGroup "Regex One" [
@@ -85,7 +70,7 @@ testRegex921One = testGroup "Regex One" [
8570
, regexTest "ghc921-error3.txt" regex True
8671
]
8772
where
88-
regex = errorMessageRegexes !! 2
73+
regex = errorMessageRegexes !! 0
8974

9075
testDataDir :: FilePath
9176
testDataDir = "plugins" </> "hls-change-type-signature-plugin" </> "test" </> "testdata"
@@ -123,8 +108,8 @@ regexTest :: FilePath -> Text -> Bool -> TestTree
123108
regexTest fp regex shouldPass = testCase fp $ do
124109
msg <- TIO.readFile (testDataDir </> fp)
125110
case (msg =~ regex :: (Text, Text, Text, [Text]), shouldPass) of
126-
((_, _, _, [_, _, _, _]), True) -> pure ()
127-
((_, _, _, [_, _, _, _]), False) -> assertFailure $ "Unexpected match: " <> fp <> " with " <> T.unpack regex
111+
((_, _, _, [_]), True) -> pure ()
112+
((_, _, _, [_]), False) -> assertFailure $ "Unexpected match: " <> fp <> " with " <> T.unpack regex
128113
(_, True) -> assertFailure $ "Failed to match: " <> fp <> " with " <> T.unpack regex
129114
(_, False) -> pure ()
130115

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
In the expression: go
2+
In an equation for ‘fullSig’:
3+
fullSig
4+
= go
5+
where
6+
go = head . reverse
7+
8+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Probable cause: ‘forM’ is applied to too few arguments
2+
In the expression: forM
3+
In an equation for ‘test’: test = forM
4+
In the expression:
5+
let
6+
test :: Int -> Int
7+
test = forM
8+
in x + 1
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Probable cause: ‘forM’ is applied to too few arguments
2+
In the expression: forM
3+
In an equation for ‘test’: test = forM
4+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Probable cause: ‘forM’ is applied to too few arguments
2+
In the expression: forM
3+
In an equation for ‘test’: test = forM
4+
In the expression:
5+
let
6+
test :: Int -> Int
7+
test = forM
8+
in test x [GHC-83865]
9+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Expected: a -> [[Int]]
2+
Actual: [[Int]] -> [[Int]]
3+
‘a’ is a rigid type variable bound by
4+
the type signature for:
5+
test :: forall a. a -> Int
6+
at /home/sgillespie/dev/haskell/haskell-language-server/plugins/hls-change-type-signature-plugin/test/testdata/TRigidType.hs:3:1-16
7+
In the second argument of ‘(.)’, namely ‘reverse’
8+
In the second argument of ‘(.)’, namely ‘head . reverse’
9+
In the expression: go . head . reverse
10+
Relevant bindings include
11+
test :: a -> Int
12+
(bound at /home/sgillespie/dev/haskell/haskell-language-server/plugins/hls-change-type-signature-plugin/test/testdata/TRigidType.hs:4:1) [GHC-25897]
13+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Couldn't match type ‘a’ with ‘[Int]’
2+
Expected: a -> Int
3+
Actual: [Int] -> Int
4+
‘a’ is a rigid type variable bound by
5+
the type signature for:
6+
test :: forall a. a -> Int
7+
at /home/sgillespie/dev/haskell/haskell-language-server/plugins/hls-change-type-signature-plugin/test/testdata/TRigidType2.hs:3:1-16
8+
In the expression: head
9+
In an equation for ‘test’: test = head
10+
Relevant bindings include
11+
test :: a -> Int
12+
(bound at /home/sgillespie/dev/haskell/haskell-language-server/plugins/hls-change-type-signature-plugin/test/testdata/TRigidType2.hs:4:1) [GHC-25897]
13+

plugins/hls-change-type-signature-plugin/test/testdata/error1.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

plugins/hls-change-type-signature-plugin/test/testdata/error2.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)