Add test for #6.
authorAntoine Latter <aslatter@gmail.com>
Thu, 25 Sep 2014 01:10:39 +0000 (20:10 -0500)
committerAntoine Latter <aslatter@gmail.com>
Thu, 25 Sep 2014 01:24:45 +0000 (20:24 -0500)
parsec.cabal
test/Bugs.hs
test/Bugs/Bug6.hs [new file with mode: 0644]
test/Bugs/Bug9.hs
test/Util.hs [new file with mode: 0644]

index 9aefe88..17739a6 100644 (file)
@@ -71,7 +71,9 @@ Test-Suite tests
     other-modules:
                  Bugs,
                  Bugs.Bug2,
-                 Bugs.Bug9
+                 Bugs.Bug6,
+                 Bugs.Bug9,
+                 Util
     build-depends:
        base,
        parsec,
index fffc627..f13b78b 100644 (file)
@@ -8,9 +8,11 @@ import Test.Framework
 import Test.Framework.Providers.HUnit
 
 import qualified Bugs.Bug2
+import qualified Bugs.Bug6
 import qualified Bugs.Bug9
 
 bugs :: [Test]
 bugs = [ Bugs.Bug2.main
+       , Bugs.Bug6.main
        , Bugs.Bug9.main
        ]
diff --git a/test/Bugs/Bug6.hs b/test/Bugs/Bug6.hs
new file mode 100644 (file)
index 0000000..6b40a24
--- /dev/null
@@ -0,0 +1,27 @@
+
+module Bugs.Bug6
+       ( main
+       ) where
+
+import Test.HUnit hiding ( Test )
+import Test.Framework
+import Test.Framework.Providers.HUnit
+
+import Text.Parsec
+import Text.Parsec.String
+import qualified Text.Parsec.Token as P
+import Text.Parsec.Language (haskellDef)
+
+import Util
+
+main :: Test
+main =
+  testCase "Look-ahead preserving error location (#6)" $
+  parseErrors variable "return" @?= ["'return' is a reserved keyword"]
+
+variable :: Parser String
+variable = do
+      x <- lookAhead (many1 letter)
+      if x == "return"
+       then fail "'return' is a reserved keyword"
+       else string x
index ad0291a..6ae034a 100644 (file)
@@ -13,6 +13,8 @@ import Test.HUnit hiding ( Test )
 import Test.Framework
 import Test.Framework.Providers.HUnit
 
+import Util
+
 data Expr = Const Integer | Op Expr Expr
   deriving Show
 
@@ -23,11 +25,7 @@ main =
 
   where
     result :: [String]
-    result =
-      case parse parseTopLevel "" "4 >> 5" of
-        Left err ->
-          drop 1 $ lines $ show err
-        Right{} -> []
+    result = parseErrors parseTopLevel "4 >> 5"
 
 -- Syntax analaysis
 
diff --git a/test/Util.hs b/test/Util.hs
new file mode 100644 (file)
index 0000000..ce92357
--- /dev/null
@@ -0,0 +1,14 @@
+
+module Util where
+
+import Text.Parsec
+import Text.Parsec.String ( Parser )
+
+-- | Returns the error messages associated
+-- with a failed parse.
+parseErrors :: Parser a -> String -> [String]
+parseErrors p input =
+  case parse p "" input of
+    Left err ->
+      drop 1 $ lines $ show err
+    Right{} -> []