shelly-1.12.1.1: test/src/CopySpec.hs
{-# Language CPP #-}
module CopySpec ( copySpec ) where
import TestInit
import Control.Monad (forM_)
import System.IO.Error
import Help
copySpec :: Spec
copySpec = do
let b = "b"
let c = "c"
describe "cp file" $ do
it "cp to same dir" $
forM_ [cp, cp_r] $ \copier -> do
res <- shelly $
within_dir "test/a" $ do
writefile b "testing"
copier b c
readfile c
res @?= "testing"
it "cp to other dir" $
forM_ [cp, cp_r] $ \copier -> do
res <- shelly $
within_dir "test/a" $ do
writefile b "testing"
mkdir c
copier b c
readfile "c/b"
res @?= "testing"
describe "cp dir" $ do
it "to dir does not exist: create the to dir" $ do
res <- shelly $
within_dir "test/a" $ do
mkdir b
writefile "b/d" ""
cp_r b c
cIsDir <- test_d c
liftIO $ assert $ cIsDir
test_f "c/d"
assert res
it "to dir exists: creates a nested directory, full to path given" $ do
res <- shelly $
within_dir "test/a" $ do
mkdir b
mkdir c
writefile "b/d" ""
cp_r b $ c</>b
cIsDir <- test_d c
liftIO $ assert $ cIsDir
bIsDir <- test_d $ c</>b
liftIO $ assert $ bIsDir
test_f "c/b/d"
assert res
it "to dir exists: creates a nested directory, partial to path given" $ do
res <- shelly $
within_dir "test/a" $ do
mkdir b
mkdir c
writefile "b/d" ""
cp_r b $ c
cIsDir <- test_d c
liftIO $ assert $ cIsDir
bIsDir <- test_d $ c</>b
liftIO $ assert $ bIsDir
test_f "c/b/d"
assert res
it "copies the same dir" $ do
shelly $
within_dir "test/a" $ do
mkdir b
writefile "b/d" ""
cp_r b b `catch_sh` (\e -> liftIO $ assert $ isUserError e)
assert True