packages feed

bind-marshal-0.1: test/verify_desaction_dynamic_nop_provider_fail.hs

-- Copyright   :  (C) 2009 Corey O'Connor
-- License     :  BSD-style (see the file LICENSE)

-- The easiest failure case to work with is requesting a non-zero buffer from the NopProvider.  this
-- should always fail.
-- 
-- This might actually work as a test of laziness as well: The laziness is such that the
-- deserialization monad is not executed until the vs value is demanded?
import Bind.Marshal.Prelude
import Bind.Marshal.Verify

import Bind.Marshal.Action
import Bind.Marshal.DataModel.Base
import Bind.Marshal.DesAction.Base
import Bind.Marshal.DesAction.Dynamic
import Bind.Marshal.DesAction.Static
import Bind.Marshal.DesAction.Verify
import Bind.Marshal.StaticProperties
import Bind.Marshal.StdLib.Des
import Bind.Marshal.Verify.Dynamic

import Control.DeepSeq
import Control.Exception
import "monads-tf" Control.Monad.Trans

import Foreign.Storable
import Foreign.Marshal.Alloc
import Foreign.Ptr

import System.IO

t_static = do
    () <- des
    static_return ()

t_0 i = do 
    replicateM i $ dyn_action $ do
        x :: Word32 <- des
        static_return x

main = run_test $ do
    verify1 "t_1" $ liftIOResult $ do
        let des_buf_provider = NopDelegate
        assert_throws "NopProvider did not fail on > 0 sized request" $ do 
            vs <- des_from_buffer_delegate (dyn_action $! t_0 1024) des_buf_provider 
            fail "expected exception" :: IO PropertyResult
    returnM () :: Test ()