katip-0.1.0.0: test/Katip/Tests.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Katip.Tests
( tests
) where
-------------------------------------------------------------------------------
import Control.Applicative
import Data.Aeson
import qualified Data.Text.Lazy.Builder as B
import Data.Time
import Data.Time.Clock.POSIX
import Language.Haskell.TH
import System.Posix.Types
import Test.QuickCheck.Instances ()
import Test.Tasty
import Test.Tasty.QuickCheck
-------------------------------------------------------------------------------
import Katip
-------------------------------------------------------------------------------
tests :: TestTree
tests = testGroup "Katip"
[
testProperty "JSON cycle Item" $ \(i :: Item ()) ->
prop_json_cycle i
]
-------------------------------------------------------------------------------
prop_json_cycle :: (ToJSON a, FromJSON a, Eq a, Show a) => a -> Property
prop_json_cycle a = eitherDecode (encode a) === Right a
-------------------------------------------------------------------------------
instance Arbitrary a => Arbitrary (Item a) where
arbitrary = Item
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> (getCleanUTCTime <$> arbitrary)
<*> arbitrary
<*> arbitrary
-------------------------------------------------------------------------------
newtype CleanUTCTime = CleanUTCTime {
getCleanUTCTime :: UTCTime
}
-------------------------------------------------------------------------------
-- Work around time parsing precision issues in aeson
instance Arbitrary CleanUTCTime where
arbitrary = CleanUTCTime . posixSecondsToUTCTime . fromInteger <$> arbitrary
-------------------------------------------------------------------------------
deriving instance Arbitrary Namespace
deriving instance Arbitrary Environment
deriving instance Arbitrary ThreadIdText
deriving instance Arbitrary CPid
deriving instance Eq LogStr
deriving instance (Eq a) => Eq (Item a)
-------------------------------------------------------------------------------
instance Arbitrary Loc where
arbitrary = do
f <- arbitrary
p <- arbitrary
m <- arbitrary
s <- arbitrary
return $ Loc f p m s s
-------------------------------------------------------------------------------
instance Arbitrary Severity where
arbitrary = oneof $ map pure [ DebugS
, InfoS
, NoticeS
, WarningS
, ErrorS
, CriticalS
, AlertS
, EmergencyS
]
-------------------------------------------------------------------------------
instance Arbitrary LogStr where
arbitrary = LogStr . B.fromText <$> arbitrary