packages feed

publish-2.1.3: tests/CompareFragments.hs

{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}

module CompareFragments
  ( checkByComparingFragments,
  )
where

import Core.Text
import qualified Data.Text.IO as T
import FormatDocument (markdownToPandoc)
import PandocToMarkdown (pandocToMarkdown)
import Test.Hspec hiding (context)

fragments :: [(String, FilePath)]
fragments =
  [ ("headings", "tests/fragments/Headings.markdown"),
    ("paragraphs", "tests/fragments/Paragraphs.markdown"),
    ("code blocks", "tests/fragments/CodeBlocks.markdown"),
    ("div blocks", "tests/fragments/DivBlocks.markdown"),
    ("LaTeX blocks", "tests/fragments/LatexBlocks.markdown"),
    ("HTML blocks", "tests/fragments/HtmlBlocks.markdown"),
    ("poem passage", "tests/fragments/Poetry.markdown"),
    ("blockquotes", "tests/fragments/Blockquotes.markdown"),
    ("bullet list", "tests/fragments/BulletList.markdown"),
    ("ordered list", "tests/fragments/OrderedList.markdown"),
    ("definition list", "tests/fragments/DefinitionList.markdown"),
    ("multiline table", "tests/fragments/MultilineTable.markdown"),
    ("weird inlines", "tests/fragments/WeirdInlines.markdown")
  ]

checkByComparingFragments :: Spec
checkByComparingFragments =
  describe "Compare fragments" $ do
    sequence_ (map compareFragment fragments)

compareFragment :: (String, FilePath) -> SpecWith ()
compareFragment (label, file) =
  it ("Formats " ++ label ++ " correctly") $ do
    original <- T.readFile file
    doc <- markdownToPandoc original
    let text = pandocToMarkdown doc
    fromRope text `shouldBe` original