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/SpyBase.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">blib/lib/Test/Mocha/SpyBase.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c2">94.4%</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::SpyBase;</td></tr>
<tr><td class="h">2</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: Abstract base class for Spy and Mock</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::SpyBase::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-SpyBase-pm--subroutine.html#L4">12</a></div></td><td></td><td><div>3999</div><div>11</div><div>219</div></td><td class="s">use strict;</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-SpyBase-pm--subroutine.html#L5">12</a></div></td><td></td><td><div>25</div><div>7</div><div>186</div></td><td class="s">use warnings;</td></tr>
<tr><td class="h">6</td><td colspan="7"></td></tr><tr><td class="h">7</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-SpyBase-pm--subroutine.html#L7">12</a></div></td><td></td><td><div>25</div><div>144</div><div>355</div></td><td class="s">use Carp 1.22 &#39;croak&#39;;</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-SpyBase-pm--subroutine.html#L8">12</a></div></td><td></td><td><div>3882</div><div>286975</div><div>54</div></td><td class="s">use Types::Standard qw( ArrayRef HashRef );</td></tr>
<tr><td class="h">9</td><td colspan="7"></td></tr><tr><td class="h">10</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># class attributes</td></tr>
<tr><td class="h">11</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">## no critic (NamingConventions::Capitalization)</td></tr>
<tr><td class="h">12</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">our $CaptureMode = 0;</td></tr>
<tr><td class="h">13</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">my $NumMethodCalls = 0;</td></tr>
<tr><td class="h">14</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">my $LastMethodCall;</td></tr>
<tr><td class="h">15</td><td colspan="7"></td></tr><tr><td class="h">16</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub CaptureMode {</td></tr>
<tr><td class="h">17</td><td><div class="c3">273</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L17">273</a></div></td><td><div class="c0">0</div></td><td><div>152</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $class, $value ) = @_;</td></tr>
<tr><td class="h">18</td><td><div class="c3">273</div></td><td></td><td></td><td></td><td></td><td><div>400</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $CaptureMode;</td></tr>
<tr><td class="h">19</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">20</td><td colspan="7"></td></tr><tr><td class="h">21</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub NumMethodCalls {</td></tr>
<tr><td class="h">22</td><td><div class="c3">262</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L22">262</a></div></td><td><div class="c0">0</div></td><td><div>147</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $class, $value ) = @_;</td></tr>
<tr><td class="h">23</td><td colspan="7"></td></tr><tr><td class="h">24</td><td><div class="c3">262</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L24">100</a></div></td><td></td><td></td><td></td><td><div>251</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ( defined $value ) {</td></tr>
<tr><td class="h">25</td><td><div class="c3">131</div></td><td></td><td></td><td></td><td></td><td><div>80</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$NumMethodCalls = $value;</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;}</td></tr>
<tr><td class="h">27</td><td><div class="c3">262</div></td><td></td><td></td><td></td><td></td><td><div>244</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $NumMethodCalls;</td></tr>
<tr><td class="h">28</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">29</td><td colspan="7"></td></tr><tr><td class="h">30</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub LastMethodCall {</td></tr>
<tr><td class="h">31</td><td><div class="c3">131</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L31">131</a></div></td><td><div class="c0">0</div></td><td><div>80</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $class, $value ) = @_;</td></tr>
<tr><td class="h">32</td><td colspan="7"></td></tr><tr><td class="h">33</td><td><div class="c3">131</div></td><td><div class="c0" title="T/-"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L33">50</a></div></td><td></td><td></td><td></td><td><div>133</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ( defined $value ) {</td></tr>
<tr><td class="h">34</td><td><div class="c3">131</div></td><td></td><td></td><td></td><td></td><td><div>84</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$LastMethodCall = $value;</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;}</td></tr>
<tr><td class="h">36</td><td><div class="c3">131</div></td><td></td><td></td><td></td><td></td><td><div>113</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $LastMethodCall;</td></tr>
<tr><td class="h">37</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">38</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">## use critic</td></tr>
<tr><td class="h">39</td><td colspan="7"></td></tr><tr><td class="h">40</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __new {</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;# uncoverable pod</td></tr>
<tr><td class="h">42</td><td><div class="c3">34</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L42">34</a></div></td><td></td><td><div>84</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my %args = (</td></tr>
<tr><td class="h">43</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calls =&gt; [],&nbsp;&nbsp;# ArrayRef[ MethodCall ]</td></tr>
<tr><td class="h">44</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stubs =&gt; {},&nbsp;&nbsp;# $method_name =&gt; ArrayRef[ MethodStub ]</td></tr>
<tr><td class="h">45</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">46</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>56</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return \%args;</td></tr>
<tr><td class="h">47</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">48</td><td colspan="7"></td></tr><tr><td class="h">49</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __calls {</td></tr>
<tr><td class="h">50</td><td><div class="c3">244</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L50">244</a></div></td><td></td><td><div>323</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self) = @_;</td></tr>
<tr><td class="h">51</td><td><div class="c3">244</div></td><td></td><td></td><td></td><td></td><td><div>333</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;{calls};</td></tr>
<tr><td class="h">52</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">53</td><td colspan="7"></td></tr><tr><td class="h">54</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __stubs {</td></tr>
<tr><td class="h">55</td><td><div class="c3">183</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L55">183</a></div></td><td></td><td><div>106</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self) = @_;</td></tr>
<tr><td class="h">56</td><td><div class="c3">183</div></td><td></td><td></td><td></td><td></td><td><div>173</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;{stubs};</td></tr>
<tr><td class="h">57</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">58</td><td colspan="7"></td></tr><tr><td class="h">59</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __find_stub {</td></tr>
<tr><td class="h">60</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# &quot;&quot;&quot;</td></tr>
<tr><td class="h">61</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Returns the first stub that satisfies the given method call.</td></tr>
<tr><td class="h">62</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Returns undef if no stub is found.</td></tr>
<tr><td class="h">63</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# &quot;&quot;&quot;</td></tr>
<tr><td class="h">64</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">65</td><td><div class="c3">141</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L65">141</a></div></td><td></td><td><div>84</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $self, $method_call ) = @_;</td></tr>
<tr><td class="h">66</td><td><div class="c3">141</div></td><td></td><td></td><td></td><td></td><td><div>164</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $stubs = $self-&gt;__stubs;</td></tr>
<tr><td class="h">67</td><td colspan="7"></td></tr><tr><td class="h">68</td><td><div class="c3">141</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L68">100</a></div></td><td></td><td></td><td></td><td><div>209</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return if !defined $stubs-&gt;{ $method_call-&gt;name };</td></tr>
<tr><td class="h">69</td><td colspan="7"></td></tr><tr><td class="h">70</td><td><div class="c3">62</div><div class="c3">62</div></td><td></td><td></td><td></td><td></td><td><div>48</div><div>72</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $stub ( @{ $stubs-&gt;{ $method_call-&gt;name } } ) {</td></tr>
<tr><td class="h">71</td><td><div class="c3">68</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L71">100</a></div></td><td></td><td></td><td></td><td><div>95</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $stub if $stub-&gt;__satisfied_by($method_call);</td></tr>
<tr><td class="h">72</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">73</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>6</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">74</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">75</td><td colspan="7"></td></tr><tr><td class="h">76</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub __capture_method_call {</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;# &quot;&quot;&quot;</td></tr>
<tr><td class="h">78</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Get the last method called on a mock object,</td></tr>
<tr><td class="h">79</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# removes it from the invocation history,</td></tr>
<tr><td class="h">80</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# and restores the last method stub response.</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;# &quot;&quot;&quot;</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;# uncoverable pod</td></tr>
<tr><td class="h">83</td><td><div class="c3">140</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Test-Mocha-SpyBase-pm--subroutine.html#L83">140</a></div></td><td></td><td><div>105</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ( $class, $coderef ) = @_;</td></tr>
<tr><td class="h">84</td><td colspan="7"></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;### assert: !$CaptureMode</td></tr>
<tr><td class="h">86</td><td><div class="c3">140</div></td><td></td><td></td><td></td><td></td><td><div>81</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$NumMethodCalls = 0;</td></tr>
<tr><td class="h">87</td><td><div class="c3">140</div></td><td></td><td></td><td></td><td></td><td><div>105</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$LastMethodCall = undef;</td></tr>
<tr><td class="h">88</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">89</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Execute the coderef. This should in turn include a method call on</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;&nbsp;&nbsp;&nbsp;&nbsp;# mock, which should be handled by its AUTOLOAD method.</td></tr>
<tr><td class="h">91</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;## no critic (Variables::ProhibitLocalVars)</td></tr>
<tr><td class="h">92</td><td><div class="c3">140</div><div class="c3">140</div></td><td></td><td></td><td></td><td></td><td><div>415</div><div>280</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local $CaptureMode = 1;</td></tr>
<tr><td class="h">93</td><td><div class="c3">140</div></td><td></td><td></td><td></td><td></td><td><div>195</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$coderef-&gt;();</td></tr>
<tr><td class="h">94</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">95</td><td colspan="7"></td></tr><tr><td class="h">96</td><td><div class="c3">131</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L96">100</a></div></td><td></td><td></td><td></td><td><div>242</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;croak &#39;Coderef must have a method invoked on a mock object&#39;</td></tr>
<tr><td class="h">97</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if $NumMethodCalls == 0;</td></tr>
<tr><td class="h">98</td><td><div class="c3">130</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Test-Mocha-SpyBase-pm--branch.html#L98">100</a></div></td><td></td><td></td><td></td><td><div>211</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;croak &#39;Coderef must not have multiple methods invoked on a mock object&#39;</td></tr>
<tr><td class="h">99</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if $NumMethodCalls &gt; 1;</td></tr>
<tr><td class="h">100</td><td colspan="7"></td></tr><tr><td class="h">101</td><td><div class="c3">129</div></td><td></td><td></td><td></td><td></td><td><div>157</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $LastMethodCall;</td></tr>
<tr><td class="h">102</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">103</td><td colspan="7"></td></tr><tr><td class="h">104</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>