import Common
import Control.Exception (bracket)
import Control.Monad (when)
import System.Exit (exitFailure)
import System.IO
import Simple
import ParamConv
import Errors
import Utf8Strings
import UserInstances
import TestImports()
import Fold
import Statement
import Debug
import DirectSqlite
import TestImports
tests :: [TestEnv -> Test]
tests =
[ TestLabel "Simple" . testSimpleSelect
, TestLabel "Simple" . testSimpleOnePlusOne
, TestLabel "Simple" . testSimpleParams
, TestLabel "Simple" . testSimpleTime
, TestLabel "Simple" . testSimpleTimeFract
, TestLabel "Simple" . testSimpleInsertId
, TestLabel "Simple" . testSimpleUTCTime
, TestLabel "Simple" . testSimpleUTCTimeTZ
, TestLabel "Simple" . testSimpleUTCTimeParams
, TestLabel "Simple" . testSimpleQueryCov
, TestLabel "Simple" . testSimpleStrings
, TestLabel "ParamConv" . testParamConvNull
, TestLabel "ParamConv" . testParamConvInt
, TestLabel "ParamConv" . testParamConvIntWidths
, TestLabel "ParamConv" . testParamConvIntWidthsFromField
, TestLabel "ParamConv" . testParamConvFloat
, TestLabel "ParamConv" . testParamConvDateTime
, TestLabel "ParamConv" . testParamConvBools
, TestLabel "ParamConv" . testParamConvToRow
, TestLabel "ParamConv" . testParamConvFromRow
, TestLabel "ParamConv" . testParamConvComposite
, TestLabel "ParamConv" . testParamNamed
, TestLabel "Errors" . testErrorsColumns
, TestLabel "Errors" . testErrorsInvalidParams
, TestLabel "Errors" . testErrorsInvalidNamedParams
, TestLabel "Errors" . testErrorsWithStatement
, TestLabel "Errors" . testErrorsColumnName
, TestLabel "Errors" . testErrorsTransaction
, TestLabel "Utf8" . testUtf8Simplest
, TestLabel "Utf8" . testBlobs
, TestLabel "Instances" . testUserFromField
, TestLabel "Fold" . testFolds
, TestLabel "Statement" . testBind
, TestLabel "Statement" . testDoubleBind
, TestLabel "Statement" . testPreparedStatements
, TestLabel "Debug" . testDebugTracing
, TestLabel "Direct" . testDirectSqlite
, TestLabel "Imports" . testImports
]
-- | Action for connecting to the database that will be used for testing.
--
-- Note that some tests, such as Notify, use multiple connections, and assume
-- that 'testConnect' connects to the same database every time it is called.
testConnect :: IO Connection
testConnect = open ":memory:"
withTestEnv :: (TestEnv -> IO a) -> IO a
withTestEnv cb =
withConn $ \conn -> cb TestEnv { conn = conn }
where
withConn = bracket testConnect close
main :: IO ()
main = do
mapM_ (`hSetBuffering` LineBuffering) [stdout, stderr]
Counts{cases, tried, errors, failures} <-
withTestEnv $ \env -> runTestTT $ TestList $ map ($ env) tests
when (cases /= tried || errors /= 0 || failures /= 0) $ exitFailure