module Test.Hspec.Server.Util where
import System.Exit
import Control.Monad
import Control.Monad.IO.Class
import Data.Monoid
import Text.Regex.Posix
import Test.Hspec.Server.Core
cmd :: ServerType dat => dat -> FilePath -> [String] -> String -> IO (ExitCode,String,String)
cmd = stCmd
type Patterns = [String]
type Arg = [String]
type Input = String
type TestType = String
cmdAndChk :: (ServerType dat)
=> TestType
-> s
-> s
-> FilePath
-> Arg
-> Input
-> Patterns
-> ServerExample dat (Either String s)
cmdAndChk test testedval _failedval c arg i [] = do
dat <- getServerData
c'@(code,_out,_) <- liftIO $ cmd dat c arg i
if (code /= ExitSuccess)
then return $ Left $ test <> " error:" ++ show c'
else return $ Right testedval
cmdAndChk test testedval failedval c arg i patterns = do
dat <- getServerData
(code,out,_) <- liftIO $ cmd dat c arg i
if (code /= ExitSuccess)
then do
return $ Left $ test <> " error:" ++ show c
else do
if or (map (\v -> foldr (||) False
(map (\p -> v =~ p) patterns)
)
(lines out))
then return $ Right testedval
else return $ Right failedval