hspec-attoparsec-0.1.0.1: Utility functions for testing your attoparsec parsers with hspec

Stabilityexperimental
Maintaineralpmestan@gmail.com
Safe HaskellNone

Test.Hspec.Attoparsec

Contents

Description

Utility functions for testing attoparsec parsers, each one providing an example of how to use it.

Synopsis

Equality-based combinator

shouldParse :: (Eq a, Show a) => Either String a -> a -> ExpectationSource

Create an expectation by saying what the result should be. Intended to be used with ~> as follows:

   "<!-- foo -->" ~> htmlCommentParser
     `shouldParse` TagComment " foo "

Predicate-based combinator

parseSatisfies :: Show a => Either String a -> (a -> Bool) -> ExpectationSource

Create an expectation by saying that the parser should successfully parse a value and that this value should satisfy some predicate.

This can fail if the parsing doesn't succeed or if it succeeds but the value doesn't match the predicate.

 ">>>" ~> many (char '>')
   `parseSatisfies` ((==3) . length)

Inspecting the result

shouldSucceedOn :: (Source p s s' r, Show a) => p s' a -> s -> ExpectationSource

Check that a parser succeeds on some given input

 char 'x' `shouldSucceedOn` "x"

shouldFailOn :: (Source p s s' r, Show a) => p s' a -> s -> ExpectationSource

Check that a parser fails on some given input

 char 'x' `shouldFailOn` "a"

Inspecting unconsumed input

leavesUnconsumed :: (Source p s s' r, Leftover r s) => r a -> s -> ExpectationSource

Checking that the given parser succeeds and yields the given part of the input unconsumed. Intended to be used in conjunction with ~?>

 ("xa" :: Text) ~?> char 'x'
   `leavesUnconsumed` "a"

The Source class, connecting parsers and inputs

class (Eq string, Show string, IsString string) => Source parser string string' result | string -> parser, string -> result, string -> string' whereSource

A class where each instance will just teach how to get an Either or the specific result type associated to the parser for the given input type.

Methods

(~>) :: string -> parser string' a -> Either String aSource

Feed some input to a parser and extract the result as either a failure String or an actually parsed value. Can be read as fed to.

 -- "<a ...>" fed to an HTML parser 
 "<a href=\"/foo\">Go to foo</a>" ~> htmlParser :: Either String a

(~?>) :: string -> parser string' a -> result aSource

Feed some input to a parser and extract it as the appropriate result type from that module.

This is not currently useful in the library per se, but is used in test-suites directly where we generally only deal with one concrete set of parser, input and result types. This lets us inspect the result in any way we want, e.g in conjunction with shouldSatisfy or a custom hspec combinator.

The Leftover class, letting us inspect unconsumed input

class Leftover r s | r -> s whereSource

Class for generically inspecting unconsumed input

Methods

leftover :: r a -> Maybe sSource