module Types
where
import Import
import Utils
import Text.Parsec
data ShellTest = ShellTest {
command :: TestCommand
,stdin :: Maybe String
,stdoutExpected :: Maybe Matcher
,stderrExpected :: Maybe Matcher
,exitCodeExpected :: Matcher
,testname :: String
}
instance Show ShellTest where
show ShellTest{testname=n,command=c,stdin=i,stdoutExpected=o,stderrExpected=e,exitCodeExpected=x} =
printf "ShellTest {command = %s, stdin = %s, stdoutExpected = %s, stderrExpected = %s, exitCodeExpected = %s, testname = %s}"
(show c)
(maybe "Nothing" (show.trim) i)
(show $ show <$> o)
(show $ show <$> e)
(show x)
(show $ trim n)
data TestCommand = ReplaceableCommand String
| FixedCommand String
deriving Show
type Regexp = String
data Matcher = Lines Int String -- ^ 0 or more lines of text, also the starting line number ?
| Numeric String -- ^ numeric exit code as a string
| NegativeNumeric String -- ^ numeric exit code as a string, matched negatively
| PositiveRegex Regexp -- ^ regular expression
| NegativeRegex Regexp -- ^ regular expression, matched negatively
instance Show Matcher where show = showMatcherTrimmed
showMatcherTrimmed :: Matcher -> String
showMatcherTrimmed (PositiveRegex r) = "/"++(trim r)++"/"
showMatcherTrimmed (NegativeRegex r) = "!/"++(trim r)++"/"
showMatcherTrimmed (Numeric s) = trim (show s)
showMatcherTrimmed (NegativeNumeric s) = "!"++ trim (show s)
showMatcherTrimmed (Lines _ s) = trim s
showMatcher :: Matcher -> String
showMatcher (PositiveRegex r) = "/"++r++"/"
showMatcher (NegativeRegex r) = "!/"++r++"/"
showMatcher (Numeric s) = s
showMatcher (NegativeNumeric s) = "!"++ s
showMatcher (Lines _ s) = s
type Macro = (String, String)
data PreProcessor = NoPreprocess |
PreProcessor [(String -> Either ParseError String)]