@@ -1,4 +1,4 @@
1−module Tests.Property where
1+module Test.Property where
22
33import Control.Applicative ((<*))
44import Test.Framework
@@ -17,7 +17,8 @@ import Parse.Helpers (IParser, iParse)
1717import Parse.Literal (literal)
1818import qualified Parse.Pattern as Pat (expr)
1919import qualified Parse.Type as Type (expr)
20−import Tests.Property.Arbitrary
20+import Test.Property.Arbitrary
21+
2122
2223propertyTests :: Test
2324propertyTests =
@@ -48,9 +49,20 @@ propertyTests =
4849 , P.Var "su'BrrbPUK6I33Eq"
4950 ]
5051
52+
5153prop_parse_print :: (Pretty a, Arbitrary a, Eq a) => IParser a -> a -> Bool
52−prop_parse_print p x =
53− either (const False) (== x) . parse_print p $ x
54+prop_parse_print parser value =
55+ either (const False) (== value) (parse_print parser value)
56+
5457
5558parse_print :: (Pretty a) => IParser a -> a -> Either String a
56−parse_print p = either (Left . show) Right . iParse (p <* eof) . P.renderStyle P.style {mode=P.LeftMode} . pretty
59+parse_print parser value =
60+ let doc =
61+ pretty value
62+
63+ string =
64+ P.renderStyle P.style { mode = P.LeftMode } doc
65+ in
66+ case iParse (parser <* eof) string of
67+ Left msg -> Left (show msg)
68+ Right x -> Right x