The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::Cover Version 1.18
Devel::Cover is copyright 2001-2012, Paul Johnson (paul@pjcj.net)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <title>File Coverage: blib/lib/Test/Mocha/Spy.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">blib/lib/Test/Mocha/Spy.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c2">95.1%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Test::Mocha::Spy;</td></tr>
<tr><td class="h">2</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: Spy objects</td></tr>
<tr><td class="h">3</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">$Test::Mocha::Spy::VERSION = &#39;0.61&#39;;</td></tr>
<tr><td class="h">4</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L4">12</a></div></td><td></td><td><div>34</div><div>12</div><div>43</div></td><td class="s">use parent &#39;Test::Mocha::SpyBase&#39;;</td></tr>
<tr><td class="h">5</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L5">12</a></div></td><td></td><td><div>470</div><div>13</div><div>216</div></td><td class="s">use strict;</td></tr>
<tr><td class="h">6</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L6">12</a></div></td><td></td><td><div>23</div><div>10</div><div>239</div></td><td class="s">use warnings;</td></tr>
<tr><td class="h">7</td><td colspan="7"></td></tr><tr><td class="h">8</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L8">12</a></div></td><td></td><td><div>26</div><div>191</div><div>463</div></td><td class="s">use Carp 1.22 &#39;croak&#39;;</td></tr>
<tr><td class="h">9</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L9">12</a></div></td><td></td><td><div>29</div><div>10</div><div>248</div></td><td class="s">use Scalar::Util &#39;blessed&#39;;</td></tr>
<tr><td class="h">10</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L10">12</a></div></td><td></td><td><div>26</div><div>12</div><div>148</div></td><td class="s">use Test::Mocha::MethodCall;</td></tr>
<tr><td class="h">11</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L11">12</a></div></td><td></td><td><div>25</div><div>8</div><div>291</div></td><td class="s">use Test::Mocha::Util qw( check_slurpy_arg extract_method_name find_caller );</td></tr>
<tr><td class="h">12</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L12">12</a></div></td><td></td><td><div>23</div><div>11</div><div>70</div></td><td class="s">use Types::Standard &#39;Str&#39;;</td></tr>
<tr><td class="h">13</td><td><div class="c3">12</div><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L13">12</a></div></td><td></td><td><div>3355</div><div>9</div><div>35</div></td><td class="s">use UNIVERSAL::ref;</td></tr>
<tr><td class="h">14</td><td colspan="7"></td></tr><tr><td class="h">15</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">our $AUTOLOAD;</td></tr>
<tr><td class="h">16</td><td colspan="7"></td></tr><tr><td class="h">17</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># can() should return a reference to C&lt;AUTOLOAD()&gt; for all methods</td></tr>
<tr><td class="h">18</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">my %DEFAULT_STUBS = (</td></tr>
<tr><td class="h">19</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;can =&gt; Test::Mocha::MethodStub-&gt;new(</td></tr>
<tr><td class="h">20</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;can&#39;,</td></tr>
<tr><td class="h">21</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; [Str],</td></tr>
<tr><td class="h">22</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responses =&gt; [</td></tr>
<tr><td class="h">23</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub {</td></tr>
<tr><td class="h">24</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, $method_name ) = @_;</td></tr>
<tr><td class="h">25</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return if !$self-&gt;__object-&gt;can($method_name);</td></tr>
<tr><td class="h">26</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return sub {</td></tr>
<tr><td class="h">27</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AUTOLOAD = $method_name;</td></tr>
<tr><td class="h">28</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto &amp;AUTOLOAD;</td></tr>
<tr><td class="h">29</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</td></tr>
<tr><td class="h">30</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">31</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],</td></tr>
<tr><td class="h">32</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;),</td></tr>
<tr><td class="h">33</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;ref =&gt; Test::Mocha::MethodStub-&gt;new(</td></tr>
<tr><td class="h">34</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;ref&#39;,</td></tr>
<tr><td class="h">35</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; [],</td></tr>
<tr><td class="h">36</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responses =&gt; [</td></tr>
<tr><td class="h">37</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub {</td></tr>
<tr><td class="h">38</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($self) = @_;</td></tr>
<tr><td class="h">39</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ref( $self-&gt;__object );</td></tr>
<tr><td class="h">40</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">41</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],</td></tr>
<tr><td class="h">42</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;),</td></tr>
<tr><td class="h">43</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">44</td><td colspan="7"></td></tr><tr><td class="h">45</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __new {</td></tr>
<tr><td class="h">46</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# uncoverable pod</td></tr>
<tr><td class="h">47</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L47">2</a></div></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $class, $object ) = @_;</td></tr>
<tr><td class="h">48</td><td><div class="c3">2</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L48">100</a></div></td><td></td><td></td><td></td><td><div>22</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;croak &quot;Can&#39;t spy on an unblessed reference&quot; if !blessed $object;</td></tr>
<tr><td class="h">49</td><td colspan="7"></td></tr><tr><td class="h">50</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>8</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $args = $class-&gt;SUPER::__new;</td></tr>
<tr><td class="h">51</td><td colspan="7"></td></tr><tr><td class="h">52</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>1</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$args-&gt;{object} = $object;</td></tr>
<tr><td class="h">53</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>5</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$args-&gt;{stubs}&nbsp;&nbsp;= {</td></tr>
<tr><td class="h">54</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map { $_ =&gt; [ $DEFAULT_STUBS{$_} ] }</td></tr>
<tr><td class="h">55</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys %DEFAULT_STUBS</td></tr>
<tr><td class="h">56</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;};</td></tr>
<tr><td class="h">57</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return bless $args, $class;</td></tr>
<tr><td class="h">58</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">59</td><td colspan="7"></td></tr><tr><td class="h">60</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __object {</td></tr>
<tr><td class="h">61</td><td><div class="c3">24</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L61">24</a></div></td><td></td><td><div>220</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self) = @_;</td></tr>
<tr><td class="h">62</td><td><div class="c3">24</div></td><td></td><td></td><td></td><td></td><td><div>71</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;{object};</td></tr>
<tr><td class="h">63</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">64</td><td colspan="7"></td></tr><tr><td class="h">65</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub AUTOLOAD {</td></tr>
<tr><td class="h">66</td><td><div class="c3">13</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L66">13</a></div></td><td></td><td><div>42</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, @args ) = @_;</td></tr>
<tr><td class="h">67</td><td><div class="c3">13</div></td><td></td><td></td><td></td><td></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;check_slurpy_arg(@args);</td></tr>
<tr><td class="h">68</td><td colspan="7"></td></tr><tr><td class="h">69</td><td><div class="c3">13</div></td><td></td><td></td><td></td><td></td><td><div>19</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $method_name = extract_method_name($AUTOLOAD);</td></tr>
<tr><td class="h">70</td><td colspan="7"></td></tr><tr><td class="h">71</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# record the method call for verification</td></tr>
<tr><td class="h">72</td><td><div class="c3">13</div></td><td></td><td></td><td></td><td></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $method_call = Test::Mocha::MethodCall-&gt;new(</td></tr>
<tr><td class="h">73</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invocant =&gt; $self,</td></tr>
<tr><td class="h">74</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; $method_name,</td></tr>
<tr><td class="h">75</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; \@args,</td></tr>
<tr><td class="h">76</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&nbsp;&nbsp;&nbsp;=&gt; [find_caller],</td></tr>
<tr><td class="h">77</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">78</td><td colspan="7"></td></tr><tr><td class="h">79</td><td><div class="c3">13</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L79">100</a></div></td><td></td><td></td><td></td><td><div>30</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ( $self-&gt;CaptureMode ) {</td></tr>
<tr><td class="h">80</td><td><div class="c3">1</div></td><td><div class="c0" title="T/-"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L80">50</a></div></td><td></td><td></td><td></td><td><div>1</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;croak(</td></tr>
<tr><td class="h">81</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf</td></tr>
<tr><td class="h">82</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qq{Can&#39;t stub object method &quot;%s&quot; because it can&#39;t be located via package &quot;%s&quot;},</td></tr>
<tr><td class="h">83</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$method_name,</td></tr>
<tr><td class="h">84</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref( $self-&gt;__object )</td></tr>
<tr><td class="h">85</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) if !$self-&gt;__object-&gt;can($method_name);</td></tr>
<tr><td class="h">86</td><td colspan="7"></td></tr><tr><td class="h">87</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;NumMethodCalls( $self-&gt;NumMethodCalls + 1 );</td></tr>
<tr><td class="h">88</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;LastMethodCall($method_call);</td></tr>
<tr><td class="h">89</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">90</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">91</td><td colspan="7"></td></tr><tr><td class="h">92</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# record the method call to allow for verification</td></tr>
<tr><td class="h">93</td><td><div class="c3">12</div><div class="c3">12</div></td><td></td><td></td><td></td><td></td><td><div>8</div><div>20</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;push @{ $self-&gt;__calls }, $method_call;</td></tr>
<tr><td class="h">94</td><td colspan="7"></td></tr><tr><td class="h">95</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# find a stub to return a response</td></tr>
<tr><td class="h">96</td><td><div class="c3">12</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L96">100</a></div></td><td></td><td></td><td></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ( my $stub = $self-&gt;__find_stub($method_call) ) {</td></tr>
<tr><td class="h">97</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>8</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $stub-&gt;execute_next_response( $self, @args );</td></tr>
<tr><td class="h">98</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">99</td><td colspan="7"></td></tr><tr><td class="h">100</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# delegate the method call to the real object</td></tr>
<tr><td class="h">101</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;croak(</td></tr>
<tr><td class="h">102</td><td><div class="c3">9</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L102">100</a></div></td><td></td><td></td><td></td><td><div>11</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf</td></tr>
<tr><td class="h">103</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qq{Can&#39;t call object method &quot;%s&quot; because it can&#39;t be located via package &quot;%s&quot;},</td></tr>
<tr><td class="h">104</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$method_name,</td></tr>
<tr><td class="h">105</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref( $self-&gt;__object )</td></tr>
<tr><td class="h">106</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;) if !$self-&gt;__object-&gt;can($method_name);</td></tr>
<tr><td class="h">107</td><td colspan="7"></td></tr><tr><td class="h">108</td><td><div class="c3">8</div></td><td></td><td></td><td></td><td></td><td><div>10</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;__object-&gt;$method_name(@args);</td></tr>
<tr><td class="h">109</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">110</td><td colspan="7"></td></tr><tr><td class="h">111</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub isa {</td></tr>
<tr><td class="h">112</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# uncoverable pod</td></tr>
<tr><td class="h">113</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L113">2</a></div></td><td><div class="c3">0</div></td><td><div>210</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, $class ) = @_;</td></tr>
<tr><td class="h">114</td><td colspan="7"></td></tr><tr><td class="h">115</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Handle internal calls from UNIVERSAL::ref::_hook()</td></tr>
<tr><td class="h">116</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# when ref($spy) is called</td></tr>
<tr><td class="h">117</td><td><div class="c3">2</div></td><td><div class="c0" title="-/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L117">50</a></div></td><td></td><td></td><td></td><td><div>5</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return 1 if $class eq __PACKAGE__;</td></tr>
<tr><td class="h">118</td><td colspan="7"></td></tr><tr><td class="h">119</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$AUTOLOAD = &#39;isa&#39;;</td></tr>
<tr><td class="h">120</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>4</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;goto &amp;AUTOLOAD;</td></tr>
<tr><td class="h">121</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">122</td><td colspan="7"></td></tr><tr><td class="h">123</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub DOES {</td></tr>
<tr><td class="h">124</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# uncoverable pod</td></tr>
<tr><td class="h">125</td><td><div class="c3">16</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L125">16</a></div></td><td><div class="c3">0</div></td><td><div>384</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, $role ) = @_;</td></tr>
<tr><td class="h">126</td><td colspan="7"></td></tr><tr><td class="h">127</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Handle internal calls from UNIVERSAL::ref::_hook()</td></tr>
<tr><td class="h">128</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# when ref($mock) is called</td></tr>
<tr><td class="h">129</td><td><div class="c3">16</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L129">100</a></div></td><td></td><td></td><td></td><td><div>19</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return 1 if $role eq __PACKAGE__;</td></tr>
<tr><td class="h">130</td><td colspan="7"></td></tr><tr><td class="h">131</td><td><div class="c3">11</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-Spy-pm--branch.html#L131">100</a></div></td><td></td><td></td><td></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return if !ref $self;</td></tr>
<tr><td class="h">132</td><td colspan="7"></td></tr><tr><td class="h">133</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>6</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$AUTOLOAD = &#39;DOES&#39;;</td></tr>
<tr><td class="h">134</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>4</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;goto &amp;AUTOLOAD;</td></tr>
<tr><td class="h">135</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">136</td><td colspan="7"></td></tr><tr><td class="h">137</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub can {</td></tr>
<tr><td class="h">138</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# uncoverable pod</td></tr>
<tr><td class="h">139</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L139">2</a></div></td><td><div class="c3">0</div></td><td><div>742</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, $method_name ) = @_;</td></tr>
<tr><td class="h">140</td><td colspan="7"></td></tr><tr><td class="h">141</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Handle can(&#39;CARP_TRACE&#39;) for internal croak()&#39;s (Carp v1.32+)</td></tr>
<tr><td class="h">142</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#return if $method_name eq &#39;CARP_TRACE&#39;;</td></tr>
<tr><td class="h">143</td><td colspan="7"></td></tr><tr><td class="h">144</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$AUTOLOAD = &#39;can&#39;;</td></tr>
<tr><td class="h">145</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;goto &amp;AUTOLOAD;</td></tr>
<tr><td class="h">146</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">147</td><td colspan="7"></td></tr><tr><td class="h">148</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub ref {&nbsp;&nbsp;## no critic (ProhibitBuiltinHomonyms)</td></tr>
<tr><td class="h">149</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# uncoverable pod</td></tr>
<tr><td class="h">150</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L150">1</a></div></td><td><div class="c3">0</div></td><td><div>4</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$AUTOLOAD = &#39;ref&#39;;</td></tr>
<tr><td class="h">151</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>1</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;goto &amp;AUTOLOAD;</td></tr>
<tr><td class="h">152</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">153</td><td colspan="7"></td></tr><tr><td class="h">154</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># Don&#39;t let AUTOLOAD() handle DESTROY() so that object can be destroyed</td></tr>
<tr><td class="h">155</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-Spy-pm--subroutine.html#L155">1</a></div></td><td></td><td><div>2</div></td><td class="s">sub DESTROY { }</td></tr>
<tr><td class="h">156</td><td colspan="7"></td></tr><tr><td class="h">157</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>