{-# LANGUAGE TemplateHaskell #-} module Common ( TestDependable(..) , repoRoot , testFile , satisfies , (.&&.) ) where import CommonTH import System.FilePath ( () ) import Language.Haskell.TH.Syntax (lift) import Test.HUnit import Database.Schema.Migrations.Dependencies ( Dependable(..) ) repoRoot :: FilePath repoRoot = $(getRepoRoot >>= lift) testFile :: FilePath -> FilePath testFile fp = repoRoot "test" fp instance Dependable TestDependable where depId = tdId depsOf = tdDeps data TestDependable = TD { tdId :: String , tdDeps :: [String] } deriving (Show, Eq, Ord) satisfies :: String -> a -> (a -> Bool) -> IO Test satisfies m v f = return $ TestCase $ assertBool m (f v) (.&&.) :: Test -> Test -> Test (TestList xs) .&&. (TestList ys) = TestList (xs ++ ys) (TestList xs) .&&. y = TestList (xs ++ [y]) x .&&. (TestList ys) = TestList (x:ys) a .&&. b = TestList [a, b] infixl 0 .&&.