import StackTest
import System.Directory

main :: IO ()
main = do
  stack ["build"]
  stack ["purge"]

import StackTest
import Data.Maybe (listToMaybe, fromMaybe)
import System.Directory
import System.FilePath

main :: IO ()
main =
  -- For these commands, we'll need to know the `dist` directory.
  -- This is usually `.stack-work/dist/$compiler-variant/Cabal-xxxx`
  stackCheckStdout [defaultResolverArg, "path", "--dist-dir"] $ \distDir ->

    stackCheckStdout [defaultResolverArg, "path", "--local-install-root"] $ \localInstallRoot -> do

      -- Usually `.stack-work`
      let stackWork = fromMaybe (error "There must be a stack working directory.") $
            listToMaybe (splitDirectories distDir)

      -- First, clean the .stack-work directory.
      -- This is only necessary when running individual tests.
      stack [defaultResolverArg, "purge"]
      doesNotExist stackWork

      -- The dist directory should exist after a build
      stack [defaultResolverArg, "build"]
      doesExist distDir
      doesExist localInstallRoot
      doesExist stackWork

      -- The dist directory should not exist after a clean, whereas the
      -- .stack-work directory should
      stack [defaultResolverArg, "clean"]
      run "exa" ["-T", ".stack-work"]
      doesNotExist distDir
      doesExist localInstallRoot
      doesExist stackWork

      -- The .stack-work directory should not exist after a purge
      stack [defaultResolverArg, "purge"]
      doesNotExist stackWork

Check correct directory deletion behaviour for simple project
Check correct directory deletion behaviour for simple project

-  The integration test ensures the correct directories are present,
then deleted, for a project with only one package, not in a
subdirectory.
