packages feed

sqlite-simple-0.4.16.0: test/Main.hs

import Common
import Control.Exception (bracket)
import Control.Monad     (when)
import System.Exit       (exitFailure)
import System.IO

import Debug
import DirectSqlite
import Errors
import Fold
import ParamConv
import QQ
import Simple
import Statement
import TestImports()
import TestImports
import UserInstances
import Utf8Strings

tests :: [TestEnv -> Test]
tests =
    [ TestLabel "Simple"    . testSimpleSelect
    , TestLabel "Simple"    . testSimpleOnePlusOne
    , TestLabel "Simple"    . testSimpleParams
    , TestLabel "Simple"    . testSimpleTime
    , TestLabel "Simple"    . testSimpleTimeFract
    , TestLabel "Simple"    . testSimpleInsertId
    , TestLabel "Simple"    . testSimpleMultiInsert
    , TestLabel "Simple"    . testSimpleUTCTime
    , TestLabel "Simple"    . testSimpleUTCTimeTZ
    , TestLabel "Simple"    . testSimpleUTCTimeParams
    , TestLabel "Simple"    . testSimpleQueryCov
    , TestLabel "Simple"    . testSimpleStrings
    , TestLabel "Simple"    . testSimpleChanges
    , 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 "Errors"    . testErrorsImmediateTransaction
    , TestLabel "Errors"    . testErrorsExclusiveTransaction
    , TestLabel "Utf8"      . testUtf8Simplest
    , TestLabel "Utf8"      . testBlobs
    , TestLabel "Instances" . testUserFromField
    , TestLabel "Instances" . testSQLDataFromField
    , TestLabel "Fold"      . testFolds
    , TestLabel "Statement" . testBind
    , TestLabel "Statement" . testDoubleBind
    , TestLabel "Statement" . testPreparedStatements
    , TestLabel "Statement" . testPreparedStatementsColumnCount
    , TestLabel "Debug"     . testDebugTracing
    , TestLabel "Direct"    . testDirectSqlite
    , TestLabel "Imports"   . testImports
    , TestLabel "QQ"        . testSimpleQQ
    , TestLabel "QQ"        . testMultiLinedQQ
    ]

-- | 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