{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module Types ( Case (..), Name, testWith, ) where import Data.Aeson (FromJSON) import Data.Text (Text, unpack) import qualified Data.Text as T (concat) import GHC.Generics import Lib (getCases) import Test.Tasty (TestTree, testGroup) type Name = Text data Case = Case { path :: Text, description :: String } deriving (Generic, FromJSON) testWith :: (Case -> IO TestTree) -> Name -> IO TestTree testWith f dir = do cases <- getCases (unpack dir) test <- sequence $ f <$> map (\x -> x {path = T.concat [dir, "/", path x]}) cases return $ testGroup (unpack dir) test