1*132f818dSEnji Cooper<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2*132f818dSEnji Cooper<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> 3*132f818dSEnji Cooper<head> 4*132f818dSEnji Cooper<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 5*132f818dSEnji Cooper<meta http-equiv="X-UA-Compatible" content="IE=11"/> 6*132f818dSEnji Cooper<meta name="generator" content="Doxygen 1.9.6"/> 7*132f818dSEnji Cooper<meta name="viewport" content="width=device-width, initial-scale=1"/> 8*132f818dSEnji Cooper<title>Lutok: test_utils.hpp File Reference</title> 9*132f818dSEnji Cooper<link href="tabs.css" rel="stylesheet" type="text/css"/> 10*132f818dSEnji Cooper<script type="text/javascript" src="jquery.js"></script> 11*132f818dSEnji Cooper<script type="text/javascript" src="dynsections.js"></script> 12*132f818dSEnji Cooper<link href="search/search.css" rel="stylesheet" type="text/css"/> 13*132f818dSEnji Cooper<script type="text/javascript" src="search/searchdata.js"></script> 14*132f818dSEnji Cooper<script type="text/javascript" src="search/search.js"></script> 15*132f818dSEnji Cooper<link href="doxygen.css" rel="stylesheet" type="text/css" /> 16*132f818dSEnji Cooper</head> 17*132f818dSEnji Cooper<body> 18*132f818dSEnji Cooper<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 19*132f818dSEnji Cooper<div id="titlearea"> 20*132f818dSEnji Cooper<table cellspacing="0" cellpadding="0"> 21*132f818dSEnji Cooper <tbody> 22*132f818dSEnji Cooper <tr id="projectrow"> 23*132f818dSEnji Cooper <td id="projectalign"> 24*132f818dSEnji Cooper <div id="projectname">Lutok<span id="projectnumber"> 0.6.2</span> 25*132f818dSEnji Cooper </div> 26*132f818dSEnji Cooper </td> 27*132f818dSEnji Cooper </tr> 28*132f818dSEnji Cooper </tbody> 29*132f818dSEnji Cooper</table> 30*132f818dSEnji Cooper</div> 31*132f818dSEnji Cooper<!-- end header part --> 32*132f818dSEnji Cooper<!-- Generated by Doxygen 1.9.6 --> 33*132f818dSEnji Cooper<script type="text/javascript"> 34*132f818dSEnji Cooper/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ 35*132f818dSEnji Coopervar searchBox = new SearchBox("searchBox", "search/",'.html'); 36*132f818dSEnji Cooper/* @license-end */ 37*132f818dSEnji Cooper</script> 38*132f818dSEnji Cooper<script type="text/javascript" src="menudata.js"></script> 39*132f818dSEnji Cooper<script type="text/javascript" src="menu.js"></script> 40*132f818dSEnji Cooper<script type="text/javascript"> 41*132f818dSEnji Cooper/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ 42*132f818dSEnji Cooper$(function() { 43*132f818dSEnji Cooper initMenu('',true,false,'search.php','Search'); 44*132f818dSEnji Cooper $(document).ready(function() { init_search(); }); 45*132f818dSEnji Cooper}); 46*132f818dSEnji Cooper/* @license-end */ 47*132f818dSEnji Cooper</script> 48*132f818dSEnji Cooper<div id="main-nav"></div> 49*132f818dSEnji Cooper<!-- window showing the filter options --> 50*132f818dSEnji Cooper<div id="MSearchSelectWindow" 51*132f818dSEnji Cooper onmouseover="return searchBox.OnSearchSelectShow()" 52*132f818dSEnji Cooper onmouseout="return searchBox.OnSearchSelectHide()" 53*132f818dSEnji Cooper onkeydown="return searchBox.OnSearchSelectKey(event)"> 54*132f818dSEnji Cooper</div> 55*132f818dSEnji Cooper 56*132f818dSEnji Cooper<!-- iframe showing the search results (closed by default) --> 57*132f818dSEnji Cooper<div id="MSearchResultsWindow"> 58*132f818dSEnji Cooper<div id="MSearchResults"> 59*132f818dSEnji Cooper<div class="SRPage"> 60*132f818dSEnji Cooper<div id="SRIndex"> 61*132f818dSEnji Cooper<div id="SRResults"></div> 62*132f818dSEnji Cooper<div class="SRStatus" id="Loading">Loading...</div> 63*132f818dSEnji Cooper<div class="SRStatus" id="Searching">Searching...</div> 64*132f818dSEnji Cooper<div class="SRStatus" id="NoMatches">No Matches</div> 65*132f818dSEnji Cooper</div> 66*132f818dSEnji Cooper</div> 67*132f818dSEnji Cooper</div> 68*132f818dSEnji Cooper</div> 69*132f818dSEnji Cooper 70*132f818dSEnji Cooper</div><!-- top --> 71*132f818dSEnji Cooper<div class="header"> 72*132f818dSEnji Cooper <div class="summary"> 73*132f818dSEnji Cooper<a href="#nested-classes">Classes</a> | 74*132f818dSEnji Cooper<a href="#define-members">Macros</a> | 75*132f818dSEnji Cooper<a href="#func-members">Functions</a> </div> 76*132f818dSEnji Cooper <div class="headertitle"><div class="title">test_utils.hpp File Reference</div></div> 77*132f818dSEnji Cooper</div><!--header--> 78*132f818dSEnji Cooper<div class="contents"> 79*132f818dSEnji Cooper 80*132f818dSEnji Cooper<p>Utilities for tests of the lua modules. 81*132f818dSEnji Cooper<a href="#details">More...</a></p> 82*132f818dSEnji Cooper<div class="textblock"><code>#include <atf-c++.hpp></code><br /> 83*132f818dSEnji Cooper<code>#include "<a class="el" href="a00032_source.html">c_gate.hpp</a>"</code><br /> 84*132f818dSEnji Cooper<code>#include "<a class="el" href="a00053_source.html">exceptions.hpp</a>"</code><br /> 85*132f818dSEnji Cooper<code>#include "<a class="el" href="a00029_source.html">state.hpp</a>"</code><br /> 86*132f818dSEnji Cooper</div> 87*132f818dSEnji Cooper<p><a href="a00056_source.html">Go to the source code of this file.</a></p> 88*132f818dSEnji Cooper<table class="memberdecls"> 89*132f818dSEnji Cooper<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> 90*132f818dSEnji CooperClasses</h2></td></tr> 91*132f818dSEnji Cooper<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00923.html">anonymous_namespace{test_utils.hpp}::stack_balance_checker</a></td></tr> 92*132f818dSEnji Cooper<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Ensures that the Lua stack maintains its original height upon exit. <a href="a00923.html#details">More...</a><br /></td></tr> 93*132f818dSEnji Cooper<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 94*132f818dSEnji Cooper</table><table class="memberdecls"> 95*132f818dSEnji Cooper<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> 96*132f818dSEnji CooperMacros</h2></td></tr> 97*132f818dSEnji Cooper<tr class="memitem:a8f10eccfd8799f9631163705fb92ea5a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html#a8f10eccfd8799f9631163705fb92ea5a">REQUIRE_API_ERROR</a>(exp_api_function, statement)</td></tr> 98*132f818dSEnji Cooper<tr class="memdesc:a8f10eccfd8799f9631163705fb92ea5a"><td class="mdescLeft"> </td><td class="mdescRight">Checks that a given expression raises a particular <a class="el" href="a00899.html" title="Exception for errors raised by the Lua API library.">lutok::api_error</a>. <br /></td></tr> 99*132f818dSEnji Cooper<tr class="separator:a8f10eccfd8799f9631163705fb92ea5a"><td class="memSeparator" colspan="2"> </td></tr> 100*132f818dSEnji Cooper</table><table class="memberdecls"> 101*132f818dSEnji Cooper<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> 102*132f818dSEnji CooperFunctions</h2></td></tr> 103*132f818dSEnji Cooper<tr class="memitem:a790da0edff2966ce9a413e689d522c19"><td class="memItemLeft" align="right" valign="top">static lua_State * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00067.html#a790da0edff2966ce9a413e689d522c19">anonymous_namespace{test_utils.hpp}::raw</a> (<a class="el" href="a00919.html">lutok::state</a> &state)</td></tr> 104*132f818dSEnji Cooper<tr class="memdesc:a790da0edff2966ce9a413e689d522c19"><td class="mdescLeft"> </td><td class="mdescRight">Gets the pointer to the internal lua_State of a state object. <br /></td></tr> 105*132f818dSEnji Cooper<tr class="separator:a790da0edff2966ce9a413e689d522c19"><td class="memSeparator" colspan="2"> </td></tr> 106*132f818dSEnji Cooper</table> 107*132f818dSEnji Cooper<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 108*132f818dSEnji Cooper<div class="textblock"><p>Utilities for tests of the lua modules. </p> 109*132f818dSEnji Cooper<p>This file is intended to be included once, and only once, for every test program that needs it. All the code is herein contained to simplify the dependency chain in the build rules. </p> 110*132f818dSEnji Cooper</div><h2 class="groupheader">Macro Definition Documentation</h2> 111*132f818dSEnji Cooper<a id="a8f10eccfd8799f9631163705fb92ea5a" name="a8f10eccfd8799f9631163705fb92ea5a"></a> 112*132f818dSEnji Cooper<h2 class="memtitle"><span class="permalink"><a href="#a8f10eccfd8799f9631163705fb92ea5a">◆ </a></span>REQUIRE_API_ERROR</h2> 113*132f818dSEnji Cooper 114*132f818dSEnji Cooper<div class="memitem"> 115*132f818dSEnji Cooper<div class="memproto"> 116*132f818dSEnji Cooper <table class="memname"> 117*132f818dSEnji Cooper <tr> 118*132f818dSEnji Cooper <td class="memname">#define REQUIRE_API_ERROR</td> 119*132f818dSEnji Cooper <td>(</td> 120*132f818dSEnji Cooper <td class="paramtype"> </td> 121*132f818dSEnji Cooper <td class="paramname">exp_api_function, </td> 122*132f818dSEnji Cooper </tr> 123*132f818dSEnji Cooper <tr> 124*132f818dSEnji Cooper <td class="paramkey"></td> 125*132f818dSEnji Cooper <td></td> 126*132f818dSEnji Cooper <td class="paramtype"> </td> 127*132f818dSEnji Cooper <td class="paramname">statement </td> 128*132f818dSEnji Cooper </tr> 129*132f818dSEnji Cooper <tr> 130*132f818dSEnji Cooper <td></td> 131*132f818dSEnji Cooper <td>)</td> 132*132f818dSEnji Cooper <td></td><td></td> 133*132f818dSEnji Cooper </tr> 134*132f818dSEnji Cooper </table> 135*132f818dSEnji Cooper</div><div class="memdoc"> 136*132f818dSEnji Cooper<b>Value:</b><div class="fragment"><div class="line"> <span class="keywordflow">do</span> { \</div> 137*132f818dSEnji Cooper<div class="line"> <span class="keywordflow">try</span> { \</div> 138*132f818dSEnji Cooper<div class="line"> statement; \</div> 139*132f818dSEnji Cooper<div class="line"> ATF_FAIL(<span class="stringliteral">"api_error not raised by "</span> #statement); \</div> 140*132f818dSEnji Cooper<div class="line"> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code hl_class" href="a00899.html">lutok::api_error</a>& api_error) { \</div> 141*132f818dSEnji Cooper<div class="line"> ATF_REQUIRE_EQ(exp_api_function, api_error.<a class="code hl_function" href="a00899.html#a69a79fd116c6ab783e40139220fad08b">api_function</a>()); \</div> 142*132f818dSEnji Cooper<div class="line"> } \</div> 143*132f818dSEnji Cooper<div class="line"> } <span class="keywordflow">while</span> (0)</div> 144*132f818dSEnji Cooper<div class="ttc" id="aa00899_html"><div class="ttname"><a href="a00899.html">lutok::api_error</a></div><div class="ttdoc">Exception for errors raised by the Lua API library.</div><div class="ttdef"><b>Definition:</b> exceptions.hpp:53</div></div> 145*132f818dSEnji Cooper<div class="ttc" id="aa00899_html_a69a79fd116c6ab783e40139220fad08b"><div class="ttname"><a href="a00899.html#a69a79fd116c6ab783e40139220fad08b">lutok::api_error::api_function</a></div><div class="ttdeci">const std::string & api_function(void) const</div><div class="ttdoc">Gets the name of the Lua API function that caused this error.</div><div class="ttdef"><b>Definition:</b> exceptions.cpp:96</div></div> 146*132f818dSEnji Cooper</div><!-- fragment --> 147*132f818dSEnji Cooper<p>Checks that a given expression raises a particular <a class="el" href="a00899.html" title="Exception for errors raised by the Lua API library.">lutok::api_error</a>. </p> 148*132f818dSEnji Cooper<p>We cannot make any assumptions regarding the error text provided by Lua, so we resort to checking only which API function raised the error (because our code is the one hardcoding these strings).</p> 149*132f818dSEnji Cooper<dl class="params"><dt>Parameters</dt><dd> 150*132f818dSEnji Cooper <table class="params"> 151*132f818dSEnji Cooper <tr><td class="paramname">exp_api_function</td><td>The name of the Lua C API function that causes the error. </td></tr> 152*132f818dSEnji Cooper <tr><td class="paramname">statement</td><td>The statement to execute. </td></tr> 153*132f818dSEnji Cooper </table> 154*132f818dSEnji Cooper </dd> 155*132f818dSEnji Cooper</dl> 156*132f818dSEnji Cooper 157*132f818dSEnji Cooper</div> 158*132f818dSEnji Cooper</div> 159*132f818dSEnji Cooper</div><!-- contents --> 160*132f818dSEnji Cooper<!-- start footer part --> 161*132f818dSEnji Cooper<hr class="footer"/><address class="footer"><small> 162*132f818dSEnji CooperGenerated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.6 163*132f818dSEnji Cooper</small></address> 164*132f818dSEnji Cooper</body> 165*132f818dSEnji Cooper</html> 166