packages feed

antlr-haskell-0.1.0.1: test/coreg4/Main.hs

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 qualified G4Parser as G4P
import qualified G4 as G4
import Hello
import HelloParser
import Text.ANTLR.Parser (AST(..))
import qualified Text.ANTLR.LR as LR
import Language.ANTLR4.Boot.Syntax (Regex(..))
--import Language.ANTLR4.Regex (parseRegex)

import qualified Language.ANTLR4.G4 as P -- Parser

import qualified G4Fast as Fast

test_g4_basic_type_check = do
  let _ = G4.g4BasicGrammar
  1 @?= 1

hello_g4_test_type_check = do
  let _ = helloGrammar
  1 @?= 1

{-
regex_test = do
  parseRegex "[ab]* 'a' 'b' 'b'"
  @?= Right
  (Concat
    [ Kleene $ CharSet "ab"
    , Literal "a"
    , Literal "b"
    , Literal "b"
    ])
-}

_1 = G4.lookupToken "1"

-- TODO: implement 'read' instance for TokenValue type so that I don't have to
-- hardcode the name for literal terminals (e.g. '1' == T_0 below)
test_g4 =
  G4P.slrParse (G4P.tokenize "1")
  @?=
  LR.ResultAccept (AST G4.NT_exp [T G4.T_0] [Leaf _1])

test_hello =
  slrParse (tokenize "hello Matt")
  @?=
  (LR.ResultAccept $
        AST NT_r [T T_0, T T_WS, T T_ID]
        [ Leaf (Token T_0 V_0 1)
        , Leaf (Token T_WS (V_WS " ") 1)
        , Leaf (Token T_ID (V_ID "Matt") 4)
        ]
  )

test_hello_allstar =
  allstarParse (const False) ("hello Matt")
  @?=
  Right (AST NT_r [T T_0, T T_WS, T T_ID] [Leaf (Token T_0 V_0 5),Leaf (Token T_WS (V_WS " ") 1),Leaf
  (Token T_ID (V_ID "Matt") 4)])
  --Right (AST NT_r [] [])

testFastGLR =
  Fast.glrParseFast (const False) "3"
  @?=
  G4P.glrParse (const False) "3"

main :: IO ()
main = defaultMainWithOpts
  [ testCase "g4_basic_compilation_type_check" test_g4_basic_type_check
  , testCase "hello_parse_type_check" hello_g4_test_type_check
--  , testCase "regex_test" regex_test
  , testCase "test_g4" test_g4
  , testCase "test_hello" test_hello
  , testCase "test_hello_allstar" test_hello_allstar
  , testCase "testFastGLR" testFastGLR
  ] mempty