capnp-0.4.0.0: tests/Regression.hs
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Regression (regressionTests) where
import Test.Hspec
import Capnp (bsToValue, def)
import Capnp.Gen.Aircraft.Pure
import Capnp.Gen.Capnp.Rpc.Pure
regressionTests :: Spec
regressionTests = describe "Regression tests" $ do
it "Should decode abort message successfully (issue #56)" $ do
let bytes =
"\NUL\NUL\NUL\NUL\ETB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SOH\NUL" <>
"\SOH\NUL\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL" <>
"\SOH\NUL\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SOH\NUL" <>
"\NUL\NULz\EOT\NUL\NULYour vat sent an 'unimplemented' " <>
"message for an abort message that its remote peer never " <>
"sent. This is likely a bug in your capnproto library.\NUL\NUL"
msg <- bsToValue bytes
msg `shouldBe` Message'abort def
{ reason =
"Your vat sent an 'unimplemented' message for an abort " <>
"message that its remote peer never sent. This is likely " <>
"a bug in your capnproto library."
, type_ = Exception'Type'failed
}
it "Should decode negative default values correctly (issue #55)" $ do
-- Note that this was never actually broken, but we were getting
-- a warning about a literal overflowing the bounds of its type.
-- It worked anyway, since it became the right value after casting,
-- but the warning has been fixed and this test makes sure it still
-- actually works.
let Defaults{int} = def
int `shouldBe` (-123)