shakespeare 1.0.1 → 1.0.1.1
raw patch · 4 files changed
+65/−5 lines, 4 filesdep ~hspecPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: hspec
API changes (from Hackage documentation)
Files
- Text/Shakespeare/Base.hs +1/−2
- shakespeare.cabal +4/−2
- test.hs +1/−1
- test/ShakespeareBaseTest.hs +59/−0
Text/Shakespeare/Base.hs view
@@ -35,7 +35,6 @@ import qualified System.IO as SIO import qualified Data.Text.Lazy.IO as TIO import Control.Monad (when)-import Control.Applicative ((<*)) newtype Ident = Ident String deriving (Show, Eq, Read, Data, Typeable)@@ -111,7 +110,7 @@ return $ DerefIdent $ Ident x derefInfix x = try $ do _ <- delim- xs <- many $ try $ derefSingle <* delim+ xs <- many $ try $ derefSingle >>= \x' -> delim >> return x' op <- many1 (satisfy $ \c -> isSymbol c || c `elem` "-") <?> "operator" -- special handling for $, which we don't deal with when (op == "$") $ fail "don't handle $"
shakespeare.cabal view
@@ -1,5 +1,5 @@ name: shakespeare-version: 1.0.1+version: 1.0.1.1 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -43,6 +43,8 @@ test-suite test hs-source-dirs: test main-is: ../test.hs+ other-modules: ShakespeareBaseTest+ type: exitcode-stdio-1.0 ghc-options: -Wall@@ -50,7 +52,7 @@ , base >= 4 && < 5 , parsec >= 2 && < 4 , HUnit- , hspec >= 0.8 && < 1.2+ , hspec >= 0.8 && < 1.3 , text >= 0.7 && < 0.12
test.hs view
@@ -2,4 +2,4 @@ import ShakespeareBaseTest (specs) main :: IO ()-main = hspecX $ specs+main = hspec $ specs
+ test/ShakespeareBaseTest.hs view
@@ -0,0 +1,59 @@+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+