packages feed

safe-coloured-text-gen-0.0.0.4: test/Text/Colour/Chunk/ParsingRoundtripSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}

module Text.Colour.Chunk.ParsingRoundtripSpec (spec) where

import Control.Monad
import qualified Data.ByteString as SB
import Data.List (sort)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as TE
import Path
import Path.IO (listDirRecurRel, resolveDir')
import Test.Syd
import Text.Colour.Capabilities
import Text.Colour.Chunk
import Text.Colour.Chunk.Parsing

spec :: Spec
spec = do
  resourceDir <- liftIO $ resolveDir' "test_resources"
  let chunkDir = resourceDir </> [reldir|chunk|]
  files <- liftIO $ sort . snd <$> listDirRecurRel chunkDir
  describe "golden file roundtrip" $
    forM_ files $ \file ->
      it ("roundtrips " ++ fromRelFile file) $ do
        bs <- SB.readFile (fromAbsFile (chunkDir </> file))
        content <- case TE.decodeUtf8' bs of
          Left err -> expectationFailure $ "Invalid UTF-8: " ++ show err
          Right t -> pure t
        let (_, parsed) = parseAnsiChunks (chunk Text.empty) content
            reRendered = renderChunksText With24BitColours parsed
        reRendered `shouldBe` content