diff --git a/Language/Gherkin.hs b/Language/Gherkin.hs index e7154c2..c38f580 100644 --- a/Language/Gherkin.hs +++ b/Language/Gherkin.hs @@ -2,8 +2,10 @@ module Language.Gherkin ( module Language.Gherkin.AST , module Language.Gherkin.Parser + , module Language.Gherkin.Pretty ) where import Language.Gherkin.AST import Language.Gherkin.Parser +import Language.Gherkin.Pretty diff --git a/Language/Gherkin/Pretty.hs b/Language/Gherkin/Pretty.hs new file mode 100644 index 0000000..9f6f755 --- /dev/null +++ b/Language/Gherkin/Pretty.hs @@ -0,0 +1,16 @@ +{-# LANGUAGE NamedFieldPuns #-} + +module Language.Gherkin.Pretty where + +import Language.Gherkin.AST +import Text.PrettyPrint + +pretty :: Feature -> Doc +pretty Feature { -- feature_tags + feature_name + , feature_description + -- , feature_background + -- , feature_scenarios + } = text "Feature:" <+> text feature_name $$ nest 4 featureBody + where + featureBody = text feature_description diff --git a/gherkin.cabal b/gherkin.cabal index 32fa9cb..001b099 100644 --- a/gherkin.cabal +++ b/gherkin.cabal @@ -22,6 +22,7 @@ test-suite test QuickCheck >= 2.4.0.0, parsec >= 3.1.1, gherkin >= 0.1, + pretty >= 1.0.2.1, MissingH >= 1.1.0.3 Library @@ -30,10 +31,12 @@ Library exposed-modules: Language.Gherkin, Language.Gherkin.AST, - Language.Gherkin.Parser + Language.Gherkin.Parser, + Language.Gherkin.Pretty build-depends: base >= 4, - parsec >= 3.1.1 + parsec >= 3.1.1, + pretty >= 1.0.2.1 -- Modules not exported by this package. -- Other-modules: diff --git a/tests/Instances.hs b/tests/Instances.hs new file mode 100644 index 0000000..daeb70c --- /dev/null +++ b/tests/Instances.hs @@ -0,0 +1,15 @@ +module Instances where +import Test.QuickCheck +import Language.Gherkin + +newtype GF = GF Feature + deriving (Eq, Show) + +instance Arbitrary GF where + arbitrary = return $ GF $ Feature { + feature_tags = [] + , feature_name = "feature" + , feature_description = "description" + , feature_background = Nothing + , feature_scenarios = [] + } \ No newline at end of file diff --git a/tests/Main.hs b/tests/Main.hs index c5a44f0..379388a 100644 --- a/tests/Main.hs +++ b/tests/Main.hs @@ -4,10 +4,14 @@ import Test.Framework import Test.Framework.Providers.QuickCheck2 import Text.Parsec import Text.Parsec.String +import Instances import Language.Gherkin +import Text.PrettyPrint main :: IO () -main = defaultMain [testGroup "Parsing tests" tests] +main = defaultMain [testGroup "Parsing tests" tests + , testGroup "Pretty roundtrip" prettyTests + ] feature :: Feature feature = Feature { feature_tags = [] @@ -26,6 +30,13 @@ prop p str = case parse p "" str of l =.= r | l /= r = error $ "Expected '" ++ show r ++ "'\nGot '" ++ show l | otherwise = True + +prettyTests :: [Test] +prettyTests = [ + testProperty "" $ \(GF f) -> + prop parseFeature (render $ pretty f) =.= f + ] + tests :: [Test] tests = [ testProperty "parse table" $