§
    £”jô4  ã                   ó8  — d dl Z de _        [ dZdZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlZd dlZd dlmZmZmZmZ d dlmZ d„ Zd	„ Zd
Zd„ Zd„ Zdadadad„ Zej                             dd¦  «        dk    rdndfZ d„ Z!d„ Z"d-d„Z#ddœd„Z$d.d„Z% G d„ de
¦  «        Z& G d„ d¦  «        Z' G d„ de'¦  «        Z( G d„ de'¦  «        Z) G d „ d!ej*        ¦  «        Z+ G d"„ d#ej*        ¦  «        Z, G d$„ d%ej*        ¦  «        Z-d/d'„Z.d(„ Z/d)„ Z0d0d*„Z1d0d+„Z2d0d,„Z3dS )1é    NTz4.0.1a  Provides support for the test suite.

The test suite as a whole, and individual tests, need to share
certain support functions.  We have to put these in here so they
can always be imported, and so that individual tests need to import
nothing more than "reportlab.whatever..."
)ÚConfigParser)ÚisCompactDistroÚ__rl_loader__Úrl_isdirÚ	asUnicode)Ú	invariantc                 ó@   — t           rt          j        | ¦  «         d S d S ©N)Úrl_invariantÚrandomÚseed)Úns    úf/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/lib/testutils.pyÚinvariantSeedr      s   € ÝÐ#•V”[ ‘^”^�^�^�^Ð#Ð#ó    c                  ó@   — ddl m} m} 	  | ¦   «         S # |$ r Y dS w xY w)Nr   ©Ú_getPMBackendÚRenderPMErrorF)Úreportlab.graphics.renderPMr   r   r   s     r   ÚhaveRenderPMr      sM   € ØHÐHÐHÐHÐHÐHÐHÐHðØˆ}‰ŒÐøØð ð ð Øˆuˆuðøøøs   Š	 ”œ)Ú
DejaVuSanszDejaVuSans-BoldzDejaVuSans-ObliquezDejaVuSans-BoldObliquec                  óX   — ddl m}  t          D ]}	  | ||dz   ¦  «         Œ#  Y  dS xY wdS )Nr   )ÚTTFontz.ttfFT)Úreportlab.pdfbase.ttfontsr   Ú
DEJAVUSANS)r   Úxs     r   Ú
haveDejaVur       sX   € Ø0Ð0Ð0Ð0Ð0Ð0Ýð ð ˆð	ØˆF�1�Q�v‘XÑÔÐÐøð	Ø�5�5�5øøøØˆ4s   ‘!¡'c                 óø   — 	 d}t          |d¦  «        }|                     d¦  «         |                     ¦   «          t          j                             |¦  «        rt          j        |¦  «         dS d S #  Y dS xY w)Nz00DELETE.MEÚwz$test of writability - can be deletedé   r   )ÚopenÚwriteÚcloseÚosÚpathÚisfileÚremove)ÚDÚfnÚfs      r   Ú
isWritabler,   *   s{   € ð	ØˆÝ��S‰MŒMˆØ	�ŠÐ6Ñ7Ô7Ð7Ø	�Š‰	Œ	ˆ	ÝŒ7�>Š>˜"ÑÔð 	ÝŒI�b‰MŒMˆMØ�1ð	ð 	øðØˆqˆqøøøs   ‚A.A4 Á4A9c                 ó>  — t           rt           S d„ t          j        D ¦   «         }|s%t          j                             dd¦  «        }|r|g}|r]|d         a 	 t          j        t           ¦  «         n#  Y nxY w|D ]/}|t          j        v rt          j                             |¦  «         Œ0nV| dk    s
J d¦   «         ‚t          j         	                    t          j        d         ¦  «        }|st          j
        ¦   «         }|a t          t           ¦  «        st          d¦  «        a dd	l}|j        d         at          j                             t          ¦  «        sAt          j                             t          j                             t          ¦  «        ¦  «        at          j         	                    t          ¦  «        }t          j                             |d
¦  «        at          j                             t(          ¦  «        s=t          j                             t          j         	                    |¦  «        d
¦  «        at          j                             t(          ¦  «        sl| dk    rdt          j         	                    t          j        d         ¦  «        }|st          j
        ¦   «         }t          j                             |¦  «        and	at(          rBt          j                             dt          j         	                    t(          ¦  «        ¦  «         t           S )zÆIs it a writable file system distro being invoked within
    test directory?  If so, can write test output here.  If not,
    it had better go in a temp directory.  Only do this once per
    processc                 óL   — g | ]!}|                      d ¦  «        ¯|dd…         ‘Œ"S )z	--outdir=é	   N©Ú
startswith)Ú.0Úds     r   ú
<listcomp>zsetOutDir.<locals>.<listcomp>@   s1   € Ð>Ð>Ð>�1 A§L¢L°Ñ$=Ô$=Ð>ˆˆ1ˆ2ˆ2ŒÐ>Ð>Ð>r   ÚRL_TEST_OUTDIRÚ éÿÿÿÿÚ__main__z2setOutDir should only be called in the main scriptr   Úreportlab_testNÚtests)Ú_OUTDIRÚsysÚargvr%   ÚenvironÚgetÚmakedirsr(   r&   ÚdirnameÚgetcwdr,   Úget_rl_tempdirÚ	reportlabÚ__path__ÚRL_HOMEÚisabsÚnormpathÚabspathÚjoinÚtestsFolderÚisdirÚinsert)Únamer)   r3   Ú	scriptDirrD   ÚtopDirs         r   Ú	setOutDirrQ   9   se  € õ Ð•w�Ø>Ð>�œÐ>Ñ>Ô>€AØð ÝŒJ�NŠNÐ+¨BÑ/Ô/ˆØˆ��ˆaØð Ø�B”%ˆð	ÝŒK�Ñ Ô Ð Ð øð	ØˆDøøøØð 	#ð 	#ˆAØ•C”Hˆ}ˆ}Ý”—’ Ñ"Ô"Ð"øð	#ð �ZÒÐÐÐ TÑÔÐÝ”'—/’/¥#¤(¨1¤+Ñ.Ô.ˆ	ØÐ/¥B¤I¡K¤K˜)Øˆå•gÑÔð 3Ý Ð!1Ñ2Ô2ˆàÐÐÐØÔ˜qÔ!€GÝŒ7�=Š=�Ñ!Ô!ÐU­2¬7×+;Ò+;½B¼G¿OºOÍGÑ<TÔ<TÑ+UÔ+U 7ÝŒW�_Š_�WÑ%Ô%€FÝ”'—,’,˜v gÑ.Ô.€KÝŒ7�=Š=�Ñ%Ô%ð DÝ”g—l’l¥2¤7§?¢?°6Ñ#:Ô#:¸7ÑCÔCˆÝŒ7�=Š=�Ñ%Ô%ð Ø�ÒÐÝ”g—o’o¥c¤h¨q¤kÑ2Ô2ˆIØÐ3­¬	©¬˜iÝœ'Ÿ/š/¨)Ñ4Ô4ˆKˆKàˆKÝð 8ÝŒ�Š˜�"œ'Ÿ/š/­+Ñ6Ô6Ñ7Ô7Ð7Ý€Ns   ÁA1 Á1A5ÚOFFLINE_MOCKÚ1z,http://www.reportlab.com/rsrc/encryption.gifc                 óV  — | t           v r~t          t          j                             t
          t          j                             | ¦  «        ¦  «        d¦  «        5 }|                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S ddlm	}  || ¦  «                             ¦   «         S )NÚrbr   )Úurlopen)
Ú	_mockumapr"   r%   r&   rJ   rK   ÚbasenameÚreadÚurllib.requestrV   )rN   r+   rV   s      r   ÚmockUrlReadr[   l   s×   € Ø�yÐÐÝ•"”'—,’,�{­2¬7×+;Ò+;¸DÑ+AÔ+AÑBÔBÀ4ÑHÔHð 	ÈAØ—6’6‘8”8ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	+Ð*Ð*Ð*Ð*Ð*Øˆw�t‰}Œ}×!Ò!Ñ#Ô#Ð#s   ÁA;Á;A?ÂA?c                 ór   — t          t          ¦  «        }| r t          j                             || ¦  «        }|S )zêThis works out where to write test output.  If running
    code in a locked down file system, this will be a
    temp directory; otherwise, the output of 'test_foo.py' will
    normally be a file called 'test_foo.pdf', next door.
    )rQ   Ú__name__r%   r&   rJ   )r*   r)   s     r   Ú
outputfiler^   t   s0   € õ 	•(ÑÔ€AØ	Ð!�rŒw�|Š|˜A˜bÑ!Ô!ˆ1Ø€Hr   r!   c                 óÆ   — t          j        | ¦  «        j                             d¦  «        dk    r.t	          d¦  «        }|t
          k    rt          d|z  ¦  «         d S d S d S )Nr]   r8   r6   z,Logs and output files written to folder "%s")r<   Ú	_getframeÚf_localsr?   r^   r;   Úprint)ÚdepthÚoutDirs     r   ÚprintLocationre   ~   sd   € Ý
„}�UÑÔÔ$×(Ò(¨Ñ4Ô4°jÒ@Ð@Ý˜B‘”ˆØ•7Š?ˆ?ÝÐ@À6ÑIÑJÔJÐJÐJÐJð AÐ@àˆ?r   )ÚtestMethodPrefixc                 ó¾   — t          j        ¦   «         }t          j        ¦   «         }| r| |_        |D ]*}|                     |                     |¦  «        ¦  «         Œ+|S )z<Return a test suite with tests loaded from provided classes.)ÚunittestÚ	TestSuiteÚ
TestLoaderrf   ÚaddTestÚloadTestsFromTestCase)rf   ÚclassesÚsuiteÚloaderÚCs        r   ÚmakeSuiteForClassesrq   „   sg   € õ ÔÑ Ô €EÝÔ Ñ"Ô"€FØð 3Ø"2ˆÔØð 7ð 7ˆØ�Š�f×2Ò2°1Ñ5Ô5Ñ6Ô6Ð6Ð6Ø€Lr   c                 óf  — t           j        j        }	 t           || dd¦  «        ¦  «        }n# t          $ r g cY S w xY wg }|                     ¦   «         D ]Z}|r|d         dk    s|rH|d         dk    r<|                     d¦  «        d         }|r|                      || |¦  «        ¦  «         Œ[|S )aG  Returns a list of filenames as listed in the CVS/Entries file.

    'folder' is the folder that should contain the CVS subfolder.
    If there is no such subfolder an empty list is returned.
    'files' is a boolean; 1 and 0 means to return files or not.
    'folders' is a boolean; 1 and 0 means to return folders or not.
    ÚCVSÚEntriesr   r)   ú/r!   )r%   r&   rJ   r"   ÚIOErrorÚ	readlinesÚsplitÚappend)ÚfolderÚfilesÚfoldersrJ   r+   Ú
allEntriesÚlineÚentrys           r   ÚgetCVSEntriesr€   �   sÝ   € õ Œ7Œ<€DðÝ���f˜e YÑ/Ô/Ñ0Ô0ˆˆøÝð ð ð Øˆ	ˆ	ˆ	ðøøøð €JØ—’‘”ð 7ð 7ˆØð 	7�t˜A”w #’~�~Øð &Ø˜Qœ 3š˜Ø—J’J˜s‘O”O AÔ&ˆEØð 7Ø×!Ò! $ $ v¨uÑ"5Ô"5Ñ6Ô6Ð6øàÐs   “. ®=¼=c                   ó8   — e Zd ZdZ ej        d¦  «        Zd„ ZdS )ÚExtConfigParserz7A slightly extended version to return lists of strings.z\s*\[.*\]\s*c                 óÀ   — t          j        | ||¦  «        }|                     dd¦  «        }| j                             |¦  «        rt          |t          di¦  «        S |S )zECoerce option to a list of strings or return unchanged if that fails.ú
r6   N)r   r?   ÚreplaceÚpatÚmatchÚevalÚ__builtins__)ÚselfÚsectionÚoptionÚvalueÚvals        r   ÚgetstringlistzExtConfigParser.getstringlist²   s]   € õ Ô   w°Ñ7Ô7ˆð �mŠm˜D "Ñ%Ô%ˆàŒ8�>Š>˜#ÑÔð 	Ý˜�\¨$Ð/Ñ0Ô0Ð0àˆLr   N)r]   Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler†   r�   © r   r   r‚   r‚   ­   s:   € € € € € Ø=Ð=à
ˆ"Œ*�_Ñ
%Ô
%€Cðð ð ð ð r   r‚   c                   ó&   — e Zd ZdZdd„Zd„ Zd„ ZdS )ÚGlobDirectoryWalkerz<A forward iterator that traverses files in a directory tree.Ú*c                 ó  — d| _         || _        |                     dt          j        ¦  «         t          j                             |¦  «        r|g| _        g | _        d S t          ¦   «         rt          rt          |¦  «        st          d|z  ¦  «        ‚|t          t          j        ¦  «        t          t          j        ¦  «        z   d …         | _        | j        t          j        z   }t          |¦  «        }t!          t#          |fd„t!          t%          |fd„t!          t          j                             ¦   «         ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        | _        | j                             ¦   «          g | _        d S )Nr   ru   z"%s" is not a directoryc                 ó   — | |d …         S r
   r•   )r   r   s     r   ú<lambda>z.GlobDirectoryWalker.__init__.<locals>.<lambda>Ô   s   € °°1°2°2´€ r   c                 ó,   — |                       |¦  «        S r
   r0   )r   Úpfxs     r   r›   z.GlobDirectoryWalker.__init__.<locals>.<lambda>Ô   s   € ÐUV×UaÒUaÐbeÑUfÔUf€ r   )ÚindexÚpatternr…   r%   Úsepr&   rL   Ústackr{   r   r   r   Ú
ValueErrorÚlenÚarchiveÚ	directoryÚlistÚmapÚfilterÚ_filesÚkeysÚsort)rŠ   r¥   rŸ   r�   r   s        r   Ú__init__zGlobDirectoryWalker.__init__Ç   sx  € ØˆŒ
ØˆŒØ×Ò˜#�bœfÑ%Ô%Ð%ÝŒ7�=Š=˜Ñ#Ô#ð 	Ø#˜ˆDŒJØˆDŒJˆJˆJå"Ñ$Ô$ð H­Mð HÅÈ)ÑATÔATð HÝ Ð!:¸YÑ!FÑGÔGÐGØ&¥s­=Ô+@Ñ'AÔ'AÅ#ÅbÄfÁ+Ä+Ñ'MÐ'NÐ'NÔOˆDŒNØ”.¥¤Ñ'ˆCÝ�C‘”ˆAÝ�c¨aÐ"6Ð"6Ð"6µt½FÐPSÐCfÐCfÐCfÕgkÕlyô  mA÷  mFò  mFñ  mHô  mHñ  hIô  hIñ  =Jô  =Jñ  8Kô  8Kñ  Lô  Lñ  Mô  MˆDŒJØŒJ�OŠOÑÔÐØˆDŒJˆJˆJr   c                 óp  — 	 	 | j         | j                 }| j        dz   | _        t          j                             | j        |¦  «        }t          j                             |¦  «        r9t          j                             |¦  «        s| j         	                    |¦  «         t          j
        || j        ¦  «        r|S nx# t          $ rk | j                             ¦   «         | _        t          j        | j        ¦  «        | _         |                      | j        | j         ¦  «        | _         d| _        Y nw xY w�Œ6)Nr!   r   )r{   rž   r%   r&   rJ   r¥   rL   Úislinkr¡   ry   ÚfnmatchrŸ   Ú
IndexErrorÚpopÚlistdirÚfilterFiles)rŠ   rž   ÚfileÚfullnames       r   Ú__getitem__zGlobDirectoryWalker.__getitem__Ø   s  € ð	$ð$Ø”z $¤*Ô-�Ø!œZ¨!™^�”
õ œ7Ÿ<š<¨¬¸Ñ=Ô=�Ý”7—=’= Ñ*Ô*ð 0µ2´7·>²>À(Ñ3KÔ3Kð 0Ø”J×%Ò% hÑ/Ô/Ð/Ý”? 4¨¬Ñ6Ô6ð $Ø#�Oð$øõ ð ð ð à!%¤§¢Ñ!1Ô!1�”ÝœZ¨¬Ñ7Ô7�”
à!×-Ò-¨d¬n¸d¼jÑIÔI�”
Ø�”
�
�
ðøøøñ		$s   ƒ!B> Â>A2D3Ä2D3c                 ó   — |S )z/Filter hook, overwrite in subclasses as needed.r•   )rŠ   rz   r{   s      r   r³   zGlobDirectoryWalker.filterFilesì   s	   € ð ˆr   N)r˜   )r]   r�   r‘   r’   r¬   r¶   r³   r•   r   r   r—   r—   Ä   sL   € € € € € ØBÐBðð ð ð ð"$ð $ð $ð(ð ð ð ð r   r—   c                   ó    — e Zd ZdZdd„Zd„ ZdS )ÚRestrictedGlobDirectoryWalkerz&An restricted directory tree iterator.r˜   Nc                 óP  — t                                | ||¦  «         |d k    rg }g j        }t          |t          t
          f¦  «        r|D ]} ||¦  «         Œn t          |t          ¦  «        r ||¦  «         t          j        dk    rd„ |j	        D ¦   «         n|j	        | _
        d S )Nru   c                 óN   — g | ]"}|                      d t          j        ¦  «        ‘Œ#S )ru   )r…   r%   r    )r2   Ú_s     r   r4   z:RestrictedGlobDirectoryWalker.__init__.<locals>.<listcomp>   s(   € ÐKÐKÐK¸! §	¢	¨#­b¬fÑ 5Ô 5ÐKÐKÐKr   )r—   r¬   ry   Ú
isinstanceÚtupler¦   Ústrr%   r    Ú__self__ÚignorePatterns)rŠ   r¥   rŸ   ÚignoreÚipÚps         r   r¬   z&RestrictedGlobDirectoryWalker.__init__õ   s¼   € Ý×$Ò$ T¨9°gÑ>Ô>Ð>à�TŠ>ˆ>ØˆFØŒYˆÝ�f�e¥D˜\Ñ*Ô*ð 	Øð ð �Ø��1‘”��ðå˜�sÑ#Ô#ð 	ØˆBˆv‰JŒJˆJÝOQÌvÐY\Ê}È}ÐKÐK¸r¼{ÐKÑKÔKÐKØ%'¤[ð 	ÔÐÐr   c                 ó.  — t           j         }g }t          |¦  «        D ]Z\  }}| j        D ]M} |||¦  «        s* |t          j                             ||¦  «        |¦  «        r|                     |¦  «         ŒNŒ[|                     ¦   «          |D ]}||= Œ|S )z9Filters all items from files matching patterns to ignore.)r¯   Ú	enumeraterÁ   r%   r&   rJ   ry   Úreverse)rŠ   rz   r{   ÚfnmÚindicesToDeleteÚir+   rÄ   s           r   r³   z)RestrictedGlobDirectoryWalker.filterFiles  s½   € õ ŒoˆØˆÝ˜UÑ#Ô#ð 	.ð 	.‰CˆAˆaØÔ(ð .ð .�Ø�3�q˜!‘9”9ð .  ¥B¤G§L¢L°¸Ñ$:Ô$:¸1Ñ =Ô =ð .Ø#×*Ò*¨1Ñ-Ô-Ð-øð.ð 	×ÒÑ!Ô!Ð!Ø ð 	ð 	ˆAØ�a��àˆr   )r˜   N)r]   r�   r‘   r’   r¬   r³   r•   r   r   r¹   r¹   ò   s=   € € € € € Ø,Ð,ð2ð 2ð 2ð 2ðð ð ð ð r   r¹   c                   ó   — e Zd ZdZd„ ZdS )ÚCVSGlobDirectoryWalkerz4An directory tree iterator that checks for CVS data.c                 ó  — t           j        j        }t          |¦  «        }|rhg }t	          t          |¦  «        ¦  «        D ]-}||         } |||¦  «        |vr|                     |¦  «         Œ.|                     ¦   «          |D ]}||= Œ|S )zçFilters files not listed in CVS subfolder.

        This will look in the CVS subfolder of 'folder' for
        a file named 'Entries' and filter all elements from
        the 'files' list that are not listed in 'Entries'.
        )r%   r&   rJ   r€   Úranger£   ry   rÇ   )rŠ   rz   r{   rJ   ÚcvsFilesrÉ   rÊ   r+   s           r   r³   z"CVSGlobDirectoryWalker.filterFiles  s¦   € õ ŒwŒ|ˆÝ  Ñ(Ô(ˆØð 	Ø ˆOÝ�3˜u™:œ:Ñ&Ô&ð .ð .�Ø˜!”H�Ø�4˜ ‘?”?¨(Ð2Ð2Ø#×*Ò*¨1Ñ-Ô-Ð-øØ×#Ò#Ñ%Ô%Ð%Ø$ð ð �Ø˜!�H�Hàˆr   N)r]   r�   r‘   r’   r³   r•   r   r   rÌ   rÌ     s)   € € € € € Ø:Ð:ðð ð ð ð r   rÌ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSecureTestCaseaý  Secure testing base class with additional pre- and postconditions.

    We try to ensure that each test leaves the environment it has
    found unchanged after the test is performed, successful or not.

    Currently we restore sys.path and the working directory, but more
    of this could be added easily, like removing temporary files or
    similar things.

    Use this as a base class replacing unittest.TestCase and call
    these methods in subclassed versions before doing your own
    business!
    c                 óh   — t           j        dd…         | _        t          j        ¦   «         | _        dS )z0Remember sys.path and current working directory.N)r<   r&   Ú_initialPathr%   rB   Ú_initialWorkDir©rŠ   s    r   ÚsetUpzSecureTestCase.setUp>  s(   € åœH Q Q QœKˆÔÝ!œy™{œ{ˆÔÐÐr   c                 óZ   — | j         t          _        t          j        | j        ¦  «         dS )z0Restore previous sys.path and working directory.N)rÓ   r<   r&   r%   ÚchdirrÔ   rÕ   s    r   ÚtearDownzSecureTestCase.tearDownC  s%   € àÔ$�ŒÝ
Œ�Ô%Ñ&Ô&Ð&Ð&Ð&r   N)r]   r�   r‘   r’   rÖ   rÙ   r•   r   r   rÑ   rÑ   /  s<   € € € € € ðð ð+ð +ð +ð
'ð 'ð 'ð 'ð 'r   rÑ   c                   ó,   — e Zd Zdd„Z ee¦  «        ZdS )ÚNearTestCaseçñhãˆµøä>c                 ó  — t          | t          t          f¦  «        r,t          | |z
  ¦  «        |k    rt	          | ›d|›�¦  «        ‚d S t          | |¦  «        D ]/\  }}t          ||z
  ¦  «        |k    rt	          | ›d|›�¦  «        ‚Œ0d S )Nz
 not near )r½   ÚfloatÚintÚabsÚAssertionErrorÚzip)ÚaÚbÚaccuracyÚaeÚbes        r   Ú
assertNearzNearTestCase.assertNearI  s­   € Ý�a��s˜Ñ$Ô$ð 	DÝ�1�Q‘3‰xŒx˜Ò Ð Ý$¸¸¸¸A¸AÐ%>Ñ?Ô?Ð?ð !Ð õ ˜Q˜q™œð Dð D‘��2Ý�r˜"‘u‘:”:˜hÒ&Ð&Ý(¸Q¸Q¸QÀÀÐ)BÑCÔCÐCð 'ðDð Dr   N)rÜ   )r]   r�   r‘   rè   Ústaticmethodr•   r   r   rÛ   rÛ   H  s7   € € € € € ðDð Dð Dð Dð �˜jÑ)Ô)€J€J€Jr   rÛ   c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )	ÚScriptThatMakesFileTestzyRuns a Python script at OS level, expecting it to produce a file.

    It CDs to the working directory to run the script.r   c                 ó|   — || _         || _        || _        || _        t          j                             | ¦  «         d S r
   )rO   Ú
scriptNameÚoutFileNameÚverboserh   ÚTestCaser¬   )rŠ   rO   rí   rî   rï   s        r   r¬   z ScriptThatMakesFileTest.__init__W  s<   € Ø"ˆŒØ$ˆŒØ&ˆÔØˆŒåÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r   c                 óÞ  — t          j        ¦   «         | _        | j        }t           j                             |¦  «        s%t           j                             t          |¦  «        }t          j        |¦  «         t           j         	                    | j
        ¦  «        sJ d| j
        z  ¦   «         ‚t           j         	                    | j        ¦  «        rt          j        | j        ¦  «         d S d S )NzScript %s not found!)r%   rB   ÚcwdrO   r&   rG   rJ   rK   rØ   r'   rí   rî   r(   )rŠ   rO   s     r   rÖ   zScriptThatMakesFileTest.setUp_  s¹   € Ý”9‘;”;ˆŒà”.ˆ	ÝŒw�}Š}˜YÑ'Ô'ð 	:Ý”g—l’l¥;¨yÑ9Ô9ˆIå
Œ�ÑÔÐÝŒw�~Š~˜dœoÑ.Ô.ÐXÐXÐ0FÈÌÑ0XÑXÔXÐXÝŒ7�>Š>˜$Ô*Ñ+Ô+ð 	(ÝŒI�dÔ&Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(r   c                 ó8   — t          j        | j        ¦  «         d S r
   )r%   rØ   rò   rÕ   s    r   rÙ   z ScriptThatMakesFileTest.tearDownk  s   € Ý
Œ�”ÑÔÐÐÐr   c                 ó  — t           j        dk    rdpd}dd l}|                     t           j        | j        f¦  «        }| j        rt          |¦  «         t          j	         
                    | j        ¦  «        sJ d| j        z  ¦   «         ‚d S )NÚwin32z"%s" %sz%s %sr   zFile %s not created!)r<   ÚplatformÚ
subprocessÚcheck_outputÚ
executablerí   rï   rb   r%   r&   r'   rî   )rŠ   Úfmtr÷   Úouts       r   ÚrunTestzScriptThatMakesFileTest.runTestn  s‹   € ÝŒl˜GÒ#Ð1¨	Ð<°WˆØÐÐÐØ×%Ò%¥s¤~°d´oÐ&FÑGÔGˆð Œ<ð 	Ý�#‰JŒJˆJåŒw�~Š~˜dÔ.Ñ/Ô/ÐZÐZÐ1GÈ$ÔJZÑ1ZÑZÔZÐZÐZÐZr   N)r   )r]   r�   r‘   r’   r¬   rÖ   rÙ   rü   r•   r   r   rë   rë   S  sd   € € € € € ð:ð :ð)ð )ð )ð )ð
(ð 
(ð 
(ðð ð ð	[ð 	[ð 	[ð 	[ð 	[r   rë   Úutf8c                 ó’   — t          | ¦  «        t          |¦  «        k    r| |k    n!t          | |¦  «        t          ||¦  «        k    S r
   )Útyper   )rã   rä   Úencs      r   ÚequalStringsr  y  s?   € Ý˜‘7”7�D ™GœGÒ#Ð#ˆ1ˆaŠ4ˆ4­°1°SÑ)9Ô)9½9ÀQÀsÑ;KÔ;KÒ)KÐKr   c                 ót   — | |k    r1t          dt          |¦  «        ›dt          | ¦  «        ›�¦  «         d S d S )NzStrings unequal
exp: z
got: )rb   Úascii)Úrr   s     r   ÚeqCheckr  |  s?   € Øˆ!‚t€tÝˆµU¸1±X´X°X°X½eÀA¹h¼h¸hÐGÑHÔHÐHÐHÐHð €tr   c                  ó    — 	 dd l } dS #  Y dS xY w)Nr   FT©Úrlextrar  s    r   ÚrlextraNeededr	  €  s%   € ðØˆˆˆØˆuøðØˆtˆtøøøs   ‚ ˆc                 ó   ‡ ‡‡— ˆˆ ˆfd„}|S )Nc                 óN   •‡ — t          j        ‰ ¦  «        ˆˆˆ ˆfd„¦   «         }|S )Nc                  óà   •— ‰rHt           j                             dd¦  «        dk    r$t          d‰j        p‰› d‰j        › d‰› �¦  «           t          j        ‰‰¦  «        ‰¦  «        | i |¤ŽS )NÚRL_indicateSkipsÚ0rS   z

skipping ú.ú )r%   r>   r?   rb   r�   r]   rh   ÚskipIf)ÚargsÚkwdsr�   ÚcondÚfuncÚreasons     €€€€r   Úwrapperz(rlSkipIf.<locals>.inner.<locals>.wrapper‰  s¤   ø€ àð F�œ
ŸšÐ'9¸#Ñ>Ô>ÀÒCÐCÝð EØ
Œ/Ð
'˜ZðEð EØ*.¬-ðEð EØ:@ðEð Eñ Fô Fð Fà5Ð/•8”? 4¨Ñ/Ô/°Ñ5Ô5°tÐC¸dÐCÐCÐCr   )Ú	functoolsÚwraps)r  r  r�   r  r  s   ` €€€r   ÚinnerzrlSkipIf.<locals>.innerˆ  sP   øø€ Ý	Œ˜Ñ	Ô	ð	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dñ 
Ô	ð	Dð
 ˆr   r•   )r  r  r�   r  s   ``` r   ÚrlSkipIfr  ‡  s/   øøø€ ðð ð ð ð ð ð ð €Lr   c                 ó(   — t          |  ||¬¦  «        S )N©r�   ©r  )r  r  r�   s      r   ÚrlSkipUnlessr  ’  s   € Ý˜�H˜V¨zÐ:Ñ:Ô:Ð:r   c                 ó&   — t          d| |¬¦  «        S )NTr  r  )r  r�   s     r   ÚrlSkipr!  •  s   € Ý�D˜¨:Ð6Ñ6Ô6Ð6r   )r!   )r!   r   )rý   r
   )4rD   Ú_rl_testingÚ__version__r’   r<   r%   r¯   r“   r  Úconfigparserr   rh   r   Úreportlab.lib.utilsr   r   r   r   Úreportlab.rl_configr   r   r   r   r   r   r,   r;   rF   rK   rQ   r>   r?   rW   r[   r^   re   rq   r€   r‚   r—   r¹   rÌ   rð   rÑ   rÛ   rë   r  r  r	  r  r  r!  r•   r   r   ú<module>r'     sy  ðð Ð Ð Ð Ø€	Ô ØØ€ð	€ð 'Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ð Ð Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ð$ð $ð $ðð ð ð \€
ðð ð ð
ð 
ð 
ð €Ø
€Ø€ð-ð -ð -ð` ”
—’˜~¨cÑ2Ô2°CÒ7Ð7ˆˆØ>ð
€	ð$ð $ð $ðð ð ðKð Kð Kð Kð 37ð 	ð 	ð 	ð 	ð 	ðð ð ð ð<ð ð ð ð �lñ ô ð ð.+ð +ð +ð +ð +ñ +ô +ð +ð\ð ð ð ð Ð$7ñ ô ð ðBð ð ð ð Ð0ñ ô ð ð8'ð 'ð 'ð 'ð '�XÔ&ñ 'ô 'ð 'ð2	*ð 	*ð 	*ð 	*ð 	*�8Ô$ñ 	*ô 	*ð 	*ð$[ð $[ð $[ð $[ð $[˜hÔ/ñ $[ô $[ð $[ðLLð Lð Lð LðIð Ið Iðð ð ð	ð 	ð 	ð 	ð;ð ;ð ;ð ;ð7ð 7ð 7ð 7ð 7ð 7r   