1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
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"
|