module CatchAllTest (test) where import Data.Proxy import UnliftIO.MessageBox.Util.Future import UnliftIO.MessageBox.CatchAll import UnliftIO.MessageBox.Class import QCOrphans () import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.QuickCheck import UnliftIO import Utils test :: TestTree test = testGroup "CatchAll" [ testProperty "Derived Classes Coverage" (allEqOrdShowMethodsImplemented (Proxy @(CatchAllArg Int))), testCase "when the wrapped receive throws an exception,\ \ CatchAlls receive returns Nothing" $ receive (CatchAllBox BadBox) >>= assertEqual "receive should return Nothing" (Nothing :: Maybe ()), testCase "when the wrapped tryReceive throws an exception,\ \ CatchAlls tryReceive returns a Future that will always return Nothing" $ do f <- tryReceive (CatchAllBox BadBox) r <- tryNow f assertEqual "The Future should return Nothing" (Nothing :: Maybe ()) r, testCase "when the wrapped receiveAfter throws an exception,\ \ CatchAlls receiveAfter should return Nothing" $ receiveAfter (CatchAllBox BadBox) 123 >>= assertEqual "receiveAfter should return Nothing" (Nothing :: Maybe Int), testCase "when the wrapped deliver throws an exception, CatchAlls deliver returns False" $ deliver (CatchAllInput BadInput) () >>= assertEqual "deliver should return False" False ] data BadBox a = BadBox data BadInput a = BadInput instance IsMessageBox BadBox where type Input BadBox = BadInput receive _ = throwIO (stringException "test") tryReceive _ = throwIO (stringException "test") receiveAfter _ _ = throwIO (stringException "test") newInput _ = return BadInput instance IsInput BadInput where deliver _ _ = throwIO (stringException "test")