§ |<ˆjtdãó~—dZddlZddlZddlZddlZddlmcmZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZddlZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddl$m%Z%e#d¦«Z&de'de(fd„Z)d8d„Z*iZ+dddgie+d<dgd¢ie+d <e+d ,¦«e+d!<e*e+d!e+d ¦«e+de+d"<Gd#„d$¦«Z-d%ed&e(ddfd'„Z.ej/d%ede e(e'gdffd(„¦«Z0ej/d%ede e(e'gdffd)„¦«Z1d*e(d+e(ddfd,„Z2ej/d-¬.¦«d%ede e(e'gdffd/„¦«Z3d0eddfd1„Z4d2eddfd3„Z5d2eddfd4„Z6d5e(de e(fd6„Z7Gd7„d¦«Z8dS)9aReport test results in JUnit-XML format, for use with Jenkins and build integration servers. Based on initial code from Ross Lawley. Output conforms to https://github.com/jenkinsci/xunit-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd éN)Údatetime)ÚCallable)ÚDict)ÚList)ÚMatch)ÚOptional)ÚTuple)ÚUnion)Únodes)Útiming)Ú ExceptionRepr)ÚReprFileLocation)ÚConfig)Ú filename_arg)ÚParser)ÚFixtureRequest)Ú TestReport)ÚStashKey)ÚTerminalReporterÚLogXMLÚargÚreturncó†—dttdtfd„}d}tj||t|¦«¦«S)a!Visually escape invalid XML characters. For example, transforms 'hello\aworld\b' into 'hello#x07world#x08' Note that the #xABs are *not* XML escapes - missing the ampersand «. The idea is to escape visually for the user rather than for XML itself. Úmatchobjrcód—t| ¦«¦«}|dkrd|zSd|zS)Néÿz#x%02Xz#x%04X)ÚordÚgroup)rÚis úb/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/_pytest/junitxml.pyÚreplzbin_xml_escape..repl3s6€Ý �—’Ñ Ô Ñ !Ô !ˆØ �Š9ˆ9ؘa‘<Ð à˜a‘<Ð óu [^ -~€-퟿-�က0-ჿFF])rÚstrÚreÚsub)rr!Úillegal_xml_res r Úbin_xml_escaper'(sO€ð •u�S”zð ¥cð ð ð ð ð Wðõ Œ6�. $­¨C©¬Ñ 1Ô 1Ð1r"có—i}| ¦«D]X\}}| ¦«D]>\}}t|t¦«stt |¦«¦«‚||z||<Œ?ŒY| |¦«dS©N)ÚitemsÚ isinstanceÚlistÚ TypeErrorÚtypeÚupdate)ÚleftÚrightÚresultÚklÚvlÚkrÚvrs r Ú merge_familyr7Cs‘€Ø €FØ—*’*‘,”,ð!ð!‰ˆˆBØ—k’k‘m”mð !ð !‰FˆB�ݘb¥$Ñ'Ô'ð *Ý¥ R¡¤Ñ)Ô)Ð)ؘb™ˆF�2‰JˆJð !ð ‡K‚K�ÑÔÐÐÐr"ÚtestcaseÚ classnameÚnameÚ_base)ÚfileÚlineÚurlÚ _base_legacyÚxunit1Úxunit2c ó†—eZdZdeeefddddfd„Zdejddfd„Z d ed e ddfd „Z d ed e ddfd „Z de ejfd „Zdeddfd„Zdejfd„Zd#dedede eddfd„Zdeddfd„Zdededefd„Zdedededdfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd „Zdeddfd!„Zd$d"„ZdS)%Ú _NodeReporterÚnodeidÚxmlrrNcóž—||_||_|jj|_|jj|_d|_g|_g|_i|_dS)Nç)ÚidrEÚ add_statsÚfamilyÚdurationÚ propertiesr Úattrs)ÚselfrDrEs r Ú__init__z_NodeReporter.__init__ZsG€ØˆŒØˆŒØœÔ+ˆŒØ”h”oˆŒ ؈Œ Ø13ˆŒØ')ˆŒ Ø%'ˆŒ ˆ ˆ r"Únodecóx—|j |j¦«|j |¦«dSr))rErIÚtagr Úappend)rNrPs r rSz_NodeReporter.appendds6€Ø Œ×Ò˜4œ8Ñ$Ô$Ð$Ø Œ ×Ò˜$ÑÔÐÐÐr"r:Úvaluecór—|j t|¦«t|¦«f¦«dSr))rLrSr#r'©rNr:rTs r Ú add_propertyz_NodeReporter.add_propertyhs1€Ø Œ×Ò¥ D¡ ¤ ­>¸%Ñ+@Ô+@ÐAÑBÔBÐBÐBÐBr"cóN—t|¦«|jt|¦«<dSr))r'rMr#rVs r Ú add_attributez_NodeReporter.add_attributeks"€Ý .¨uÑ 5Ô 5ˆŒ •3�t‘9”9ÑÐÐr"có®—|jrMtjd¦«}|jD]/\}}| tjd||¬¦«¦«Œ0|SdS©z9Return a Junit node containing custom properties, if any.rLÚproperty©r:rTN)rLÚETÚElementrS©rNrLr:rTs r Úmake_properties_nodez"_NodeReporter.make_properties_nodense€à Œ?ð Ýœ LÑ1Ô1ˆJØ#œð Rð R‘ ��eØ×!Ò!¥"¤*¨Z¸dÈ%Ð"PÑ"PÔ"PÑQÔQÐQÐQØÐ ؈tr"Ú testreportcó˜—t|j¦«}|j}|dd…}|jjr | d|jj¦«d |¦«t|d¦«|jddœ}|jd�t|jd¦«|d<t|d¦«r |j |d<||_|j  |¦«|j dkrdSi}|j ¦«D],}|t|j d vr|j|||<Œ-||_dS) Néÿÿÿÿrú.)r9r:r<ér=r>r@r8)Úmangle_test_addressrDrMrEÚprefixÚinsertÚjoinr'Úlocationr#Úhasattrr>r/rJÚkeysÚfamilies)rNrbÚnamesÚexisting_attrsÚ classnamesrMÚ temp_attrsÚkeys r Úrecord_testreportz_NodeReporter.record_testreportwsL€Ý# JÔ$5Ñ6Ô6ˆØœˆØ˜3˜B˜3”Zˆ Ø Œ8Œ?ð 2Ø × Ò ˜a ¤¤Ñ 1Ô 1Ð 1àŸš *Ñ-Ô-Ý" 5¨¤9Ñ-Ô-ØÔ'¨Ô*ð! ð! ˆð Ô ˜qÔ !Ð -Ý  Ô 3°AÔ 6Ñ7Ô7ˆE�&‰MÝ �:˜uÑ %Ô %ð *Ø%œ>ˆE�%‰L؈Œ Ø Œ ×Ò˜.Ñ)Ô)Ð)ð Œ;˜(Ò "Ð "Ø ˆFðˆ Ø”:—?’?Ñ$Ô$ð 2ð 2ˆCØ•h˜tœ{Ô+¨JÔ7Ð7Ð7Ø"&¤*¨S¤/� ˜3‘øØˆŒ ˆ ˆ r"cóØ—tjd|jd|jz¬¦«}| ¦«}|�| |¦«| |j¦«|S)Nr8ú%.3f)Útime)r^r_rMrKrarSÚextendr )rNr8rLs r Úto_xmlz_NodeReporter.to_xml•sc€Ý”:˜j¨$¬*¸6ÀDÄMÑ;QÐRÑRÔRˆØ×.Ò.Ñ0Ô0ˆ Ø Ð !Ø �OŠO˜JÑ 'Ô 'Ð 'Ø�Š˜œ Ñ#Ô#Ð#؈r"rRÚmessageÚdatacó„—tj||¬¦«}t|¦«|_| |¦«dS)N)rz©r^r_r'ÚtextrS)rNrRrzr{rPs r Ú _add_simplez_NodeReporter._add_simple�s=€ÝŒz˜# wÐ/Ñ/Ô/ˆÝ" 4Ñ(Ô(ˆŒ Ø � Š �DÑÔÐÐÐr"Úreportcó—|jjs |jrdS|j}|j}|j}|jjdkrdSd}|jjdvr| |d¦«}|jjdvr2|| |d¦«z }| ||d¦«d}|jjdvr2|| |d ¦«z }| ||d ¦«d}|r| ||d¦«dSdS) NÚnoÚ)ÚlogÚallz Captured Log )ú system-outúout-errr…z Captured Out r†)ú system-errr‡r…z Captured Err rˆ) rEÚlog_passing_testsÚpassedÚ capstdoutÚcaplogÚ capstderrÚloggingÚ_prepare_contentÚ_write_content)rNr€Ú content_outÚ content_logÚ content_errÚ content_alls r Úwrite_captured_outputz#_NodeReporter.write_captured_output¢s9€ØŒxÔ)ð ¨f¬mð Ø ˆFàÔ&ˆ Ø”mˆ ØÔ&ˆ Ø Œ8Ô ˜tÒ #Ð #Ø ˆF؈ Ø Œ8Ô ˜~Ð -Ð -Ø×/Ò/° Ð=MÑNÔNˆKØ Œ8Ô Ð?Ð ?Ð ?Ø ˜4×0Ò0°Ð>NÑOÔOÑ OˆKØ × Ò  ¨ °\Ñ BÔ BÐ B؈KØ Œ8Ô Ð?Ð ?Ð ?Ø ˜4×0Ò0°Ð>NÑOÔOÑ OˆKØ × Ò  ¨ °\Ñ BÔ BÐ B؈KØ ð CØ × Ò  ¨ °\Ñ BÔ BÐ BÐ BÐ Bð Cð Cr"ÚcontentÚheadercóZ—d | dd¦«|dg¦«S)Nú éPú-rƒ)rjÚcenter)rNr–r—s r r�z_NodeReporter._prepare_content¹s)€Ø�yŠy˜&Ÿ-š-¨¨CÑ0Ô0°'¸2Ð>Ñ?Ô?Ð?r"Újheadercó€—tj|¦«}t|¦«|_| |¦«dSr)r})rNr€r–r�rRs r r�z_NodeReporter._write_content¼s8€ÝŒj˜Ñ!Ô!ˆÝ! 'Ñ*Ô*ˆŒØ � Š �CÑÔÐÐÐr"có0—| d¦«dS)NrŠ)rI©rNr€s r Ú append_passz_NodeReporter.append_passÁs€Ø �Š�xÑ Ô Ð Ð Ð r"có@—t|d¦«r| dd¦«dS|j€J‚t|jdd¦«}|�|j}nt |j¦«}t |¦«}| d|t |j¦«¦«dS)NÚwasxfailÚskippedz%xfail-marked test passes unexpectedlyÚ reprcrashÚfailure)rlrÚlongreprÚgetattrrzr#r')rNr€r¥rzs r Úappend_failurez_NodeReporter.append_failureÄs®€å �6˜:Ñ &Ô &ð GØ × Ò ˜YÐ(OÑ PÔ PÐ PÐ PÐ Pà”?Ð.Ð.Ð.Ý4;Ø” ¨dñ5ô5ˆIðÐ$Ø#Ô+��å˜fœoÑ.Ô.�Ý$ WÑ-Ô-ˆGØ × Ò ˜Y¨µ°V´_Ñ1EÔ1EÑ FÔ FÐ FÐ FÐ Fr"cój—|j€J‚| ddt|j¦«¦«dS)NÚerrorzcollection failure)r§rr#r s r Úappend_collect_errorz"_NodeReporter.append_collect_errorÔs9€àŒÐ*Ð*Ð*Ø ×Ò˜Ð"6½¸F¼OÑ8LÔ8LÑMÔMÐMÐMÐMr"cóX—| ddt|j¦«¦«dS)Nr¤zcollection skipped)rr#r§r s r Úappend_collect_skippedz$_NodeReporter.append_collect_skippedÙs+€Ø ×Ò˜Ð$8½#¸f¼oÑ:NÔ:NÑOÔOÐOÐOÐOr"có—|j€J‚t|jdd¦«}|�|j}nt|j¦«}|jdkrd|›d�}nd|›d�}| dt |¦«t|j¦«¦«dS)Nr¥Úteardownzfailed on teardown with "ú"zfailed on setup with "r«)r§r¨rzr#Úwhenrr')rNr€r¥ÚreasonÚmsgs r Ú append_errorz_NodeReporter.append_errorÜs¨€ØŒÐ*Ð*Ð*Ý07Ø ŒO˜[¨$ñ1 ô1 ˆ ð Ð ØÔ&ˆFˆF嘜Ñ)Ô)ˆFà Œ;˜*Ò $Ð $Ø7¨fÐ7Ð7Ð7ˆCˆCà4¨6Ð4Ð4Ð4ˆCØ ×Ò˜¥.°Ñ"5Ô"5µs¸6¼?Ñ7KÔ7KÑLÔLÐLÐLÐLr"có6—t|d¦«rc|j}| d¦«r |dd…}t|¦«}t jdd|¬¦«}| |¦«dSt|jt¦«sJ‚|j\}}}| d¦«r |dd…}|›d |›d |›�}t jdd |¬¦«}t|¦«|_ | |¦«|  |¦«dS) Nr£zreason: ér¤z pytest.xfail)r.rzz Skipped: é ú:z: z pytest.skip) rlr£Ú startswithr'r^r_rSr+r§Útupler~r•)rNr€Ú xfailreasonr¤ÚfilenameÚlinenoÚ skipreasonÚdetailss r Úappend_skippedz_NodeReporter.append_skippedìs.€Ý �6˜:Ñ &Ô &ð /Ø œ/ˆKØ×%Ò% jÑ1Ô1ð .Ø)¨!¨"¨"œo� Ý(¨Ñ5Ô5ˆKÝ”j °ÈÐUÑUÔUˆGØ �KŠK˜Ñ Ô Ð Ð Ð å˜fœo­uÑ5Ô5Ð 5Ð 5Ð5Ø+1¬?Ñ (ˆH�f˜jØ×$Ò$ [Ñ1Ô1ð ,Ø'¨¨¨œ^� Ø!Ð:Ð: FÐ:Ð:¨jÐ:Ð:ˆGå”j °È ÐSÑSÔSˆGÝ)¨'Ñ2Ô2ˆGŒLØ �KŠK˜Ñ Ô Ð Ø × &Ò & vÑ .Ô .Ð .Ð .Ð .r"cóv‡—| ¦«Š|j ¦«ˆfd„|_dS)Ncó•—‰Sr)©)r{s€r úz(_NodeReporter.finalize..sø€˜d€r")ryÚ__dict__Úclear)rNr{s @r Úfinalizez_NodeReporter.finalizes7ø€Ø�{Š{‰}Œ}ˆØ Œ ×ÒÑÔÐð#�l�l�lˆŒ ˆ ˆ r"r)©rN)Ú__name__Ú __module__Ú __qualname__r r#rrOr^r_rSÚobjectrWrYrrartryrr•r�r�r¡r©r¬r®rµrÁrÈrÄr"r rCrCYs߀€€€€ð(˜u S¨* _Ô5ð(¸Hð(Èð(ð(ð(ð(ð ˜2œ:ð ¨$ð ð ð ð ðC ðC¨VðC¸ðCðCðCðCð6 #ð6¨fð6¸ð6ð6ð6ð6ð h¨r¬zÔ&:ððððð ¨Jð ¸4ð ð ð ð ð<˜œ ðððððð˜sð¨Sð¸À¼ ðÐQUððððð C¨JðC¸4ðCðCðCðCð.@¨ð@°Sð@¸Sð@ð@ð@ð@ð Zð¸#ðÈðÐPTððððð ! *ð!°ð!ð!ð!ð!ðG ZðG°DðGðGðGðGð N¨:ðN¸$ðNðNðNðNð P¨ZðP¸DðPðPðPðPðM :ðM°$ðMðMðMðMð / Zð/°Dð/ð/ð/ð/ð(#ð#ð#ð#ð#ð#r"rCÚrequestÚ fixture_namecóô—ddlm}|jj t d¦«}|�H|jdvrA|j |d  ||j¬¦«¦«¦«dSdSdS)z[Emit a PytestWarning about the given fixture being incompatible with newer xunit revisions.r)Ú PytestWarningN)r@ÚlegacyzV{fixture_name} is incompatible with junit_family '{family}' (use 'legacy' or 'xunit1'))rÏrJ) Ú_pytest.warning_typesrÑÚconfigÚstashÚgetÚxml_keyrJrPÚwarnÚformat)rÎrÏrÑrEs r Ú!_warn_incompatibility_with_xunit2rÚs¢€ð4Ð3Ð3Ð3Ð3Ð3à Œ.Ô × "Ò "¥7¨DÑ 1Ô 1€CØ €˜3œ:Ð-AÐAÐAØŒ ×ÒØ ˆMØh×oÒoØ!-°c´jðpñôñ ô ñ ô ð ð ð ð€ÐAÐAr"cóT‡—t‰d¦«dtdtddfˆfd„ }|S)anAdd extra properties to the calling test. User properties become part of the test report and are available to the configured reporters, like JUnit XML. The fixture is callable with ``name, value``. The value is automatically XML-encoded. Example:: def test_function(record_property): record_property("example_key", 1) Úrecord_propertyr:rTrNcóJ•—‰jj ||f¦«dSr))rPÚuser_propertiesrS)r:rTrÎs €r Úappend_propertyz(record_property..append_property*s&ø€ØŒ Ô$×+Ò+¨T°5¨MÑ:Ô:Ð:Ð:Ð:r")rÚr#rÍ)rÎrßs` r rÜrÜsQø€õ& gÐ/@ÑAÔAÐAð;�cð;­&ð;°Tð;ð;ð;ð;ð;ð;ð Ðr"có>—ddlm}|j |d¦«¦«t |d¦«dt dt ddfd „}|}|jj  td¦«}|�&|  |jj ¦«}|j }|S) z�Add extra xml attributes to the tag for the calling test. The fixture is callable with ``name, value``. The value is automatically XML-encoded. r)ÚPytestExperimentalApiWarningz/record_xml_attribute is an experimental featureÚrecord_xml_attributer:rTrNcó—dSr)rÄr]s r Ú add_attr_noopz+record_xml_attribute..add_attr_noop@s€Ø ˆr")rÓrárPrØrÚr#rÍrÔrÕrÖr×Ú node_reporterrDrY)rÎráräÚ attr_funcrErås r rârâ0sÈ€ðCÐBÐBÐBÐBÐBà „L×ÒØ$Ð$Ð%VÑWÔWñôðõ& gÐ/EÑFÔFÐFð �Cð ­ð °4ð ð ð ð ð€Ià Œ.Ô × "Ò "¥7¨DÑ 1Ô 1€CØ €Ø×)Ò)¨'¬,Ô*=Ñ>Ô>ˆ Ø!Ô/ˆ à Ðr"ÚparamÚvcó¤—d}t|t¦«s8d}t| |t |¦«j¬¦«¦«‚dS)zcUsed by record_testsuite_property to check that the given parameter name is of the proper type.Tz5{param} parameter needs to be a string, but {g} given)rçÚgN)r+r#r-rÙr.rÊ)rçrèÚ__tracebackhide__r´s r Ú_check_record_param_typerìMsU€ðÐÝ �a�Ñ Ô ðEØEˆÝ˜Ÿ 𠍵$°q±'´'Ô2B˜ ÑCÔCÑDÔDÐDðEðEr"Úsession)ÚscopecóŽ—d}dtdtddfd„}|jj t d¦«}|�|j}|S)a+Record a new ```` tag as child of the root ````. This is suitable to writing global information regarding the entire test suite, and is compatible with ``xunit2`` JUnit family. This is a ``session``-scoped fixture which is called with ``(name, value)``. Example: .. code-block:: python def test_foo(record_testsuite_property): record_testsuite_property("ARCH", "PPC") record_testsuite_property("STORAGE_TYPE", "CEPH") :param name: The property name. :param value: The property value. Will be converted to a string. .. warning:: Currently this fixture **does not work** with the `pytest-xdist `__ plugin. See :issue:`7767` for details. Tr:rTrNcó*—d}td|¦«dS)zENo-op function in case --junitxml was not passed in the command-line.Tr:N)rì)r:rTrës r Ú record_funcz.record_testsuite_property..record_funcss€à ÐÝ  ¨Ñ.Ô.Ð.Ð.Ð.r")r#rÍrÔrÕrÖr×Úadd_global_property)rÎrërñrEs r Úrecord_testsuite_propertyróVsb€ð6Ðð/�#ð/¥fð/°ð/ð/ð/ð/ð Œ.Ô × "Ò "¥7¨DÑ 1Ô 1€CØ €ØÔ-ˆ Ø Ðr"Úparserc óÄ—| d¦«}| dddddtjtd¬¦«dd¬ ¦«| d d dd dd ¬¦«| ddd¬¦«| ddd¬¦«| dddd¬¦«| ddd¬¦«| ddd ¬¦«dS)!Nzterminal reportingz --junitxmlz --junit-xmlÚstoreÚxmlpathÚpath)Úoptnamez0Create junit-xml style report file at given path)ÚactionÚdestÚmetavarr.ÚdefaultÚhelpz --junitprefixz--junit-prefixr#z0Prepend prefix to classnames in junit-xml output)rúrürýrþÚjunit_suite_namez Test suite name for JUnit reportÚpytest)rýÚ junit_loggingz\Write captured log messages to JUnit report: one of no|log|system-out|system-err|out-err|allr‚Újunit_log_passing_testsz;Capture log information for passing tests to JUnit report: ÚboolT)r.rýÚjunit_duration_reportz*Duration time to report: one of total|callÚtotalÚ junit_familyz0Emit XML for schema: one of legacy|xunit1|xunit2rA)ÚgetgroupÚ addoptionÚ functoolsÚpartialrÚaddini)rôrs r Úpytest_addoptionr ~sR€Ø �OŠOÐ0Ñ 1Ô 1€EØ ‡O‚OØØØØ ØÝ Ô �|°\Ð BÑ BÔ BØØ ?ðñ ô ð ð ‡O‚OØØØØØØ ?ð ñôðð ‡M‚MØÐ>Èðñôðð ‡M‚MØð :àð ñôðð  ‡M‚MØ!ØEØ Øð ñôðð  ‡M‚MØØ4Øðñôðð  ‡M‚MØØ:Øðñôðððr"rÔc ó¸—|jj}|rÉt|d¦«s»| d¦«}t ||jj| d¦«| d¦«| d¦«|| d¦«¦«|jt<|j  |jt¦«dSdSdS)NÚ workerinputrrÿrrr) Úoptionr÷rlÚgetinirÚ junitprefixrÕr×Ú pluginmanagerÚregister)rÔr÷rs r Úpytest_configurer­sӀ،mÔ#€Gàð =•w˜v }Ñ5Ô5ð =Ø—}’} ^Ñ4Ô4ˆ Ý &Ø Ø ŒMÔ %Ø �MŠMÐ,Ñ -Ô -Ø �MŠM˜/Ñ *Ô *Ø �MŠMÐ1Ñ 2Ô 2Ø Ø �MŠMÐ3Ñ 4Ô 4ñ! ô! ˆŒ •WÑð Ô×%Ò% f¤lµ7Ô&;Ñ<Ô<Ð<Ð<Ð<ð =ð =ð =ð =r"cóœ—|j td¦«}|r)|jt=|j |¦«dSdSr))rÕrÖr×rÚ unregister)rÔrEs r Úpytest_unconfigurer¾sR€Ø Œ,× Ò �7 DÑ )Ô )€CØ ð-Ø ŒL�Ð !ØÔ×'Ò'¨Ñ,Ô,Ð,Ð,Ð,ð-ð-r"Úaddresscó—| d¦«\}}}| d¦«}|d tjd¦«|d<t jdd|d¦«|d<|dxx||zz cc<|S)Nú[z::rrez\.py$rƒrd)Ú partitionÚsplitÚreplacer ÚSEPr$r%)rrøÚpossible_open_bracketÚparamsros r rgrgÅs‰€Ø*1×*;Ò*;¸CÑ*@Ô*@Ñ'€DÐ  Ø �JŠJ�tÑ Ô €Eà�QŒx×Ò¥¤ ¨3Ñ/Ô/€Eˆ!�HÝŒv�h  E¨!¤HÑ-Ô-€Eˆ!�Hà ˆ"€I€I„IÐ&¨Ñ/Ñ/€I€I�IØ €Lr"c ó,—eZdZ d!deededed ed ed d f d „Zded d fd„Zde eefd e fd„Z ded d fd„Z ded e fd„Z ded d fd„Zded d fd„Zded d fd„Zded d fd„Zd"d„Zd"d„Zded d fd„Zdeded d fd„Zd eejfd „Zd S)#rrr‚rr@TrhÚ suite_namerŽÚreport_durationr‰rNcó—tj tj |¦«¦«}tj tj |¦«¦«|_||_||_||_ ||_ ||_ ||_ t gd¢d¦«|_i|_g|_g|_g|_d|_|j dkr d|_ dSdS)N)r«rŠr¦r¤rrÒr@)ÚosrøÚ expanduserÚ expandvarsÚnormpathÚabspathÚlogfilerhr"rŽr‰r#rJÚdictÚfromkeysÚstatsÚnode_reportersÚnode_reporters_orderedÚglobal_propertiesÚ open_reportsÚcnt_double_fail_tests)rNr*rhr"rŽr#rJr‰s r rOzLogXML.__init__Ñsí€õ”'×$Ò$¥R¤W×%7Ò%7¸Ñ%@Ô%@ÑAÔAˆÝ”w×'Ò'­¬¯ª¸Ñ(@Ô(@ÑAÔAˆŒ ؈Œ Ø$ˆŒØˆŒ Ø!2ˆÔØ.ˆÔ؈Œ Ý%)§]¢]Ø 5Ð 5Ð 5°qñ& ô& ˆŒ ð ð Ôð<>ˆÔ#Ø8:ˆÔð/1ˆÔØ%&ˆÔ"ð Œ;˜(Ò "Ð "Ø"ˆDŒKˆKˆKð #Ð "r"r€có²—t|d|¦«}t|dd¦«}|j ||f¦«}|�| ¦«dSdS©NrDrP)r¨r.ÚpoprÈ)rNr€rDÚ workernodeÚreporters r rÈzLogXML.finalizeôse€Ý˜ ¨6Ñ2Ô2ˆå˜V V¨TÑ2Ô2ˆ ØÔ&×*Ò*¨F°JÐ+?Ñ@Ô@ˆØ Ð Ø × Ò Ñ Ô Ð Ð Ð ð Ð r"cóæ—t|d|¦«}t|dd¦«}||f}||jvr |j|St||¦«}||j|<|j |¦«|Sr4)r¨r.rCr/rS)rNr€rDr6rsr7s r råzLogXML.node_reporterüs‚€Ý)0°¸À6Ñ)JÔ)Jˆå˜V V¨TÑ2Ô2ˆ à�jÐ ˆà �$Ô%Ð %Ð %àÔ& sÔ+Ð +å  ¨Ñ.Ô.ˆà#+ˆÔ˜CÑ Ø Ô#×*Ò*¨8Ñ4Ô4Ð4àˆr"rscóF—||jvr|j|xxdz cc<dSdS)Nrf)r-)rNrss r rIzLogXML.add_statss3€Ø �$”*Ð Ð Ø ŒJ�sˆOˆOŒO˜qÑ ˆOˆO‰OˆOˆOð Ð r"cóZ—| |¦«}| |¦«|Sr))rårt©rNr€r7s r Ú _opentestcasezLogXML._opentestcases.€Ø×%Ò% fÑ-Ô-ˆØ×"Ò" 6Ñ*Ô*Ð*؈r"cóÖ‡‡‡—d}‰jr7‰jdkr*| ‰¦«}| ‰¦«�n1‰jrù‰jdkrlt ‰dd¦«Št ‰dd¦«Št ˆˆˆfd„|jD¦«d¦«}|r%| |¦«|xj dz c_ | ‰¦«}‰jdkrL|  ‰¦«|j  ‰¦«|j s|  ‰¦«nG| ‰¦«n1‰jr*| ‰¦«}| ‰¦«| ‰¦«‰jdkrÒ| ‰¦«}|  ‰¦«‰jD](\}}| |t)|¦«¦«Œ)| ‰¦«t ‰dd¦«Št ‰dd¦«Št ˆˆˆfd„|jD¦«d¦«}|r|j |¦«dSdSdS) aHandle a setup/call/teardown report, generating the appropriate XML tags as necessary. Note: due to plugins like xdist, this hook may be called in interlaced order with reports from other nodes. For example: Usual call order: -> setup node1 -> call node1 -> teardown node1 -> setup node2 -> call node2 -> teardown node2 Possible call order in xdist: -> setup node1 -> call node1 -> setup node2 -> call node2 -> teardown node2 -> teardown node1 NÚcallr°Ú worker_idÚ item_indexc3ó�•K—|]@}|j‰jkr.t|dd¦«‰krt|dd¦«‰k¯<|V—ŒAdS©r@Nr?©rDr¨©Ú.0Úrepr€Ú report_iiÚ report_wids €€€r ú z2LogXML.pytest_runtest_logreport..9soøèè€ððààœJ¨&¬-Ò7Ð7Ý '¨¨\¸4Ñ @Ô @ÀIÒ MÐ MÝ '¨¨[¸$Ñ ?Ô ?À:Ò MÐ Mð ð !NÐ MÐ MÐ Mð ðr"rfc3ó�•K—|]@}|j‰jkr.t|dd¦«‰krt|dd¦«‰k¯<|V—ŒAdSrBrCrDs €€€r rIz2LogXML.pytest_runtest_logreport..asoøèè€ððààœ  f¤mÒ3Ð3Ý# C¨°tÑ<Ô<À ÒIÐIÝ# C¨°dÑ;Ô;¸zÒIÐIð ð JÐIÐIÐIð ðr")rŠr²r<r¡Úfailedr¨Únextr1rÈr2r©rSr‰r•rµr¤rÁÚupdate_testcase_durationrÞrWr#Úremove)rNr€Ú close_reportr7ÚpropnameÚ propvaluerGrHs ` @@r Úpytest_runtest_logreportzLogXML.pytest_runtest_logreportsäøøø€ð.ˆ Ø Œ=ð% ,ØŒ{˜fÒ$Ð$Ø×-Ò-¨fÑ5Ô5�Ø×$Ò$ VÑ,Ô,Ð,ùØ Œ]ð! ,ØŒ{˜jÒ(Ð(å$ V¨[¸$Ñ?Ô?� Ý# F¨L¸$Ñ?Ô?� Ý#ððððððà#'Ô#4ðñôðñ ô � ð ð4ð—M’M ,Ñ/Ô/Ð/ØÐ.Ô.°!Ñ3Ð.Ô.Ø×)Ò)¨&Ñ1Ô1ˆHØŒ{˜fÒ$Ð$Ø×'Ò'¨Ñ/Ô/Ð/ØÔ!×(Ò(¨Ñ0Ô0Ð0ØÔ-ð;Ø×2Ò2°6Ñ:Ô:Ð:øà×%Ò% fÑ-Ô-Ð-Ð-Ø Œ^ð ,Ø×)Ò)¨&Ñ1Ô1ˆHØ × #Ò # FÑ +Ô +Ð +Ø ×%Ò% fÑ-Ô-Ð-Ø Œ;˜*Ò $Ð $Ø×)Ò)¨&Ñ1Ô1ˆHØ × *Ò *¨6Ñ 2Ô 2Ð 2à'-Ô'=ð @ð @Ñ#�˜)Ø×%Ò% hµ°I±´Ñ?Ô?Ð?Ð?à �MŠM˜&Ñ !Ô !Ð !Ý  ¨°dÑ;Ô;ˆJÝ ¨ °dÑ;Ô;ˆIÝððððððà#Ô0ðñôðñ ô ˆLðð 7ØÔ!×(Ò(¨Ñ6Ô6Ð6Ð6Ð6ð/ %Ð $ð, 7ð 7r"có¨—|jdks|j|jkr6| |¦«}|xjt |dd¦«z c_dSdS)zƒAccumulate total duration for nodeid from given report and update the Junit.testcase with the new total if already created.rrKrGN)r#r²rårKr¨r;s r rMzLogXML.update_testcase_durationosc€ð Ô  7Ò *Ð *¨f¬k¸TÔ=QÒ.QÐ.QØ×)Ò)¨&Ñ1Ô1ˆHØ Ð Ô ¥¨°¸SÑ!AÔ!AÑ AÐ Ô Ð Ð ð/RÐ.Qr"có¨—|jsJ| |¦«}|jr| |¦«dS| |¦«dSdSr))rŠr<rKr¬r®r;s r Úpytest_collectreportzLogXML.pytest_collectreportvsg€ØŒ}ð 8Ø×)Ò)¨&Ñ1Ô1ˆHØŒ}ð 8Ø×-Ò-¨fÑ5Ô5Ð5Ð5Ð5à×/Ò/°Ñ7Ô7Ð7Ð7Ð7ð  8ð 8r"Úexcreprcó°—| d¦«}|j dd¬¦«| ddt |¦«¦«dS)NÚinternalr)r9r:r«zinternal error)rårMr/rr#)rNrVr7s r Úpytest_internalerrorzLogXML.pytest_internalerror~sU€Ø×%Ò% jÑ1Ô1ˆØŒ×Ò¨°zÐÑBÔBÐBØ×Ò˜WÐ&6½¸G¹ ¼ ÑEÔEÐEÐEÐEr"có6—tj¦«|_dSr))r rwÚsuite_start_time)rNs r Úpytest_sessionstartzLogXML.pytest_sessionstartƒs€Ý &¤ ¡ ¤ ˆÔÐÐr"c óº—tj tj |j¦«¦«}tj|d¬¦«t |jdd¬¦«5}tj¦«}||j z }|j d|j dz|j dz|j d z|j z }|  d ¦«tjd |jt!|j d ¦«t!|j d¦«t!|j d¦«t!|¦«d |zt#j|j ¦« ¦«t)j¦«¬ ¦ « }| ¦«}|�| |¦«|jD])}| | ¦«¦«Œ*tjd¦«} |  |¦«|  tj| d¬¦«¦«ddd¦«dS#1swxYwYdS)NT)Úexist_okÚwzutf-8)ÚencodingrŠr¦r¤r«z&Ú testsuiterv)r:ÚerrorsÚfailuresr¤ÚtestsrwÚ timestampÚhostnameÚ testsuitesÚunicode)r%røÚdirnamer)r*ÚmakedirsÚopenr rwr[r-r2Úwriter^r_r"r#rÚ fromtimestampÚ isoformatÚplatformrPÚ_get_global_properties_noderSr/ryÚtostring) rNrir*Úsuite_stop_timeÚsuite_time_deltaÚnumtestsÚ suite_noder0rårgs r Úpytest_sessionfinishzLogXML.pytest_sessionfinish†st€Ý”'—/’/¥"¤'§/¢/°$´,Ñ"?Ô"?Ñ@Ô@ˆå Œ �G dÐ+Ñ+Ô+Ð+å �$”, ¨gÐ 6Ñ 6Ô 6ð G¸'Ý$œk™mœmˆOØ.°Ô1FÑFÐ ð” ˜8Ô$Ø”*˜YÔ'ñ(à”*˜YÔ'ñ(ð”*˜WÔ%ñ&ðÔ,ñ -ð ð �MŠMÐBÑ CÔ CÐ CåœØØ”_ݘ4œ: gÔ.Ñ/Ô/ݘTœZ¨ Ô2Ñ3Ô3ݘDœJ yÔ1Ñ2Ô2ݘ(‘m”mØÐ.Ñ.Ý"Ô0°Ô1FÑGÔG×QÒQÑSÔSÝ!œ™œð ñ ô ˆJð!%× @Ò @Ñ BÔ BÐ Ø Ð,Ø×!Ò!Ð"3Ñ4Ô4Ð4Ø!%Ô!<ð :ð :� Ø×!Ò! -×"6Ò"6Ñ"8Ô"8Ñ9Ô9Ð9Ð9Ýœ LÑ1Ô1ˆJØ × Ò ˜jÑ )Ô )Ð )Ø �MŠM�"œ+ j¸9ÐEÑEÔEÑ FÔ FÐ Fð? Gð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð GsÁ/GIÉIÉIÚterminalreportercóB—| dd|j›�¦«dS)Nr›zgenerated xml file: )Ú write_sepr*)rNrws r Úpytest_terminal_summaryzLogXML.pytest_terminal_summary¬s)€Ø×"Ò" 3Ð(M¸t¼|Ð(MÐ(MÑNÔNÐNÐNÐNr"r:rTcó|—d}td|¦«|j |t|¦«f¦«dS)NTr:)rìr0rSr')rNr:rTrës r ròzLogXML.add_global_property¯sB€Ø ÐÝ  ¨Ñ.Ô.Ð.Ø Ô×%Ò% t­^¸EÑ-BÔ-BÐ&CÑDÔDÐDÐDÐDr"có®—|jrMtjd¦«}|jD]/\}}| tjd||¬¦«¦«Œ0|SdSr[)r0r^r_rSr`s r rpz"LogXML._get_global_properties_node´sg€à Ô !ð Ýœ LÑ1Ô1ˆJØ#Ô5ð Rð R‘ ��eØ×!Ò!¥"¤*¨Z¸dÈ%Ð"PÑ"PÔ"PÑQÔQÐQÐQØÐ ؈tr")rr‚rr@TrÉ)rÊrËrÌrr#rrOrrÈr rCrårIr<rRrMrUr rYr\rvrrzrÍròr^r_rprÄr"r rrÐsS€€€€€ð #ØØ&ØØ"&ð!#ð!#𘔠ð!#ðð !#ð ð !#ð ð !#ð ð!#ð ð!#ð!#ð!#ð!#ðF ˜zð ¨dð ð ð ð ð E¨*°c¨/Ô$:ð¸}ððððð$!˜Sð! Tð!ð!ð!ð!ð Jð°=ððððð V7¨zðV7¸dðV7ðV7ðV7ðV7ðpB¨zðB¸dðBðBðBðBð8¨:ð8¸$ð8ð8ð8ð8ðF¨MðF¸dðFðFðFðFð .ð.ð.ð.ð$Gð$Gð$Gð$GðLOÐ8HðOÈTðOðOðOðOðE¨ðE°FðE¸tðEðEðEðEð ¨X°b´jÔ-Aððððððr"rÉ)9Ú__doc__r r%ror$Úxml.etree.ElementTreeÚetreeÚ ElementTreer^rÚtypingrrrrrr r rÚ_pytestr r Ú_pytest._code.coder rÚ_pytest.configrrÚ_pytest.config.argparsingrÚ_pytest.fixturesrÚ_pytest.reportsrÚ _pytest.stashrÚ_pytest.terminalrr×rÍr#r'r7rnÚcopyrCrÚÚfixturerÜrârìrór rrrgrrÄr"r úrŒs—ððððÐÐÐØ € € € Ø€€€Ø € € € Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐà € € € ØÐÐÐÐÐØÐÐÐÐÐØ,Ð,Ð,Ð,Ð,Ð,Ø/Ð/Ð/Ð/Ð/Ð/Ø!Ð!Ð!Ð!Ð!Ð!Ø'Ð'Ð'Ð'Ð'Ð'Ø,Ð,Ð,Ð,Ð,Ð,Ø+Ð+Ð+Ð+Ð+Ð+Ø&Ð&Ð&Ð&Ð&Ð&Ø"Ð"Ð"Ð"Ð"Ð"Ø-Ð-Ð-Ð-Ð-Ð-ð ˆ(�8Ô Ñ Ô €ð2˜ð2 3ð2ð2ð2ð2ð6ðððð €Ø +¨vÐ!6Ð7€ˆÑØ&Ð(?Ð(?Ð(?Ð@€ˆÑð˜gÔ&×+Ò+Ñ-Ô-€ˆÑØ € ˆX�hÔ  ¨.Ô!9Ñ:Ô:Ð:ð˜gÔ&€ˆÑðl#ðl#ðl#ðl#ðl#ñl#ôl#ðl#ð^ Ø ð Ø+.ð à ð ð ð ð ð"„ð˜^ð°¸#¸v¸ÈÐ9LÔ0Mðððñ„ðð,„ð .ð°X¸sÀF¸mÈTÐ>QÔ5Rðððñ„ðð8E CðE¨CðE°DðEðEðEðEð€„�iÐ Ñ Ô ð$ ~ð$¸(ÀCÈÀ=ÐRVÐCVÔ:Wð$ð$ð$ñ!Ô ð$ðN,˜Vð,¨ð,ð,ð,ð,ð^=˜Vð=¨ð=ð=ð=ð=ð"-˜vð-¨$ð-ð-ð-ð-ð ð¨¨c¬ðððððkðkðkðkðkñkôkðkðkðkr"