<div dir="ltr">Hi Edmond,<div><br></div><div>Thanks for your reply, it was very helpful.</div><div><br></div><div>I had something like:</div><div><br></div><div><div>    ?assertMatch({timeout,_}, </div><div>        try</div><div>            

<span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">gen_statem:call(foo, bar, 5000),</span></div><div>            timeout_was_not_thrown</div><div>        catch</div><div>            A -> A</div><div>        end).</div></div><div><br></div><div>Adding the exit class as you have suggested in the catch pattern match seems to do the trick:</div><div><br></div><div>

<div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">    ?assertMatch({timeout,_}, </div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">        try</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">           <span> </span><span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">gen_statem:call(foo, bar, 5000),</span></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">            timeout_was_not_thrown</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">        catch</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">            exit:A -> A</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">        end).</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Thanks again.</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Jared</div>

</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 15, 2018 at 10:40 PM, Edmond Begumisa <span dir="ltr"><<a href="mailto:ebegumisa@hysteria-tech.com" target="_blank">ebegumisa@hysteria-tech.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On Wed, 15 Aug 2018 14:17:40 +1000, Jared Davison <<a href="mailto:jared@medical-objects.com.au" target="_blank">jared@medical-objects.com.au</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
Could you please assist me in using common test.<br>
<br>
I'm trying to ensure that a gen_statem:call/3 raises a {timeout, _} in a common test case.<br>
<br>
At first I tried a catch because I thought it would be a throw but it catches nothing.<br>
</blockquote>
<br></span>
Sounds like you're catching the wrong exception class. For gen_* timeouts, I believe the exception class is 'exit' rather than 'throw'.<span><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Digging into the gen_statem:call/3 code it appears that it uses erlang:raise/3 which stops the >execution of the process, so that makes sense that catch does nothing.<br>
</blockquote>
<br></span>
Catch should do something if you're catching the right exception class ('exit') or matching any exception class ('_'). It is still possible to catch exceptions generated using erlang:raise/3 for any class ('error'|'throw'|'exit'). E.g from an erlang shell ...<br>
<br>
    $ try erlang:raise(exit, foo, []) catch exit:foo -> yep end.<br>
        <br>
... returns 'yep'. As do...<br>
<br>
    $ try erlang:raise(throw, foo, []) catch throw:foo -> yep end.<br>
    $ try erlang:raise(error, foo, []) catch error:foo -> yep end.<br>
<br>
... so do...<br>
<br>
    $ try exit(foo) catch exit:foo -> yep end.<br>
    $ try throw(foo) catch throw:foo -> yep end.<br>
    $ try error(foo) catch error:foo -> yep end.<br>
<br>
... and also ...<br>
<br>
    $ try erlang:raise(exit, foo, []) catch _:foo -> yep end.<br>
    $ try erlang:raise(error, foo, []) catch _:foo -> yep end.<br>
    $ try erlang:raise(throw, foo, []) catch _:foo -> yep end.<br>
    $ try exit(foo) catch _:foo -> yep end.<br>
    $ try throw(foo) catch _:foo -> yep end.<br>
    $ try error(foo) catch _:foo -> yep end.<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I want to be sure that the process was stopped with the a particular reason, and pass the test if >it does.<br>
Is this possible in Common Test?<br>
</blockquote>
<br></span>
Should be. My guess is that your test case is catching something like so...<br>
<br>
    <snip><br>
<br>
    try gen_statem:call(foo, bar, 5000)<br>
    catch throw:{timeout,_} -> ..<br>
    end.<br>
<br>
    </snip><br>
<br>
Try changing that to...<br>
<br>
    <snip><br>
<br>
    try gen_statem:call(foo, bar, 5000)<br>
    catch exit:{timeout,_} -> ..<br>
    end.<br>
<br>
    </snip><br>
<br>
- Edmond -<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks<br>
<br>
Jared<br>
<br>
<br>
<br><span class="m_5096727446769029086m_1464755394851299774HOEnZb"><font color="#888888">
</font></span></blockquote><span class="m_5096727446769029086m_1464755394851299774HOEnZb"><font color="#888888">
<br>
<br>
<br>
-- <br>
Using Opera's mail client: <a href="http://www.opera.com/mail/" rel="noreferrer" target="_blank">http://www.opera.com/mail/</a><br>
</font></span></blockquote></div></div><div class="m_5096727446769029086gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div dir="ltr"><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:Verdana,Helvetica,Arial,sans-serif;font-size:12px"><br></span></div></div></div></div></div>