explicit_decorator_declaration.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Explicit decorator declaration</title>
  5. <link rel="stylesheet" href="../../../boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../../index.html" title="Boost.Test">
  8. <link rel="up" href="../decorators.html" title="Decorators">
  9. <link rel="prev" href="suite_level_decorators.html" title="Suite-level decorators">
  10. <link rel="next" href="../fixtures.html" title="Fixtures">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="suite_level_decorators.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../decorators.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../fixtures.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h4 class="title">
  27. <a name="boost_test.tests_organization.decorators.explicit_decorator_declaration"></a><a class="link" href="explicit_decorator_declaration.html" title="Explicit decorator declaration">Explicit
  28. decorator declaration</a>
  29. </h4></div></div></div>
  30. <p>
  31. There is another way of associating a decorator set with test units. Macro
  32. <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_decorator.html" title="BOOST_TEST_DECORATOR"><code class="computeroutput"><span class="identifier">BOOST_TEST_DECORATOR</span></code></a> indicates
  33. that its set of decorators is to be applied to the test unit or <span class="emphasis"><em>test
  34. case sequence</em></span> that immediately follows the declaration.
  35. </p>
  36. <h6>
  37. <a name="boost_test.tests_organization.decorators.explicit_decorator_declaration.h0"></a>
  38. <span class="phrase"><a name="boost_test.tests_organization.decorators.explicit_decorator_declaration.example_descr"></a></span><a class="link" href="explicit_decorator_declaration.html#boost_test.tests_organization.decorators.explicit_decorator_declaration.example_descr">Example:
  39. explicit decorator declaration</a>
  40. </h6>
  41. <div class="informaltable"><table class="table">
  42. <colgroup><col></colgroup>
  43. <thead><tr><th>
  44. <p>
  45. Code
  46. </p>
  47. </th></tr></thead>
  48. <tbody><tr><td>
  49. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">decorator_00</span>
  50. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  51. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">data</span><span class="special">/</span><span class="identifier">test_case</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  52. <span class="keyword">namespace</span> <span class="identifier">utf</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
  53. <span class="keyword">namespace</span> <span class="identifier">data</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">data</span><span class="special">;</span>
  54. <span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">description</span><span class="special">(</span><span class="string">"with description"</span><span class="special">))</span>
  55. <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span><span class="identifier">test_1</span><span class="special">,</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span><span class="number">4</span><span class="special">))</span>
  56. <span class="special">{</span>
  57. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">sample</span> <span class="special">&gt;=</span> <span class="number">0</span><span class="special">);</span>
  58. <span class="special">}</span>
  59. </pre>
  60. </td></tr></tbody>
  61. </table></div>
  62. <div class="informaltable"><table class="table">
  63. <colgroup><col></colgroup>
  64. <thead><tr><th>
  65. <p>
  66. Output
  67. </p>
  68. </th></tr></thead>
  69. <tbody><tr><td>
  70. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">decorator_00</span> <span class="special">--</span><span class="identifier">list_content</span>
  71. <span class="identifier">test_1</span><span class="special">*:</span> <span class="identifier">with</span> <span class="identifier">description</span>
  72. <span class="identifier">test_1</span><span class="special">*:</span> <span class="identifier">with</span> <span class="identifier">description</span>
  73. <span class="identifier">test_1</span><span class="special">*:</span> <span class="identifier">with</span> <span class="identifier">description</span>
  74. <span class="identifier">test_1</span><span class="special">*:</span> <span class="identifier">with</span> <span class="identifier">description</span>
  75. </pre>
  76. </td></tr></tbody>
  77. </table></div>
  78. <p>
  79. In the above example a decorator is applied to a <a class="link" href="../test_cases/test_case_generation.html" title="Data-driven test cases">data-driven
  80. test case</a>. Macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_dataset.html" title="BOOST_DATA_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_DATA_TEST_CASE</span></code></a> cannot take
  81. the decorator set as one of its arguments, therefore the explicit decorator
  82. declaration is used. Macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_dataset.html" title="BOOST_DATA_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_DATA_TEST_CASE</span></code></a> generates
  83. a sequence of 4 test cases. The decorator set is applied to each of them.
  84. </p>
  85. <p>
  86. Another use case for the explicit decorator declaration is when you intend
  87. for your test program to compile also on compilers without variadic macros.
  88. In this case it is recommended that you use the more verbose syntax. It
  89. is summarized in the following table:
  90. </p>
  91. <div class="informaltable"><table class="table">
  92. <colgroup>
  93. <col>
  94. <col>
  95. <col>
  96. </colgroup>
  97. <thead><tr>
  98. <th>
  99. <p>
  100. Test unit to register
  101. </p>
  102. </th>
  103. <th>
  104. <p>
  105. Concise syntax
  106. </p>
  107. </th>
  108. <th>
  109. <p>
  110. Universal syntax
  111. </p>
  112. </th>
  113. </tr></thead>
  114. <tbody>
  115. <tr>
  116. <td>
  117. <p>
  118. test case
  119. </p>
  120. </td>
  121. <td>
  122. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="special">*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  123. <span class="special">{</span>
  124. <span class="comment">// assertions</span>
  125. <span class="special">}</span>
  126. </pre>
  127. </td>
  128. <td>
  129. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  130. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">)</span>
  131. <span class="special">{</span>
  132. <span class="comment">// assertions</span>
  133. <span class="special">}</span>
  134. </pre>
  135. </td>
  136. </tr>
  137. <tr>
  138. <td>
  139. <p>
  140. test case with fixture
  141. </p>
  142. </td>
  143. <td>
  144. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_FIXTURE_TEST_CASE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="identifier">Fx</span><span class="special">,</span> <span class="special">*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  145. <span class="special">{</span>
  146. <span class="comment">// assertions</span>
  147. <span class="special">}</span>
  148. </pre>
  149. </td>
  150. <td>
  151. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  152. <span class="identifier">BOOST_FIXTURE_TEST_CASE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="identifier">Fx</span><span class="special">)</span>
  153. <span class="special">{</span>
  154. <span class="comment">// assertions</span>
  155. <span class="special">}</span>
  156. </pre>
  157. </td>
  158. </tr>
  159. <tr>
  160. <td>
  161. <p>
  162. test suite
  163. </p>
  164. </td>
  165. <td>
  166. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite</span><span class="special">,</span> <span class="special">*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  167. <span class="comment">// test units</span>
  168. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  169. </pre>
  170. </td>
  171. <td>
  172. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  173. <span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite</span><span class="special">)</span>
  174. <span class="comment">// test units</span>
  175. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  176. </pre>
  177. </td>
  178. </tr>
  179. <tr>
  180. <td>
  181. <p>
  182. test suite with fixture
  183. </p>
  184. </td>
  185. <td>
  186. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_FIXTURE_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite</span><span class="special">,</span> <span class="identifier">Fx</span><span class="special">,</span> <span class="special">*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  187. <span class="comment">// test units</span>
  188. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  189. </pre>
  190. </td>
  191. <td>
  192. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  193. <span class="identifier">BOOST_FIXTURE_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite</span><span class="special">,</span> <span class="identifier">Fx</span><span class="special">)</span>
  194. <span class="comment">// test units</span>
  195. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  196. </pre>
  197. </td>
  198. </tr>
  199. <tr>
  200. <td>
  201. <p>
  202. data-driven test case
  203. </p>
  204. </td>
  205. <td>
  206. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// not doable</span>
  207. </pre>
  208. </td>
  209. <td>
  210. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  211. <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="identifier">data</span><span class="special">,</span> <span class="identifier">var</span><span class="special">)</span>
  212. <span class="special">{</span>
  213. <span class="comment">// assertions</span>
  214. <span class="special">}</span>
  215. </pre>
  216. </td>
  217. </tr>
  218. <tr>
  219. <td>
  220. <p>
  221. test case template
  222. </p>
  223. </td>
  224. <td>
  225. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// not doable</span>
  226. </pre>
  227. </td>
  228. <td>
  229. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  230. <span class="identifier">BOOST_AUTO_TEST_CASE_TEMPLATE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">type_list</span><span class="special">)</span>
  231. <span class="special">{</span>
  232. <span class="comment">// assertions</span>
  233. <span class="special">}</span>
  234. </pre>
  235. </td>
  236. </tr>
  237. <tr>
  238. <td>
  239. <p>
  240. test case template with fixture
  241. </p>
  242. </td>
  243. <td>
  244. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// not doable</span>
  245. </pre>
  246. </td>
  247. <td>
  248. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_TEST_DECORATOR</span><span class="special">(*</span><span class="identifier">decor1</span><span class="special">()</span> <span class="special">*</span><span class="identifier">decor2</span><span class="special">())</span>
  249. <span class="identifier">BOOST_FIXTURE_TEST_CASE_TEMPLATE</span><span class="special">(</span><span class="identifier">test_case</span><span class="special">,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">type_list</span><span class="special">,</span> <span class="identifier">Fx</span><span class="special">)</span>
  250. <span class="special">{</span>
  251. <span class="comment">// assertions</span>
  252. <span class="special">}</span>
  253. </pre>
  254. </td>
  255. </tr>
  256. </tbody>
  257. </table></div>
  258. <p>
  259. Throughout the reminder of this documentation we use only the concise syntax.
  260. </p>
  261. </div>
  262. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  263. <td align="left"></td>
  264. <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2019 Boost.Test
  265. contributors<p>
  266. Distributed under the Boost Software License, Version 1.0. (See accompanying
  267. file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
  268. </p>
  269. </div></td>
  270. </tr></table>
  271. <hr>
  272. <div class="spirit-nav">
  273. <a accesskey="p" href="suite_level_decorators.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../decorators.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../fixtures.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
  274. </div>
  275. </body>
  276. </html>