git.iko.soy/typeable/html-parse
on master help sign in
More coherent arbitrary instances for token forest, tree.
9f62344Matthias Fischmann
tests/Text/HTML/TreeSpec.hs+5−8
@@ -16,20 +16,17 @@ import Text.HTML.Tree
16
16
17
17
18arbitraryTokenForest :: Gen (Forest Token)
18arbitraryTokenForest :: Gen (Forest Token)
19−arbitraryTokenForest = listOf $ oneof
19+arbitraryTokenForest = listOf arbitraryTokenTree
20+
21+arbitraryTokenTree :: Gen (Tree Token)
22+arbitraryTokenTree = oneof
20 [ Node <$> validOpen <*> scale (`div` 5) arbitraryTokenForest
23 [ Node <$> validOpen <*> scale (`div` 5) arbitraryTokenForest
21 , Node <$> validFlat <*> pure []
24 , Node <$> validFlat <*> pure []
22 ]
25 ]
23
26
24−shrinkTokenForest :: Forest Token -> [Forest Token]
25−shrinkTokenForest = fmap shrinkTokenTree
26−
27−shrinkTokenTree :: Tree Token -> [Tree Token]
28−shrinkTokenTree (Node n c) = Node <$> shrink n <*> shrink c
29−
30
27
31spec :: Spec
28spec :: Spec
32spec = do
29spec = do
33 it "parseTokenForests and renderTokenForest are inverses"
30 it "parseTokenForests and renderTokenForest are inverses"
34− . property . forAllShrink arbitraryTokenForest shrinkTokenForest $
31+ . property . forAllShrink arbitraryTokenForest shrink $
35 \forest -> tokensToForest (tokensFromForest forest) `shouldBe` Right forest
32 \forest -> tokensToForest (tokensFromForest forest) `shouldBe` Right forest