Created
January 24, 2009 06:34
-
-
Save ngerakines/51367 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'> | |
<head> | |
<title>app/controllers/application.rb - C0 code coverage information</title> | |
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style> | |
<style type='text/css'>span.marked0 { | |
background-color: rgb(185, 210, 200); | |
display: block; | |
} | |
span.marked1 { | |
background-color: rgb(190, 215, 205); | |
display: block; | |
} | |
span.inferred0 { | |
background-color: rgb(175, 200, 200); | |
display: block; | |
} | |
span.inferred1 { | |
background-color: rgb(180, 205, 205); | |
display: block; | |
} | |
span.uncovered0 { | |
background-color: rgb(225, 110, 110); | |
display: block; | |
} | |
span.uncovered1 { | |
background-color: rgb(235, 120, 120); | |
display: block; | |
} | |
span.overview { | |
border-bottom: 8px solid black; | |
} | |
div.overview { | |
border-bottom: 8px solid black; | |
} | |
body { | |
font-family: verdana, arial, helvetica; | |
} | |
div.footer { | |
font-size: 68%; | |
margin-top: 1.5em; | |
} | |
h1, h2, h3, h4, h5, h6 { | |
margin-bottom: 0.5em; | |
} | |
h5 { | |
margin-top: 0.5em; | |
} | |
.hidden { | |
display: none; | |
} | |
div.separator { | |
height: 10px; | |
} | |
/* Commented out for better readability, esp. on IE */ | |
/* | |
table tr td, table tr th { | |
font-size: 68%; | |
} | |
td.value table tr td { | |
font-size: 11px; | |
} | |
*/ | |
table.percent_graph { | |
height: 12px; | |
border: #808080 1px solid; | |
empty-cells: show; | |
} | |
table.percent_graph td.covered { | |
height: 10px; | |
background: #00f000; | |
} | |
table.percent_graph td.uncovered { | |
height: 10px; | |
background: #e00000; | |
} | |
table.percent_graph td.NA { | |
height: 10px; | |
background: #eaeaea; | |
} | |
table.report { | |
border-collapse: collapse; | |
width: 100%; | |
} | |
table.report td.heading { | |
background: #dcecff; | |
border: #d0d0d0 1px solid; | |
font-weight: bold; | |
text-align: center; | |
} | |
table.report td.heading:hover { | |
background: #c0ffc0; | |
} | |
table.report td.text { | |
border: #d0d0d0 1px solid; | |
} | |
table.report td.value { | |
text-align: right; | |
border: #d0d0d0 1px solid; | |
} | |
table.report tr.light { | |
background-color: rgb(240, 240, 245); | |
} | |
table.report tr.dark { | |
background-color: rgb(230, 230, 235); | |
} | |
</style> | |
<script type='text/javascript'> | |
// <![CDATA[ | |
function toggleCode( id ) { | |
if ( document.getElementById ) | |
elem = document.getElementById( id ); | |
else if ( document.all ) | |
elem = eval( "document.all." + id ); | |
else | |
return false; | |
elemStyle = elem.style; | |
if ( elemStyle.display != "block" ) { | |
elemStyle.display = "block" | |
} else { | |
elemStyle.display = "none" | |
} | |
return true; | |
} | |
// Make cross-references hidden by default | |
document.writeln( "<style type="text/css">span.cross-ref { display: none }</style>" ) | |
// ]]> | |
</script> | |
<style type='text/css'>span.run0 { | |
background-color: rgb(178, 204, 255); | |
display: block; | |
} | |
span.run1 { | |
background-color: rgb(178, 206, 255); | |
display: block; | |
} | |
span.run2 { | |
background-color: rgb(178, 209, 255); | |
display: block; | |
} | |
span.run3 { | |
background-color: rgb(178, 211, 255); | |
display: block; | |
} | |
span.run4 { | |
background-color: rgb(178, 214, 255); | |
display: block; | |
} | |
span.run5 { | |
background-color: rgb(178, 218, 255); | |
display: block; | |
} | |
span.run6 { | |
background-color: rgb(178, 220, 255); | |
display: block; | |
} | |
span.run7 { | |
background-color: rgb(178, 223, 255); | |
display: block; | |
} | |
span.run8 { | |
background-color: rgb(178, 225, 255); | |
display: block; | |
} | |
span.run9 { | |
background-color: rgb(178, 228, 255); | |
display: block; | |
} | |
span.run10 { | |
background-color: rgb(178, 232, 255); | |
display: block; | |
} | |
span.run11 { | |
background-color: rgb(178, 234, 255); | |
display: block; | |
} | |
span.run12 { | |
background-color: rgb(178, 237, 255); | |
display: block; | |
} | |
span.run13 { | |
background-color: rgb(178, 239, 255); | |
display: block; | |
} | |
span.run14 { | |
background-color: rgb(178, 242, 255); | |
display: block; | |
} | |
span.run15 { | |
background-color: rgb(178, 246, 255); | |
display: block; | |
} | |
span.run16 { | |
background-color: rgb(178, 248, 255); | |
display: block; | |
} | |
span.run17 { | |
background-color: rgb(178, 251, 255); | |
display: block; | |
} | |
span.run18 { | |
background-color: rgb(178, 253, 255); | |
display: block; | |
} | |
span.run19 { | |
background-color: rgb(178, 255, 253); | |
display: block; | |
} | |
span.run20 { | |
background-color: rgb(178, 255, 249); | |
display: block; | |
} | |
span.run21 { | |
background-color: rgb(178, 255, 247); | |
display: block; | |
} | |
span.run22 { | |
background-color: rgb(178, 255, 244); | |
display: block; | |
} | |
span.run23 { | |
background-color: rgb(178, 255, 242); | |
display: block; | |
} | |
span.run24 { | |
background-color: rgb(178, 255, 239); | |
display: block; | |
} | |
span.run25 { | |
background-color: rgb(178, 255, 235); | |
display: block; | |
} | |
span.run26 { | |
background-color: rgb(178, 255, 233); | |
display: block; | |
} | |
span.run27 { | |
background-color: rgb(178, 255, 230); | |
display: block; | |
} | |
span.run28 { | |
background-color: rgb(178, 255, 228); | |
display: block; | |
} | |
span.run29 { | |
background-color: rgb(178, 255, 225); | |
display: block; | |
} | |
span.run30 { | |
background-color: rgb(178, 255, 221); | |
display: block; | |
} | |
span.run31 { | |
background-color: rgb(178, 255, 219); | |
display: block; | |
} | |
span.run32 { | |
background-color: rgb(178, 255, 216); | |
display: block; | |
} | |
span.run33 { | |
background-color: rgb(178, 255, 214); | |
display: block; | |
} | |
span.run34 { | |
background-color: rgb(178, 255, 211); | |
display: block; | |
} | |
span.run35 { | |
background-color: rgb(178, 255, 207); | |
display: block; | |
} | |
span.run36 { | |
background-color: rgb(178, 255, 205); | |
display: block; | |
} | |
span.run37 { | |
background-color: rgb(178, 255, 202); | |
display: block; | |
} | |
span.run38 { | |
background-color: rgb(178, 255, 200); | |
display: block; | |
} | |
span.run39 { | |
background-color: rgb(178, 255, 197); | |
display: block; | |
} | |
span.run40 { | |
background-color: rgb(178, 255, 193); | |
display: block; | |
} | |
span.run41 { | |
background-color: rgb(178, 255, 191); | |
display: block; | |
} | |
span.run42 { | |
background-color: rgb(178, 255, 188); | |
display: block; | |
} | |
span.run43 { | |
background-color: rgb(178, 255, 186); | |
display: block; | |
} | |
span.run44 { | |
background-color: rgb(178, 255, 183); | |
display: block; | |
} | |
span.run45 { | |
background-color: rgb(178, 255, 179); | |
display: block; | |
} | |
span.run46 { | |
background-color: rgb(179, 255, 178); | |
display: block; | |
} | |
span.run47 { | |
background-color: rgb(182, 255, 178); | |
display: block; | |
} | |
span.run48 { | |
background-color: rgb(184, 255, 178); | |
display: block; | |
} | |
span.run49 { | |
background-color: rgb(187, 255, 178); | |
display: block; | |
} | |
span.run50 { | |
background-color: rgb(191, 255, 178); | |
display: block; | |
} | |
span.run51 { | |
background-color: rgb(193, 255, 178); | |
display: block; | |
} | |
span.run52 { | |
background-color: rgb(196, 255, 178); | |
display: block; | |
} | |
span.run53 { | |
background-color: rgb(198, 255, 178); | |
display: block; | |
} | |
span.run54 { | |
background-color: rgb(201, 255, 178); | |
display: block; | |
} | |
span.run55 { | |
background-color: rgb(205, 255, 178); | |
display: block; | |
} | |
span.run56 { | |
background-color: rgb(207, 255, 178); | |
display: block; | |
} | |
span.run57 { | |
background-color: rgb(210, 255, 178); | |
display: block; | |
} | |
span.run58 { | |
background-color: rgb(212, 255, 178); | |
display: block; | |
} | |
span.run59 { | |
background-color: rgb(215, 255, 178); | |
display: block; | |
} | |
span.run60 { | |
background-color: rgb(219, 255, 178); | |
display: block; | |
} | |
span.run61 { | |
background-color: rgb(221, 255, 178); | |
display: block; | |
} | |
span.run62 { | |
background-color: rgb(224, 255, 178); | |
display: block; | |
} | |
span.run63 { | |
background-color: rgb(226, 255, 178); | |
display: block; | |
} | |
span.run64 { | |
background-color: rgb(229, 255, 178); | |
display: block; | |
} | |
span.run65 { | |
background-color: rgb(233, 255, 178); | |
display: block; | |
} | |
span.run66 { | |
background-color: rgb(235, 255, 178); | |
display: block; | |
} | |
span.run67 { | |
background-color: rgb(238, 255, 178); | |
display: block; | |
} | |
span.run68 { | |
background-color: rgb(240, 255, 178); | |
display: block; | |
} | |
span.run69 { | |
background-color: rgb(243, 255, 178); | |
display: block; | |
} | |
span.run70 { | |
background-color: rgb(247, 255, 178); | |
display: block; | |
} | |
span.run71 { | |
background-color: rgb(249, 255, 178); | |
display: block; | |
} | |
span.run72 { | |
background-color: rgb(252, 255, 178); | |
display: block; | |
} | |
span.run73 { | |
background-color: rgb(255, 255, 178); | |
display: block; | |
} | |
span.run74 { | |
background-color: rgb(255, 252, 178); | |
display: block; | |
} | |
span.run75 { | |
background-color: rgb(255, 248, 178); | |
display: block; | |
} | |
span.run76 { | |
background-color: rgb(255, 246, 178); | |
display: block; | |
} | |
span.run77 { | |
background-color: rgb(255, 243, 178); | |
display: block; | |
} | |
span.run78 { | |
background-color: rgb(255, 240, 178); | |
display: block; | |
} | |
span.run79 { | |
background-color: rgb(255, 238, 178); | |
display: block; | |
} | |
span.run80 { | |
background-color: rgb(255, 234, 178); | |
display: block; | |
} | |
span.run81 { | |
background-color: rgb(255, 232, 178); | |
display: block; | |
} | |
span.run82 { | |
background-color: rgb(255, 229, 178); | |
display: block; | |
} | |
span.run83 { | |
background-color: rgb(255, 226, 178); | |
display: block; | |
} | |
span.run84 { | |
background-color: rgb(255, 224, 178); | |
display: block; | |
} | |
span.run85 { | |
background-color: rgb(255, 220, 178); | |
display: block; | |
} | |
span.run86 { | |
background-color: rgb(255, 218, 178); | |
display: block; | |
} | |
span.run87 { | |
background-color: rgb(255, 215, 178); | |
display: block; | |
} | |
span.run88 { | |
background-color: rgb(255, 212, 178); | |
display: block; | |
} | |
span.run89 { | |
background-color: rgb(255, 210, 178); | |
display: block; | |
} | |
span.run90 { | |
background-color: rgb(255, 206, 178); | |
display: block; | |
} | |
span.run91 { | |
background-color: rgb(255, 204, 178); | |
display: block; | |
} | |
span.run92 { | |
background-color: rgb(255, 201, 178); | |
display: block; | |
} | |
span.run93 { | |
background-color: rgb(255, 198, 178); | |
display: block; | |
} | |
span.run94 { | |
background-color: rgb(255, 196, 178); | |
display: block; | |
} | |
span.run95 { | |
background-color: rgb(255, 192, 178); | |
display: block; | |
} | |
span.run96 { | |
background-color: rgb(255, 189, 178); | |
display: block; | |
} | |
span.run97 { | |
background-color: rgb(255, 187, 178); | |
display: block; | |
} | |
span.run98 { | |
background-color: rgb(255, 184, 178); | |
display: block; | |
} | |
span.run99 { | |
background-color: rgb(255, 182, 178); | |
display: block; | |
} | |
span.run100 { | |
background-color: rgb(255, 178, 178); | |
display: block; | |
} | |
</style> | |
</head> | |
<body> | |
<h3>C0 code coverage information</h3> | |
<p>Generated on Tue May 30 23:34:43 CEST 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.5.0</a> | |
</p> | |
<hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this... | |
</span><span class='marked1'>and this: this line is also marked as covered. | |
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this, | |
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics). | |
</span><span class='uncovered0'>Finally, here's a line marked as not executed. | |
</span></pre> | |
<table class='report'> | |
<thead> | |
<tr> | |
<td class='heading'>Name</td> | |
<td class='heading'>Total lines</td> | |
<td class='heading'>Lines of code</td> | |
<td class='heading'>Total coverage</td> | |
<td class='heading'>Code coverage</td> | |
</tr> | |
</thead> | |
<tbody> | |
<tr class='light'> | |
<td> | |
<a href='app-controllers-application_rb.html'>app/controllers/application.rb</a> | |
</td> | |
<td class='value'> | |
<tt>39</tt> | |
</td> | |
<td class='value'> | |
<tt>29</tt> | |
</td> | |
<td> | |
<table cellspacing='0' cellpadding='0' align='right'> | |
<tr> | |
<td> | |
<tt>46.2%</tt> </td> | |
<td> | |
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'> | |
<tr> | |
<td class='covered' width='46' /> | |
<td class='uncovered' width='54' /> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
<td> | |
<table cellspacing='0' cellpadding='0' align='right'> | |
<tr> | |
<td><tt>31.0%</tt> </td><td> | |
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'> | |
<tr><td class='covered' width='31' /><td class='uncovered' width='69' /></tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</tbody> | |
</table><pre><span class="inferred0"><a name="line1"></a>1 %% Copyright (c) 2008 Nick Gerakines <[email protected]> | |
</span><span class="inferred0"><a name="line2"></a>2 %% | |
</span><span class="inferred0"><a name="line3"></a>3 %% Permission is hereby granted, free of charge, to any person | |
</span><span class="inferred0"><a name="line4"></a>4 %% obtaining a copy of this software and associated documentation | |
</span><span class="inferred0"><a name="line5"></a>5 %% files (the "Software"), to deal in the Software without | |
</span><span class="inferred0"><a name="line6"></a>6 %% restriction, including without limitation the rights to use, | |
</span><span class="inferred0"><a name="line7"></a>7 %% copy, modify, merge, publish, distribute, sublicense, and/or sell | |
</span><span class="inferred0"><a name="line8"></a>8 %% copies of the Software, and to permit persons to whom the | |
</span><span class="inferred0"><a name="line9"></a>9 %% Software is furnished to do so, subject to the following | |
</span><span class="inferred0"><a name="line10"></a>10 %% conditions: | |
</span><span class="inferred0"><a name="line11"></a>11 %% | |
</span><span class="inferred0"><a name="line12"></a>12 %% The above copyright notice and this permission notice shall be | |
</span><span class="inferred0"><a name="line13"></a>13 %% included in all copies or substantial portions of the Software. | |
</span><span class="inferred0"><a name="line14"></a>14 %% | |
</span><span class="inferred0"><a name="line15"></a>15 %% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
</span><span class="inferred0"><a name="line16"></a>16 %% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | |
</span><span class="inferred0"><a name="line17"></a>17 %% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
</span><span class="inferred0"><a name="line18"></a>18 %% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | |
</span><span class="inferred0"><a name="line19"></a>19 %% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
</span><span class="inferred0"><a name="line20"></a>20 %% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
</span><span class="inferred0"><a name="line21"></a>21 %% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
</span><span class="inferred0"><a name="line22"></a>22 %% OTHER DEALINGS IN THE SOFTWARE. | |
</span><span class="inferred0"><a name="line23"></a>23 %% | |
</span><span class="inferred0"><a name="line24"></a>24 %% ChangeLog | |
</span><span class="inferred0"><a name="line25"></a>25 %% 2009-01-21 ngerakines | |
</span><span class="inferred0"><a name="line26"></a>26 %% - Bumpting to 0.3.3 | |
</span><span class="inferred0"><a name="line27"></a>27 %% - Updated documentation for the coverage report script.= | |
</span><span class="inferred0"><a name="line28"></a>28 %% 2009-01-12 ngerakines | |
</span><span class="inferred0"><a name="line29"></a>29 %% - Added experimental code coverage support. | |
</span><span class="inferred0"><a name="line30"></a>30 %% 2009-01-01 ngerakines | |
</span><span class="inferred0"><a name="line31"></a>31 %% - Added etap:skip/1 and etap:skip/2 | |
</span><span class="inferred0"><a name="line32"></a>32 %% - Added skip support to etap:plan/1 | |
</span><span class="inferred0"><a name="line33"></a>33 %% - Misc code cleanup and documentation | |
</span><span class="inferred0"><a name="line34"></a>34 %% - Bumping to 0.3.2, tagging release | |
</span><span class="inferred0"><a name="line35"></a>35 %% - Adding specs and documentation | |
</span><span class="inferred0"><a name="line36"></a>36 %% - 2008-12-30 ngerakines | |
</span><span class="inferred0"><a name="line37"></a>37 %% - Removing functionality, hurray! | |
</span><span class="inferred0"><a name="line38"></a>38 %% - 2008-12-28 ngerakines | |
</span><span class="inferred0"><a name="line39"></a>39 %% - Added etap:is_greater/3 | |
</span><span class="inferred0"><a name="line40"></a>40 %% - Added etap_string module and updated test suite | |
</span><span class="inferred0"><a name="line41"></a>41 %% - 2008-12-26 ngerakines | |
</span><span class="inferred0"><a name="line42"></a>42 %% - Cleaned etap_web:build_request/4 module handling of redirects | |
</span><span class="inferred0"><a name="line43"></a>43 %% - Added functionality to etal_request | |
</span><span class="inferred0"><a name="line44"></a>44 %% - 2008-12-17 Jacob Vorreuter, ngerakines, Jeremy Wall | |
</span><span class="inferred0"><a name="line45"></a>45 %% - Cleaned etap_web:build_request/4 module handling for get/post/put requests | |
</span><span class="inferred0"><a name="line46"></a>46 %% - Documentation updates / cleanup | |
</span><span class="inferred0"><a name="line47"></a>47 %% - 2008-12-17 Jacob Vorreuter, ngerakines, Jeremy Wall | |
</span><span class="inferred0"><a name="line48"></a>48 %% - Fixing bug in etap_request:status_is/2 | |
</span><span class="inferred0"><a name="line49"></a>49 %% - Added attribute inspection tests to etap_can | |
</span><span class="inferred0"><a name="line50"></a>50 %% - Added Jacob to credits list | |
</span><span class="inferred0"><a name="line51"></a>51 %% - 2008-12-15 Jeremy Wall, ngerakines | |
</span><span class="inferred0"><a name="line52"></a>52 %% - Added doc targets to build | |
</span><span class="inferred0"><a name="line53"></a>53 %% - Misc build cleanup | |
</span><span class="inferred0"><a name="line54"></a>54 %% - 2008-12-11 ngerakines | |
</span><span class="inferred0"><a name="line55"></a>55 %% - Added etap:diag_time/0 | |
</span><span class="inferred0"><a name="line56"></a>56 %% - 2008-12-10 ngerakines | |
</span><span class="inferred0"><a name="line57"></a>57 %% - Adding support for non-get requests in etap_web. | |
</span><span class="inferred0"><a name="line58"></a>58 %% - 2008-12-09 ngerakines | |
</span><span class="inferred0"><a name="line59"></a>59 %% - Added output displaying test run time in seconds. | |
</span><span class="inferred0"><a name="line60"></a>60 %% - 2008-12-01 ngerakines | |
</span><span class="inferred0"><a name="line61"></a>61 %% - Fixed bug in test etap_t_002. | |
</span><span class="inferred0"><a name="line62"></a>62 %% - Minor/Misc code cleanup. | |
</span><span class="inferred0"><a name="line63"></a>63 %% - 2008-11-30 ngerakines | |
</span><span class="inferred0"><a name="line64"></a>64 %% - Fixed by in test results where failed tests weren't being recorded. | |
</span><span class="inferred0"><a name="line65"></a>65 %% - Added warning when planned vs executed tests aren't the same. | |
</span><span class="inferred0"><a name="line66"></a>66 %% - Bumping rev to 0.3.1. | |
</span><span class="inferred0"><a name="line67"></a>67 %% - Added etap:fun_is/3. | |
</span><span class="inferred0"><a name="line68"></a>68 %% - Updated the README | |
</span><span class="inferred0"><a name="line69"></a>69 %% - Added limited support for the dianostic syntax | |
</span><span class="inferred0"><a name="line70"></a>70 %% - 2008-11-28 ngerakines | |
</span><span class="inferred0"><a name="line71"></a>71 %% - Minor documentation and build changes. | |
</span><span class="inferred0"><a name="line72"></a>72 %% - Added etap_process module and updated test suite accordingly. | |
</span><span class="inferred0"><a name="line73"></a>73 %% - 2008-11-27 ngerakines | |
</span><span class="inferred0"><a name="line74"></a>74 %% - Added etap:any/3, etap:none/3 and etap_excecption:throws_ok/3. | |
</span><span class="inferred0"><a name="line75"></a>75 %% - Internal cleanup of etap modules. | |
</span><span class="inferred0"><a name="line76"></a>76 %% - 2008-11-25 ngerakines | |
</span><span class="inferred0"><a name="line77"></a>77 %% - Consolidated test server and plan server. | |
</span><span class="inferred0"><a name="line78"></a>78 %% - Added meta information when creating new plan. | |
</span><span class="inferred0"><a name="line79"></a>79 %% - Added lots of documentation. | |
</span><span class="inferred0"><a name="line80"></a>80 %% - Cleaned up the current test suite. | |
</span><span class="inferred0"><a name="line81"></a>81 %% - Started extending testing capabilities of etap_request. | |
</span><span class="inferred0"><a name="line82"></a>82 %% | |
</span><span class="inferred0"><a name="line83"></a>83 %% @author Nick Gerakines <[email protected]> [http://socklabs.com/] | |
</span><span class="inferred0"><a name="line84"></a>84 %% @author Jeremy Wall <[email protected]> | |
</span><span class="inferred0"><a name="line85"></a>85 %% @version 0.3.3 | |
</span><span class="inferred0"><a name="line86"></a>86 %% @copyright 2007-2008 Jeremy Wall, 2008 Nick Gerakines | |
</span><span class="inferred0"><a name="line87"></a>87 %% @reference http://testanything.org/wiki/index.php/Main_Page | |
</span><span class="inferred0"><a name="line88"></a>88 %% @reference http://en.wikipedia.org/wiki/Test_Anything_Protocol | |
</span><span class="inferred0"><a name="line89"></a>89 %% @todo Finish implementing the skip directive. | |
</span><span class="inferred0"><a name="line90"></a>90 %% @todo Document the messages handled by this receive loop. | |
</span><span class="inferred0"><a name="line91"></a>91 %% @todo Explain in documentation why we use a process to handle test input. | |
</span><span class="inferred0"><a name="line92"></a>92 %% @doc etap is a TAP testing module for Erlang components and applications. | |
</span><span class="inferred0"><a name="line93"></a>93 %% This module allows developers to test their software using the TAP method. | |
</span><span class="inferred0"><a name="line94"></a>94 %% | |
</span><span class="inferred0"><a name="line95"></a>95 %% <blockquote cite="http://en.wikipedia.org/wiki/Test_Anything_Protocol"><p> | |
</span><span class="inferred0"><a name="line96"></a>96 %% TAP, the Test Anything Protocol, is a simple text-based interface between | |
</span><span class="inferred0"><a name="line97"></a>97 %% testing modules in a test harness. TAP started life as part of the test | |
</span><span class="inferred0"><a name="line98"></a>98 %% harness for Perl but now has implementations in C/C++, Python, PHP, Perl | |
</span><span class="inferred0"><a name="line99"></a>99 %% and probably others by the time you read this. | |
</span><span class="inferred0"><a name="line100"></a>100 %% </p></blockquote> | |
</span><span class="inferred0"><a name="line101"></a>101 %% | |
</span><span class="inferred0"><a name="line102"></a>102 %% The testing process begins by defining a plan using etap:plan/1, running | |
</span><span class="inferred0"><a name="line103"></a>103 %% a number of etap tests and then calling eta:end_tests/0. Please refer to | |
</span><span class="inferred0"><a name="line104"></a>104 %% the Erlang modules in the t directory of this project for example tests. | |
</span><span class="inferred0"><a name="line105"></a>105 -module(etap). | |
</span><span class="inferred0"><a name="line106"></a>106 -export([ | |
</span><span class="inferred0"><a name="line107"></a>107 ensure_test_server/0, start_etap_server/0, test_server/1, | |
</span><span class="inferred0"><a name="line108"></a>108 diag/1, plan/1, end_tests/0, not_ok/2, ok/2, is/3, isnt/3, | |
</span><span class="inferred0"><a name="line109"></a>109 any/3, none/3, fun_is/3, is_greater/3, skip/1, skip/2, | |
</span><span class="inferred0"><a name="line110"></a>110 ensure_coverage_starts/0, ensure_coverage_ends/0, coverage_report/0 | |
</span><span class="inferred0"><a name="line111"></a>111 ]). | |
</span><span class="inferred0"><a name="line112"></a>112 | |
</span><span class="inferred0"><a name="line113"></a>113 -record(test_state, {planned = 0, count = 0, pass = 0, fail = 0, skip = 0, skip_reason = ""}). | |
</span><span class="inferred0"><a name="line114"></a>114 | |
</span><span class="inferred0"><a name="line115"></a>115 %% @spec plan(N) -> Result | |
</span><span class="inferred0"><a name="line116"></a>116 %% N = skip | {skip, string()} | integer() | |
</span><span class="inferred0"><a name="line117"></a>117 %% Result = ok | |
</span><span class="inferred0"><a name="line118"></a>118 %% @doc Create a test plan and boot strap the test server. | |
</span><span class="inferred0"><a name="line119"></a>119 plan(skip) -> | |
</span><span class="uncovered0"><a name="line120"></a>120 io:format("1..0 # skip~n"); | |
</span><span class="inferred0"><a name="line121"></a>121 plan({skip, Reason}) -> | |
</span><span class="uncovered0"><a name="line122"></a>122 io:format("1..0 # skip ~s~n", [Reason]); | |
</span><span class="inferred0"><a name="line123"></a>123 plan(N) when is_integer(N), N > 0 -> | |
</span><span class="uncovered0"><a name="line124"></a>124 ensure_coverage_starts(), | |
</span><span class="uncovered0"><a name="line125"></a>125 ensure_test_server(), | |
</span><span class="uncovered0"><a name="line126"></a>126 etap_server ! {self(), plan, N}, | |
</span><span class="uncovered0"><a name="line127"></a>127 ok. | |
</span><span class="inferred0"><a name="line128"></a>128 | |
</span><span class="inferred0"><a name="line129"></a>129 %% @private | |
</span><span class="inferred0"><a name="line130"></a>130 ensure_coverage_starts() -> | |
</span><span class="uncovered0"><a name="line131"></a>131 case os:getenv("COVER") of | |
</span><span class="uncovered0"><a name="line132"></a>132 false -> ok; | |
</span><span class="inferred0"><a name="line133"></a>133 _ -> | |
</span><span class="uncovered0"><a name="line134"></a>134 BeamDir = case os:getenv("COVER_BIN") of false -> "ebin"; X -> X end, | |
</span><span class="uncovered0"><a name="line135"></a>135 cover:compile_beam_directory(BeamDir) | |
</span><span class="inferred0"><a name="line136"></a>136 end. | |
</span><span class="inferred0"><a name="line137"></a>137 | |
</span><span class="inferred0"><a name="line138"></a>138 %% @private | |
</span><span class="inferred0"><a name="line139"></a>139 ensure_coverage_ends() -> | |
</span><span class="marked0"><a name="line140"></a>140 case os:getenv("COVER") of | |
</span><span class="uncovered0"><a name="line141"></a>141 false -> ok; | |
</span><span class="inferred0"><a name="line142"></a>142 _ -> | |
</span><span class="marked0"><a name="line143"></a>143 Name = lists:flatten([ | |
</span><span class="inferred0"><a name="line144"></a>144 io_lib:format("~.16b", [X]) || X <- binary_to_list(erlang:md5( | |
</span><span class="inferred0"><a name="line145"></a>145 term_to_binary({make_ref(), now()}) | |
</span><span class="inferred0"><a name="line146"></a>146 )) | |
</span><span class="inferred0"><a name="line147"></a>147 ]), | |
</span><span class="marked0"><a name="line148"></a>148 cover:export(Name ++ ".coverdata") | |
</span><span class="inferred0"><a name="line149"></a>149 end. | |
</span><span class="inferred0"><a name="line150"></a>150 | |
</span><span class="inferred0"><a name="line151"></a>151 %% @spec end_tests() -> ok | |
</span><span class="inferred0"><a name="line152"></a>152 %% @doc End the current test plan and output test results. | |
</span><span class="inferred0"><a name="line153"></a>153 end_tests() -> | |
</span><span class="marked0"><a name="line154"></a>154 ensure_coverage_ends(), | |
</span><span class="uncovered0"><a name="line155"></a>155 case whereis(etap_server) of | |
</span><span class="uncovered0"><a name="line156"></a>156 undefined -> ok; | |
</span><span class="uncovered0"><a name="line157"></a>157 _ -> etap_server ! done, ok | |
</span><span class="inferred0"><a name="line158"></a>158 end. | |
</span><span class="inferred0"><a name="line159"></a>159 | |
</span><span class="inferred0"><a name="line160"></a>160 coverage_report() -> | |
</span><span class="uncovered0"><a name="line161"></a>161 [cover:import(File) || File <- filelib:wildcard("*coverdata")], | |
</span><span class="uncovered0"><a name="line162"></a>162 lists:foreach( | |
</span><span class="inferred0"><a name="line163"></a>163 fun(Mod) -> | |
</span><span class="uncovered0"><a name="line164"></a>164 cover:analyse_to_file(Mod, atom_to_list(Mod) ++ "_coverage.txt", []) | |
</span><span class="inferred0"><a name="line165"></a>165 end, | |
</span><span class="inferred0"><a name="line166"></a>166 cover:imported_modules() | |
</span><span class="inferred0"><a name="line167"></a>167 ), | |
</span><span class="uncovered0"><a name="line168"></a>168 ok. | |
</span><span class="inferred0"><a name="line169"></a>169 | |
</span><span class="inferred0"><a name="line170"></a>170 %% @spec diag(S) -> ok | |
</span><span class="inferred0"><a name="line171"></a>171 %% S = string() | |
</span><span class="inferred0"><a name="line172"></a>172 %% @doc Print a debug/status message related to the test suite. | |
</span><span class="marked0"><a name="line173"></a>173 diag(S) -> etap_server ! {self(), diag, "# " ++ S}, ok. | |
</span><span class="inferred0"><a name="line174"></a>174 | |
</span><span class="inferred0"><a name="line175"></a>175 %% @spec ok(Expr, Desc) -> Result | |
</span><span class="inferred0"><a name="line176"></a>176 %% Expr = true | false | |
</span><span class="inferred0"><a name="line177"></a>177 %% Desc = string() | |
</span><span class="inferred0"><a name="line178"></a>178 %% Result = true | false | |
</span><span class="inferred0"><a name="line179"></a>179 %% @doc Assert that a statement is true. | |
</span><span class="marked0"><a name="line180"></a>180 ok(Expr, Desc) -> mk_tap(Expr == true, Desc). | |
</span><span class="inferred0"><a name="line181"></a>181 | |
</span><span class="inferred0"><a name="line182"></a>182 %% @spec not_ok(Expr, Desc) -> Result | |
</span><span class="inferred0"><a name="line183"></a>183 %% Expr = true | false | |
</span><span class="inferred0"><a name="line184"></a>184 %% Desc = string() | |
</span><span class="inferred0"><a name="line185"></a>185 %% Result = true | false | |
</span><span class="inferred0"><a name="line186"></a>186 %% @doc Assert that a statement is false. | |
</span><span class="marked0"><a name="line187"></a>187 not_ok(Expr, Desc) -> mk_tap(Expr == false, Desc). | |
</span><span class="inferred0"><a name="line188"></a>188 | |
</span><span class="inferred0"><a name="line189"></a>189 %% @spec is(Got, Expected, Desc) -> Result | |
</span><span class="inferred0"><a name="line190"></a>190 %% Got = any() | |
</span><span class="inferred0"><a name="line191"></a>191 %% Expected = any() | |
</span><span class="inferred0"><a name="line192"></a>192 %% Desc = string() | |
</span><span class="inferred0"><a name="line193"></a>193 %% Result = true | false | |
</span><span class="inferred0"><a name="line194"></a>194 %% @doc Assert that two values are the same. | |
</span><span class="inferred0"><a name="line195"></a>195 is(Got, Expected, Desc) -> | |
</span><span class="marked0"><a name="line196"></a>196 case mk_tap(Got == Expected, Desc) of | |
</span><span class="inferred0"><a name="line197"></a>197 false -> | |
</span><span class="uncovered0"><a name="line198"></a>198 etap_server ! {self(), log, " ---"}, | |
</span><span class="uncovered0"><a name="line199"></a>199 etap_server ! {self(), log, io_lib:format(" description: ~p", [Desc])}, | |
</span><span class="uncovered0"><a name="line200"></a>200 etap_server ! {self(), log, io_lib:format(" found: ~p", [Got])}, | |
</span><span class="uncovered0"><a name="line201"></a>201 etap_server ! {self(), log, io_lib:format(" wanted: ~p", [Expected])}, | |
</span><span class="uncovered0"><a name="line202"></a>202 etap_server ! {self(), log, " ..."}, | |
</span><span class="uncovered0"><a name="line203"></a>203 false; | |
</span><span class="marked0"><a name="line204"></a>204 true -> true | |
</span><span class="inferred0"><a name="line205"></a>205 end. | |
</span><span class="inferred0"><a name="line206"></a>206 | |
</span><span class="inferred0"><a name="line207"></a>207 %% @spec isnt(Got, Expected, Desc) -> Result | |
</span><span class="inferred0"><a name="line208"></a>208 %% Got = any() | |
</span><span class="inferred0"><a name="line209"></a>209 %% Expected = any() | |
</span><span class="inferred0"><a name="line210"></a>210 %% Desc = string() | |
</span><span class="inferred0"><a name="line211"></a>211 %% Result = true | false | |
</span><span class="inferred0"><a name="line212"></a>212 %% @doc Assert that two values are not the same. | |
</span><span class="marked0"><a name="line213"></a>213 isnt(Got, Expected, Desc) -> mk_tap(Got /= Expected, Desc). | |
</span><span class="inferred0"><a name="line214"></a>214 | |
</span><span class="inferred0"><a name="line215"></a>215 %% @spec is_greater(ValueA, ValueB, Desc) -> Result | |
</span><span class="inferred0"><a name="line216"></a>216 %% ValueA = number() | |
</span><span class="inferred0"><a name="line217"></a>217 %% ValueB = number() | |
</span><span class="inferred0"><a name="line218"></a>218 %% Desc = string() | |
</span><span class="inferred0"><a name="line219"></a>219 %% Result = true | false | |
</span><span class="inferred0"><a name="line220"></a>220 %% @doc Assert that an integer is greater than another. | |
</span><span class="inferred0"><a name="line221"></a>221 is_greater(ValueA, ValueB, Desc) when is_integer(ValueA), is_integer(ValueB) -> | |
</span><span class="marked0"><a name="line222"></a>222 mk_tap(ValueA > ValueB, Desc). | |
</span><span class="inferred0"><a name="line223"></a>223 | |
</span><span class="inferred0"><a name="line224"></a>224 %% @spec any(Got, Items, Desc) -> Result | |
</span><span class="inferred0"><a name="line225"></a>225 %% Got = any() | |
</span><span class="inferred0"><a name="line226"></a>226 %% Items = [any()] | |
</span><span class="inferred0"><a name="line227"></a>227 %% Desc = string() | |
</span><span class="inferred0"><a name="line228"></a>228 %% Result = true | false | |
</span><span class="inferred0"><a name="line229"></a>229 %% @doc Assert that an item is in a list. | |
</span><span class="inferred0"><a name="line230"></a>230 any(Got, Items, Desc) -> | |
</span><span class="marked0"><a name="line231"></a>231 is(lists:any(Got, Items), true, Desc). | |
</span><span class="inferred0"><a name="line232"></a>232 | |
</span><span class="inferred0"><a name="line233"></a>233 %% @spec none(Got, Items, Desc) -> Result | |
</span><span class="inferred0"><a name="line234"></a>234 %% Got = any() | |
</span><span class="inferred0"><a name="line235"></a>235 %% Items = [any()] | |
</span><span class="inferred0"><a name="line236"></a>236 %% Desc = string() | |
</span><span class="inferred0"><a name="line237"></a>237 %% Result = true | false | |
</span><span class="inferred0"><a name="line238"></a>238 %% @doc Assert that an item is not in a list. | |
</span><span class="inferred0"><a name="line239"></a>239 none(Got, Items, Desc) -> | |
</span><span class="marked0"><a name="line240"></a>240 is(lists:any(Got, Items), false, Desc). | |
</span><span class="inferred0"><a name="line241"></a>241 | |
</span><span class="inferred0"><a name="line242"></a>242 %% @spec fun_is(Fun, Expected, Desc) -> Result | |
</span><span class="inferred0"><a name="line243"></a>243 %% Fun = function() | |
</span><span class="inferred0"><a name="line244"></a>244 %% Expected = any() | |
</span><span class="inferred0"><a name="line245"></a>245 %% Desc = string() | |
</span><span class="inferred0"><a name="line246"></a>246 %% Result = true | false | |
</span><span class="inferred0"><a name="line247"></a>247 %% @doc Use an anonymous function to assert a pattern match. | |
</span><span class="inferred0"><a name="line248"></a>248 fun_is(Fun, Expected, Desc) when is_function(Fun) -> | |
</span><span class="marked0"><a name="line249"></a>249 is(Fun(Expected), true, Desc). | |
</span><span class="inferred0"><a name="line250"></a>250 | |
</span><span class="inferred0"><a name="line251"></a>251 %% @equiv skip(TestFun, "") | |
</span><span class="inferred0"><a name="line252"></a>252 skip(TestFun) -> | |
</span><span class="marked0"><a name="line253"></a>253 skip(TestFun, ""). | |
</span><span class="inferred0"><a name="line254"></a>254 | |
</span><span class="inferred0"><a name="line255"></a>255 %% @spec skip(TestFun, Reason) -> ok | |
</span><span class="inferred0"><a name="line256"></a>256 %% TestFun = function() | |
</span><span class="inferred0"><a name="line257"></a>257 %% Reason = string() | |
</span><span class="inferred0"><a name="line258"></a>258 %% @doc Skip a test. | |
</span><span class="inferred0"><a name="line259"></a>259 skip(TestFun, Reason) -> | |
</span><span class="marked0"><a name="line260"></a>260 begin_skip(Reason), | |
</span><span class="marked0"><a name="line261"></a>261 catch TestFun(), | |
</span><span class="marked0"><a name="line262"></a>262 end_skip(), | |
</span><span class="marked0"><a name="line263"></a>263 ok. | |
</span><span class="inferred0"><a name="line264"></a>264 | |
</span><span class="inferred0"><a name="line265"></a>265 %% @private | |
</span><span class="inferred0"><a name="line266"></a>266 begin_skip(Reason) -> | |
</span><span class="marked0"><a name="line267"></a>267 etap_server ! {self(), begin_skip, Reason}. | |
</span><span class="inferred0"><a name="line268"></a>268 | |
</span><span class="inferred0"><a name="line269"></a>269 %% @private | |
</span><span class="inferred0"><a name="line270"></a>270 end_skip() -> | |
</span><span class="marked0"><a name="line271"></a>271 etap_server ! {self(), end_skip}. | |
</span><span class="inferred0"><a name="line272"></a>272 | |
</span><span class="inferred0"><a name="line273"></a>273 % --- | |
</span><span class="inferred0"><a name="line274"></a>274 % Internal / Private functions | |
</span><span class="inferred0"><a name="line275"></a>275 | |
</span><span class="inferred0"><a name="line276"></a>276 %% @private | |
</span><span class="inferred0"><a name="line277"></a>277 %% @doc Start the etap_server process if it is not running already. | |
</span><span class="inferred0"><a name="line278"></a>278 ensure_test_server() -> | |
</span><span class="uncovered0"><a name="line279"></a>279 case whereis(etap_server) of | |
</span><span class="inferred0"><a name="line280"></a>280 undefined -> | |
</span><span class="uncovered0"><a name="line281"></a>281 proc_lib:start(?MODULE, start_etap_server,[]); | |
</span><span class="inferred0"><a name="line282"></a>282 _ -> | |
</span><span class="uncovered0"><a name="line283"></a>283 diag("The test server is already running.") | |
</span><span class="inferred0"><a name="line284"></a>284 end. | |
</span><span class="inferred0"><a name="line285"></a>285 | |
</span><span class="inferred0"><a name="line286"></a>286 %% @private | |
</span><span class="inferred0"><a name="line287"></a>287 %% @doc Start the etap_server loop and register itself as the etap_server | |
</span><span class="inferred0"><a name="line288"></a>288 %% process. | |
</span><span class="inferred0"><a name="line289"></a>289 start_etap_server() -> | |
</span><span class="marked0"><a name="line290"></a>290 catch register(etap_server, self()), | |
</span><span class="marked0"><a name="line291"></a>291 proc_lib:init_ack(ok), | |
</span><span class="marked0"><a name="line292"></a>292 etap:test_server(#test_state{ | |
</span><span class="inferred0"><a name="line293"></a>293 planned = 0, | |
</span><span class="inferred0"><a name="line294"></a>294 count = 0, | |
</span><span class="inferred0"><a name="line295"></a>295 pass = 0, | |
</span><span class="inferred0"><a name="line296"></a>296 fail = 0, | |
</span><span class="inferred0"><a name="line297"></a>297 skip = 0, | |
</span><span class="inferred0"><a name="line298"></a>298 skip_reason = "" | |
</span><span class="inferred0"><a name="line299"></a>299 }). | |
</span><span class="inferred0"><a name="line300"></a>300 | |
</span><span class="inferred0"><a name="line301"></a>301 | |
</span><span class="inferred0"><a name="line302"></a>302 %% @private | |
</span><span class="inferred0"><a name="line303"></a>303 %% @doc The main etap_server receive/run loop. The etap_server receive loop | |
</span><span class="inferred0"><a name="line304"></a>304 %% responds to seven messages apperatining to failure or passing of tests. | |
</span><span class="inferred0"><a name="line305"></a>305 %% It is also used to initiate the testing process with the {_, plan, _} | |
</span><span class="inferred0"><a name="line306"></a>306 %% message that clears the current test state. | |
</span><span class="inferred0"><a name="line307"></a>307 test_server(State) -> | |
</span><span class="marked0"><a name="line308"></a>308 NewState = receive | |
</span><span class="inferred0"><a name="line309"></a>309 {_From, plan, N} -> | |
</span><span class="marked0"><a name="line310"></a>310 io:format("1..~p~n", [N]), | |
</span><span class="marked0"><a name="line311"></a>311 io:format("# Current time local ~s~n", [datetime(erlang:localtime())]), | |
</span><span class="marked0"><a name="line312"></a>312 io:format("# Using etap version 0.3~n"), | |
</span><span class="marked0"><a name="line313"></a>313 State#test_state{ | |
</span><span class="inferred0"><a name="line314"></a>314 planned = N, | |
</span><span class="inferred0"><a name="line315"></a>315 count = 0, | |
</span><span class="inferred0"><a name="line316"></a>316 pass = 0, | |
</span><span class="inferred0"><a name="line317"></a>317 fail = 0, | |
</span><span class="inferred0"><a name="line318"></a>318 skip = 0, | |
</span><span class="inferred0"><a name="line319"></a>319 skip_reason = "" | |
</span><span class="inferred0"><a name="line320"></a>320 }; | |
</span><span class="inferred0"><a name="line321"></a>321 {_From, begin_skip, Reason} -> | |
</span><span class="marked0"><a name="line322"></a>322 State#test_state{ | |
</span><span class="inferred0"><a name="line323"></a>323 skip = 1, | |
</span><span class="inferred0"><a name="line324"></a>324 skip_reason = Reason | |
</span><span class="inferred0"><a name="line325"></a>325 }; | |
</span><span class="inferred0"><a name="line326"></a>326 {_From, end_skip} -> | |
</span><span class="marked0"><a name="line327"></a>327 State#test_state{ | |
</span><span class="inferred0"><a name="line328"></a>328 skip = 0, | |
</span><span class="inferred0"><a name="line329"></a>329 skip_reason = "" | |
</span><span class="inferred0"><a name="line330"></a>330 }; | |
</span><span class="inferred0"><a name="line331"></a>331 {_From, pass, Desc} -> | |
</span><span class="marked0"><a name="line332"></a>332 FullMessage = skip_diag( | |
</span><span class="inferred0"><a name="line333"></a>333 " - " ++ Desc, | |
</span><span class="inferred0"><a name="line334"></a>334 State#test_state.skip, | |
</span><span class="inferred0"><a name="line335"></a>335 State#test_state.skip_reason | |
</span><span class="inferred0"><a name="line336"></a>336 ), | |
</span><span class="marked0"><a name="line337"></a>337 io:format("ok ~p ~s~n", [State#test_state.count + 1, FullMessage]), | |
</span><span class="marked0"><a name="line338"></a>338 State#test_state{ | |
</span><span class="inferred0"><a name="line339"></a>339 count = State#test_state.count + 1, | |
</span><span class="inferred0"><a name="line340"></a>340 pass = State#test_state.pass + 1 | |
</span><span class="inferred0"><a name="line341"></a>341 }; | |
</span><span class="inferred0"><a name="line342"></a>342 | |
</span><span class="inferred0"><a name="line343"></a>343 {_From, fail, Desc} -> | |
</span><span class="uncovered0"><a name="line344"></a>344 FullMessage = skip_diag( | |
</span><span class="inferred0"><a name="line345"></a>345 " - " ++ Desc, | |
</span><span class="inferred0"><a name="line346"></a>346 State#test_state.skip, | |
</span><span class="inferred0"><a name="line347"></a>347 State#test_state.skip_reason | |
</span><span class="inferred0"><a name="line348"></a>348 ), | |
</span><span class="uncovered0"><a name="line349"></a>349 io:format("not ok ~p ~s~n", [State#test_state.count + 1, FullMessage]), | |
</span><span class="uncovered0"><a name="line350"></a>350 State#test_state{ | |
</span><span class="inferred0"><a name="line351"></a>351 count = State#test_state.count + 1, | |
</span><span class="inferred0"><a name="line352"></a>352 fail = State#test_state.fail + 1 | |
</span><span class="inferred0"><a name="line353"></a>353 }; | |
</span><span class="inferred0"><a name="line354"></a>354 {From, state} -> | |
</span><span class="uncovered0"><a name="line355"></a>355 From ! State, | |
</span><span class="uncovered0"><a name="line356"></a>356 State; | |
</span><span class="inferred0"><a name="line357"></a>357 {_From, diag, Message} -> | |
</span><span class="marked0"><a name="line358"></a>358 io:format("~s~n", [Message]), | |
</span><span class="marked0"><a name="line359"></a>359 State; | |
</span><span class="inferred0"><a name="line360"></a>360 {From, count} -> | |
</span><span class="uncovered0"><a name="line361"></a>361 From ! State#test_state.count, | |
</span><span class="uncovered0"><a name="line362"></a>362 State; | |
</span><span class="inferred0"><a name="line363"></a>363 {From, is_skip} -> | |
</span><span class="marked0"><a name="line364"></a>364 From ! State#test_state.skip, | |
</span><span class="marked0"><a name="line365"></a>365 State; | |
</span><span class="inferred0"><a name="line366"></a>366 done -> | |
</span><span class="uncovered0"><a name="line367"></a>367 exit(normal) | |
</span><span class="inferred0"><a name="line368"></a>368 end, | |
</span><span class="marked0"><a name="line369"></a>369 test_server(NewState). | |
</span><span class="inferred0"><a name="line370"></a>370 | |
</span><span class="inferred0"><a name="line371"></a>371 %% @private | |
</span><span class="inferred0"><a name="line372"></a>372 %% @doc Process the result of a test and send it to the etap_server process. | |
</span><span class="inferred0"><a name="line373"></a>373 mk_tap(Result, Desc) -> | |
</span><span class="marked0"><a name="line374"></a>374 IsSkip = lib:sendw(etap_server, is_skip), | |
</span><span class="marked0"><a name="line375"></a>375 case [IsSkip, Result] of | |
</span><span class="inferred0"><a name="line376"></a>376 [_, true] -> | |
</span><span class="marked0"><a name="line377"></a>377 etap_server ! {self(), pass, Desc}, | |
</span><span class="marked0"><a name="line378"></a>378 true; | |
</span><span class="inferred0"><a name="line379"></a>379 [1, _] -> | |
</span><span class="marked0"><a name="line380"></a>380 etap_server ! {self(), pass, Desc}, | |
</span><span class="marked0"><a name="line381"></a>381 true; | |
</span><span class="inferred0"><a name="line382"></a>382 _ -> | |
</span><span class="uncovered0"><a name="line383"></a>383 etap_server ! {self(), fail, Desc}, | |
</span><span class="uncovered0"><a name="line384"></a>384 false | |
</span><span class="inferred0"><a name="line385"></a>385 end. | |
</span><span class="inferred0"><a name="line386"></a>386 | |
</span><span class="inferred0"><a name="line387"></a>387 %% @private | |
</span><span class="inferred0"><a name="line388"></a>388 %% @doc Format a date/time string. | |
</span><span class="inferred0"><a name="line389"></a>389 datetime(DateTime) -> | |
</span><span class="marked0"><a name="line390"></a>390 {{Year, Month, Day}, {Hour, Min, Sec}} = DateTime, | |
</span><span class="marked0"><a name="line391"></a>391 io_lib:format("~4.10.0B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B", [Year, Month, Day, Hour, Min, Sec]). | |
</span><span class="inferred0"><a name="line392"></a>392 | |
</span><span class="inferred0"><a name="line393"></a>393 %% @private | |
</span><span class="inferred0"><a name="line394"></a>394 %% @doc Craft an output message taking skip/todo into consideration. | |
</span><span class="inferred0"><a name="line395"></a>395 skip_diag(Message, 0, _) -> | |
</span><span class="marked0"><a name="line396"></a>396 Message; | |
</span><span class="inferred0"><a name="line397"></a>397 skip_diag(_Message, 1, "") -> | |
</span><span class="marked0"><a name="line398"></a>398 " # SKIP"; | |
</span><span class="inferred0"><a name="line399"></a>399 skip_diag(_Message, 1, Reason) -> | |
</span><span class="marked0"><a name="line400"></a>400 " # SKIP : " ++ Reason. | |
</span></pre><hr /> <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.5.0.</p><p> | |
<a href='http://validator.w3.org/check/referer'> | |
<img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' /> | |
</a> | |
<a href='http://jigsaw.w3.org/css-validator/check/referer'> | |
<img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' /> | |
</a> | |
</p> | |
</body> | |
</html> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment