o
    ÓèFhöC  ã                   @   sì   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlZd dl	Zd dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
l	mZmZmZmZ dZdZdZdZG dd„ dej ƒZ!G dd„ dej ƒZ"dS )é    N)Úmkdtemp)Úmock)ÚImage)ÚDataOverflowError)Ú	BaseImage)Ú
PyPNGImage)ÚStyledPilImage)Ú
colormasksÚmoduledrawers)ÚMODE_8BIT_BYTEÚMODE_ALPHA_NUMÚMODE_NUMBERÚQRDatau   Î±Î²Î³)éÿ   r   r   )r   r   r   )r   r   r   c                   @   sø  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze e d¡dd„ ƒZe e d¡d d!„ ƒZe e d¡d"d#„ ƒZe e d¡d$d%„ ƒZe e d¡d&d'„ ƒZd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Ze e d¡d4d5„ ƒZe e d¡d6d7„ ƒZ e e d¡d8d9„ ƒZ!e e d¡d:d;„ ƒZ"e e d¡d<d=„ ƒZ#e e d¡d>d?„ ƒZ$e e d¡d@dA„ ƒZ%e e d¡dBdC„ ƒZ&e e d¡dDdE„ ƒZ'e e d¡dFdG„ ƒZ(e e d¡dHdI„ ƒZ)e e d¡dJdK„ ƒZ*e e d¡dLdM„ ƒZ+e e d¡dNdO„ ƒZ,e e d¡dPdQ„ ƒZ-e e d¡dRdS„ ƒZ.e e d¡dTdU„ ƒZ/dVdW„ Z0dXdY„ Z1dZd[„ Z2d\d]„ Z3d^d_„ Z4d`da„ Z5dbdc„ Z6ddde„ Z7dfdg„ Z8dhdi„ Z9djdk„ Z:dldm„ Z;dndo„ Z<dpS )qÚQRCodeTestsc                 C   s   t ƒ | _d S ©N)r   Útmpdir©Úself© r   úQ/var/www/html/loop/nvenv/lib/python3.10/site-packages/qrcode/tests/test_qrcode.pyÚsetUp   s   zQRCodeTests.setUpc                 C   s   t  | j¡ d S r   )ÚosÚrmdirr   r   r   r   r   ÚtearDown   s   zQRCodeTests.tearDownc                 C   ó&   t jdd�}| d¡ |jdd� d S ©Né   ©ÚversionÚaF©Úfit©ÚqrcodeÚQRCodeÚadd_dataÚmake©r   Úqrr   r   r   Ú
test_basic!   ó   
zQRCodeTests.test_basicc                 C   r   )Né   r   r    Fr!   r#   r(   r   r   r   Ú
test_large&   r+   zQRCodeTests.test_largec                 C   ó   | j ttjdd� d S )Né)   r   ©ÚassertRaisesÚ
ValueErrorr$   r%   r   r   r   r   Útest_invalid_version+   ó   z QRCodeTests.test_invalid_versionc                 C   r.   )Néÿÿÿÿ©Úborderr0   r   r   r   r   Útest_invalid_border.   r4   zQRCodeTests.test_invalid_borderc                 C   s,   t jdd�}| d¡ | jt|jdd� d S )Nr   r   ÚabcdefghijklmnoFr!   )r$   r%   r&   r1   r   r'   r(   r   r   r   Útest_overflow1   ó   
zQRCodeTests.test_overflowc                 C   s.   t jdd�}tdƒ}| |¡ |jdd� d S r   )r$   r%   r   r&   r'   )r   r)   Údatar   r   r   Útest_add_qrdata6   s   
zQRCodeTests.test_add_qrdatac                 C   sL   t  ¡ }| d¡ | ¡  |  |jd¡ | d¡ | ¡  |  |jd¡ d S )Nr    r   Úbcdefghijklmnoé   ©r$   r%   r&   r'   ÚassertEqualr   r(   r   r   r   Útest_fit<   s   

zQRCodeTests.test_fitc                 C   óD   t  ¡ }|jddd� | ¡  |  |jd¡ |  |jd jt¡ d S )NÚ"1234567890123456789012345678901234r   ©Úoptimizer   )	r$   r%   r&   r'   rA   r   Ú	data_listÚmoder   r(   r   r   r   Útest_mode_numberE   ó
   zQRCodeTests.test_mode_numberc                 C   rC   )NÚABCDEFGHIJ1234567890r   rE   r   )	r$   r%   r&   r'   rA   r   rG   rH   r   r(   r   r   r   Útest_mode_alphaL   rJ   zQRCodeTests.test_mode_alphac                 C   ó6   t  ¡ }|jddd� | ¡  |  |jd jt¡ d S )Nú,r   rE   ©r$   r%   r&   r'   rA   rG   rH   r   r(   r   r   r   Útest_regression_mode_commaS   ó   z&QRCodeTests.test_regression_mode_commac                 C   sH   t  ¡ }|jdt dd� | ¡  |  |jd¡ |  |jd jt	¡ d S )NÚabcABCr   rE   r   )
r$   r%   r&   ÚUNICODE_TEXTr'   rA   r   rG   rH   r   r(   r   r   r   Útest_mode_8bitY   s
   zQRCodeTests.test_mode_8bitc                 C   rM   )NzABCDEFGHIJ1234567890
r   rE   rO   r(   r   r   r   Útest_mode_8bit_newline`   rQ   z"QRCodeTests.test_mode_8bit_newlineúRequires PILc                 C   s>   t  ¡ }| t¡ | ¡ }| t ¡ ¡ |  | 	¡ t
j¡ d S r   )r$   r%   r&   rS   Ú
make_imageÚsaveÚioÚBytesIOÚassertIsInstanceÚ	get_imageÚ	pil_Imager   ©r   r)   Úimgr   r   r   Útest_render_pilf   s
   
zQRCodeTests.test_render_pilc                 C   ó0   t  ¡ }| t¡ |jdd�}| t ¡ ¡ d S )NÚTransParent©Ú
back_color©r$   r%   r&   rS   rW   rX   rY   rZ   r^   r   r   r   Ú+test_render_pil_with_transparent_backgroundn   ó   
z7QRCodeTests.test_render_pil_with_transparent_backgroundc                 C   ra   )NÚredrc   re   r^   r   r   r   Ú#test_render_pil_with_red_backgroundu   rg   z/QRCodeTests.test_render_pil_with_red_backgroundc                 C   s2   t  ¡ }| t¡ |jddd�}| t ¡ ¡ d S )N)r   éÃ   éë   )é7   é_   é#   )rd   Ú
fill_colorre   r^   r   r   r   Ú%test_render_pil_with_rgb_color_tuples|   s   
z1QRCodeTests.test_render_pil_with_rgb_color_tuplesc                 C   s0   t jdd�}| t¡ | ¡ }| t ¡ ¡ d S )Né   ©Úmask_patternre   r^   r   r   r   Útest_render_with_patternƒ   s   
z$QRCodeTests.test_render_with_patternc                 C   s¨   |   t¡� tjdd� W d   ƒ n1 sw   Y  |   t¡� tjdd� W d   ƒ n1 s1w   Y  |   t¡� tjdd� W d   ƒ d S 1 sMw   Y  d S )Nústring patternrr   r5   é*   )r1   Ú	TypeErrorr$   r%   r2   r   r   r   r   Ú"test_make_image_with_wrong_patternŠ   s   ÿÿ"ÿz.QRCodeTests.test_make_image_with_wrong_patternc                 C   sž   t  ¡ }|  t¡� d|_W d   ƒ n1 sw   Y  |  t¡� d|_W d   ƒ n1 s/w   Y  |  t¡� d|_W d   ƒ d S 1 sHw   Y  d S )Nru   r5   é   )r$   r%   r1   rw   rs   r2   r(   r   r   r   Útest_mask_pattern_setter”   s   ÿÿ"ÿz$QRCodeTests.test_mask_pattern_setterc                 C   sr   |   t¡� tjdd� W d   ƒ n1 sw   Y  |   t¡� tjtd� W d   ƒ d S 1 s2w   Y  d S )NÚnot_BaseImage©Úimage_factory)r1   rw   r$   r%   ÚAssertionErrorÚdictr   r   r   r   Útest_qrcode_bad_factory    s   ÿ"ÿz#QRCodeTests.test_qrcode_bad_factoryc                 C   sN   G dd„ dt ƒ}tj|d�}| t¡ | ¡  |  |jj¡ |  |j	j¡ d S )Nc                   @   s   e Zd Ze ¡ Ze ¡ ZdS )z4QRCodeTests.test_qrcode_factory.<locals>.MockFactoryN)Ú__name__Ú
__module__Ú__qualname__r   ÚMockÚdrawrectÚ	new_imager   r   r   r   ÚMockFactory¨   s    r‡   r|   )
r   r$   r%   r&   rS   rW   Ú
assertTruer†   Úcalledr…   )r   r‡   r)   r   r   r   Útest_qrcode_factory§   s   
zQRCodeTests.test_qrcode_factoryc                 C   sT   t  ¡ }| t¡ |jtd�}|  | ¡ tj	¡ t
|j|j|jƒ | t ¡ ¡ d S )Nr|   )r$   r%   r&   rS   rW   r   r[   r\   ÚpngÚWriterÚprintÚwidthÚbox_sizer7   rX   rY   rZ   r^   r   r   r   Útest_render_pypng²   s   
zQRCodeTests.test_render_pypngc                 C   s’   t  ¡ }| t¡ |jtd�}|  | ¡ tj	¡ t
 ¡ }t
jd|dd�� | d¡ W d   ƒ n1 s4w   Y  | dd¡ |ddƒj ¡  d S )Nr|   zqrcode.image.pure.openT)Úcreateztest_file.pngÚwb)r$   r%   r&   rS   rW   r   r[   r\   r‹   rŒ   r   Ú	mock_openÚpatchrX   Úassert_called_once_withÚwriteÚassert_called)r   r)   r_   r“   r   r   r   Útest_render_pypng_to_str»   s   
ÿz$QRCodeTests.test_render_pypng_to_strc                 C   s6   t jt jd�}| t¡ |jtd�}| t 	¡ ¡ d S )N©Úerror_correctionr|   )
r$   r%   ÚERROR_CORRECT_Lr&   rS   rW   r   rX   rY   rZ   r^   r   r   r   Útest_render_styled_ImageÇ   s   
z$QRCodeTests.test_render_styled_Imagec                 C   sH   t jdddd�}tjtjd�}| t¡ |jt|d�}| 	t
 ¡ ¡ d S )NÚRGB©é
   rŸ   rh   ©Úcolorr™   )r}   Úembeded_image)r]   Únewr$   r%   r›   r&   rS   rW   r   rX   rY   rZ   )r   Úembeded_imgr)   r_   r   r   r   Ú%test_render_styled_with_embeded_imageÎ   s
   
z1QRCodeTests.test_render_styled_with_embeded_imagec                 C   sl   t j | jd¡}tjdddd�}| |¡ tjtj	d�}| 
t¡ |jt|d�}| t ¡ ¡ t  |¡ d S )Nztest.pngr�   rž   rh   r    r™   )r}   Úembeded_image_path)r   ÚpathÚjoinr   r]   r£   rX   r$   r%   r›   r&   rS   rW   r   rY   rZ   Úremove)r   Útmpfiler¤   r)   r_   r   r   r   Ú*test_render_styled_with_embeded_image_pathÖ   s   

z6QRCodeTests.test_render_styled_with_embeded_image_pathc                 C   ó<   t jt jd�}| t¡ |jtt ¡ d�}| 	t
 ¡ ¡ d S ©Nr™   )r}   Úmodule_drawer)r$   r%   r›   r&   rS   rW   r   r
   ÚSquareModuleDrawerrX   rY   rZ   r^   r   r   r   Ú,test_render_styled_with_square_module_drawerá   ó   
þz8QRCodeTests.test_render_styled_with_square_module_drawerc                 C   r¬   r­   )r$   r%   r›   r&   rS   rW   r   r
   ÚGappedSquareModuleDrawerrX   rY   rZ   r^   r   r   r   Ú,test_render_styled_with_gapped_module_drawerë   r±   z8QRCodeTests.test_render_styled_with_gapped_module_drawerc                 C   r¬   r­   )r$   r%   r›   r&   rS   rW   r   r
   ÚCircleModuleDrawerrX   rY   rZ   r^   r   r   r   Ú,test_render_styled_with_circle_module_drawerõ   r±   z8QRCodeTests.test_render_styled_with_circle_module_drawerc                 C   r¬   r­   )r$   r%   r›   r&   rS   rW   r   r
   ÚRoundedModuleDrawerrX   rY   rZ   r^   r   r   r   Ú-test_render_styled_with_rounded_module_drawerÿ   r±   z9QRCodeTests.test_render_styled_with_rounded_module_drawerc                 C   r¬   r­   )r$   r%   r›   r&   rS   rW   r   r
   ÚVerticalBarsDrawerrX   rY   rZ   r^   r   r   r   Ú3test_render_styled_with_vertical_bars_module_drawer	  r±   z?QRCodeTests.test_render_styled_with_vertical_bars_module_drawerc                 C   r¬   r­   )r$   r%   r›   r&   rS   rW   r   r
   ÚHorizontalBarsDrawerrX   rY   rZ   r^   r   r   r   Ú5test_render_styled_with_horizontal_bars_module_drawer  r±   zAQRCodeTests.test_render_styled_with_horizontal_bars_module_drawerc                 C   s@   t jt jd�}| t¡ t ¡ }|jt|d�}| 	t
 ¡ ¡ d S )Nr™   ©r}   Ú
color_mask)r$   r%   r›   r&   rS   r	   ÚSolidFillColorMaskrW   r   rX   rY   rZ   ©r   r)   Úmaskr_   r   r   r   Ú0test_render_styled_with_default_solid_color_mask  s
   
z<QRCodeTests.test_render_styled_with_default_solid_color_maskc                 C   sF   t jt jd�}| t¡ tjttd�}|j	t
|d�}| t ¡ ¡ d S )Nr™   ©rd   Úfront_colorr¼   )r$   r%   r›   r&   rS   r	   r¾   ÚWHITEÚREDrW   r   rX   rY   rZ   r¿   r   r   r   Ú(test_render_styled_with_solid_color_mask%  s
   
z4QRCodeTests.test_render_styled_with_solid_color_maskc                 C   sT   t jt jd�}| t¡ tjdtd�}|jt	|d�}| 
t ¡ ¡ |jdks(J ‚d S )Nr™   )r   r   r   r   rÂ   r¼   ÚRGBA)r$   r%   r›   r&   rS   r	   r¾   rÅ   rW   r   rX   rY   rZ   rH   r¿   r   r   r   Ú4test_render_styled_with_color_mask_with_transparency-  s   
ÿz@QRCodeTests.test_render_styled_with_color_mask_with_transparencyc                 C   óH   t jt jd�}| t¡ tjttt	d�}|j
t|d�}| t ¡ ¡ d S ©Nr™   )rd   Úcenter_colorÚ
edge_colorr¼   )r$   r%   r›   r&   rS   r	   ÚRadialGradiantColorMaskrÄ   ÚBLACKrÅ   rW   r   rX   rY   rZ   r¿   r   r   r   Ú2test_render_styled_with_radial_gradient_color_mask8  ó   
ÿz>QRCodeTests.test_render_styled_with_radial_gradient_color_maskc                 C   rÉ   rÊ   )r$   r%   r›   r&   rS   r	   ÚSquareGradiantColorMaskrÄ   rÎ   rÅ   rW   r   rX   rY   rZ   r¿   r   r   r   Ú2test_render_styled_with_square_gradient_color_maskB  rÐ   z>QRCodeTests.test_render_styled_with_square_gradient_color_maskc                 C   rÉ   )Nr™   )rd   Ú
left_colorÚright_colorr¼   )r$   r%   r›   r&   rS   r	   ÚHorizontalGradiantColorMaskrÄ   rÅ   rÎ   rW   r   rX   rY   rZ   r¿   r   r   r   Ú6test_render_styled_with_horizontal_gradient_color_maskL  rÐ   zBQRCodeTests.test_render_styled_with_horizontal_gradient_color_maskc                 C   rÉ   )Nr™   )rd   Ú	top_colorÚbottom_colorr¼   )r$   r%   r›   r&   rS   r	   ÚVerticalGradiantColorMaskrÄ   rÅ   rÎ   rW   r   rX   rY   rZ   r¿   r   r   r   Ú4test_render_styled_with_vertical_gradient_color_maskV  rÐ   z@QRCodeTests.test_render_styled_with_vertical_gradient_color_maskc                 C   sV   t jdddd�}tjtjd�}| t¡ tjt	|d�}|j
t|d�}| t ¡ ¡ d S )Nr�   rž   rh   r    r™   )rd   Úcolor_mask_imager¼   )r]   r£   r$   r%   r›   r&   rS   r	   ÚImageColorMaskrÄ   rW   r   rX   rY   rZ   )r   Úimg_maskr)   rÀ   r_   r   r   r   Ú(test_render_styled_with_image_color_mask`  s   
z4QRCodeTests.test_render_styled_with_image_color_maskc                 C   sV   t  ¡ }d}|j|dd� | ¡  |  dd„ |jD ƒtttttg¡ |  |j	d¡ d S )NÚA1abc12345def1HELLOaé   rE   c                 S   ó   g | ]}|j ‘qS r   ©rH   ©Ú.0Údr   r   r   Ú
<listcomp>o  ó    z-QRCodeTests.test_optimize.<locals>.<listcomp>r?   )
r$   r%   r&   r'   rA   rG   r   r   r   r   ©r   r)   Útextr   r   r   Útest_optimizei  s   ûþ
zQRCodeTests.test_optimizec                 C   sd   t  ¡ }d}|j|dd� | ¡  |  t|jƒd¡ |  dd„ |jD ƒtttg¡ |  |j	d¡ d S )NÚA1abc1234567def1HELLOaé   rE   rq   c                 S   rá   r   râ   rã   r   r   r   ræ   �  rç   z3QRCodeTests.test_optimize_short.<locals>.<listcomp>r?   )
r$   r%   r&   r'   rA   ÚlenrG   r   r   r   rè   r   r   r   Útest_optimize_shortz  s   þzQRCodeTests.test_optimize_shortc                 C   sD   t  ¡ }d}|j|dd� |  t|jƒd¡ |  |jd jt¡ d S )NÚABCDEFGHIJKé   rE   r   r   )r$   r%   r&   rA   rí   rG   rH   r   rè   r   r   r   Útest_optimize_longer_than_data†  s
   z*QRCodeTests.test_optimize_longer_than_datac                 C   s\   d}t  ¡ }| |¡ | ¡  |  |jd¡ t  ¡ }|j|dd� | ¡  |  |jd¡ d S )NÚúA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOarŸ   r   rE   é   r@   )r   ré   r)   r   r   r   Útest_optimize_size�  s   
zQRCodeTests.test_optimize_sizec                 C   s(   d}t j |¡}|  t|ƒt|ƒ¡ d S )Ns   hello)r$   Úutilr   rA   Úrepr)r   r<   Údata_objr   r   r   Útest_qrdata_reprš  s   zQRCodeTests.test_qrdata_reprc                 C   s`   t  ¡ }t d¡�}d |j_| jt|jdd� |  	|jj
¡ W d   ƒ d S 1 s)w   Y  d S )Nú
sys.stdoutT)Útty)r$   r%   r   r”   ÚisattyÚreturn_valuer1   ÚOSErrorÚprint_asciirˆ   r‰   ©r   r)   Úfake_stdoutr   r   r   Útest_print_ascii_stdoutŸ  s   "ýz#QRCodeTests.test_print_ascii_stdoutc                 C   sœ   t jdd�}t ¡ }|j|d� | ¡ }| ¡  d}|  |d t|ƒ… |¡ t ¡ }dd„ |_	|j|dd� | ¡ }| ¡  d	}|  |d t|ƒ… |¡ d S )
Nr   r6   ©Úoutu   â–ˆâ–€â–€â–€â–€â–€â–ˆc                   S   ó   dS ©NTr   r   r   r   r   Ú<lambda>°  ó    z.QRCodeTests.test_print_ascii.<locals>.<lambda>T)r  rú   u)   [48;5;232m[38;5;255mÂ â–„â–„â–„â–„â–„Â )
r$   r%   rY   ÚStringIOrþ   ÚgetvalueÚcloserA   rí   rû   )r   r)   ÚfÚprintedÚexpectedr   r   r   Útest_print_ascii¦  s   
ÿzQRCodeTests.test_print_asciic                 C   s\   t  ¡ }t d¡�}d |j_|  t|j¡ |  	|jj
¡ W d   ƒ d S 1 s'w   Y  d S )Nrù   )r$   r%   r   r”   rû   rü   r1   rý   Ú	print_ttyrˆ   r‰   rÿ   r   r   r   Útest_print_tty_stdout¹  s   "ýz!QRCodeTests.test_print_tty_stdoutc           	      C   s‚   t  ¡ }t ¡ }dd„ |_|j|d� | ¡ }| ¡  d}d}|d | }d}|d | | d	 | }|  |d t	|ƒ… |¡ d S )
Nc                   S   r  r  r   r   r   r   r   r  Ã  r  z,QRCodeTests.test_print_tty.<locals>.<lambda>r  z[1;47mz[40mz  z[0m
z.                                              z              )
r$   r%   rY   r  rû   r  r	  r
  rA   rí   )	r   r)   r  r  ÚBOLD_WHITE_BGÚBLACK_BGÚWHITE_BLOCKÚEOLr  r   r   r   Útest_print_ttyÀ  s   
ÿzQRCodeTests.test_print_ttyc                 C   s,   t jdd�}| d¡ |  | ¡ |j¡ d S )Nr   r6   Ú1)r$   r%   r&   rA   Ú
get_matrixÚmodulesr(   r   r   r   Útest_get_matrixÐ  r;   zQRCodeTests.test_get_matrixc                 C   sB   t jdd�}| d¡ dd„ | ¡ dd… D ƒ}|  ||j¡ d S )Nr   r6   r  c                 S   s   g | ]}|d d… ‘qS )r   r5   r   )rä   Úrowr   r   r   ræ   Ø  s    z6QRCodeTests.test_get_matrix_border.<locals>.<listcomp>r5   )r$   r%   r&   r  rA   r  )r   r)   Úmatrixr   r   r   Útest_get_matrix_borderÕ  s   
z"QRCodeTests.test_get_matrix_borderc                 C   r.   )Nr5   )r�   r0   r   r   r   r   Ú"test_negative_size_at_constructionÛ  r4   z.QRCodeTests.test_negative_size_at_constructionc                 C   s    t  ¡ }d|_|  t|j¡ d S )Nr5   )r$   r%   r�   r1   r2   rW   r(   r   r   r   Útest_negative_size_at_usageÞ  s   z'QRCodeTests.test_negative_size_at_usageN)=r�   r‚   rƒ   r   r   r*   r-   r3   r8   r:   r=   rB   rI   rL   rP   rT   rU   ÚunittestÚskipIfr]   r`   rf   ri   rp   rt   rx   rz   r€   rŠ   r�   r˜   rœ   r¥   r«   r°   r³   rµ   r·   r¹   r»   rÁ   rÆ   rÈ   rÏ   rÒ   rÖ   rÚ   rÞ   rê   rî   rñ   rô   rø   r  r  r  r  r  r  r  r  r   r   r   r   r      sœ    	





	




	
	
	
	
	
	




	
	
	
	
r   c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚShortcutTestrV   c                 C   s   t  d¡ d S )NÚimage)r$   r'   r   r   r   r   ÚrunTestå  s   zShortcutTest.runTestN)r�   r‚   rƒ   r  r   r]   r#  r   r   r   r   r!  ä  s    r!  )#rY   r   r  ÚwarningsÚtempfiler   r   r‹   r$   Úqrcode.utilÚqrcode.compat.pilr   r]   Úqrcode.exceptionsr   Úqrcode.image.baser   Úqrcode.image.purer   Úqrcode.image.styledpilr   Úqrcode.image.stylesr	   r
   r   r   r   r   rS   rÄ   rÎ   rÅ   ÚTestCaser   r!  r   r   r   r   Ú<module>   s2       M