{-# LANGUAGE OverloadedStrings #-}
-- | A golden value testsuite for fix-whitespace.
--
module Main where
import Data.ByteString.Lazy ( ByteString )
import qualified Data.Text as Text
import qualified Data.Text.Lazy as LazyText
import qualified Data.Text.Lazy.Encoding as LazyText
import System.FilePath ( takeBaseName, replaceExtension )
import Test.Tasty ( defaultMain, TestTree, testGroup )
import Test.Tasty.Golden ( goldenVsString, findByExtension )
import Data.Text.FixWhitespace ( CheckResult(CheckOK, CheckViolation, CheckIOError)
, checkFile, displayLineError, defaultTabSize )
main :: IO ()
main = defaultMain =<< goldenTests
goldenTests :: IO TestTree
goldenTests = do
files <- findByExtension [".txt"] "test"
return $ testGroup "Golden tests"
[ goldenVsString
(takeBaseName file) -- test name
(replaceExtension file ".golden") -- golden file path
(goldenValue file) -- action whose result is tested
| file <- files
]
goldenValue :: FilePath -> IO ByteString
goldenValue file = do
checkFile defaultTabSize {-verbose: -}True file >>= \case
CheckIOError e ->
ioError e
CheckOK ->
return "OK\n"
CheckViolation _ errs ->
return $ LazyText.encodeUtf8 $ LazyText.fromStrict $
Text.unlines $ "Violations:" : map (displayLineError file) errs