content: module WriteSpec ( writeSpec ) where
  
  import TestInit
  
  import Data.Text (Text)
  default (Text)
  
  createsFile :: FilePath -> (FilePath -> IO ()) -> IO ()
  createsFile f action = do
    exists <- shelly $ test_e f
    when exists $ error "cleanup after yourself!"
    action f
    shelly $ rm f
    return ()
  
  
  writeSpec :: Spec
  writeSpec = do
    describe "writefile" $
      it "creates and overwrites a file" $ createsFile "foo" $ \f -> do
        assert . (== "a") =<< (shelly $ writefile f "a" >> readfile f)
        assert . (== "b") =<< (shelly $ writefile f "b" >> readfile f)
  
    describe "writeBinary" $
      it "creates and overwrites a file" $ createsFile "foo" $ \f -> do
        assert . (== "a") =<< (shelly $ writeBinary f "a" >> readBinary f)
        assert . (== "b") =<< (shelly $ writeBinary f "b" >> readBinary f)
  
    describe "appendfile" $
      it "creates and appends a file" $ createsFile "foo" $ \f -> do
        assert . (== "a")  =<< (shelly $ appendfile f "a" >> readfile f)
        assert . (== "ab") =<< (shelly $ appendfile f "b" >> readfile f)
  
    describe "touchfile" $
      it "creates and updates a file" $ createsFile "foo" $ \f -> do
        assert . (== "") =<< (shelly $ touchfile f >> readfile f)
        assert . (== "") =<< (shelly $ touchfile f >> readfile f)
  
        assert . (== "a") =<< (shelly $
          writefile f "a" >> touchfile f >> readfile f)
  