ghcid-0.6.5: src/Test/Parser.hs
-- | Test the message parser
module Test.Parser(parserTests) where
import Test.Tasty
import Test.Tasty.HUnit
import Language.Haskell.Ghcid.Parser
import Language.Haskell.Ghcid.Types
parserTests :: TestTree
parserTests = testGroup "Parser tests"
[testParseShowModules
,testParseLoad
,testParseLoadSpans
]
testParseShowModules :: TestTree
testParseShowModules = testCase "Show Modules" $ parseShowModules
["Main ( src/Main.hs, interpreted )"
,"AI.Neural.WiscDigit ( src/AI/Neural/WiscDigit.hs, interpreted )"
] @?=
[("Main","src/Main.hs")
,("AI.Neural.WiscDigit","src/AI/Neural/WiscDigit.hs")
]
testParseLoad :: TestTree
testParseLoad = testCase "Load Parsing" $ parseLoad
["[1 of 2] Compiling GHCi ( GHCi.hs, interpreted )"
,"GHCi.hs:70:1: Parse error: naked expression at top level"
,"GHCi.hs:72:13:"
," No instance for (Num ([String] -> [String]))"
," arising from the literal `1'"
," Possible fix:"
," add an instance declaration for (Num ([String] -> [String]))"
," In the expression: 1"
," In an equation for `parseLoad': parseLoad = 1"
,"GHCi.hs:81:1: Warning: Defined but not used: `foo'"
,"C:\\GHCi.hs:82:1: warning: Defined but not used: \8216foo\8217" -- GHC 7.12 uses lowercase
,"src\\Haskell.hs:4:23:"
," Warning: {-# SOURCE #-} unnecessary in import of `Boot'"
,"src\\Boot.hs-boot:2:8:"
," File name does not match module name:"
," Saw: `BootX'"
," Expected: `Boot'"
] @?=
[Loading "GHCi" "GHCi.hs"
,Message {loadSeverity = Error, loadFile = "GHCi.hs", loadFilePos = (70,1), loadMessage = ["GHCi.hs:70:1: Parse error: naked expression at top level"]}
,Message {loadSeverity = Error, loadFile = "GHCi.hs", loadFilePos = (72,13), loadMessage = ["GHCi.hs:72:13:"," No instance for (Num ([String] -> [String]))"," arising from the literal `1'"," Possible fix:"," add an instance declaration for (Num ([String] -> [String]))"," In the expression: 1"," In an equation for `parseLoad': parseLoad = 1"]}
,Message {loadSeverity = Warning, loadFile = "GHCi.hs", loadFilePos = (81,1), loadMessage = ["GHCi.hs:81:1: Warning: Defined but not used: `foo'"]}
,Message {loadSeverity = Warning, loadFile = "C:\\GHCi.hs", loadFilePos = (82,1), loadMessage = ["C:\\GHCi.hs:82:1: warning: Defined but not used: \8216foo\8217"]}
,Message {loadSeverity = Warning, loadFile = "src\\Haskell.hs", loadFilePos = (4,23), loadMessage = ["src\\Haskell.hs:4:23:"," Warning: {-# SOURCE #-} unnecessary in import of `Boot'"]}
,Message {loadSeverity = Error, loadFile = "src\\Boot.hs-boot", loadFilePos = (2,8), loadMessage = ["src\\Boot.hs-boot:2:8:"," File name does not match module name:"," Saw: `BootX'"," Expected: `Boot'"]}
]
-- | Test when error messages include spans (-ferror-spans)
testParseLoadSpans :: TestTree
testParseLoadSpans = testCase "Load Parsing when -ferror-spans is enabled" $ parseLoad
["[1 of 2] Compiling GHCi ( GHCi.hs, interpreted )"
,"GHCi.hs:70:1-2: Parse error: naked expression at top level"
,"GHCi.hs:72:13-14:"
," No instance for (Num ([String] -> [String]))"
," arising from the literal `1'"
," Possible fix:"
," add an instance declaration for (Num ([String] -> [String]))"
," In the expression: 1"
," In an equation for `parseLoad': parseLoad = 1"
,"GHCi.hs:81:1-15: Warning: Defined but not used: `foo'"
,"C:\\GHCi.hs:82:1-17: warning: Defined but not used: \8216foo\8217" -- GHC 7.12 uses lowercase
,"src\\Haskell.hs:4:23-24:"
," Warning: {-# SOURCE #-} unnecessary in import of `Boot'"
,"src\\Boot.hs-boot:2:8-5:"
," File name does not match module name:"
," Saw: `BootX'"
," Expected: `Boot'"
,"/src/TrieSpec.hs:(192,7)-(193,76): Warning:"
," A do-notation statement discarded a result of type ‘[()]’"
] @?=
[Loading "GHCi" "GHCi.hs"
,Message {loadSeverity = Error, loadFile = "GHCi.hs", loadFilePos = (70,1), loadMessage = ["GHCi.hs:70:1-2: Parse error: naked expression at top level"]}
,Message {loadSeverity = Error, loadFile = "GHCi.hs", loadFilePos = (72,13), loadMessage = ["GHCi.hs:72:13-14:"," No instance for (Num ([String] -> [String]))"," arising from the literal `1'"," Possible fix:"," add an instance declaration for (Num ([String] -> [String]))"," In the expression: 1"," In an equation for `parseLoad': parseLoad = 1"]}
,Message {loadSeverity = Warning, loadFile = "GHCi.hs", loadFilePos = (81,1), loadMessage = ["GHCi.hs:81:1-15: Warning: Defined but not used: `foo'"]}
,Message {loadSeverity = Warning, loadFile = "C:\\GHCi.hs", loadFilePos = (82,1), loadMessage = ["C:\\GHCi.hs:82:1-17: warning: Defined but not used: \8216foo\8217"]}
,Message {loadSeverity = Warning, loadFile = "src\\Haskell.hs", loadFilePos = (4,23), loadMessage = ["src\\Haskell.hs:4:23-24:"," Warning: {-# SOURCE #-} unnecessary in import of `Boot'"]}
,Message {loadSeverity = Error, loadFile = "src\\Boot.hs-boot", loadFilePos = (2,8), loadMessage = ["src\\Boot.hs-boot:2:8-5:"," File name does not match module name:"," Saw: `BootX'"," Expected: `Boot'"]}
,Message {loadSeverity = Warning, loadFile = "/src/TrieSpec.hs", loadFilePos = (192,7), loadMessage = ["/src/TrieSpec.hs:(192,7)-(193,76): Warning:"," A do-notation statement discarded a result of type ‘[()]’"]}
]