packages feed

markup-parse-0.2.0.0: app/markup-parse-diff.hs

{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}

module Main (main) where

import Control.Category ((>>>))
import Control.Monad
import Data.Algorithm.Diff
import Data.Algorithm.DiffOutput
import Data.Bifunctor
import Data.Bool
import Data.ByteString (ByteString)
import Data.ByteString qualified as B
import Data.ByteString.Char8 qualified as C
import Data.Function
import Data.Maybe
import MarkupParse
import Test.Tasty (TestTree, defaultMain, testGroup)
import Test.Tasty.Golden.Advanced (goldenTest)
import Prelude

main :: IO ()
main =
  defaultMain $
    testGroup
      "tests"
      [ goldenTests
      ]

goldenTests :: TestTree
goldenTests =
  testGroup
    "examples"
    ( testExample
        <$> [ (Compact, Xml, "other/line.svg"),
              (Compact, Html, "other/ex1.html")
            ]
    )

testExample :: (RenderStyle, Standard, FilePath) -> TestTree
testExample (r, s, fp) =
  goldenTest
    fp
    (B.readFile fp)
    (isoMarkupMarkdown r s <$> B.readFile fp)
    (\expected actual -> getDiff (C.lines expected) (C.lines actual) & fmap (bimap (C.unpack >>> pure) (C.unpack >>> pure)) & diffToLineRanges & prettyDiffs & (\xs -> bool (pure $ Just (show xs)) (pure Nothing) (xs == mempty)))
    (\_ -> pure ())

-- round trip markdown >>> markup
isoMarkupMarkdown :: RenderStyle -> Standard -> ByteString -> ByteString
isoMarkupMarkdown r s m = m & (markup s >=> markdown r s) & warnError