test(pandoc): fix an occasionally erroneously failing test
This commit is contained in:
parent
8ebae1bee7
commit
10b443f188
@ -119,8 +119,8 @@ appMeta f (P.Pandoc m bs) = P.Pandoc (f m) bs
|
||||
applyMetas :: (P.HasMeta p, Foldable t, P.ToMetaValue a) => t (Text, Maybe a) -> p -> p
|
||||
applyMetas metas doc = Fold.foldr act doc metas
|
||||
where
|
||||
act (_, Nothing) acc = acc
|
||||
act (k, Just v ) acc = P.setMeta k v acc
|
||||
act (k, Just v) acc | notNull k = P.setMeta k v acc
|
||||
act _ acc = acc
|
||||
|
||||
|
||||
-- | Add meta to pandoc. Existing variables will be overwritten.
|
||||
|
||||
@ -24,13 +24,15 @@ newtype ArbitraryMeta = ArbitraryMeta { unArbitraryMeta :: Meta }
|
||||
newtype ArbitraryPandoc = ArbitraryPandoc { unArbitraryPandoc :: Pandoc }
|
||||
deriving newtype (Eq, Ord, Show, Read, Typeable)
|
||||
|
||||
newtype ArbitraryMapText a = ArbitraryMapText { unArbitraryMapText :: [(Text, a)] }
|
||||
|
||||
instance Arbitrary ArbitraryMeta where
|
||||
arbitrary = do
|
||||
(x1 :: Inlines) <- arbitrary
|
||||
(x2 :: [Inlines]) <- filter (not . Fold.null) <$> arbitrary
|
||||
(x3 :: Inlines) <- arbitrary
|
||||
(x4 :: [(Text, Text)]) <- filter (not . T.null . fst) <$> arbitrary
|
||||
(x5 :: [(Text, Bool)]) <- filter (not . T.null . fst) <$> arbitrary
|
||||
(x4 :: [(Text, Text)]) <- unArbitraryMapText <$> arbitrary
|
||||
(x5 :: [(Text, Bool)]) <- unArbitraryMapText <$> arbitrary
|
||||
return $ ArbitraryMeta
|
||||
$ setMeta "title" x1
|
||||
$ setMeta "author" x2
|
||||
@ -44,6 +46,15 @@ instance Arbitrary ArbitraryPandoc where
|
||||
meta <- arbitrary
|
||||
ArbitraryPandoc . Pandoc (unArbitraryMeta meta) <$> arbitrary
|
||||
|
||||
nonEmptyString :: Gen Text
|
||||
nonEmptyString = T.pack <$> listOf1 arbitrary
|
||||
|
||||
instance Arbitrary a => Arbitrary (ArbitraryMapText a) where
|
||||
arbitrary =
|
||||
let genKV = (,) <$> nonEmptyString <*> arbitrary
|
||||
in ArbitraryMapText <$> listOf1 genKV
|
||||
|
||||
|
||||
|
||||
-- For Lens Check _Meta required:
|
||||
--instance CoArbitrary Inline
|
||||
@ -59,13 +70,15 @@ spec = do
|
||||
|
||||
describe "applyMetas" $ do
|
||||
it "should actually set values" $ do
|
||||
(metaList, apd) <- generate arbitrary
|
||||
(metaList0, apd) <- generate arbitrary
|
||||
let
|
||||
metaList1 :: [(Text, Maybe MetaValue)] = second (Just . MetaString) <$> unArbitraryMapText metaList0
|
||||
pd = unArbitraryPandoc apd
|
||||
(Pandoc metaNew _) = applyMetas (second (Just . MetaString) <$> metaList) pd
|
||||
mlKeys = Set.fromList $ fst <$> metaList
|
||||
metaList' = [(k,t) | (k, MetaString t) <- mlist metaNew, Set.member k mlKeys]
|
||||
metaList' `shouldMatchList` metaList
|
||||
(Pandoc metaNew _) = applyMetas metaList1 pd
|
||||
metaMap1 = Map.fromList metaList1 -- remove duplicate keys
|
||||
keys1 = Map.keysSet metaMap1
|
||||
metaList' = [(k, Just t) | (k, t) <- mlist metaNew, k `Set.member` keys1]
|
||||
metaList' `shouldMatchList` Map.toAscList metaMap1
|
||||
|
||||
it "should preserve untouched settings" $ do
|
||||
(metaList, apd) <- generate arbitrary
|
||||
|
||||
Reference in New Issue
Block a user