lib: expectParseStateOn helper
This commit is contained in:
		
							parent
							
								
									763903ebda
								
							
						
					
					
						commit
						573a13fc27
					
				| @ -23,12 +23,13 @@ module Hledger.Utils.Test ( | ||||
|   ,expectParseEqE | ||||
|   ,expectParseEqOn | ||||
|   ,expectParseEqOnE | ||||
|   ,expectParseStateOn | ||||
| )  | ||||
| where | ||||
| 
 | ||||
| import Control.Exception | ||||
| import Control.Monad.Except (ExceptT, runExceptT) | ||||
| import Control.Monad.State.Strict (StateT, evalStateT) | ||||
| import Control.Monad.State.Strict (StateT, evalStateT, execStateT) | ||||
| #if !(MIN_VERSION_base(4,11,0)) | ||||
| import Data.Monoid ((<>)) | ||||
| #endif | ||||
| @ -106,7 +107,6 @@ is = flip expectEqPP | ||||
| 
 | ||||
| -- | Test that this stateful parser runnable in IO successfully parses  | ||||
| -- all of the given input text, showing the parse error if it fails.  | ||||
| 
 | ||||
| -- Suitable for hledger's JournalParser parsers. | ||||
| expectParse :: (Monoid st, Eq a, Show a, HasCallStack) =>  | ||||
|   StateT st (ParsecT CustomErr T.Text IO) a -> T.Text -> E.Test () | ||||
| @ -216,3 +216,17 @@ expectParseEqOnE parser input f expected = do | ||||
|              (expectEqPP expected . f) | ||||
|              ep | ||||
| 
 | ||||
| -- | Run a stateful parser in IO like expectParse, then compare the | ||||
| -- final state (the wrapped state, not megaparsec's internal state), | ||||
| -- transformed by the given function, with the given expected value. | ||||
| expectParseStateOn :: (HasCallStack, Monoid st, Eq b, Show b) => | ||||
|      StateT st (ParsecT CustomErr T.Text IO) a | ||||
|   -> T.Text | ||||
|   -> (st -> b) | ||||
|   -> b | ||||
|   -> E.Test () | ||||
| expectParseStateOn parser input f expected = do | ||||
|   es <- E.io $ runParserT (execStateT (parser <* eof) mempty) "" input | ||||
|   case es of | ||||
|     Left err -> fail $ (++"\n") $ ("\nparse error at "++) $ customErrorBundlePretty err | ||||
|     Right s  -> expectEqPP expected $ f s | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user