Portability | non-portable (DeriveDataTypeable) |
---|---|
Stability | unstable |
Maintainer | Marco Túlio Pimenta Gontijo <marcotmarcot@gmail.com> |
Safe Haskell | None |
Chuchu is a system similar to Ruby's Cucumber for Behaviour Driven Development. It works with a language similar to Cucumber's Gherkin, which is parsed using package abacate.
This module provides the main function for a test file based on Behaviour Driven Development for Haskell.
Example for a Stack calculator:
calculator.feature
:
Feature: Division In order to avoid silly mistakes Cashiers must be able to calculate a fraction Scenario: Regular numbers Given that I have entered 3 into the calculator And that I have entered 2 into the calculator When I press divide Then the result should be 1.5 on the screen
calculator.hs
:
import Control.Applicative import Control.Monad.IO.Class import Control.Monad.Trans.State import Test.Chuchu import Test.HUnit type CalculatorT m = StateT [Double] m enterNumber :: Monad m => Double -> CalculatorT m () enterNumber = modify . (:) getDisplay :: Monad m => CalculatorT m Double getDisplay = do ns <- get return $ head $ ns ++ [0] divide :: Monad m => CalculatorT m () divide = do (n1:n2:ns) <- get put $ (n2 / n1) : ns defs :: Chuchu (CalculatorT IO) defs = do Given ("that I have entered " *> number <* " into the calculator") enterNumber When "I press divide" $ const divide Then ("the result should be " *> number <* " on the screen") $ \n -> do d <- getDisplay liftIO $ d @?= n main :: IO () main = chuchuMain defs (`evalStateT` [])
- chuchuMain :: MonadIO m => Chuchu m -> (m () -> IO ()) -> IO ()
- module Test.Chuchu.Types
- module Test.Chuchu.Parser
Documentation
chuchuMain :: MonadIO m => Chuchu m -> (m () -> IO ()) -> IO ()Source
The main function for the test file. It expects the .feature
file as the
first parameter on the command line. If you want to use it inside a library,
consider using withArgs
.
module Test.Chuchu.Types
module Test.Chuchu.Parser