packages feed

ktx-codec-0.0.1.3: test/Spec.hs

module Main where

import Control.Monad (guard, unless)
import Data.List (isSuffixOf)
import Debug.Trace (traceM)
import Shower (printer)
import System.Directory (listDirectory)
import System.FilePath ((</>))
import Data.ByteString.Builder (Builder, toLazyByteString)

import qualified Data.ByteString.Lazy as BSL

import qualified Codec.Ktx as Ktx1

assetsPath :: FilePath
assetsPath = ".." </> "assets"

main :: IO ()
main = do
  assets <- listDirectory assetsPath

  mapM_ testKtx1 do
    fp <- assets
    guard $ ".ktx" `isSuffixOf` fp
    pure $ assetsPath </> fp

testKtx1 :: FilePath -> IO ()
testKtx1 source =
  Ktx1.fromFile source >>= \case
    Left (offset, err) -> do
      traceM err
      fail $ unwords
        [ "KTX-1 load error in"
        , source
        , "at"
        , show offset
        ]
    Right ktx -> do
      printer ktx
      let encodedBytes = toLazyByteString (Ktx1.toBuilder ktx)
      originalBytes <- BSL.readFile source
      unless (encodedBytes == originalBytes) $
        fail $ "Encoded KTX does not match original for " <> source