{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Main where
import Test.Framework (defaultMain)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit (Assertion, (@=?))
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (Typeable)
import Data.Default
import Data.ByteString (ByteString)
import Data.ByteString.Char8 () -- Just for an orphan instance
import Data.Global.Config
main :: IO ()
main = defaultMain [
testCase "Basic" caseBasic
]
---------------------------------------------------------------------------
-- Test cases
---------------------------------------------------------------------------
caseBasic :: Assertion
caseBasic = do
let c1 = Config 1 "first"
let c2 = Config 2 "second"
-- try to read unitialised config
c1f <- getConfig :: IO Config
liftIO $ c1f @=? def
setConfig c1
c1' <- getConfig :: IO Config
liftIO $ c1' @=? c1
setConfig c2
c2' <- getConfig :: IO Config
liftIO $ c2' @=? c2
---------------------------------------------------------------------------
-- Test data types
---------------------------------------------------------------------------
-- First config
data Config = Config {
tc1p1 :: Int,
tc1p2 :: ByteString
} deriving (Show, Eq, Typeable)
instance Default Config where
def = Config 0 ""
instance GlobalConfig Config where
onSetConfig = liftIO . print