tdlib-0.3.0: test/Spec.hs
module Main where
import Data.ByteString (ByteString)
import Data.ByteString.Base64.Type
import Data.Text.Arbitrary
import Polysemy hiding (run)
import TDLib.Effect
import TDLib.EventLoop
import TDLib.Generated.Functions
import TDLib.Generated.Types hiding (Text)
import TDLib.Types.Common
import Test.QuickCheck
import Test.QuickCheck.Monadic
-- ** Helper functions
mm ::
Testable a =>
PropertyM (Sem '[TDLib, Embed IO]) a ->
Property
mm = monadic rr
rr ::
Testable a =>
Sem '[TDLib, Embed IO] a ->
Property
rr m = (monadicIO . run . runM . runTDLibEventLoop 0.1 (const (pure ()))) (setVerbosity Fatal >> m)
-- ** Main
main :: IO ()
main = do
quickCheck $ squareInt
quickCheck $ callEmpty
quickCheck $ callString
quickCheck $ callVecInt
quickCheck $ callVecIntObject
quickCheck $ callVecString
quickCheck $ callVecStringObject
-- ** Properties
squareInt :: I32 -> Property
squareInt i = mm $ do
r <- run $ testSquareInt i
assert $ Inr (TestInt $ (i :: Int) ^ (2 :: Int)) == r
callEmpty :: Property
callEmpty = mm $ do
ok <- run $ testCallEmpty
assert $ Inr Ok == ok
callString :: Text -> Property
callString t = mm $ do
r <- run $ testCallString t
assert $ Inr (TestString t) == r
callVecInt :: [I32] -> Property
callVecInt vec = mm $ do
r <- run $ testCallVectorInt vec
assert $ Inr (TestVectorInt vec) == r
callVecIntObject :: [I32] -> Property
callVecIntObject vec = mm $ do
let v' = fmap TestInt vec
r <- run $ testCallVectorIntObject v'
assert $ Inr (TestVectorIntObject v') == r
callVecString :: [Text] -> Property
callVecString vec = mm $ do
r <- run $ testCallVectorString vec
assert $ Inr (TestVectorString vec) == r
callVecStringObject :: [Text] -> Property
callVecStringObject vec = mm $ do
let v' = fmap TestString vec
r <- run $ testCallVectorStringObject v'
assert $ Inr (TestVectorStringObject v') == r
callBytes :: ByteString -> Property
callBytes bs = mm $ do
let bs' = makeByteString64 bs
r <- run $ testCallBytes bs'
assert $ Inr (TestBytes bs') == r