From 6f736dfa7578faab7b90546ee5b2c275185968c8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 10 Aug 2013 19:04:15 -0700 Subject: Added Tests.Walk. This verifies that walk and query match the generic traversals. --- tests/Tests/Walk.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/Tests/Walk.hs (limited to 'tests/Tests/Walk.hs') diff --git a/tests/Tests/Walk.hs b/tests/Tests/Walk.hs new file mode 100644 index 000000000..f6aa1beae --- /dev/null +++ b/tests/Tests/Walk.hs @@ -0,0 +1,47 @@ +{-# LANGUAGE ScopedTypeVariables, FlexibleContexts #-} +module Tests.Walk (tests) where + +import Text.Pandoc.Definition +import Text.Pandoc.Walk +import Test.Framework +import Tests.Helpers +import Data.Char (toUpper) +import Tests.Arbitrary() +import Data.Generics +import Data.Monoid + +tests :: [Test] +tests = [ testGroup "Walk" + [ property "p_walk inlineTrans" (p_walk inlineTrans) + , property "p_walk blockTrans" (p_walk blockTrans) + , property "p_query inlineQuery" (p_query inlineQuery) + , property "p_query blockQuery" (p_query blockQuery) + ] + ] + +p_walk :: (Typeable a, Walkable a Pandoc) + => (a -> a) -> Pandoc -> Bool +p_walk f = (\(d :: Pandoc) -> everywhere (mkT f) d == walk f d) + +p_query :: (Eq a, Typeable a1, Monoid a, Walkable a1 Pandoc) + => (a1 -> a) -> Pandoc -> Bool +p_query f = (\(d :: Pandoc) -> everything mappend (mempty `mkQ` f) d == query f d) + +inlineTrans :: Inline -> Inline +inlineTrans (Str xs) = Str $ map toUpper xs +inlineTrans (Emph xs) = Strong xs +inlineTrans x = x + +blockTrans :: Block -> Block +blockTrans (Plain xs) = Para xs +blockTrans (BlockQuote xs) = Div ("",["special"],[]) xs +blockTrans x = x + +inlineQuery :: Inline -> String +inlineQuery (Str xs) = xs +inlineQuery _ = "" + +blockQuery :: Block -> [Int] +blockQuery (Header lev _ _) = [lev] +blockQuery _ = [] + -- cgit v1.2.3