ANNOUNCE: abacate and chuchu

Hi. I'm pleased to announce the first release of Abacate and Chuchu. Chuchu is a port of Ruby's Cucumber to Haskell, and Abacate is a parser for the Gherkin language, used by Cucumber. According to their web site, "Cucumber lets software development teams describe how software should behave in plain text. The text is written in a business-readable domain-specific language and serves as documentation, automated tests and development-aid - all rolled into one format." For more information on Cucumber: http://cukes.info/ Example of usage 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` []) Both packages are available at Hackage at http://hackage.haskell.org/package/abacate http://hackage.haskell.org/package/chuchu I have written them after the specification from Felipe Almeida Lessa. Any comments are welcome. -- marcot http://marcot.eti.br/
participants (1)
-
Marco TĂșlio Pimenta Gontijo