{-# LANGUAGE TemplateHaskell, FlexibleContexts, TypeFamilies #-}
module Main where
import System.IO.Unsafe (unsafePerformIO)
import Data.Monoid
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2
import Test.HUnit
import Test.QuickCheck (Property, quickCheck, (==>))
import qualified Test.QuickCheck.Monadic as TQM
import Language.ANTLR4 hiding (tokenize, Regex(..))
import Text.ANTLR.Grammar
--import Language.ANTLR4.Regex
import Text.ANTLR.Parser (AST(..))
import qualified Text.ANTLR.LR as LR
import qualified Text.ANTLR.Lex.Tokenizer as T
import qualified Language.ANTLR4.G4 as P -- Parser
import qualified Optional as Opt
import qualified OptionalParser as Opt
import qualified EmptyP as E
import qualified Empty as E
test_optional =
Opt.glrParse Opt.isWS "a"
@?=
(LR.ResultAccept $ AST Opt.NT_r [NT Opt.NT_a] [AST Opt.NT_a [T Opt.T_1] [Leaf (Token Opt.T_1 Opt.V_1 1)]])
test_optional2 =
case Opt.glrParse Opt.isWS "a a e b c d" of
LR.ResultAccept ast -> Opt.ast2r ast @?= "accept"
err -> error $ show err
test_optional3 =
case Opt.glrParse Opt.isWS "a e b b b c c d" of
LR.ResultAccept ast -> Opt.ast2r ast @?= "accept"
err -> error $ show err
test_optional4 =
case Opt.glrParse Opt.isWS "a" of
LR.ResultAccept ast -> Opt.ast2r ast @?= "reject"
err -> error $ show err
test_e v =
case v of
LR.ResultAccept ast -> E.ast2emp ast @?= ()
err -> error $ show err
test_e_fail v =
case v of
LR.ResultAccept ast -> assertFailure $ show ast
err -> () @?= ()
test_empty = test_e (E.slrParse (E.tokenize "a"))
test_empty2 = test_e (E.slrParse (E.tokenize "f"))
test_empty3 = test_e (E.slrParse (E.tokenize "ac"))
test_empty4 = test_e (E.slrParse (E.tokenize "fd"))
test_empty5 = test_e_fail (E.slrParse (E.tokenize "fc"))
test_empty6 = test_e_fail (E.slrParse (E.tokenize "ad"))
main :: IO ()
main = defaultMainWithOpts
[ testCase "test_optional" test_optional
, testCase "test_optional2" test_optional2
, testCase "test_optional3" test_optional3
, testCase "test_optional4" test_optional4
, testCase "test_empty" test_empty
, testCase "test_empty2" test_empty2
, testCase "test_empty3" test_empty3
, testCase "test_empty4" test_empty4
, testCase "test_empty5" test_empty5
, testCase "test_empty6" test_empty6
] mempty