U
    ;ßôgö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   ú</tmp/pip-unpacked-wheel-ij2mbwps/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   s&   t jdd}| d¡ |jdd d S ©Né   ©ÚversionÚaF©Zfit©ÚqrcodeÚQRCodeÚadd_dataÚmake©r   Úqrr   r   r   Ú
test_basic!   s    
zQRCodeTests.test_basicc                 C   s&   t jdd}| d¡ |jdd d S )Né   r   r   Fr    r!   r&   r   r   r   Ú
test_large&   s    
zQRCodeTests.test_largec                 C   s   | j ttjdd d S )Né)   r   ©ÚassertRaisesÚ
ValueErrorr"   r#   r   r   r   r   Útest_invalid_version+   s    z QRCodeTests.test_invalid_versionc                 C   s   | j ttjdd d S )Néÿÿÿÿ©Úborderr,   r   r   r   r   Útest_invalid_border.   s    zQRCodeTests.test_invalid_borderc                 C   s,   t jdd}| d¡ | jt|jdd d S )Nr   r   ZabcdefghijklmnoFr    )r"   r#   r$   r-   r   r%   r&   r   r   r   Útest_overflow1   s    
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   Zbcdefghijklmnoé   ©r"   r#   r$   r%   ÚassertEqualr   r&   r   r   r   Útest_fit<   s    

zQRCodeTests.test_fitc                 C   sD   t  ¡ }|jddd | ¡  |  |jd¡ |  |jd jt¡ d S )NZ"1234567890123456789012345678901234r   ©Úoptimizer   )	r"   r#   r$   r%   r9   r   Ú	data_listÚmoder   r&   r   r   r   Útest_mode_numberE   s
    zQRCodeTests.test_mode_numberc                 C   sD   t  ¡ }|jddd | ¡  |  |jd¡ |  |jd jt¡ d S )NZABCDEFGHIJ1234567890r   r;   r   )	r"   r#   r$   r%   r9   r   r=   r>   r   r&   r   r   r   Útest_mode_alphaL   s
    zQRCodeTests.test_mode_alphac                 C   s6   t  ¡ }|jddd | ¡  |  |jd jt¡ d S )Nú,r   r;   ©r"   r#   r$   r%   r9   r=   r>   r   r&   r   r   r   Útest_regression_mode_commaS   s    z&QRCodeTests.test_regression_mode_commac                 C   sH   t  ¡ }|jdt dd | ¡  |  |jd¡ |  |jd jt	¡ d S )NZabcABCr   r;   r   )
r"   r#   r$   ÚUNICODE_TEXTr%   r9   r   r=   r>   r   r&   r   r   r   Útest_mode_8bitY   s
    zQRCodeTests.test_mode_8bitc                 C   s6   t  ¡ }|jddd | ¡  |  |jd jt¡ d S )NzABCDEFGHIJ1234567890
r   r;   rB   r&   r   r   r   Útest_mode_8bit_newline`   s    z"QRCodeTests.test_mode_8bit_newlineúRequires PILc                 C   s>   t  ¡ }| t¡ | ¡ }| t ¡ ¡ |  | 	¡ t
j¡ d S r   )r"   r#   r$   rD   Ú
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   s0   t  ¡ }| t¡ |jdd}| t ¡ ¡ d S )NZTransParent©Ú
back_color©r"   r#   r$   rD   rH   rI   rJ   rK   rO   r   r   r   Ú+test_render_pil_with_transparent_backgroundn   s    
z7QRCodeTests.test_render_pil_with_transparent_backgroundc                 C   s0   t  ¡ }| t¡ |jdd}| t ¡ ¡ d S )NÚredrR   rT   rO   r   r   r   Ú#test_render_pil_with_red_backgroundu   s    
z/QRCodeTests.test_render_pil_with_red_backgroundc                 C   s2   t  ¡ }| t¡ |jddd}| t ¡ ¡ d S )N)r   éÃ   éë   )é7   é_   é#   )rS   Z
fill_colorrT   rO   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_patternrT   rO   r   r   r   Útest_render_with_patternƒ   s    
z$QRCodeTests.test_render_with_patternc              	   C   sj   |   t¡ tjdd W 5 Q R X |   t¡ tjdd W 5 Q R X |   t¡ tjdd W 5 Q R X d S )Nústring patternr_   r0   é*   )r-   Ú	TypeErrorr"   r#   r.   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 5 Q R X |  t¡ d|_W 5 Q R X |  t¡ d|_W 5 Q R X d S )Nrb   r0   é   )r"   r#   r-   rd   r`   r.   r&   r   r   r   Útest_mask_pattern_setter”   s    z$QRCodeTests.test_mask_pattern_setterc              	   C   sH   |   t¡ tjdd W 5 Q R X |   t¡ tjtd W 5 Q R X d S )NZnot_BaseImage©Úimage_factory)r-   rd   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   ZMockÚdrawrectÚ	new_imager   r   r   r   ÚMockFactory¨   s   rr   rh   )
r   r"   r#   r$   rD   rH   Ú
assertTruerq   Úcalledrp   )r   rr   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 )Nrh   )r"   r#   r$   rD   rH   r   rL   rM   ÚpngÚWriterÚprintÚwidthÚbox_sizer2   rI   rJ   rK   rO   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 5 Q R X | dd¡ |ddƒj ¡  d S )Nrh   zqrcode.image.pure.openT)Úcreateztest_file.pngÚwb)r"   r#   r$   rD   rH   r   rL   rM   rv   rw   r   Ú	mock_openÚpatchrI   Zassert_called_once_withÚwriteZassert_called)r   r'   rP   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©Zerror_correctionrh   )
r"   r#   ÚERROR_CORRECT_Lr$   rD   rH   r   rI   rJ   rK   rO   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‡   rV   ©Úcolorr‚   )ri   Zembeded_image)rN   Únewr"   r#   rƒ   r$   rD   rH   r   rI   rJ   rK   )r   Úembeded_imgr'   rP   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†   rV   rˆ   r‚   )ri   Zembeded_image_path)r   ÚpathÚjoinr   rN   rŠ   rI   r"   r#   rƒ   r$   rD   rH   r   rJ   rK   Úremove)r   Ztmpfiler‹   r'   rP   r   r   r   Ú*test_render_styled_with_embeded_image_pathÖ   s    

z6QRCodeTests.test_render_styled_with_embeded_image_pathc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S ©Nr‚   )ri   Zmodule_drawer)r"   r#   rƒ   r$   rD   rH   r   r
   ZSquareModuleDrawerrI   rJ   rK   rO   r   r   r   Ú,test_render_styled_with_square_module_drawerá   s    
þz8QRCodeTests.test_render_styled_with_square_module_drawerc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S r‘   )r"   r#   rƒ   r$   rD   rH   r   r
   ZGappedSquareModuleDrawerrI   rJ   rK   rO   r   r   r   Ú,test_render_styled_with_gapped_module_drawerë   s    
þz8QRCodeTests.test_render_styled_with_gapped_module_drawerc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S r‘   )r"   r#   rƒ   r$   rD   rH   r   r
   ZCircleModuleDrawerrI   rJ   rK   rO   r   r   r   Ú,test_render_styled_with_circle_module_drawerõ   s    
þz8QRCodeTests.test_render_styled_with_circle_module_drawerc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S r‘   )r"   r#   rƒ   r$   rD   rH   r   r
   ZRoundedModuleDrawerrI   rJ   rK   rO   r   r   r   Ú-test_render_styled_with_rounded_module_drawerÿ   s    
þz9QRCodeTests.test_render_styled_with_rounded_module_drawerc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S r‘   )r"   r#   rƒ   r$   rD   rH   r   r
   ZVerticalBarsDrawerrI   rJ   rK   rO   r   r   r   Ú3test_render_styled_with_vertical_bars_module_drawer	  s    
þz?QRCodeTests.test_render_styled_with_vertical_bars_module_drawerc                 C   s<   t jt jd}| t¡ |jtt ¡ d}| 	t
 ¡ ¡ d S r‘   )r"   r#   rƒ   r$   rD   rH   r   r
   ZHorizontalBarsDrawerrI   rJ   rK   rO   r   r   r   Ú5test_render_styled_with_horizontal_bars_module_drawer  s    
þ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‚   ©ri   Z
color_mask)r"   r#   rƒ   r$   rD   r	   ÚSolidFillColorMaskrH   r   rI   rJ   rK   ©r   r'   ÚmaskrP   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‚   ©rS   Zfront_colorr˜   )r"   r#   rƒ   r$   rD   r	   r™   ÚWHITEÚREDrH   r   rI   rJ   rK   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sPt‚d S )Nr‚   )r   r   r   r   r   r˜   ZRGBA)r"   r#   rƒ   r$   rD   r	   r™   rŸ   rH   r   rI   rJ   rK   r>   rj   rš   r   r   r   Ú4test_render_styled_with_color_mask_with_transparency-  s    
 ÿz@QRCodeTests.test_render_styled_with_color_mask_with_transparencyc                 C   sH   t jt jd}| t¡ tjttt	d}|j
t|d}| t ¡ ¡ d S ©Nr‚   )rS   Zcenter_colorZ
edge_colorr˜   )r"   r#   rƒ   r$   rD   r	   ZRadialGradiantColorMaskrž   ÚBLACKrŸ   rH   r   rI   rJ   rK   rš   r   r   r   Ú2test_render_styled_with_radial_gradient_color_mask8  s    
  ÿz>QRCodeTests.test_render_styled_with_radial_gradient_color_maskc                 C   sH   t jt jd}| t¡ tjttt	d}|j
t|d}| t ¡ ¡ d S r¢   )r"   r#   rƒ   r$   rD   r	   ZSquareGradiantColorMaskrž   r£   rŸ   rH   r   rI   rJ   rK   rš   r   r   r   Ú2test_render_styled_with_square_gradient_color_maskB  s    
  ÿz>QRCodeTests.test_render_styled_with_square_gradient_color_maskc                 C   sH   t jt jd}| t¡ tjttt	d}|j
t|d}| t ¡ ¡ d S )Nr‚   )rS   Z
left_colorZright_colorr˜   )r"   r#   rƒ   r$   rD   r	   ZHorizontalGradiantColorMaskrž   rŸ   r£   rH   r   rI   rJ   rK   rš   r   r   r   Ú6test_render_styled_with_horizontal_gradient_color_maskL  s    
  ÿzBQRCodeTests.test_render_styled_with_horizontal_gradient_color_maskc                 C   sH   t jt jd}| t¡ tjttt	d}|j
t|d}| t ¡ ¡ d S )Nr‚   )rS   Z	top_colorZbottom_colorr˜   )r"   r#   rƒ   r$   rD   r	   ZVerticalGradiantColorMaskrž   rŸ   r£   rH   r   rI   rJ   rK   rš   r   r   r   Ú4test_render_styled_with_vertical_gradient_color_maskV  s    
  ÿ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†   rV   rˆ   r‚   )rS   Zcolor_mask_imager˜   )rN   rŠ   r"   r#   rƒ   r$   rD   r	   ZImageColorMaskrž   rH   r   rI   rJ   rK   )r   Zimg_maskr'   r›   rP   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 )NZA1abc12345def1HELLOaé   r;   c                 S   s   g | ]
}|j ‘qS r   ©r>   ©Ú.0Údr   r   r   Ú
<listcomp>o  s     z-QRCodeTests.test_optimize.<locals>.<listcomp>r7   )
r"   r#   r$   r%   r9   r=   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 )NZA1abc1234567def1HELLOaé   r;   r^   c                 S   s   g | ]
}|j ‘qS r   rª   r«   r   r   r   r®     s     z3QRCodeTests.test_optimize_short.<locals>.<listcomp>r7   )
r"   r#   r$   r%   r9   Úlenr=   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 )NZABCDEFGHIJKé   r;   r   r   )r"   r#   r$   r9   r³   r=   r>   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 )NZúA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOaA1abc12345123451234512345def1HELLOHELLOHELLOHELLOar‡   r   r;   é   r8   )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   r9   Úrepr)r   r5   Zdata_objr   r   r   Útest_qrdata_reprš  s    zQRCodeTests.test_qrdata_reprc              	   C   sJ   t  ¡ }t d¡.}d |j_| jt|jdd |  	|jj
¡ W 5 Q R X d S )Nú
sys.stdoutT)Útty)r"   r#   r   r   ÚisattyÚreturn_valuer-   ÚOSErrorÚprint_asciirs   rt   ©r   r'   Z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   r1   ©Úoutu   â–ˆâ–€â–€â–€â–€â–€â–ˆc                   S   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#   rJ   ÚStringIOrÁ   ÚgetvalueÚcloser9   r³   r¾   )r   r'   ÚfÚprintedÚexpectedr   r   r   Útest_print_ascii¦  s    
ÿzQRCodeTests.test_print_asciic              	   C   sF   t  ¡ }t d¡*}d |j_|  t|j¡ |  	|jj
¡ W 5 Q R X d S )Nr¼   )r"   r#   r   r   r¾   r¿   r-   rÀ   Ú	print_ttyrs   rt   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   s   dS 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#   rJ   rÉ   r¾   rÐ   rÊ   rË   r9   r³   )	r   r'   rÌ   rÍ   ZBOLD_WHITE_BGZBLACK_BGZWHITE_BLOCKZEOLrÎ   r   r   r   Útest_print_ttyÀ  s    
ÿzQRCodeTests.test_print_ttyc                 C   s,   t jdd}| d¡ |  | ¡ |j¡ d S )Nr   r1   Ú1)r"   r#   r$   r9   Ú
get_matrixÚmodulesr&   r   r   r   Útest_get_matrixÐ  s    
zQRCodeTests.test_get_matrixc                 C   sB   t jdd}| d¡ dd„ | ¡ dd… D ƒ}|  ||j¡ d S )Nr   r1   rÓ   c                 S   s   g | ]}|d d… ‘qS )r   r0   r   )r¬   Úrowr   r   r   r®   Ø  s     z6QRCodeTests.test_get_matrix_border.<locals>.<listcomp>r0   )r"   r#   r$   rÔ   r9   rÕ   )r   r'   Zmatrixr   r   r   Útest_get_matrix_borderÕ  s    
z"QRCodeTests.test_get_matrix_borderc                 C   s   | j ttjdd d S )Nr0   )rz   r,   r   r   r   r   Ú"test_negative_size_at_constructionÛ  s    z.QRCodeTests.test_negative_size_at_constructionc                 C   s    t  ¡ }d|_|  t|j¡ d S )Nr0   )r"   r#   rz   r-   r.   rH   r&   r   r   r   Útest_negative_size_at_usageÞ  s    z'QRCodeTests.test_negative_size_at_usageN)=rm   rn   ro   r   r   r(   r*   r/   r3   r4   r6   r:   r?   r@   rC   rE   rF   ÚunittestÚskipIfrN   rQ   rU   rW   r]   ra   re   rg   rl   ru   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 )ÚShortcutTestrG   c                 C   s   t  d¡ d S )NÚimage)r"   r%   r   r   r   r   ÚrunTestå  s    zShortcutTest.runTestN)rm   rn   ro   rÛ   rÜ   rN   rß   r   r   r   r   rÝ   ä  s   rÝ   )#rJ   r   rÛ   ÚwarningsÚtempfiler   r   rv   r"   Zqrcode.utilZqrcode.compat.pilr   rN   Zqrcode.exceptionsr   Zqrcode.image.baser   Zqrcode.image.purer   Zqrcode.image.styledpilr   Zqrcode.image.stylesr	   r
   r   r   r   r   rD   rž   r£   rŸ   ZTestCaser   rÝ   r   r   r   r   Ú<module>   s0      M