fourmolu-0.13.0.0: tests/Ormolu/Integration/CLISpec.hs
module Ormolu.Integration.CLISpec (spec) where
import Control.Monad (forM_)
import Ormolu.Integration.Utils (getFourmoluExe, readProcess, readProcess')
import System.Directory (createDirectoryIfMissing)
import System.FilePath (takeDirectory, (</>))
import System.IO.Temp (withSystemTempDirectory)
import Test.Hspec
spec :: Spec
spec =
describe "Fourmolu CLI functionality" . beforeAll getFourmoluExe $ do
it "formats stdin when no files specified" $ \fourmoluExe -> do
stdout <- readProcess' fourmoluExe ["--no-cabal"] unformattedCode
stdout `shouldBe` formattedCode
it "formats stdin when stdin specified" $ \fourmoluExe -> do
stdout <- readProcess' fourmoluExe ["--no-cabal", "-"] unformattedCode
stdout `shouldBe` formattedCode
it "recursively finds files in directories" $ \fourmoluExe -> do
withTempDir $ \tmpdir -> do
let hsFile = tmpdir </> "test.hs"
writeFile hsFile unformattedCode
output <- readProcess fourmoluExe [tmpdir]
output `shouldBe` formattedCode
it "ignores files in specific directories" $ \fourmoluExe -> do
withTempDir $ \tmpdir -> do
let testFiles =
[ tmpdir </> "test1.hs",
tmpdir </> "foo/test2.hs"
]
let ignoredFiles =
[ tmpdir </> ".stack-work/test.hs",
tmpdir </> "dist-newstyle/test.hs"
]
forM_ (testFiles ++ ignoredFiles) $ \fp -> do
createDirectoryIfMissing True (takeDirectory fp)
writeFile fp unformattedCode
_ <- readProcess fourmoluExe ["-i", tmpdir]
forM_ testFiles $ \fp -> do
output <- readFile fp
output `shouldBe` formattedCode
forM_ ignoredFiles $ \fp -> do
output <- readFile fp
output `shouldBe` unformattedCode
where
withTempDir = withSystemTempDirectory "fourmolu-cli-test"
unformattedCode = "main=print(1+1)\n"
formattedCode = "main = print (1 + 1)\n"