packages feed

global-config-0.3.0: test/Main.hs

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