Add test for #9.
authorAntoine Latter <aslatter@gmail.com>
Thu, 25 Sep 2014 00:22:35 +0000 (19:22 -0500)
committerAntoine Latter <aslatter@gmail.com>
Thu, 25 Sep 2014 00:22:35 +0000 (19:22 -0500)
Also move test for #2 to have a more regular structure for tests aimed at
specific bugs.

parsec.cabal
test/Bugs.hs [new file with mode: 0644]
test/Bugs/Bug2.hs [moved from test/Tokens.hs with 73% similarity]
test/Bugs/Bug9.hs [new file with mode: 0644]
test/Main.hs

index bc1c9ea..ecbf83d 100644 (file)
@@ -69,7 +69,9 @@ Test-Suite tests
     hs-source-dirs:  test
     main-is:     Main.hs
     other-modules:
-                 Tokens
+                 Bugs,
+                 Bugs.Bug2,
+                 Bugs.Bug9
     build-depends:
        base,
        parsec,
diff --git a/test/Bugs.hs b/test/Bugs.hs
new file mode 100644 (file)
index 0000000..fffc627
--- /dev/null
@@ -0,0 +1,16 @@
+
+module Bugs
+       ( bugs
+       ) where
+
+import Test.HUnit hiding ( Test )
+import Test.Framework
+import Test.Framework.Providers.HUnit
+
+import qualified Bugs.Bug2
+import qualified Bugs.Bug9
+
+bugs :: [Test]
+bugs = [ Bugs.Bug2.main
+       , Bugs.Bug9.main
+       ]
similarity index 73%
rename from test/Tokens.hs
rename to test/Bugs/Bug2.hs
index 3a62625..963e0dc 100644 (file)
@@ -1,6 +1,6 @@
 
-module Tokens
-       ( tokensTests
+module Bugs.Bug2
+       ( main
        ) where
 
 import Test.HUnit hiding ( Test )
@@ -12,10 +12,9 @@ import Text.Parsec.String
 import qualified Text.Parsec.Token as P
 import Text.Parsec.Language (haskellDef)
 
-tokensTests :: [Test]
-tokensTests =
-  return $
-  testCase "Control Char Parsing" $
+main :: Test
+main =
+  testCase "Control Char Parsing (#2)" $
   parseString "\"test\\^Bstring\"" @?= "test\^Bstring"
 
  where
diff --git a/test/Bugs/Bug9.hs b/test/Bugs/Bug9.hs
new file mode 100644 (file)
index 0000000..ad0291a
--- /dev/null
@@ -0,0 +1,49 @@
+
+module Bugs.Bug9 ( main ) where
+
+import Control.Applicative ((<*), (<$>), (<$))
+import Text.Parsec
+import Text.Parsec.Language (haskellStyle)
+import Text.Parsec.String (Parser)
+import Text.Parsec.Error ( errorMessages, messageString )
+import Text.Parsec.Expr
+import qualified Text.Parsec.Token as P
+
+import Test.HUnit hiding ( Test )
+import Test.Framework
+import Test.Framework.Providers.HUnit
+
+data Expr = Const Integer | Op Expr Expr
+  deriving Show
+
+main :: Test
+main =
+  testCase "Tracing of current position in error message (#9)"
+  $ result @?= ["unexpected '>'","expecting operator or end of input"]
+
+  where
+    result :: [String]
+    result =
+      case parse parseTopLevel "" "4 >> 5" of
+        Left err ->
+          drop 1 $ lines $ show err
+        Right{} -> []
+
+-- Syntax analaysis
+
+parseTopLevel :: Parser Expr
+parseTopLevel = parseExpr <* eof
+
+parseExpr :: Parser Expr
+parseExpr = buildExpressionParser table (Const <$> integer)
+  where
+        table = [[ Infix (Op <$ reserved ">>>") AssocLeft ]]
+
+        -- Lexical analysis
+
+        lexer = P.makeTokenParser haskellStyle { P.reservedOpNames = [">>>"] }
+
+        integer    = P.integer    lexer
+        reserved   = P.reserved   lexer
+        reservedOp = P.reservedOp lexer
+
index 864f077..77584e9 100644 (file)
@@ -1,10 +1,10 @@
 
 import Test.Framework
 
-import Tokens ( tokensTests )
+import Bugs ( bugs )
 
 main :: IO ()
 main = do
   defaultMain
-    [ testGroup "Text.Parsec.Tokens" tokensTests
+    [ testGroup "Bugs" bugs
     ]
\ No newline at end of file