utility functions for testing attoparsec parsers with hspec
Haskell
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
example
src/Test/Hspec
tests
.travis.yml
LICENSE
README.md
Setup.hs
hspec-attoparsec.cabal

README.md

hspec-attoparsec

Build Status

This (small) package provides handy functions for testing attoparsec parsers with hspec.

To see it in action, what better way is there than looking at hspec-attoparsec's own test suite!

{-# LANGUAGE OverloadedStrings #-}
module Test.Hspec.AttoparsecSpec where

import Control.Applicative
import Data.Attoparsec.Text
import Data.Text
import Test.Hspec
import Test.Hspec.Attoparsec

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  describe "shouldParse" $
    it "works on: \"x\" ~> char 'x'" $
      ("x" :: Text) ~> char 'x'
        `shouldParse` 'x'

  describe "parseSatisfies" $ do
    it "works on: \"x\" and (=='x')" $
      ("x" :: Text) ~> char 'x'
        `parseSatisfies` (=='x')

    it "\">>>\" satisfies length == 3 when parser as a list of char" $
      (">>>" :: Text) ~> many (char '>')
        `parseSatisfies` ((==3) . Prelude.length)

  describe "shouldFailOn" $
    it "char 'x' fails on \"ha\"" $
      char 'x' `shouldFailOn` ("ha" :: Text)

  describe "shouldSucceedOn" $
    it "char 'x' succeeds on \"x\"" $
      char 'x' `shouldSucceedOn` ("x" :: Text)

  describe "leavesUnconsumed" $
    it "works on \"xa\" ~?> char 'x'" $
      ("xa" :: Text) ~?> char 'x'
        `leavesUnconsumed` "a"

    it "char 'x' leaves nothing unconsumed on \"x\"" $
      ("x" :: Text) ~?> char 'x'
        `leavesUnconsumed` ""