shakespeare-1.0.1.1: test/ShakespeareBaseTest.hs
module ShakespeareBaseTest (specs) where
import Test.HUnit hiding (Test)
import Test.Hspec.Monadic
import Test.Hspec.HUnit ()
import Text.ParserCombinators.Parsec (parse, ParseError, (<|>))
import Text.Shakespeare.Base (parseVarString, parseUrlString, parseIntString)
import Text.Shakespeare (preFilter, defaultShakespeareSettings, ShakespeareSettings(..), PreConvert(..), PreConversion(..))
-- run :: Text.Parsec.Prim.Parsec Text.Parsec.Pos.SourceName () c -> Text.Parsec.Pos.SourceName -> c
specs :: Specs
specs = describe "shakespeare-js" $ do
it "parseStrings" $ do
Right "%{var}" @=? run varString "%{var}"
Right "@{url}" @=? run urlString "@{url}"
Right "^{int}" @=? run intString "^{int}"
Right "@{url}" @=? run (varString <|> urlString <|> intString) "@{url} #{var}"
it "preFilter off" $ do
str <- preFilter defaultShakespeareSettings template
str @=? template
it "preFilter on" $ do
str <- preFilter preConversionSettings template
"unchanged `#{var}` `@{url}` `^{int}`" @=? str
it "preFilter ignore quotes" $ do
str <- preFilter preConversionSettings templateQuote
"unchanged '#{var}' `@{url}` '^{int}'" @=? str
it "preFilter ignore comments" $ do
str <- preFilter preConversionSettings templateCommented
"unchanged & '#{var}' @{url} '^{int}'" @=? str
where
varString = parseVarString '%'
urlString = parseUrlString '@' '?'
intString = parseIntString '^'
preConversionSettings = defaultShakespeareSettings {
preConversion = Just PreConvert {
preConvert = Id
, preEscapeBegin = "`"
, preEscapeEnd = "`"
, preEscapeIgnoreBalanced = "'\""
, preEscapeIgnoreLine = "&"
}
}
template = "unchanged #{var} @{url} ^{int}"
templateQuote = "unchanged '#{var}' @{url} '^{int}'"
templateCommented = "unchanged & '#{var}' @{url} '^{int}'"
run parser str = eShowErrors $ parse parser str str
eShowErrors :: Either ParseError c -> c
eShowErrors = either (error . show) id