packages feed

HGraphStorage-0.0.1: test/Database/Graph/HGraphStorage/Utils.hs

{-# LANGUAGE ConstraintKinds, FlexibleContexts, RankNTypes #-}
-- | test utilities
module Database.Graph.HGraphStorage.Utils where


import Database.Graph.HGraphStorage.API
import System.Directory
import System.FilePath
import Control.Monad (when, filterM)
import qualified Control.Monad.Trans.Resource as R

import Control.Monad.Logger
import Data.Default (def)

withTempDB :: forall b.
                GraphStorageT (R.ResourceT (LoggingT IO)) b
                -> IO b
withTempDB f = do
  tmp <- getTemporaryDirectory
  let dir = tmp </> "graph-test"
  ex <- doesDirectoryExist dir
  when ex $ do
    cnts <- getDirectoryContents dir
    mapM_ removeFile =<< filterM doesFileExist (map (dir </>) cnts)
  runStderrLoggingT $ withGraphStorage dir def f
  
withTempFile :: (FilePath -> IO b)
                -> IO b
withTempFile func = do
  tmp <- getTemporaryDirectory
  let f = tmp </> "graph-test.tmp"
  ex <- doesFileExist f
  when ex $ removeFile f
  b<-func f
  ex2 <- doesFileExist f
  when ex2 $ removeFile f
  return b