hspec-megaparsec-2.1.0: Utility functions for testing Megaparsec parsers with Hspec

Copyright© 2016–present Mark Karpov
LicenseBSD 3 clause
MaintainerMark Karpov <markkarpov92@gmail.com>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Test.Hspec.Megaparsec

Contents

Description

Utility functions for testing Megaparsec parsers with Hspec.

This version of the library should be used with Megaparsec 7.

Synopsis

Basic expectations

shouldParse Source #

Arguments

:: (HasCallStack, ShowErrorComponent e, Stream s, Show a, Eq a) 
=> Either (ParseErrorBundle s e) a

Result of parsing as returned by function like parse

-> a

Desired result

-> Expectation 

Create an expectation by saying what the result should be.

parse letterChar "" "x" `shouldParse` 'x'

parseSatisfies Source #

Arguments

:: (HasCallStack, ShowErrorComponent e, Stream s, Show a, Eq a) 
=> Either (ParseErrorBundle s e) a

Result of parsing as returned by function like parse

-> (a -> Bool)

Predicate

-> Expectation 

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

parse (many punctuationChar) "" "?!!" `parseSatisfies` ((== 3) . length)

shouldSucceedOn Source #

Arguments

:: (HasCallStack, ShowErrorComponent e, Stream s, Show a) 
=> (s -> Either (ParseErrorBundle s e) a)

Parser that takes stream and produces result or error message

-> s

Input that the parser should succeed on

-> Expectation 

Check that a parser succeeds on a given input.

parse (char 'x') "" `shouldSucceedOn` "x"

shouldFailOn Source #

Arguments

:: (HasCallStack, Show a) 
=> (s -> Either (ParseErrorBundle s e) a)

Parser that takes stream and produces result or error message

-> s

Input that the parser should fail on

-> Expectation 

Check that a parser fails on a given input.

parse (char 'x') "" `shouldFailOn` "a"

Testing of error messages

shouldFailWith Source #

Arguments

:: (HasCallStack, ShowErrorComponent e, Stream s, Show a, Eq e) 
=> Either (ParseErrorBundle s e) a

The result of parsing

-> ParseError s e

Expected parse errors

-> Expectation 

Create an expectation that parser should fail producing certain ParseError. Use the err function from this module to construct a ParseError to compare with.

parse (char 'x') "" "b" `shouldFailWith` err posI (utok 'b' <> etok 'x')

shouldFailWithM Source #

Arguments

:: (HasCallStack, ShowErrorComponent e, Stream s, Show a, Eq e) 
=> Either (ParseErrorBundle s e) a

The result of parsing

-> [ParseError s e]

Expected parse errors, the argument is a normal linked list (as opposed to the more correct NonEmpty list) as a syntactical convenience for the user, passing empty list here will result in an error

-> Expectation 

Similar to shouldFailWith, but allows to check parsers that can report more than one parse error at a time.

Since: 2.0.0

Incremental parsing

failsLeaving Source #

Arguments

:: (HasCallStack, Show a, Eq s, Show s) 
=> (State s e, Either (ParseErrorBundle s e) a)

Parser that takes stream and produces result along with actual state information

-> s

Part of input that should be left unconsumed

-> Expectation 

Check that a parser fails and leaves a certain part of input unconsumed. Use it with functions like runParser' and runParserT' that support incremental parsing.

runParser' (many (char 'x') <* eof) (initialState "xxa")
  `failsLeaving` "a"

See also: initialState.

succeedsLeaving Source #

Arguments

:: (HasCallStack, Show a, Eq s, Show s, ShowErrorComponent e, Stream s) 
=> (State s e, Either (ParseErrorBundle s e) a)

Parser that takes stream and produces result along with actual state information

-> s

Part of input that should be left unconsumed

-> Expectation 

Check that a parser succeeds and leaves certain part of input unconsumed. Use it with functions like runParser' and runParserT' that support incremental parsing.

runParser' (many (char 'x')) (initialState "xxa")
  `succeedsLeaving` "a"

See also: initialState.

initialState :: s -> State s e Source #

Given input for parsing, construct initial state for parser.

initialPosState :: s -> PosState s Source #

Given input for parsing, construct initial positional state.

Since: 2.0.0

Re-exports