parsec-3.1.18.0: test/Features/Feature150.hs
module Features.Feature150 ( main ) where
import Control.Applicative ((*>))
import Control.Monad.Identity
import Test.Tasty
import Test.Tasty.HUnit
import Text.Parsec
main :: TestTree
main =
testCase "string' (#150)" $ do
parseString (boot <|> bool) "boot" @?= "boot"
parseFail (boot <|> bool) "bool" @?= "no parse"
parseFail (boot <|> bool) "booz" @?= "no parse"
parseString (boot' <|> bool') "boot" @?= "boot"
parseString (boot' <|> bool') "bool" @?= "bool"
parseFail (boot' <|> bool') "booz" @?= "no parse"
parseString (boot' <|> bool' <|> char 'b' *> many anyChar) "boomerang" @?= "oomerang"
where
boot :: ParsecT String () Identity String
boot = string "boot"
bool :: ParsecT String () Identity String
bool = string "bool"
boot' :: ParsecT String () Identity String
boot' = string' "boot"
bool' :: ParsecT String () Identity String
bool' = string' "bool"
parseString :: ParsecT String () Identity String -> String -> String
parseString p input =
case parse p "Example" input of
Left{} -> error "Parse failure"
Right str -> str
parseFail :: ParsecT String () Identity String -> String -> String
parseFail p input =
case parse p "Example" input of
Left{} -> "no parse"
Right _ -> error "Parsed but shouldn't"