Viewing File: /usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyc

ó
œ]Nc@sÁdZddlmZddlZddlZddlZddlZdddddd	d
gZy
eZ	Wne
k
rŠeefZ	nXej
ddkZejdƒZejdƒZejdƒZejZd
„Zd„ZejdedeƒZd„ZejdƒZejdƒZdefd„ƒYZdefd„ƒYZed„Z ee!d„Z"de#fd„ƒYZ$d„Z%idd6Z&e'dkr½ddlZej(ƒndS(sÑ
lxml-based doctest output comparison.

Note: normally, you should just import the `lxml.usedoctest` and
`lxml.html.usedoctest` modules from within a doctest, instead of this
one::

    >>> import lxml.usedoctest # for XML output

    >>> import lxml.html.usedoctest # for HTML output

To use this module directly, you must call ``lxmldoctest.install()``,
which will cause doctest to use this in all subsequent calls.

This changes the way output is checked and comparisons are made for
XML or HTML-like content.

XML or HTML content is noticed because the example starts with ``<``
(it's HTML if it starts with ``<html``).  You can also use the
``PARSE_HTML`` and ``PARSE_XML`` flags to force parsing.

Some rough wildcard-like things are allowed.  Whitespace is generally
ignored (except in attributes).  In text (attributes and text in the
body) you can use ``...`` as a wildcard.  In an example it also
matches any trailing tags in the element, though it does not match
leading tags.  You may create a tag ``<any>`` or include an ``any``
attribute in the tag.  An ``any`` tag matches any tag, while the
attribute matches any and all attributes.

When a match fails, the reformatted example and gotten text is
displayed (indented), and a rough diff-like output is given.  Anything
marked with ``-`` is in the output but wasn't supposed to be, and
similarly ``+`` means its in the example but wasn't in the output.

You can disable parsing on one line with ``# doctest:+NOPARSE_MARKUP``
iÿÿÿÿ(tetreeNt
PARSE_HTMLt	PARSE_XMLtNOPARSE_MARKUPtLXMLOutputCheckertLHTMLOutputCheckertinstallttemp_installiicCs|dkrdS|jƒSdS(N(tNonetstrip(tv((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR	<scCstjd|ƒS(Nt (t_norm_whitespace_retsub(R
((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pytnorm_whitespaceBstrecovertremove_blank_textcCstj|tƒS(N(Rt
fromstringt_html_parser(thtml((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pythtml_fromstringGss^<[^>]+ (at|object) s[ \t\n][ \t\n]+c
Bs³eZdZd
„Zd„Zd„Zd
„Zd„Zd„Zd„Z	d„Z
ed„Zdd„Z
ed„Zd„Zd„Zd„Zd„Zd„Zed„ZRS(tparamtimgtareatbrtbasefonttinputtbasetmetatlinktcolcCstjS(N(RtXML(tself((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pytget_default_parserTsc	CsÇt|ddƒ}|dk	r0|j}|}n	tj}|j|||ƒ}|sg|||||ƒSy||ƒ}Wntjk
rŽtSXy||ƒ}Wntjk
r¶tSX|j	||ƒS(Nt_temp_override_self(
tgetattrRt_temp_call_super_check_outputt
OutputCheckertcheck_outputt
get_parserRtXMLSyntaxErrortFalsetcompare_docs(	R twanttgottoptionflagstalt_selftsuper_methodtparsertwant_doctgot_doc((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR&Ws$			cCs§d}t|@rdSt|@r't}n|t|@r=tj}nf|jƒjƒj	dƒrv|jƒj	dƒrvt}n-|j
|ƒr£|j
|ƒr£|jƒ}n|S(Ns<html(RRRRRRRR	tlowert
startswitht_looks_like_markupR!(R R+R,R-R0((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR'ls

	
	cCs)|jƒ}|jdƒo(tj|ƒS(Nt<(R	R4t_repr_retsearch(R ts((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR5|sc
Cs‹|j|j|jƒstS|j|j|jtƒs;tS|j|j|jtƒsZtSd|jkrÞt|jj	ƒƒ}t|jj	ƒƒ}||kr£tSx8|D]-}|j|j||j|tƒsªtSqªWn|jdksùt
|ƒr‡t|ƒ}t|ƒ}xs|s |rƒ|s.|r2tS|jdƒ}|jdƒ}	|j
||	ƒsftS|r|jdkrPqqWntS(Ntanys...i(ttag_comparettagR)ttext_comparettexttTruettailtattribtsortedtkeystlentlisttpopR*(
R R+R,t	want_keystgot_keystkeyt
want_childrentgot_childrent
want_firstt	got_first((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR*s6
#cCsˆ|p	d}|pd}|rEt|ƒjƒ}t|ƒjƒ}ndtj|ƒ}|jddƒ}tj||ƒr€tStSdS(Nts^%s$s\.\.\.s.*(RR	tretescapetreplaceR8R?R)(R R+R,R	((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR=žscCs“|dkrtSt|tƒs0t|tƒr:||kS|pCd}|pOd}|jdƒr…|jdƒd|jdƒdkS||kSdS(NR:RNs{...}t}iÿÿÿÿ(R?t
isinstancet_basestringR4tsplit(R R+R,((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR;«s
$c
Cs±|j}|j|||ƒ}g}|dk	rÃy||ƒ}Wn5tjk
rwtjƒd}|jd|ƒnXy||ƒ}	WqÃtjk
r¿tjƒd}|jd|ƒqÃXn|dksÕ|rtj	||||ƒ}
|r
|j|
ƒdj
|ƒS|
Sn|tk}g}|jdƒ|j|j||dƒƒ|jdƒ|j|j|	|dƒƒ|jdƒ|j|j
||	|dƒƒdj
|ƒS(	NisIn example: %ssIn actual output: %ss
s	Expected:isGot:sDiff:(R+R'RRR(tsystexc_infotappendR%toutput_differencetjoinRt
format_doctcollect_diff(
R texampleR,R-R+R0terrorsR1teR2tvalueRt
diff_parts((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRY¹s<	




cCs=|s
tS|j|jkr tS|js5t|ƒr9tStS(N(R)R<t
empty_tagsR>RDR?(R telR((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pythtml_empty_tagÚsRNcCs;g}t|ƒsá|jd|ƒ|j|ƒ|j|j|ƒƒ|j||ƒsœt|jƒrƒ|j|j|jƒƒn|j|j|ƒƒnt|jƒrÇ|j|j|jƒƒn|jdƒdj	|ƒS|jd|ƒ|j|ƒ|j|j|ƒƒ|j||ƒså|jdƒt|jƒr}|jd|ƒ|j|j|jƒƒ|jdƒnx.|D]&}|j|j
|||dƒƒq„W|jd|ƒ|j|j|ƒƒ|jdƒnt|jƒr.|jd|ƒ|j|j|jƒƒ|jdƒndj	|ƒS(NRs
RNi(RDRXt
format_tagRdR	R>tformat_texttformat_end_tagR@RZR[(R tdocRtindenttprefixtpartsRc((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR[äs@





$cCs5|dkrdS|r%|jƒ}ntj|dƒS(NRNi(RR	tcgiRP(R R>R	((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRfs
cCsg}t|tjƒrdSxFt|jjƒƒD]/\}}|jd||j|tƒfƒq2W|svd|j	Sd|j	dj
|ƒfS(Ns<!--s%s="%s"s<%s>s<%s %s>R(RSRtCommentBaseRBRAtitemsRXRfR)R<RZ(R RctattrstnameR`((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRes"'cCs!t|tjƒrdSd|jS(Ns-->s</%s>(RSRRmR<(R Rc((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRgsc
Cs×g}t|ƒrÐt|ƒrÐ|jd|ƒ|j|j||ƒƒ|j||ƒs—|j|j|j|jƒƒ|j|j||ƒƒn|j|j|j|jƒƒ|jdƒdj|ƒS|jd|ƒ|j|j||ƒƒ|jdƒt	|jƒs%t	|jƒre|jd|ƒ|j|j|j|jƒƒ|jdƒnt
|ƒ}t
|ƒ}xµ|sŒ|r4|sÄ|j|j|jdƒ||ddƒƒq€n|sü|j|j|jdƒ||ddƒƒq€n|j|j
|jdƒ|jdƒ||dƒƒq€W|jd|ƒ|j|j||ƒƒ|jdƒt	|jƒsŠt	|jƒrÊ|jd|ƒ|j|j|j|jƒƒ|jdƒndj|ƒS(NRs
RNiit-t+(RDRXtcollect_diff_tagRdtcollect_diff_textR>tcollect_diff_end_tagR@RZR	RER[RFR\(R R+R,RRiRkRJRK((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR\sH


,,-
c		Cs®|j|j|jƒs1d|j|jf}n	|j}g}|jdkp[d|jk}x¶t|jjƒƒD]Ÿ\}}||jkr¼|r¼|jd||j|tƒfƒqt||jkrê|j||j|tƒ}n|j|tƒ}|jd||fƒqtW|s~x^t|jjƒƒD]D\}}||jkrTq3n|jd||j|tƒfƒq3Wn|r d|dj	|ƒf}n
d|}|S(	Ns%s (got: %s)R:s-%s="%s"s%s="%s"s+%s="%s"s<%s %s>Rs<%s>(
R;R<RARBRnRXRfR)RtRZ(	R R+R,R<RoR:RpR`R>((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRsEs*	"&"*
cCs<|j|jkr+d|j|jf}n	|j}d|S(Ns%s (got: %s)s</%s>(R<(R R+R,R<((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRu`s	cCsO|j|||ƒr/|sdS|j||ƒSd||f}|j||ƒS(NRNs%s (got: %s)(R=Rf(R R+R,R	R>((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRtgs(
RRRRRsinputsbaseRslinkR(t__name__t
__module__RbR!R&R'R5R*R=R;RYR?RdR[RfReRgR\RsRuRt(((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRNs&						
		!
#			&		cBseZd„ZRS(cCstS(N(R(R ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR!ps(RvRwR!(((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRoscCs|rtt_n	tt_dS(s£
    Install doctestcompare for all future doctests.

    If html is true, then by default the HTML parser will be used;
    otherwise the XML parser is used.
    N(RtdoctestR%R(R((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRssc	Cs­|rt}nt}tƒ}|jd}|ƒ}|j}||_trk|jdj}|jj}n|jdj}|jj}t	t
_	t||||||ƒdS(sÁ
    Use this *inside* a doctest to enable this checker for this
    doctest only.

    If html is true, then by default the HTML parser will be used;
    otherwise the XML parser is used.
    R tcheckN(RRt_find_doctest_frametf_localst_checkert_IS_PYTHON_3t__func__R&tim_funcRRxt_RestoreChecker(	Rt
del_moduletCheckertframetdt_selftcheckertold_checkert
check_functchecker_check_func((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRs"		
			
	R€cBsPeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z	RS(cCs`||_||_|j|j_||j_||_||_||_|jƒ|j	ƒdS(N(
R„R…t
call_superR$R"R‡t
clone_funcRt
install_clonetinstall_dt_self(R R„R†tnew_checkerR‡RŠR((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyt__init__§s					
cCsmtr9|jj|_|jj|_|jj|j_n0|jj|_|jj|_|jj|j_dS(N(R}R‡t__code__t	func_codet__globals__tfunc_globalsRŠ(R ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR‹²scCs+tr|j|j_n|j|j_dS(N(R}RR‡R(R ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pytuninstall_clone»scCs|jj|_||j_dS(N(R„t_DocTestRunner__record_outcomet	prev_func(R ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRŒÀscCs|j|j_dS(N(R•R„R”(R ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pytuninstall_dt_selfÃscCsp|jrlddl}|j|j=d|jkrl|jjddƒ\}}|j|}t||ƒqlndS(Niÿÿÿÿt.i(RRVtmodulestrsplittdelattr(R RVtpackagetmoduletpackage_mod((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pytuninstall_moduleÅs	

cOsF|jƒ|jƒ|j`|j`|j||Ž}|jƒ|S(N(R“R–R…R"R$R•Rž(R targstkwtresult((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyt__call__Ís

		
cOs0|jƒz|j||ŽSWd|jƒXdS(N(R“R‡R‹(R RŸR ((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR‰Õs
(
RvRwRŽR‹R“RŒR–RžR¢R‰(((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyR€¦s								cCsZddl}|jdƒ}x,|rI|j}d|kr=|S|j}qWtdƒ‚dS(NiÿÿÿÿitBOOMsBCould not find doctest (only use this function *inside* a doctest)(RVt	_getframeR{tf_backtLookupError(RVRƒtl((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyRzÜs		
si
    >>> temp_install()
    >>> print """<xml a="1" b="2">stuff</xml>"""
    <xml b="2" a="1">...</xml>
    >>> print """<xml xmlns="http://example.com"><tag   attr="bar"   /></xml>"""
    <xml xmlns="...">
      <tag attr="..." />
    </xml>
    >>> print """<xml>blahblahblah<foo /></xml>""" # doctest: +NOPARSE_MARKUP, +ELLIPSIS
    <xml>...foo /></xml>
    tbasict__main__()t__doc__tlxmlRRVRORxRlt__all__t
basestringRTt	NameErrortstrtbytestversion_infoR}tregister_optionflagRRRR%R	Rt
HTMLParserR)R?RRtcompileR7RRRRRRtobjectR€Rzt__test__Rvttestmod(((s9/usr/lib64/python2.7/site-packages/lxml/doctestcompare.pyt<module>$sD

				ÿ"'6	

Back to Directory File Manager