Copyright | (c) 2014 Alp Mestanogullari |
---|---|
License | BSD3 |
Maintainer | alpmestan@gmail.com |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Utility functions for testing attoparsec
parsers, each one providing
an example of how to use it.
- shouldParse :: (Eq a, Show a) => Either String a -> a -> Expectation
- parseSatisfies :: Show a => Either String a -> (a -> Bool) -> Expectation
- shouldSucceedOn :: (Source p s s' r, Show a) => p s' a -> s -> Expectation
- shouldFailOn :: (Source p s s' r, Show a) => p s' a -> s -> Expectation
- leavesUnconsumed :: (Source p s s' r, Leftover r s) => r a -> s -> Expectation
- class (Eq string, Show string, IsString string) => Source parser string string' result | string -> parser, string -> result, string -> string' where
- class Leftover r s | r -> s where
Equality-based combinator
shouldParse :: (Eq a, Show a) => Either String a -> a -> Expectation Source
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) -> Expectation Source
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 -> Expectation Source
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 -> Expectation Source
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 -> Expectation Source
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' where Source
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.
(~>) :: string -> parser string' a -> Either String a Source
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 a Source
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.