1 <?xml version="1.0" encoding="ascii"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6 <title>lxml.doctestcompare</title>
7 <link rel="stylesheet" href="epydoc.css" type="text/css" />
8 <script type="text/javascript" src="epydoc.js"></script>
11 <body bgcolor="white" text="black" link="blue" vlink="#204080"
13 <!-- ==================== NAVIGATION BAR ==================== -->
14 <table class="navbar" border="0" width="100%" cellpadding="0"
15 bgcolor="#a0c0ff" cellspacing="0">
18 <th> <a
19 href="lxml-module.html">Home</a> </th>
22 <th> <a
23 href="module-tree.html">Trees</a> </th>
26 <th> <a
27 href="identifier-index.html">Indices</a> </th>
30 <th> <a
31 href="help.html">Help</a> </th>
33 <!-- Project homepage -->
34 <th class="navbar" align="right" width="100%">
35 <table border="0" cellpadding="0" cellspacing="0">
36 <tr><th class="navbar" align="center"
37 ><a class="navbar" target="_top" href="/">lxml API</a></th>
41 <table width="100%" cellpadding="0" cellspacing="0">
44 <span class="breadcrumbs">
45 <a href="lxml-module.html">Package lxml</a> ::
46 Module doctestcompare
50 <table cellpadding="0" cellspacing="0">
51 <!-- hide/show private -->
52 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
53 onclick="toggle_private();">hide private</a>]</span></td></tr>
54 <tr><td align="right"><span class="options"
55 >[<a href="frames.html" target="_top">frames</a
56 >] | <a href="lxml.doctestcompare-module.html"
57 target="_top">no frames</a>]</span></td></tr>
62 <!-- ==================== MODULE DESCRIPTION ==================== -->
63 <h1 class="epydoc">Module doctestcompare</h1><p class="nomargin-top"><span class="codelink"><a href="lxml.doctestcompare-pysrc.html">source code</a></span></p>
64 <p>lxml-based doctest output comparison.</p>
65 <p>Note: normally, you should just import the <a href="lxml.usedoctest-module.html" class="link">lxml.usedoctest</a> and
66 <a href="lxml.html.usedoctest-module.html" class="link">lxml.html.usedoctest</a> modules from within a doctest, instead of this
68 <pre class="rst-literal-block">
69 >>> import lxml.usedoctest # for XML output
71 >>> import lxml.html.usedoctest # for HTML output
73 <p>To use this module directly, you must call <tt class="rst-docutils literal">lxmldoctest.install()</tt>,
74 which will cause doctest to use this in all subsequent calls.</p>
75 <p>This changes the way output is checked and comparisons are made for
76 XML or HTML-like content.</p>
77 <p>XML or HTML content is noticed because the example starts with <tt class="rst-docutils literal"><</tt>
78 (it's HTML if it starts with <tt class="rst-docutils literal"><html</tt>). You can also use the
79 <tt class="rst-docutils literal">PARSE_HTML</tt> and <tt class="rst-docutils literal">PARSE_XML</tt> flags to force parsing.</p>
80 <p>Some rough wildcard-like things are allowed. Whitespace is generally
81 ignored (except in attributes). In text (attributes and text in the
82 body) you can use <tt class="rst-docutils literal">...</tt> as a wildcard. In an example it also
83 matches any trailing tags in the element, though it does not match
84 leading tags. You may create a tag <tt class="rst-docutils literal"><any></tt> or include an <tt class="rst-docutils literal">any</tt>
85 attribute in the tag. An <tt class="rst-docutils literal">any</tt> tag matches any tag, while the
86 attribute matches any and all attributes.</p>
87 <p>When a match fails, the reformatted example and gotten text is
88 displayed (indented), and a rough diff-like output is given. Anything
89 marked with <tt class="rst-docutils literal">+</tt> is in the output but wasn't supposed to be, and
90 similarly <tt class="rst-docutils literal">-</tt> means its in the example but wasn't in the output.</p>
91 <p>You can disable parsing on one line with <tt class="rst-docutils literal"># <span class="pre">doctest:+NOPARSE_MARKUP</span></tt></p>
93 <!-- ==================== CLASSES ==================== -->
94 <a name="section-Classes"></a>
95 <table class="summary" border="1" cellpadding="3"
96 cellspacing="0" width="100%" bgcolor="white">
97 <tr bgcolor="#70b0f0" class="table-header">
98 <td colspan="2" class="table-header">
99 <table border="0" cellpadding="0" cellspacing="0" width="100%">
101 <td align="left"><span class="table-header">Classes</span></td>
102 <td align="right" valign="top"
103 ><span class="options">[<a href="#section-Classes"
104 class="privatelink" onclick="toggle_private();"
105 >hide private</a>]</span></td>
111 <td width="15%" align="right" valign="top" class="summary">
112 <span class="summary-type"> </span>
113 </td><td class="summary">
114 <a href="lxml.doctestcompare.LXMLOutputChecker-class.html" class="summary-name">LXMLOutputChecker</a>
118 <td width="15%" align="right" valign="top" class="summary">
119 <span class="summary-type"> </span>
120 </td><td class="summary">
121 <a href="lxml.doctestcompare.LHTMLOutputChecker-class.html" class="summary-name">LHTMLOutputChecker</a>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type"> </span>
127 </td><td class="summary">
128 <a href="lxml.doctestcompare._RestoreChecker-class.html" class="summary-name" onclick="show_private();">_RestoreChecker</a>
132 <!-- ==================== FUNCTIONS ==================== -->
133 <a name="section-Functions"></a>
134 <table class="summary" border="1" cellpadding="3"
135 cellspacing="0" width="100%" bgcolor="white">
136 <tr bgcolor="#70b0f0" class="table-header">
137 <td colspan="2" class="table-header">
138 <table border="0" cellpadding="0" cellspacing="0" width="100%">
140 <td align="left"><span class="table-header">Functions</span></td>
141 <td align="right" valign="top"
142 ><span class="options">[<a href="#section-Functions"
143 class="privatelink" onclick="toggle_private();"
144 >hide private</a>]</span></td>
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type"> </span>
152 </td><td class="summary">
153 <table width="100%" cellpadding="0" cellspacing="0" border="0">
155 <td><span class="summary-sig"><a name="strip"></a><span class="summary-sig-name">strip</span>(<span class="summary-sig-arg">v</span>)</span></td>
156 <td align="right" valign="top">
157 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#strip">source code</a></span>
166 <td width="15%" align="right" valign="top" class="summary">
167 <span class="summary-type"> </span>
168 </td><td class="summary">
169 <table width="100%" cellpadding="0" cellspacing="0" border="0">
171 <td><span class="summary-sig"><a name="norm_whitespace"></a><span class="summary-sig-name">norm_whitespace</span>(<span class="summary-sig-arg">v</span>)</span></td>
172 <td align="right" valign="top">
173 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#norm_whitespace">source code</a></span>
182 <td width="15%" align="right" valign="top" class="summary">
183 <span class="summary-type"> </span>
184 </td><td class="summary">
185 <table width="100%" cellpadding="0" cellspacing="0" border="0">
187 <td><span class="summary-sig"><a name="html_fromstring"></a><span class="summary-sig-name">html_fromstring</span>(<span class="summary-sig-arg">html</span>)</span></td>
188 <td align="right" valign="top">
189 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#html_fromstring">source code</a></span>
198 <td width="15%" align="right" valign="top" class="summary">
199 <span class="summary-type"> </span>
200 </td><td class="summary">
201 <table width="100%" cellpadding="0" cellspacing="0" border="0">
203 <td><span class="summary-sig"><a href="lxml.doctestcompare-module.html#install" class="summary-sig-name">install</a>(<span class="summary-sig-arg">html</span>=<span class="summary-sig-default">False</span>)</span><br />
204 Install doctestcompare for all future doctests.</td>
205 <td align="right" valign="top">
206 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#install">source code</a></span>
215 <td width="15%" align="right" valign="top" class="summary">
216 <span class="summary-type"> </span>
217 </td><td class="summary">
218 <table width="100%" cellpadding="0" cellspacing="0" border="0">
220 <td><span class="summary-sig"><a href="lxml.doctestcompare-module.html#temp_install" class="summary-sig-name">temp_install</a>(<span class="summary-sig-arg">html</span>=<span class="summary-sig-default">False</span>,
221 <span class="summary-sig-arg">del_module</span>=<span class="summary-sig-default">None</span>)</span><br />
222 Use this <em>inside</em> a doctest to enable this checker for this
224 <td align="right" valign="top">
225 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#temp_install">source code</a></span>
234 <td width="15%" align="right" valign="top" class="summary">
235 <span class="summary-type"> </span>
236 </td><td class="summary">
237 <table width="100%" cellpadding="0" cellspacing="0" border="0">
239 <td><span class="summary-sig"><a name="_find_doctest_frame"></a><span class="summary-sig-name">_find_doctest_frame</span>()</span></td>
240 <td align="right" valign="top">
241 <span class="codelink"><a href="lxml.doctestcompare-pysrc.html#_find_doctest_frame">source code</a></span>
250 <!-- ==================== VARIABLES ==================== -->
251 <a name="section-Variables"></a>
252 <table class="summary" border="1" cellpadding="3"
253 cellspacing="0" width="100%" bgcolor="white">
254 <tr bgcolor="#70b0f0" class="table-header">
255 <td colspan="2" class="table-header">
256 <table border="0" cellpadding="0" cellspacing="0" width="100%">
258 <td align="left"><span class="table-header">Variables</span></td>
259 <td align="right" valign="top"
260 ><span class="options">[<a href="#section-Variables"
261 class="privatelink" onclick="toggle_private();"
262 >hide private</a>]</span></td>
268 <td width="15%" align="right" valign="top" class="summary">
269 <span class="summary-type"> </span>
270 </td><td class="summary">
271 <a name="_IS_PYTHON_3"></a><span class="summary-name">_IS_PYTHON_3</span> = <code title="False">False</code>
275 <td width="15%" align="right" valign="top" class="summary">
276 <span class="summary-type"> </span>
277 </td><td class="summary">
278 <a name="PARSE_HTML"></a><span class="summary-name">PARSE_HTML</span> = <code title="1024">1024</code>
282 <td width="15%" align="right" valign="top" class="summary">
283 <span class="summary-type"> </span>
284 </td><td class="summary">
285 <a name="PARSE_XML"></a><span class="summary-name">PARSE_XML</span> = <code title="2048">2048</code>
289 <td width="15%" align="right" valign="top" class="summary">
290 <span class="summary-type"> </span>
291 </td><td class="summary">
292 <a name="NOPARSE_MARKUP"></a><span class="summary-name">NOPARSE_MARKUP</span> = <code title="4096">4096</code>
296 <td width="15%" align="right" valign="top" class="summary">
297 <span class="summary-type"> </span>
298 </td><td class="summary">
299 <a name="_html_parser"></a><span class="summary-name">_html_parser</span> = <code title="<lxml.etree.HTMLParser object>"><lxml.etree.HTMLParser object></code>
303 <td width="15%" align="right" valign="top" class="summary">
304 <span class="summary-type"> </span>
305 </td><td class="summary">
306 <a name="_repr_re"></a><span class="summary-name">_repr_re</span> = <code title="re.compile(r'^<[^>]+ (at|object) ')">re.compile(r'^<<code class="re-group">[^</code>><code class="re-group">]</code><code class="re-op">+</code> <code class="re-group">(</code>at<code class="re-op">|</code>object<code class="re-group">)</code> ')</code>
310 <td width="15%" align="right" valign="top" class="summary">
311 <span class="summary-type"> </span>
312 </td><td class="summary">
313 <a name="_norm_whitespace_re"></a><span class="summary-name">_norm_whitespace_re</span> = <code title="re.compile(r'[ \t\n][ \t\n]+')">re.compile(r'<code class="re-group">[</code> \t\n<code class="re-group">]</code><code class="re-group">[</code> \t\n<code class="re-group">]</code><code class="re-op">+</code>')</code>
317 <td width="15%" align="right" valign="top" class="summary">
318 <span class="summary-type"> </span>
319 </td><td class="summary">
320 <a href="lxml.doctestcompare-module.html#__test__" class="summary-name" onclick="show_private();">__test__</a> = <code title="{'basic': '''
321 >>> temp_install()
322 >>> print """<xml a="1" b="2">stuff</xml>"""
323 <xml b="2" a="1">...</xml>
324 >>> print """<xml xmlns="http://example.com"><tag attr="bar" /\
325 ></xml>"""
326 <xml xmlns="...">
327 <tag attr="..." />
328 ..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">basic</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">\n >>> temp_install()\n >>> print </code><code class="variable-ellipsis">...</code></code>
332 <td width="15%" align="right" valign="top" class="summary">
333 <span class="summary-type"> </span>
334 </td><td class="summary">
335 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'lxml'"><code class="variable-quote">'</code><code class="variable-string">lxml</code><code class="variable-quote">'</code></code>
339 <!-- ==================== FUNCTION DETAILS ==================== -->
340 <a name="section-FunctionDetails"></a>
341 <table class="details" border="1" cellpadding="3"
342 cellspacing="0" width="100%" bgcolor="white">
343 <tr bgcolor="#70b0f0" class="table-header">
344 <td colspan="2" class="table-header">
345 <table border="0" cellpadding="0" cellspacing="0" width="100%">
347 <td align="left"><span class="table-header">Function Details</span></td>
348 <td align="right" valign="top"
349 ><span class="options">[<a href="#section-FunctionDetails"
350 class="privatelink" onclick="toggle_private();"
351 >hide private</a>]</span></td>
357 <a name="install"></a>
359 <table class="details" border="1" cellpadding="3"
360 cellspacing="0" width="100%" bgcolor="white">
362 <table width="100%" cellpadding="0" cellspacing="0" border="0">
363 <tr valign="top"><td>
364 <h3 class="epydoc"><span class="sig"><span class="sig-name">install</span>(<span class="sig-arg">html</span>=<span class="sig-default">False</span>)</span>
366 </td><td align="right" valign="top"
367 ><span class="codelink"><a href="lxml.doctestcompare-pysrc.html#install">source code</a></span>
371 <p>Install doctestcompare for all future doctests.</p>
372 <p>If html is true, then by default the HTML parser will be used;
373 otherwise the XML parser is used.</p>
378 <a name="temp_install"></a>
380 <table class="details" border="1" cellpadding="3"
381 cellspacing="0" width="100%" bgcolor="white">
383 <table width="100%" cellpadding="0" cellspacing="0" border="0">
384 <tr valign="top"><td>
385 <h3 class="epydoc"><span class="sig"><span class="sig-name">temp_install</span>(<span class="sig-arg">html</span>=<span class="sig-default">False</span>,
386 <span class="sig-arg">del_module</span>=<span class="sig-default">None</span>)</span>
388 </td><td align="right" valign="top"
389 ><span class="codelink"><a href="lxml.doctestcompare-pysrc.html#temp_install">source code</a></span>
393 <p>Use this <em>inside</em> a doctest to enable this checker for this
395 <p>If html is true, then by default the HTML parser will be used;
396 otherwise the XML parser is used.</p>
402 <!-- ==================== VARIABLES DETAILS ==================== -->
403 <a name="section-VariablesDetails"></a>
404 <table class="details" border="1" cellpadding="3"
405 cellspacing="0" width="100%" bgcolor="white">
406 <tr bgcolor="#70b0f0" class="table-header">
407 <td colspan="2" class="table-header">
408 <table border="0" cellpadding="0" cellspacing="0" width="100%">
410 <td align="left"><span class="table-header">Variables Details</span></td>
411 <td align="right" valign="top"
412 ><span class="options">[<a href="#section-VariablesDetails"
413 class="privatelink" onclick="toggle_private();"
414 >hide private</a>]</span></td>
420 <a name="__test__"></a>
421 <div class="private">
422 <table class="details" border="1" cellpadding="3"
423 cellspacing="0" width="100%" bgcolor="white">
425 <h3 class="epydoc">__test__</h3>
431 <dd><table><tr><td><pre class="variable">
432 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">basic</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'''</code><code class="variable-string"></code>
433 <code class="variable-string"> >>> temp_install()</code>
434 <code class="variable-string"> >>> print """<xml a="1" b="2">stuff</xml>"""</code>
435 <code class="variable-string"> <xml b="2" a="1">...</xml></code>
436 <code class="variable-string"> >>> print """<xml xmlns="http://example.com"><tag attr="bar" /</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
437 <code class="variable-string">></xml>"""</code>
438 <code class="variable-string"> <xml xmlns="..."></code>
439 <code class="variable-string"> <tag attr="..." /></code>
440 <code class="variable-ellipsis">...</code>
441 </pre></td></tr></table>
447 <!-- ==================== NAVIGATION BAR ==================== -->
448 <table class="navbar" border="0" width="100%" cellpadding="0"
449 bgcolor="#a0c0ff" cellspacing="0">
452 <th> <a
453 href="lxml-module.html">Home</a> </th>
456 <th> <a
457 href="module-tree.html">Trees</a> </th>
460 <th> <a
461 href="identifier-index.html">Indices</a> </th>
464 <th> <a
465 href="help.html">Help</a> </th>
467 <!-- Project homepage -->
468 <th class="navbar" align="right" width="100%">
469 <table border="0" cellpadding="0" cellspacing="0">
470 <tr><th class="navbar" align="center"
471 ><a class="navbar" target="_top" href="/">lxml API</a></th>
475 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
477 <td align="left" class="footer">
478 Generated by Epydoc 3.0.1
479 on Wed Jan 29 12:26:21 2020
481 <td align="right" class="footer">
482 <a target="mainFrame" href="http://epydoc.sourceforge.net"
483 >http://epydoc.sourceforge.net</a>
488 <script type="text/javascript">
490 // Private objects are initially displayed (because if
491 // javascript is turned off then we want them to be
492 // visible); but by default, we want to hide them. So hide
493 // them unless we have a cookie that says to show them.