51 lines
1.6 KiB
Haskell
51 lines
1.6 KiB
Haskell
import qualified Control.Exception as Exception
|
|
import qualified Control.Monad as Monad
|
|
import qualified Data.List as List
|
|
import qualified Language.Haskell.Brittany.Main as Brittany
|
|
import qualified System.Directory as Directory
|
|
import qualified System.FilePath as FilePath
|
|
import qualified System.IO as IO
|
|
import qualified Test.Hspec as Hspec
|
|
|
|
main :: IO ()
|
|
main = Hspec.hspec $ do
|
|
let directory = "data"
|
|
entries <- Hspec.runIO $ Directory.listDirectory directory
|
|
Monad.forM_ (List.sort entries) $ \entry ->
|
|
case FilePath.stripExtension "hs" entry of
|
|
Nothing -> pure ()
|
|
Just slug -> Hspec.it slug $ do
|
|
let input = FilePath.combine directory entry
|
|
expected <- readFile input
|
|
actual <- withTemporaryFile $ \output handle -> do
|
|
IO.hClose handle
|
|
Directory.copyFile input output
|
|
Brittany.mainWith
|
|
"brittany"
|
|
[ "--config-file"
|
|
, FilePath.combine directory "brittany.yaml"
|
|
, "--no-user-config"
|
|
, "--write-mode"
|
|
, "inplace"
|
|
, output
|
|
]
|
|
readFile output
|
|
Literal actual `Hspec.shouldBe` Literal expected
|
|
|
|
withTemporaryFile :: (FilePath -> IO.Handle -> IO a) -> IO a
|
|
withTemporaryFile callback = do
|
|
directory <- Directory.getTemporaryDirectory
|
|
let
|
|
acquire = IO.openTempFile directory "brittany-.hs"
|
|
release filePath handle = do
|
|
IO.hClose handle
|
|
Directory.removeFile filePath
|
|
Exception.bracket acquire (uncurry release) (uncurry callback)
|
|
|
|
newtype Literal
|
|
= Literal String
|
|
deriving Eq
|
|
|
|
instance Show Literal where
|
|
show (Literal x) = x
|