<!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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>_pytest.runner</title> <link rel="stylesheet" href="../../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../', VERSION: '2.2.4.0', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../_static/jquery.js"></script> <script type="text/javascript" src="../../_static/underscore.js"></script> <script type="text/javascript" src="../../_static/doctools.js"></script> <script type="text/javascript" src="../../_static/translations.js"></script> <link rel="top" title="None" href="../../index.html" /> <link rel="up" title="モジュールコード" href="../index.html" /> </head> <body> <div class="related"> <h3>ナビゲーション</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../py-modindex.html" title="Pythonモジュール索引" >モジュール</a></li> <li><a href="../../contents.html">pytest-2.2.4.0</a> »</li> <li><a href="../index.html" accesskey="U">モジュールコード</a> »</li> </ul> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <div id="searchbox" style="display: none"> <h3>クイック検索</h3> <form class="search" action="../../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="検索" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> モジュール、クラス、または関数名を入力してください </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>_pytest.runner のソースコード</h1><div class="highlight"><pre> <span class="sd">""" basic collect and runtest protocol implementations """</span> <span class="kn">import</span> <span class="nn">py</span><span class="o">,</span> <span class="nn">sys</span> <span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">time</span> <span class="kn">from</span> <span class="nn">py._code.code</span> <span class="kn">import</span> <span class="n">TerminalRepr</span> <span class="k">def</span> <span class="nf">pytest_namespace</span><span class="p">():</span> <span class="k">return</span> <span class="p">{</span> <span class="s">'fail'</span> <span class="p">:</span> <span class="n">fail</span><span class="p">,</span> <span class="s">'skip'</span> <span class="p">:</span> <span class="n">skip</span><span class="p">,</span> <span class="s">'importorskip'</span> <span class="p">:</span> <span class="n">importorskip</span><span class="p">,</span> <span class="s">'exit'</span> <span class="p">:</span> <span class="nb">exit</span><span class="p">,</span> <span class="p">}</span> <span class="c">#</span> <span class="c"># pytest plugin hooks</span> <span class="k">def</span> <span class="nf">pytest_addoption</span><span class="p">(</span><span class="n">parser</span><span class="p">):</span> <span class="n">group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">getgroup</span><span class="p">(</span><span class="s">"terminal reporting"</span><span class="p">,</span> <span class="s">"reporting"</span><span class="p">,</span> <span class="n">after</span><span class="o">=</span><span class="s">"general"</span><span class="p">)</span> <span class="n">group</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s">'--durations'</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s">"N"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"show N slowest setup/test durations (N=0 for all)."</span><span class="p">),</span> <span class="k">def</span> <span class="nf">pytest_terminal_summary</span><span class="p">(</span><span class="n">terminalreporter</span><span class="p">):</span> <span class="n">durations</span> <span class="o">=</span> <span class="n">terminalreporter</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">durations</span> <span class="k">if</span> <span class="n">durations</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">tr</span> <span class="o">=</span> <span class="n">terminalreporter</span> <span class="n">dlist</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">replist</span> <span class="ow">in</span> <span class="n">tr</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> <span class="k">for</span> <span class="n">rep</span> <span class="ow">in</span> <span class="n">replist</span><span class="p">:</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">rep</span><span class="p">,</span> <span class="s">'duration'</span><span class="p">):</span> <span class="n">dlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rep</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">dlist</span><span class="p">:</span> <span class="k">return</span> <span class="n">dlist</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">duration</span><span class="p">)</span> <span class="n">dlist</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">durations</span><span class="p">:</span> <span class="n">tr</span><span class="o">.</span><span class="n">write_sep</span><span class="p">(</span><span class="s">"="</span><span class="p">,</span> <span class="s">"slowest test durations"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">tr</span><span class="o">.</span><span class="n">write_sep</span><span class="p">(</span><span class="s">"="</span><span class="p">,</span> <span class="s">"slowest </span><span class="si">%s</span><span class="s"> test durations"</span> <span class="o">%</span> <span class="n">durations</span><span class="p">)</span> <span class="n">dlist</span> <span class="o">=</span> <span class="n">dlist</span><span class="p">[:</span><span class="n">durations</span><span class="p">]</span> <span class="k">for</span> <span class="n">rep</span> <span class="ow">in</span> <span class="n">dlist</span><span class="p">:</span> <span class="n">nodeid</span> <span class="o">=</span> <span class="n">rep</span><span class="o">.</span><span class="n">nodeid</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">"::()::"</span><span class="p">,</span> <span class="s">"::"</span><span class="p">)</span> <span class="n">tr</span><span class="o">.</span><span class="n">write_line</span><span class="p">(</span><span class="s">"</span><span class="si">%02.2f</span><span class="s">s </span><span class="si">%-8s</span><span class="s"> </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">rep</span><span class="o">.</span><span class="n">duration</span><span class="p">,</span> <span class="n">rep</span><span class="o">.</span><span class="n">when</span><span class="p">,</span> <span class="n">nodeid</span><span class="p">))</span> <span class="k">def</span> <span class="nf">pytest_sessionstart</span><span class="p">(</span><span class="n">session</span><span class="p">):</span> <span class="n">session</span><span class="o">.</span><span class="n">_setupstate</span> <span class="o">=</span> <span class="n">SetupState</span><span class="p">()</span> <span class="k">def</span> <span class="nf">pytest_sessionfinish</span><span class="p">(</span><span class="n">session</span><span class="p">):</span> <span class="n">session</span><span class="o">.</span><span class="n">_setupstate</span><span class="o">.</span><span class="n">teardown_all</span><span class="p">()</span> <span class="k">class</span> <span class="nc">NodeInfo</span><span class="p">:</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">location</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">location</span> <span class="k">def</span> <span class="nf">pytest_runtest_protocol</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">nextitem</span><span class="p">):</span> <span class="n">item</span><span class="o">.</span><span class="n">ihook</span><span class="o">.</span><span class="n">pytest_runtest_logstart</span><span class="p">(</span> <span class="n">nodeid</span><span class="o">=</span><span class="n">item</span><span class="o">.</span><span class="n">nodeid</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="n">item</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="p">)</span> <span class="n">runtestprotocol</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">nextitem</span><span class="o">=</span><span class="n">nextitem</span><span class="p">)</span> <span class="k">return</span> <span class="bp">True</span> <span class="k">def</span> <span class="nf">runtestprotocol</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">log</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">nextitem</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="n">hasrequest</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"_request"</span><span class="p">)</span> <span class="k">if</span> <span class="n">hasrequest</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">item</span><span class="o">.</span><span class="n">_request</span><span class="p">:</span> <span class="n">item</span><span class="o">.</span><span class="n">_initrequest</span><span class="p">()</span> <span class="n">rep</span> <span class="o">=</span> <span class="n">call_and_report</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"setup"</span><span class="p">,</span> <span class="n">log</span><span class="p">)</span> <span class="n">reports</span> <span class="o">=</span> <span class="p">[</span><span class="n">rep</span><span class="p">]</span> <span class="k">if</span> <span class="n">rep</span><span class="o">.</span><span class="n">passed</span><span class="p">:</span> <span class="n">reports</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">call_and_report</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"call"</span><span class="p">,</span> <span class="n">log</span><span class="p">))</span> <span class="n">reports</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">call_and_report</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"teardown"</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">nextitem</span><span class="o">=</span><span class="n">nextitem</span><span class="p">))</span> <span class="c"># after all teardown hooks have been called</span> <span class="c"># want funcargs and request info to go away</span> <span class="k">if</span> <span class="n">hasrequest</span><span class="p">:</span> <span class="n">item</span><span class="o">.</span><span class="n">_request</span> <span class="o">=</span> <span class="bp">False</span> <span class="n">item</span><span class="o">.</span><span class="n">funcargs</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">return</span> <span class="n">reports</span> <span class="k">def</span> <span class="nf">pytest_runtest_setup</span><span class="p">(</span><span class="n">item</span><span class="p">):</span> <span class="n">item</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">_setupstate</span><span class="o">.</span><span class="n">prepare</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">def</span> <span class="nf">pytest_runtest_call</span><span class="p">(</span><span class="n">item</span><span class="p">):</span> <span class="n">item</span><span class="o">.</span><span class="n">runtest</span><span class="p">()</span> <span class="k">def</span> <span class="nf">pytest_runtest_teardown</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">nextitem</span><span class="p">):</span> <span class="n">item</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">_setupstate</span><span class="o">.</span><span class="n">teardown_exact</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">nextitem</span><span class="p">)</span> <span class="k">def</span> <span class="nf">pytest_report_teststatus</span><span class="p">(</span><span class="n">report</span><span class="p">):</span> <span class="k">if</span> <span class="n">report</span><span class="o">.</span><span class="n">when</span> <span class="ow">in</span> <span class="p">(</span><span class="s">"setup"</span><span class="p">,</span> <span class="s">"teardown"</span><span class="p">):</span> <span class="k">if</span> <span class="n">report</span><span class="o">.</span><span class="n">failed</span><span class="p">:</span> <span class="c"># category, shortletter, verbose-word</span> <span class="k">return</span> <span class="s">"error"</span><span class="p">,</span> <span class="s">"E"</span><span class="p">,</span> <span class="s">"ERROR"</span> <span class="k">elif</span> <span class="n">report</span><span class="o">.</span><span class="n">skipped</span><span class="p">:</span> <span class="k">return</span> <span class="s">"skipped"</span><span class="p">,</span> <span class="s">"s"</span><span class="p">,</span> <span class="s">"SKIPPED"</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="s">""</span> <span class="c">#</span> <span class="c"># Implementation</span> <span class="k">def</span> <span class="nf">call_and_report</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">when</span><span class="p">,</span> <span class="n">log</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> <span class="n">call</span> <span class="o">=</span> <span class="n">call_runtest_hook</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">when</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span> <span class="n">hook</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">ihook</span> <span class="n">report</span> <span class="o">=</span> <span class="n">hook</span><span class="o">.</span><span class="n">pytest_runtest_makereport</span><span class="p">(</span><span class="n">item</span><span class="o">=</span><span class="n">item</span><span class="p">,</span> <span class="n">call</span><span class="o">=</span><span class="n">call</span><span class="p">)</span> <span class="k">if</span> <span class="n">log</span><span class="p">:</span> <span class="n">hook</span><span class="o">.</span><span class="n">pytest_runtest_logreport</span><span class="p">(</span><span class="n">report</span><span class="o">=</span><span class="n">report</span><span class="p">)</span> <span class="k">return</span> <span class="n">report</span> <span class="k">def</span> <span class="nf">call_runtest_hook</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">when</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> <span class="n">hookname</span> <span class="o">=</span> <span class="s">"pytest_runtest_"</span> <span class="o">+</span> <span class="n">when</span> <span class="n">ihook</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">ihook</span><span class="p">,</span> <span class="n">hookname</span><span class="p">)</span> <span class="k">return</span> <span class="n">CallInfo</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">ihook</span><span class="p">(</span><span class="n">item</span><span class="o">=</span><span class="n">item</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">),</span> <span class="n">when</span><span class="o">=</span><span class="n">when</span><span class="p">)</span> <div class="viewcode-block" id="CallInfo"><a class="viewcode-back" href="../../plugins.html#_pytest.runner.CallInfo">[ドキュメント]</a><span class="k">class</span> <span class="nc">CallInfo</span><span class="p">:</span> <span class="sd">""" Result/Exception info a function invocation. """</span> <span class="c">#: None or ExceptionInfo object.</span> <span class="n">excinfo</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">when</span><span class="p">):</span> <span class="c">#: context of invocation: one of "setup", "call",</span> <span class="c">#: "teardown", "memocollect"</span> <span class="bp">self</span><span class="o">.</span><span class="n">when</span> <span class="o">=</span> <span class="n">when</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span> <span class="k">try</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">()</span> <span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">raise</span> <span class="k">except</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">excinfo</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">ExceptionInfo</span><span class="p">()</span> <span class="k">finally</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">stop</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">excinfo</span><span class="p">:</span> <span class="n">status</span> <span class="o">=</span> <span class="s">"exception: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">excinfo</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">status</span> <span class="o">=</span> <span class="s">"result: </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">,)</span> <span class="k">return</span> <span class="s">"<CallInfo when=</span><span class="si">%r</span><span class="s"> </span><span class="si">%s</span><span class="s">>"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">when</span><span class="p">,</span> <span class="n">status</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">getslaveinfoline</span><span class="p">(</span><span class="n">node</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="n">node</span><span class="o">.</span><span class="n">_slaveinfocache</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="n">d</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">slaveinfo</span> <span class="n">ver</span> <span class="o">=</span> <span class="s">"</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">d</span><span class="p">[</span><span class="s">'version_info'</span><span class="p">][:</span><span class="mi">3</span><span class="p">]</span> <span class="n">node</span><span class="o">.</span><span class="n">_slaveinfocache</span> <span class="o">=</span> <span class="n">s</span> <span class="o">=</span> <span class="s">"[</span><span class="si">%s</span><span class="s">] </span><span class="si">%s</span><span class="s"> -- Python </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span> <span class="n">d</span><span class="p">[</span><span class="s">'id'</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="s">'sysplatform'</span><span class="p">],</span> <span class="n">ver</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="s">'executable'</span><span class="p">])</span> <span class="k">return</span> <span class="n">s</span> <span class="k">class</span> <span class="nc">BaseReport</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span> <span class="k">def</span> <span class="nf">toterminal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">):</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'node'</span><span class="p">):</span> <span class="n">out</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="n">getslaveinfoline</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">))</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">longrepr</span><span class="p">,</span> <span class="s">'toterminal'</span><span class="p">):</span> <span class="n">longrepr</span><span class="o">.</span><span class="n">toterminal</span><span class="p">(</span><span class="n">out</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="n">out</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="n">longrepr</span><span class="p">)</span> <span class="k">except</span> <span class="ne">UnicodeEncodeError</span><span class="p">:</span> <span class="n">out</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="s">"<unprintable longrepr>"</span><span class="p">)</span> <span class="n">passed</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">outcome</span> <span class="o">==</span> <span class="s">"passed"</span><span class="p">)</span> <span class="n">failed</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">outcome</span> <span class="o">==</span> <span class="s">"failed"</span><span class="p">)</span> <span class="n">skipped</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">outcome</span> <span class="o">==</span> <span class="s">"skipped"</span><span class="p">)</span> <span class="nd">@property</span> <span class="k">def</span> <span class="nf">fspath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nodeid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">"::"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">def</span> <span class="nf">pytest_runtest_makereport</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">call</span><span class="p">):</span> <span class="n">when</span> <span class="o">=</span> <span class="n">call</span><span class="o">.</span><span class="n">when</span> <span class="n">duration</span> <span class="o">=</span> <span class="n">call</span><span class="o">.</span><span class="n">stop</span><span class="o">-</span><span class="n">call</span><span class="o">.</span><span class="n">start</span> <span class="n">keywords</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">x</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">keywords</span><span class="p">])</span> <span class="n">excinfo</span> <span class="o">=</span> <span class="n">call</span><span class="o">.</span><span class="n">excinfo</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">call</span><span class="o">.</span><span class="n">excinfo</span><span class="p">:</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"passed"</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">else</span><span class="p">:</span> <span class="n">excinfo</span> <span class="o">=</span> <span class="n">call</span><span class="o">.</span><span class="n">excinfo</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">excinfo</span><span class="p">,</span> <span class="n">py</span><span class="o">.</span><span class="n">code</span><span class="o">.</span><span class="n">ExceptionInfo</span><span class="p">):</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"failed"</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="n">excinfo</span> <span class="k">elif</span> <span class="n">excinfo</span><span class="o">.</span><span class="n">errisinstance</span><span class="p">(</span><span class="n">py</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">skip</span><span class="o">.</span><span class="n">Exception</span><span class="p">):</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"skipped"</span> <span class="n">r</span> <span class="o">=</span> <span class="n">excinfo</span><span class="o">.</span><span class="n">_getreprcrash</span><span class="p">()</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">path</span><span class="p">),</span> <span class="n">r</span><span class="o">.</span><span class="n">lineno</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"failed"</span> <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">when</span> <span class="o">==</span> <span class="s">"call"</span><span class="p">:</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">repr_failure</span><span class="p">(</span><span class="n">excinfo</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="c"># exception in setup or teardown</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">_repr_failure_py</span><span class="p">(</span><span class="n">excinfo</span><span class="p">)</span> <span class="k">return</span> <span class="n">TestReport</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">nodeid</span><span class="p">,</span> <span class="n">item</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">keywords</span><span class="p">,</span> <span class="n">outcome</span><span class="p">,</span> <span class="n">longrepr</span><span class="p">,</span> <span class="n">when</span><span class="p">,</span> <span class="n">duration</span><span class="o">=</span><span class="n">duration</span><span class="p">)</span> <div class="viewcode-block" id="TestReport"><a class="viewcode-back" href="../../plugins.html#_pytest.runner.TestReport">[ドキュメント]</a><span class="k">class</span> <span class="nc">TestReport</span><span class="p">(</span><span class="n">BaseReport</span><span class="p">):</span> <span class="sd">""" Basic test report object (also used for setup and teardown calls if</span> <span class="sd"> they fail).</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodeid</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">keywords</span><span class="p">,</span> <span class="n">outcome</span><span class="p">,</span> <span class="n">longrepr</span><span class="p">,</span> <span class="n">when</span><span class="p">,</span> <span class="n">sections</span><span class="o">=</span><span class="p">(),</span> <span class="n">duration</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span> <span class="c">#: normalized collection node id</span> <span class="bp">self</span><span class="o">.</span><span class="n">nodeid</span> <span class="o">=</span> <span class="n">nodeid</span> <span class="c">#: a (filesystempath, lineno, domaininfo) tuple indicating the</span> <span class="c">#: actual location of a test item - it might be different from the</span> <span class="c">#: collected one e.g. if a method is inherited from a different module.</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">location</span> <span class="c">#: a name -> value dictionary containing all keywords and</span> <span class="c">#: markers associated with a test invocation.</span> <span class="bp">self</span><span class="o">.</span><span class="n">keywords</span> <span class="o">=</span> <span class="n">keywords</span> <span class="c">#: test outcome, always one of "passed", "failed", "skipped".</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcome</span> <span class="o">=</span> <span class="n">outcome</span> <span class="c">#: None or a failure representation.</span> <span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span> <span class="o">=</span> <span class="n">longrepr</span> <span class="c">#: one of 'setup', 'call', 'teardown' to indicate runtest phase.</span> <span class="bp">self</span><span class="o">.</span><span class="n">when</span> <span class="o">=</span> <span class="n">when</span> <span class="c">#: list of (secname, data) extra information which needs to</span> <span class="c">#: marshallable</span> <span class="bp">self</span><span class="o">.</span><span class="n">sections</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sections</span><span class="p">)</span> <span class="c">#: time it took to run just the test</span> <span class="bp">self</span><span class="o">.</span><span class="n">duration</span> <span class="o">=</span> <span class="n">duration</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">extra</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s">"<TestReport </span><span class="si">%r</span><span class="s"> when=</span><span class="si">%r</span><span class="s"> outcome=</span><span class="si">%r</span><span class="s">>"</span> <span class="o">%</span> <span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">nodeid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">when</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcome</span><span class="p">)</span> </div> <span class="k">class</span> <span class="nc">TeardownErrorReport</span><span class="p">(</span><span class="n">BaseReport</span><span class="p">):</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"failed"</span> <span class="n">when</span> <span class="o">=</span> <span class="s">"teardown"</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">longrepr</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span> <span class="o">=</span> <span class="n">longrepr</span> <span class="bp">self</span><span class="o">.</span><span class="n">sections</span> <span class="o">=</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">extra</span><span class="p">)</span> <span class="k">def</span> <span class="nf">pytest_make_collect_report</span><span class="p">(</span><span class="n">collector</span><span class="p">):</span> <span class="n">call</span> <span class="o">=</span> <span class="n">CallInfo</span><span class="p">(</span><span class="n">collector</span><span class="o">.</span><span class="n">_memocollect</span><span class="p">,</span> <span class="s">"memocollect"</span><span class="p">)</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">call</span><span class="o">.</span><span class="n">excinfo</span><span class="p">:</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"passed"</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">excinfo</span><span class="o">.</span><span class="n">errisinstance</span><span class="p">(</span><span class="n">py</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">skip</span><span class="o">.</span><span class="n">Exception</span><span class="p">):</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"skipped"</span> <span class="n">r</span> <span class="o">=</span> <span class="n">collector</span><span class="o">.</span><span class="n">_repr_failure_py</span><span class="p">(</span><span class="n">call</span><span class="o">.</span><span class="n">excinfo</span><span class="p">,</span> <span class="s">"line"</span><span class="p">)</span><span class="o">.</span><span class="n">reprcrash</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">path</span><span class="p">),</span> <span class="n">r</span><span class="o">.</span><span class="n">lineno</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">outcome</span> <span class="o">=</span> <span class="s">"failed"</span> <span class="n">errorinfo</span> <span class="o">=</span> <span class="n">collector</span><span class="o">.</span><span class="n">repr_failure</span><span class="p">(</span><span class="n">call</span><span class="o">.</span><span class="n">excinfo</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">errorinfo</span><span class="p">,</span> <span class="s">"toterminal"</span><span class="p">):</span> <span class="n">errorinfo</span> <span class="o">=</span> <span class="n">CollectErrorRepr</span><span class="p">(</span><span class="n">errorinfo</span><span class="p">)</span> <span class="n">longrepr</span> <span class="o">=</span> <span class="n">errorinfo</span> <span class="k">return</span> <span class="n">CollectReport</span><span class="p">(</span><span class="n">collector</span><span class="o">.</span><span class="n">nodeid</span><span class="p">,</span> <span class="n">outcome</span><span class="p">,</span> <span class="n">longrepr</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">call</span><span class="p">,</span> <span class="s">'result'</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span> <span class="k">class</span> <span class="nc">CollectReport</span><span class="p">(</span><span class="n">BaseReport</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodeid</span><span class="p">,</span> <span class="n">outcome</span><span class="p">,</span> <span class="n">longrepr</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">sections</span><span class="o">=</span><span class="p">(),</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">nodeid</span> <span class="o">=</span> <span class="n">nodeid</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcome</span> <span class="o">=</span> <span class="n">outcome</span> <span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span> <span class="o">=</span> <span class="n">longrepr</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="ow">or</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">sections</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sections</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">extra</span><span class="p">)</span> <span class="nd">@property</span> <span class="k">def</span> <span class="nf">location</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fspath</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fspath</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s">"<CollectReport </span><span class="si">%r</span><span class="s"> lenresult=</span><span class="si">%s</span><span class="s"> outcome=</span><span class="si">%r</span><span class="s">>"</span> <span class="o">%</span> <span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">nodeid</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">outcome</span><span class="p">)</span> <span class="k">class</span> <span class="nc">CollectErrorRepr</span><span class="p">(</span><span class="n">TerminalRepr</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span> <span class="o">=</span> <span class="n">msg</span> <span class="k">def</span> <span class="nf">toterminal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">):</span> <span class="n">out</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">longrepr</span><span class="p">,</span> <span class="n">red</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="k">class</span> <span class="nc">SetupState</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">""" shared state for setting up/tearing down test items or collectors. """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">def</span> <span class="nf">addfinalizer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">finalizer</span><span class="p">,</span> <span class="n">colitem</span><span class="p">):</span> <span class="sd">""" attach a finalizer to the given colitem.</span> <span class="sd"> if colitem is None, this will add a finalizer that</span> <span class="sd"> is called at the end of teardown_all().</span> <span class="sd"> if colitem is a tuple, it will be used as a key</span> <span class="sd"> and needs an explicit call to _callfinalizers(key) later on.</span> <span class="sd"> """</span> <span class="k">assert</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">finalizer</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">)</span> <span class="c">#assert colitem in self.stack</span> <span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="p">[])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">finalizer</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_pop_and_teardown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">colitem</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_teardown_with_finalization</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_callfinalizers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colitem</span><span class="p">):</span> <span class="n">finalizers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">while</span> <span class="n">finalizers</span><span class="p">:</span> <span class="n">fin</span> <span class="o">=</span> <span class="n">finalizers</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="n">fin</span><span class="p">()</span> <span class="k">def</span> <span class="nf">_teardown_with_finalization</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colitem</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callfinalizers</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="s">"teardown"</span><span class="p">):</span> <span class="n">colitem</span><span class="o">.</span><span class="n">teardown</span><span class="p">()</span> <span class="k">for</span> <span class="n">colitem</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span><span class="p">:</span> <span class="k">assert</span> <span class="n">colitem</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">colitem</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span> \ <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="k">def</span> <span class="nf">teardown_all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pop_and_teardown</span><span class="p">()</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_teardown_with_finalization</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">assert</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_finalizers</span> <span class="k">def</span> <span class="nf">teardown_exact</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">,</span> <span class="n">nextitem</span><span class="p">):</span> <span class="n">needed_collectors</span> <span class="o">=</span> <span class="n">nextitem</span> <span class="ow">and</span> <span class="n">nextitem</span><span class="o">.</span><span class="n">listchain</span><span class="p">()</span> <span class="ow">or</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">_teardown_towards</span><span class="p">(</span><span class="n">needed_collectors</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_teardown_towards</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">needed_collectors</span><span class="p">):</span> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span> <span class="o">==</span> <span class="n">needed_collectors</span><span class="p">[:</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">)]:</span> <span class="k">break</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pop_and_teardown</span><span class="p">()</span> <span class="k">def</span> <span class="nf">prepare</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colitem</span><span class="p">):</span> <span class="sd">""" setup objects along the collector chain to the test-method</span> <span class="sd"> and teardown previously setup objects."""</span> <span class="n">needed_collectors</span> <span class="o">=</span> <span class="n">colitem</span><span class="o">.</span><span class="n">listchain</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_teardown_towards</span><span class="p">(</span><span class="n">needed_collectors</span><span class="p">)</span> <span class="c"># check if the last collection node has raised an error</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">'_prepare_exc'</span><span class="p">):</span> <span class="n">py</span><span class="o">.</span><span class="n">builtin</span><span class="o">.</span><span class="n">_reraise</span><span class="p">(</span><span class="o">*</span><span class="n">col</span><span class="o">.</span><span class="n">_prepare_exc</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">needed_collectors</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">):]:</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">col</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">col</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span> <span class="n">col</span><span class="o">.</span><span class="n">_prepare_exc</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span> <span class="k">raise</span> <span class="c"># =============================================================</span> <span class="c"># Test OutcomeExceptions and helpers for creating them.</span> <span class="k">class</span> <span class="nc">OutcomeException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> <span class="sd">""" OutcomeException and its subclass instances indicate and</span> <span class="sd"> contain info about test and collection outcomes.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">pytrace</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span> <span class="ne">Exception</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="bp">self</span><span class="o">.</span><span class="n">pytrace</span> <span class="o">=</span> <span class="n">pytrace</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">:</span> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span> <span class="k">return</span> <span class="s">"<</span><span class="si">%s</span><span class="s"> instance>"</span> <span class="o">%</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,)</span> <span class="n">__str__</span> <span class="o">=</span> <span class="n">__repr__</span> <span class="k">class</span> <span class="nc">Skipped</span><span class="p">(</span><span class="n">OutcomeException</span><span class="p">):</span> <span class="c"># XXX hackish: on 3k we fake to live in the builtins</span> <span class="c"># in order to have Skipped exception printing shorter/nicer</span> <span class="n">__module__</span> <span class="o">=</span> <span class="s">'builtins'</span> <span class="k">class</span> <span class="nc">Failed</span><span class="p">(</span><span class="n">OutcomeException</span><span class="p">):</span> <span class="sd">""" raised from an explicit call to py.test.fail() """</span> <span class="n">__module__</span> <span class="o">=</span> <span class="s">'builtins'</span> <span class="k">class</span> <span class="nc">Exit</span><span class="p">(</span><span class="ne">KeyboardInterrupt</span><span class="p">):</span> <span class="sd">""" raised for immediate program exits (no tracebacks/summaries)"""</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s">"unknown reason"</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="ne">KeyboardInterrupt</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> <span class="c"># exposed helper methods</span> <span class="k">def</span> <span class="nf">exit</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span> <span class="sd">""" exit testing process as if KeyboardInterrupt was triggered. """</span> <span class="n">__tracebackhide__</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">raise</span> <span class="n">Exit</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="nb">exit</span><span class="o">.</span><span class="n">Exception</span> <span class="o">=</span> <span class="n">Exit</span> <span class="k">def</span> <span class="nf">skip</span><span class="p">(</span><span class="n">msg</span><span class="o">=</span><span class="s">""</span><span class="p">):</span> <span class="sd">""" skip an executing test with the given message. Note: it's usually</span> <span class="sd"> better to use the py.test.mark.skipif marker to declare a test to be</span> <span class="sd"> skipped under certain conditions like mismatching platforms or</span> <span class="sd"> dependencies. See the pytest_skipping plugin for details.</span> <span class="sd"> """</span> <span class="n">__tracebackhide__</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">raise</span> <span class="n">Skipped</span><span class="p">(</span><span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">)</span> <span class="n">skip</span><span class="o">.</span><span class="n">Exception</span> <span class="o">=</span> <span class="n">Skipped</span> <span class="k">def</span> <span class="nf">fail</span><span class="p">(</span><span class="n">msg</span><span class="o">=</span><span class="s">""</span><span class="p">,</span> <span class="n">pytrace</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span> <span class="sd">""" explicitely fail an currently-executing test with the given Message.</span> <span class="sd"> :arg pytrace: if false the msg represents the full failure information</span> <span class="sd"> and no python traceback will be reported.</span> <span class="sd"> """</span> <span class="n">__tracebackhide__</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">raise</span> <span class="n">Failed</span><span class="p">(</span><span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> <span class="n">pytrace</span><span class="o">=</span><span class="n">pytrace</span><span class="p">)</span> <span class="n">fail</span><span class="o">.</span><span class="n">Exception</span> <span class="o">=</span> <span class="n">Failed</span> <span class="k">def</span> <span class="nf">importorskip</span><span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="n">minversion</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">""" return imported module if it has a higher __version__ than the</span> <span class="sd"> optionally specified 'minversion' - otherwise call py.test.skip()</span> <span class="sd"> with a message detailing the mismatch.</span> <span class="sd"> """</span> <span class="n">__tracebackhide__</span> <span class="o">=</span> <span class="bp">True</span> <span class="nb">compile</span><span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="s">''</span><span class="p">,</span> <span class="s">'eval'</span><span class="p">)</span> <span class="c"># to catch syntaxerrors</span> <span class="k">try</span><span class="p">:</span> <span class="nb">__import__</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span> <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="n">py</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">skip</span><span class="p">(</span><span class="s">"could not import </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span><span class="p">(</span><span class="n">modname</span><span class="p">,))</span> <span class="n">mod</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">modname</span><span class="p">]</span> <span class="k">if</span> <span class="n">minversion</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">mod</span> <span class="n">verattr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s">'__version__'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">minversion</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> <span class="n">minver</span> <span class="o">=</span> <span class="n">minversion</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">"."</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">minver</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">minversion</span><span class="p">)</span> <span class="k">if</span> <span class="n">verattr</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">verattr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">"."</span><span class="p">)</span> <span class="o"><</span> <span class="n">minver</span><span class="p">:</span> <span class="n">py</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">skip</span><span class="p">(</span><span class="s">"module </span><span class="si">%r</span><span class="s"> has __version__ </span><span class="si">%r</span><span class="s">, required is: </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span><span class="p">(</span> <span class="n">modname</span><span class="p">,</span> <span class="n">verattr</span><span class="p">,</span> <span class="n">minversion</span><span class="p">))</span> <span class="k">return</span> <span class="n">mod</span> </pre></div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>ナビゲーション</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../py-modindex.html" title="Pythonモジュール索引" >モジュール</a></li> <li><a href="../../contents.html">pytest-2.2.4.0</a> »</li> <li><a href="../index.html" >モジュールコード</a> »</li> </ul> </div> <div class="footer"> © Copyright 2011, holger krekel et alii. このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3 で生成しました。 </div> </body> </html>