packages feed

pontarius-xmpp-0.5.7.2: tests/Tests/Picklers.hs

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Tests.Picklers where

import Tests.Arbitrary ()
import Data.XML.Pickle
import Network.Xmpp.Internal
import Test.Tasty
import Test.Tasty.TH
import Test.Tasty.QuickCheck
import Data.Text (Text)

import Data.XML.Types

-- | Test Pickler self-inverse: Check that unpickling after pickling gives the
-- original value
tpsi :: Eq a => PU t a -> a -> Bool
tpsi p = \x -> case unpickle p (pickle p x) of
    Left _ -> False
    Right x' -> x == x'

testPickler :: PU t a -> a -> IO ()
testPickler p x = case unpickle p (pickle p x) of
    Left e -> putStrLn $ ppUnpickleError e
    Right _ -> putStrLn "OK."

prop_xpStreamStanza_invertible :: Either StreamErrorInfo Stanza -> Bool
prop_xpStreamStanza_invertible         = tpsi xpStreamStanza
prop_xpStanza_invertible :: Stanza -> Bool
prop_xpStanza_invertible               = tpsi xpStanza
prop_xpMessage_invertible :: Message -> Bool
prop_xpMessage_invertible              = tpsi xpMessage
prop_xpPresence_invertible             = tpsi xpPresence
prop_xpPresence_invertible :: Presence -> Bool
prop_xpIQRequest_invertible            = tpsi xpIQRequest
prop_xpIQRequest_invertible :: IQRequest -> Bool
prop_xpIQResult_invertible             = tpsi xpIQResult
prop_xpIQResult_invertible :: IQResult -> Bool
prop_xpErrorCondition_invertible       = tpsi xpStanzaErrorCondition
prop_xpErrorCondition_invertible :: StanzaErrorCondition -> Bool
prop_xpStanzaError_invertible          = tpsi xpStanzaError
prop_xpStanzaError_invertible :: StanzaError -> Bool
prop_xpMessageError_invertible         = tpsi xpMessageError
prop_xpMessageError_invertible :: MessageError -> Bool
prop_xpPresenceError_invertible        = tpsi xpPresenceError
prop_xpPresenceError_invertible :: PresenceError -> Bool
prop_xpIQError_invertible              = tpsi xpIQError
prop_xpIQError_invertible :: IQError -> Bool
prop_xpStreamError_invertible          = tpsi xpStreamError
prop_xpStreamError_invertible :: StreamErrorInfo -> Bool
prop_xpLangTag_invertible              = tpsi xpLangTag
prop_xpLangTag_invertible :: Maybe LangTag -> Bool
prop_xpLang_invertible                 = tpsi xpLang
prop_xpLang_invertible :: LangTag -> Bool
prop_xpStream_invertible               = tpsi xpStream
prop_xpStream_invertible :: ( Text
                           , Maybe Jid
                           , Maybe Jid
                           , Maybe Text
                           , Maybe LangTag )
                           -> Bool
prop_xpJid_invertible                  = tpsi xpJid
prop_xpJid_invertible :: Jid -> Bool
prop_xpIQRequestType_invertible        = tpsi xpIQRequestType
prop_xpIQRequestType_invertible :: IQRequestType -> Bool
prop_xpMessageType_invertible          = tpsi xpMessageType
prop_xpMessageType_invertible :: MessageType -> Bool
prop_xpPresenceType_invertible         = tpsi xpPresenceType
prop_xpPresenceType_invertible :: PresenceType -> Bool
prop_xpStanzaErrorType_invertible      = tpsi xpStanzaErrorType
prop_xpStanzaErrorType_invertible :: StanzaErrorType -> Bool
prop_xpStanzaErrorCondition_invertible = tpsi xpStanzaErrorCondition
prop_xpStanzaErrorCondition_invertible :: StanzaErrorCondition -> Bool
prop_xpStreamErrorCondition_invertible = tpsi xpStreamErrorCondition
prop_xpStreamErrorCondition_invertible :: StreamErrorCondition -> Bool
-- prop_xpStreamFeatures_invertible = testPicklerInvertible xpStreamFeatures

picklerTests :: TestTree
picklerTests = $testGroupGenerator

bad = StreamErrorInfo { errorCondition = StreamInvalidFrom
                      , errorText = Just (Nothing,"")
                      , errorXml = Just (
                          Element { elementName =
                                         Name { nameLocalName = "\65044"
                                              , nameNamespace = Just "\14139"
                                              , namePrefix = Just "\651"}
                                  , elementAttributes = []
                                  , elementNodes = []})}