Earley-0.11.0.1: tests/Optional.hs
{-# LANGUAGE RecursiveDo, ScopedTypeVariables #-}
module Optional where
import Control.Applicative
import Test.Tasty
import Test.Tasty.HUnit as HU
import Text.Earley
tests :: TestTree
tests = testGroup "Optional"
[ HU.testCase "Nothing" $
fullParses (parser $ return optional_) "b"
@?= (,) [(Nothing, 'b')] Report {position = 1, expected = "", unconsumed = ""}
, HU.testCase "Just" $
fullParses (parser $ return optional_) "ab"
@?= (,) [(Just 'a', 'b')] Report {position = 2, expected = "", unconsumed = ""}
, HU.testCase "Using rules Nothing" $
fullParses (parser optionalRule) "b"
@?= (,) [(Nothing, 'b')] Report {position = 1, expected = "", unconsumed = ""}
, HU.testCase "Using rules Just" $
fullParses (parser optionalRule) "ab"
@?= (,) [(Just 'a', 'b')] Report {position = 2, expected = "", unconsumed = ""}
, HU.testCase "Without continuation Nothing" $
fullParses (parser $ return $ optional $ namedToken 'a') ""
@?= (,) [Nothing] Report {position = 0, expected = "a", unconsumed = ""}
, HU.testCase "Without continuation Just" $
fullParses (parser $ return $ optional $ namedToken 'a') "a"
@?= (,) [Just 'a'] Report {position = 1, expected = "", unconsumed = ""}
, HU.testCase "Using rules without continuation Nothing" $
fullParses (parser $ rule $ optional $ namedToken 'a') ""
@?= (,) [Nothing] Report {position = 0, expected = "a", unconsumed = ""}
, HU.testCase "Using rules without continuation Just" $
fullParses (parser $ rule $ optional $ namedToken 'a') "a"
@?= (,) [Just 'a'] Report {position = 1, expected = "", unconsumed = ""}
]
optional_ :: Prod r Char Char (Maybe Char, Char)
optional_ = (,) <$> optional (namedToken 'a') <*> namedToken 'b'
optionalRule :: Grammar r (Prod r Char Char (Maybe Char, Char))
optionalRule = mdo
test <- rule $ (,) <$> optional (namedToken 'a') <*> namedToken 'b'
return test