
    i_                        d dl Z d dl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	m
Z
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 d d	lmZ d d
lmZ ej        dk     rd dlmZ nd dlmZ ej        dk    rd dlm Z! nd dlm!Z! 	 d dl"m#Z# n# e$$ r	 d dl%m&Z# Y nw xY w ed           G d de                      Z'd Z(dS )    N)settings)CaptchaFieldCaptchaTextInput)CaptchaStore)
management)ImproperlyConfigured)TestCaseoverride_settings)timezone)Image)
LogCapture)   
   )reverse)   r   )gettext_lazy)ugettext_lazy)StringIO)BytesIOzcaptcha.tests.urls)ROOT_URLCONFc                   f   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej        ej        dk     d          d             Z ej        ej        dk     d          d             Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d(S ))CaptchaCasec                    i | _         t          j        | _        t          j        | _        t          j        | _        g d}t          j	        
                    d          rBdt          _        dt          _        |                    d           |                    d           |D ]{} t          j        |                      \  }}t          j                            ||          \  | j         |                    dd          d	                             d
d          <   }| t          j                                \  }}t          j                            ||          \  | j         d<   }| j         d         | _        d S )N)captcha.helpers.math_challengez%captcha.helpers.random_char_challengez!captcha.helpers.unicode_challengez/usr/share/dict/wordsz;-,.zcaptcha.helpers.word_challengez4captcha.helpers.huge_words_and_punctuation_challenge	challengeresponse.r   
_challenge_storedefault_store)storesr   CAPTCHA_OUTPUT_FORMAT,_CaptchaCase__current_settings_output_formatCAPTCHA_WORDS_DICTIONARY)_CaptchaCase__current_settings_dictionaryCAPTCHA_PUNCTUATION*_CaptchaCase__current_settings_punctuationospathexistsappend_callable_from_stringr   objectsget_or_creatersplitreplaceget_challenger"   )selftested_helpershelperr   r   _s         K/srv/django_bis/venv311/lib/python3.11/site-packages/captcha/tests/tests.pysetUpzCaptchaCase.setUp&   sq   080N--5-N*.6.J+
 
 

 7>>122 	Z0GH-+1H(!!"BCCC!!"XYYY$ 	[ 	[F"H("@"H"H"J"JIx $22YQY2ZZFMM#q11"5==lHUUV6h46688	8*6*>*L*L( +M +
 +
'O$a "[9    c                 l    | j         t          _        | j        t          _        | j        t          _        d S )N)r%   r   r$   r'   r&   r)   r(   r4   s    r8   tearDownzCaptchaCase.tearDownC   s)    )-)N&,0,N)'+'J$$$r:   c                     t          j        dt          |j                            d         }t          j                            |          j        }||fS )Nvalue="([0-9a-f]+)"r   hashkey)refindallstrcontentr   r/   getr   r4   rhash_r   s       r8   __extract_hash_and_responsez'CaptchaCase.__extract_hash_and_responseH   sG    
13qy>>BB1E'++E+::Chr:   c           	      ~   d | j                                         D             D ]}| j                            t	          dt          |                              }|                     |j        d           |                     |	                    d                     |                     |d         d           d S )Nc                     g | ]	}|j         
S  r@   .0stores     r8   
<listcomp>z*CaptchaCase.test_image.<locals>.<listcomp>N       DDDeEMDDDr:   captcha-imagekeykwargs   content-type	image/png)
r#   valuesclientrF   r   dictassertEqualstatus_code
assertTrue
has_headerr4   rU   r   s      r8   
test_imagezCaptchaCase.test_imageM   s    DDt{/A/A/C/CDDD 	D 	DC{wtPS}}}'U'U'UVVHX13777OOH//??@@@Xn5{CCCC		D 	Dr:   c           	      ,   t           j        sd S | j                            d          j        | j                            d          j        | j        j        fD ]}| j                            t          dt          |                              }| 	                    |j
        d           |                     |j        j        dk               |                     |                    d                     | 	                    |d         d           d S )	N
math_storezcaptcha-audiorT   rV   rX   i   rY   z	audio/wav)r   CAPTCHA_FLITE_PATHr#   rF   rA   r"   r\   r   r]   r^   r_   r`   ranged_filesizera   rb   s      r8   
test_audiozCaptchaCase.test_audioT   s   * 	FKOOL))1KOOL))1&
 		D 		DC
 {wtPS}}}'U'U'UVVHX13777OOH05<===OOH//??@@@Xn5{CCCC		D 		Dr:   c           	         | j                             t          d                    }|                     |j        d           |                     |          \  }}| j                             t          d          t          ||dd                    }|                     |j        d           |                     t          |j
                                      d          dk               | j                             t          d          t          ||dd                    }|                     |j        d           |                     t          |j
                                      d          dk               d S )Ncaptcha-testrX   xxxasasd@asdasd.com	captcha_0	captcha_1subjectsenderForm validatedr   r\   rF   r   r^   r_   '_CaptchaCase__extract_hash_and_responsepostr]   r`   rD   rE   findassertFalserG   s       r8   test_form_submitzCaptchaCase.test_form_submitb   sd   KOOGN3344,,,::1==xKN##")	  
 
 	,,,AI++,<==ABBBKN##")	  
 
 	,,,QY,,-=>>BCCCCCr:   c           	         | j                             t          d                    }|                     |j        d           |                     |          \  }}| j                             t          d          t          ||dd                    }|                     |j        d           |                     t          |j
                                      d          dk               | j                             t          d          t          ||dd                    }|                     |j        d           |                     t          |j
                                      d          dk               d S )Ncaptcha-test-model-formrX   rl   rm   rn   rs   r   rt   rG   s       r8   test_modelformzCaptchaCase.test_modelform   sg   KOOG$=>>??,,,::1==xK-..")	  
 
 	,,,AI++,<==ABBBK-..")	  
 
 	,,,QY,,-=>>BCCCCCr:   c           
      P   dD ]}| j                             t          |                    }|                     |j        d           | j                             t          |          t          dddd                    }|                     |dd	t          d
                     d S )Nrk   r{   rX   abcwrong responserl   rm   rn   formcaptchaInvalid CAPTCHA	r\   rF   r   r^   r_   rv   r]   assertFormErrorr   r4   urlnamerH   s      r8   test_wrong_submitzCaptchaCase.test_wrong_submit   s    B 	Y 	YG 0 011AQ]C000    #.!-	   A   FI}EV7W7WXXXX	Y 	Yr:   c           	      P   t          j                    t          j        d          z
  | j        _        | j                                         | j        j        }| j        	                    t          d          t          || j        j        dd                    }|                     |j        d           |                     dt!          |j                  v            	 t$          j                            |	           |                                  d S # t,          $ r Y d S w xY w)
N   )minutesrk   rl   rm   rn   rX   rs   r@   )r   nowdatetime	timedeltar"   
expirationsaverA   r\   rv   r   r]   r   r^   r_   rx   rD   rE   r   r/   rF   fail	Exception)r4   rI   rH   s      r8   test_deleted_expiredz CaptchaCase.test_deleted_expired   s   (09KTU9V9V9V(V%!!!"*KN##,5)	  
 
 	,,,)S^^;<<<	 $$U$333IIKKKKK 	 	 	DD	s   !4D 
D%$D%c                    | j                             t          d                    }|                     |j        d           | j                             t          d          t          dd                    }|                     |ddd           | j                             t          d          t          dd	                    }|                     |ddt          d
                     d S )Nz!captcha-test-custom-error-messagerX   r   r   )ro   rp   r   r   zTEST CUSTOM ERROR MESSAGE zThis field is required.r   r4   rH   s     r8   test_custom_error_messagez%CaptchaCase.test_custom_error_message   s    KOOG$GHHII,,,K7885,<===
 
 	Q	3NOOOK7885B///
 
 	vy-0I"J"J	
 	
 	
 	
 	
r:   c                     t           j                            dd           	 t           j                            dd           d S # t          $ r |                                  Y d S w xY w)Nrl   r   )r   r/   creater   r   r<   s    r8   test_repeated_challengez#CaptchaCase.test_repeated_challenge   ss    ##ee#DDD	 ''%%'HHHHH 	 	 	IIKKKKKK	s   !A A('A(c           
      z   t           j        }dD ]}dt           _        | j                            t	          |                    }| j                            t	          |                    }|                     |j        d           |                     |j        d           t          j        dt          |j
                            r.t          j        dt          |j
                            d         }n|                                  t          j        dt          |j
                            r.t          j        dt          |j
                            d         }n|                                  	 t          j                            |          }t          j                            |          }n$# t          $ r |                                  Y nw xY w|                     |j        |j        k               |                     |j        |j        k               |                     ||k               | j                            t	          |          t'          ||j        dd	                    }|                     |j        d           |                     t          |j
                                      d
          dk               	 t          j                            |          }n$# t          $ r |                                  Y nw xY w| j                            t	          |          t'          ||j        dd	                    }|                     |j        d           |                     t          |j
                                      d
          dk               |t           _        d S )Nr~   captcha.tests.trivial_challengerX   r?   r   r@   rl   rm   rn   rs   )r   CAPTCHA_CHALLENGE_FUNCTr\   rF   r   r^   r_   rB   rC   rD   rE   r   r   r/   r   r`   pkr   rv   r]   rw   )	r4   (_CaptchaCase__current_challange_functionr   r1r2hash_1hash_2store_1store_2s	            r8   #test_repeated_challenge_form_submitz/CaptchaCase.test_repeated_challenge_form_submit   sK   '/'G$B 5	H 5	HG/PH,!1!122B!1!122BR^S111R^S111z0#bj//BB $:C
OOLLQO		z0#bj//BB $:C
OOLLQO		&.2262BB&.2262BB   		 OOGJ'*4555OOG,0@@AAAOOFf,---!!  $%.!-	   B R^S111OOC
OO001ABBQFGGG&.2262BB   		 !!  $%.!-	   B R^S111OOC
OO001ABBQFGGGG+G(((s%   5A F66GG K22LLc                     dD ]y}dt           _        | j                            t	          |                    }|                     |j        d           |                     dt          |j	                  v            zd S )Nr~   zB%(image)s<p>Hello, captcha world</p>%(hidden_field)s%(text_field)srX   z<p>Hello, captcha world</p>)
r   r$   r\   rF   r   r^   r_   r`   rD   rE   r   s      r8   test_output_formatzCaptchaCase.test_output_format  s    B 	M 	MGT *  0 011AQ]C000OO9S^^KLLLL	M 	Mr:   c           	         dD ]}dt           _        	 t          j        d          5 }| j                            t          |                     t          |          dk    sJ |                     dt          |d         j
                  v            |                                  d d d            n# 1 swxY w Y   # t          $ r.}|                     dt          |          v            Y d }~d }~ww xY wd S )Nr~   z	%(image)sT)recordr   r$   r   )r   r$   warningscatch_warningsr\   rF   r   lenr`   rD   messager   r   )r4   r   wes       r8   test_invalid_output_formatz&CaptchaCase.test_invalid_output_format  sH   B 
	C 
	CG-8H*C,D999  QKOOGG$4$4555q66Q;;;;OO$;s1R5=?Q?Q$QRRRIIKKK	                              ( C C C 73q66 ABBBBBBBBC
	C 
	Cs;   B?B B3'B?3B7	7B?:B7	;B??
C7	$C22C7c                 ^   dt           _        | j                            t	          d                    }|                     dt          |j                  v            | j                            t	          d                    }|                     dt          |j                  v            d S )Nz@%(image)s testCustomFormatString %(hidden_field)s %(text_field)srk   testCustomFormatStringtest_per_form_formattestPerFieldCustomFormatStringr   r$   r\   rF   r   r`   rD   rE   r   s     r8   r   z CaptchaCase.test_per_form_format,  s    N 	& KOOGN33440C	NNBCCCKOOG$:;;<<8C	NNJKKKKKr:   c                     | j                             t          d                    }|                     |          \  }}|                     |d           d S )Ntest_custom_generator111111)r\   rF   r   ru   r^   rG   s       r8   r   z!CaptchaCase.test_custom_generator5  sQ    KOOG$;<<==::1==x9-----r:   c                     dt           _        | j                            t	          d                    }|                     dt          |j                  v            d S )N)%(image)s %(hidden_field)s %(text_field)srk   z<label for="id_captcha_1"r   r   s     r8   test_issue31_proper_abelz$CaptchaCase.test_issue31_proper_abel:  sK    )T&KOOGN33443s19~~EFFFFFr:   c                 P   | j                             t          d          d          }	 t          j        t          |j        d                    }|                     d|v            |                     d|v            d S # t          $ r | 	                                 Y d S w xY w)Nzcaptcha-refreshXMLHttpRequest)HTTP_X_REQUESTED_WITHascii)encoding	image_url	audio_url)
r\   rF   r   jsonloadsrD   rE   r`   r   r   )r4   rH   new_datas      r8   test_refresh_viewzCaptchaCase.test_refresh_view?  s    KOO%&&>N  
 
	z#ai'"B"B"BCCHOOK83444OOK8344444 	 	 	IIKKKKKK	s   AB B%$B%c           	         d | j                                         D             D ]}| j                            t	          dt          |                              }|                     |                    d                     |                     |d                                                    |                     t          |d                              d S )Nc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z3CaptchaCase.test_content_length.<locals>.<listcomp>K  rR   r:   rS   rT   rV   zcontent-length)
r#   r[   r\   rF   r   r]   r`   ra   isdigitintrb   s      r8   test_content_lengthzCaptchaCase.test_content_lengthJ  s    DDt{/A/A/C/CDDD 	= 	=C{wtPS}}}'U'U'UVVHOOH//0@AABBBOOH%56>>@@AAAOOC)9 :;;<<<<		= 	=r:   c                 b    dt           _        t          ddi          }t          |           dS )z
        This test covers a default django field and widget behavior
        It not assert anything. If something is wrong it will raise a error!
        r   classrequired)attrs)widgetN)r   r$   r   r   )r4   r   s     r8   !test_issue12_proper_instantiationz-CaptchaCase.test_issue12_proper_instantiationQ  s9    
 *U&!*(=>>>F######r:   c           	      X   t           j        }dt           _        | j                            t	          d                    }|                     |j        d           | j                            t	          d          t          dddd                    }| 	                    |d	d
t          d                     dt           _        | j                            t	          d                    }|                     |j        d           | j                            t	          d          t          dddd                    }| 	                    |d	d
t          d                     | j                            t	          d                    }|                     |j        d           | j                            t	          d          t          dddd                    }|                     t          |j                                      d          dk               |t           _        d S )NFrk   rX   r   r   rl   rm   rn   r   r   r   Tpassedrs   r   )r   CAPTCHA_TEST_MODEr\   rF   r   r^   r_   rv   r]   r   r   r`   rD   rE   rw   )r4   '_CaptchaCase__current_test_mode_settingrH   s      r8   test_test_mode_issue15z"CaptchaCase.test_test_mode_issue15Z  s   &.&@#%*"KOOGN3344,,,KN##*)	  
 
 	Q	=AR3S3STTT%)"KOOGN3344,,,KN##*)	  
 
 	Q	=AR3S3STTTKOOGN3344,,,KN##")	  
 
 	AI++,<==ABBB%@"""r:   c                 6    dd l }|                                 d S )Nr   )r   get_version)r4   r   s     r8   test_get_versionzCaptchaCase.test_get_version  s#    r:   c           	         | j                             t          d                    }|                     |j        d           |                     |          \  }}| j                             t          d          t          dd                    }|                     |j        d           |                     t          |j
                                      d          dk               | j                             t          d                    }|                     |j        d           |                     |          \  }}| j                             t          d          t          ||dd                    }|                     |j        d           |                     t          |j
                                      d          dk               d S )	Nzcaptcha-test-non-requiredrX   rl   rm   )rq   rr   rs   r   rn   )r\   rF   r   r^   r_   ru   rv   r]   r`   rD   rE   rw   rG   s       r8   test_missing_valuezCaptchaCase.test_missing_value  s   KOOG$?@@AA,,,::1==x K/00'9:::
 
 	,,,AI++,<==ABBB KOOG$?@@AA,,,::1==xK/00")	  
 
 	,,,AI++,<==ABBBBBr:   )r      zTest only for Django < 1.11c                     | j                             t          d                    }d}|                     ||d           d S )Nrk   z<input type="text" name="captcha_1" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" id="id_captcha_1" />Thtmlr\   rF   r   assertContainsr4   rH   captcha_inputs      r8    test_autocomplete_off_django_110z,CaptchaCase.test_autocomplete_off_django_110  sJ    KOOGN33448 	 	A}488888r:   zTest only for Django >= 1.11c                     | j                             t          d                    }d}|                     ||d           d S )Nrk   z<input type="text" name="captcha_1" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" id="id_captcha_1" required />Tr   r   r   s      r8   test_autocomplete_offz!CaptchaCase.test_autocomplete_off  sK    KOOGN3344A 	 	A}488888r:   c                     | j                             t          d                    }|                     dt	          |j                  v            |                     dt	          |j                  v            d S )Nrk   zkautocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" type="hidden" name="captcha_0"z}autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="id_captcha_0" name="captcha_0" type="hidden")r\   rF   r   rx   rD   rE   r   s     r8   %test_autocomplete_not_on_hidden_inputz1CaptchaCase.test_autocomplete_not_on_hidden_input  s    KOOGN3344y19~~	
 	
 	
 	 L19~~	
 	
 	
 	
 	
r:   c           	         t           j        }dt           _        d | j                                        D             D ]}| j                            t          dt          |                              }|                     |j	        d           | 
                    |                    d                     |                     |d         d           |t           _        d S )	Ntransparentc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z;CaptchaCase.test_transparent_background.<locals>.<listcomp>  rR   r:   rS   rT   rV   rX   rY   rZ   )r   CAPTCHA_BACKGROUND_COLORr#   r[   r\   rF   r   r]   r^   r_   r`   ra   r4   r   rU   r   s       r8   test_transparent_backgroundz'CaptchaCase.test_transparent_background  s    &.&G#,9)DDt{/A/A/C/CDDD 	D 	DC{wtPS}}}'U'U'UVVHX13777OOH//??@@@Xn5{CCCC,G)))r:   c           	         d | j                                         D             D ]}| j                            t	          dt          |                              }|                     |j        d           t          j	        
                    |                                           | j                            t	          dt          |                              }|                     |j        d           d S )Nc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z@CaptchaCase.test_expired_captcha_returns_410.<locals>.<listcomp>  rR   r:   rS   rT   rV   rX   r@   i  )r#   r[   r\   rF   r   r]   r^   r_   r   r/   filterdeleterb   s      r8    test_expired_captcha_returns_410z,CaptchaCase.test_expired_captcha_returns_410  s    DDt{/A/A/C/CDDD 	8 	8C{wtPS}}}'U'U'UVVHX13777 '''44;;==={wtPS}}}'U'U'UVVHX137777	8 	8r:   c                    | j                             t          d                    }|                     dt	          |j                  v            |                     dt	          |j                  v            |                     dt	          |j                  v            |                     dt	          |j                  v            d S )Nzcaptcha-test-id-prefixz2<label for="form1_id_captcha1_1">Captcha1:</label>zid="form1_id_captcha1_1"z2<label for="form2_id_captcha2_1">Captcha2:</label>zid="form2_id_captcha2_1")r\   rF   r   r`   rD   rE   r   s     r8   test_id_prefixzCaptchaCase.test_id_prefix  s    KOOG$<==>>@C	NNR	
 	
 	
 	2c!)nnDEEE@C	NNR	
 	
 	
 	2c!)nnDEEEEEr:   c           	      D   t           j        }d | j                                        D             D ]}dt           _        | j                            t          dt          |                              }|                     |j	        d           | 
                    |                    d                     |                     |d         d           |                     t          j        t          |j                            j        d           |t           _        d S )	Nc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z/CaptchaCase.test_image_size.<locals>.<listcomp>  rR   r:   )   a   rS   rT   rV   rX   rY   rZ   )r   CAPTCHA_IMAGE_SIZEr#   r[   r\   rF   r   r]   r^   r_   r`   ra   r   openr   rE   rh   r   s       r8   test_image_sizezCaptchaCase.test_image_size  s    &.&A#DDt{/A/A/C/CDDD 	U 	UC*3H'{wtPS}}}'U'U'UVVHX13777OOH//??@@@Xn5{CCCUZ1A(B(BCCH)TTTT&A###r:   c           	      `   t           j                            t           j                            t                    ddd          }t
          j        }|t
          _        d | j                                        D             D ]p}| j	        
                    t          dt          |                              }|                     |j        d           |                     |d	         d
           q|||gt
          _        d | j                                        D             D ]p}| j	        
                    t          dt          |                              }|                     |j        d           |                     |d	         d
           qdt
          _        d | j                                        D             D ]^}	 | j	        
                    t          dt          |                              }|                                  O# t           $ r Y [w xY w|t
          _        d S )Nz..fontszVera.ttfc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z3CaptchaCase.test_multiple_fonts.<locals>.<listcomp>  rR   r:   rS   rT   rV   rX   rY   rZ   c                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z3CaptchaCase.test_multiple_fonts.<locals>.<listcomp>  rR   r:   Fc                     g | ]	}|j         
S rM   r@   rN   s     r8   rQ   z3CaptchaCase.test_multiple_fonts.<locals>.<listcomp>  rR   r:   )r*   r+   joindirname__file__r   CAPTCHA_FONT_PATHr#   r[   r\   rF   r   r]   r^   r_   r   r   )r4   verar   rU   r   s        r8   test_multiple_fontszCaptchaCase.test_multiple_fonts  s   w||BGOOH55tWjQQ&.&@#%)"DDt{/A/A/C/CDDD 	D 	DC{wtPS}}}'U'U'UVVHX13777Xn5{CCCC&*D$%7"DDt{/A/A/C/CDDD 	D 	DC{wtPS}}}'U'U'UVVHX13777Xn5{CCCC%*"DDt{/A/A/C/CDDD 	 	C;??7?4TW===+Y+Y+YZZ		'    &A"""s   AH
HHc                 X   t           j        }t           j        }dt           _        dt           _        dD ]^}dt           _        | j                            t          |                    }|                     dt          |j	                  v            _|t           _        |t           _        d S )Nzcaptcha_test/image.htmlzcaptcha/field.htmlr~   r   zcaptcha-template-test)
r   CAPTCHA_IMAGE_TEMPLATECAPTCHA_FIELD_TEMPLATEr   r\   rF   r   r`   rD   rE   )r4   r   $_CaptchaCase__current_field_templater   rH   s        r8   test_template_overridesz#CaptchaCase.test_template_overrides  s    &.&E##+#B *C'*>'B 	G 	GG/PH, 0 011AOO3s19~~EFFFF*E'*B'''r:   c                    t           j        }dt           _        d} t          j        |                      \  }}t           j        |vr- t          j        |                      \  }}t           j        |v-|                     |t	          t          |                    t           j        d          d d                                        |t           _        d S )N~r   *r   )r   CAPTCHA_MATH_CHALLENGE_OPERATORr.   r^   rD   evalr2   )r4   r   r6   r   r   s        r8   test_math_challengezCaptchaCase.test_math_challenge  s    &.&N#3601Dh<VDDFF	86iGG"H("@"H"H"J"JIx 6iGG 	%%h&NPSTTUXVXUXY  	
 	
 	
 4O000r:   c                    t           j        }t           j        }t           j        }dt           _        dt           _        dt           _        t          j                                                                         d}t	          j        |           | 	                    t          j        
                                |           t          j                            dd          }t	          j                    }|                     ||           | 	                    t          j        
                                |           |t           _        |t           _        |t           _        d S )NTr   Z   r   )countrA   )flat)r   CAPTCHA_GET_FROM_POOLCAPTCHA_GET_FROM_POOL_TIMEOUTCAPTCHA_TIMEOUTr   r/   allr   create_poolr^   r  values_listpickassertIn)r4   0_CaptchaCase__current_test_get_from_pool_setting8_CaptchaCase__current_test_get_from_pool_timeout_setting*_CaptchaCase__current_test_timeout_setting	POOL_SIZEpoolrandom_picks          r8   test_get_from_poolzCaptchaCase.test_get_from_pool+  s   /7/M,2 	5 *2)A&)-&12.#%   ""))+++	 y1111-3355yAAA#//	/EE"'))k4(((-3355yAAA)M&8 	. $B   r:   c                     t           j                                                                         d}t	          j        d|d           |                     t           j                                        |           d S )Nr   captcha_create_poolr   )	pool_size	verbosity)r   r/   r  r   r   call_commandr^   r  )r4   r#  s     r8   test_captcha_create_poolz$CaptchaCase.test_captcha_create_poolC  sm      ""))+++	 5VWXXXX-3355yAAAAAr:   c                    t           j        }dt           _        t          j                                                                         t                      5 }t          j                     d d d            n# 1 swxY w Y   |                    d           | 	                    t          j        
                                d           |t           _        d S )NT)zcaptcha.modelsERRORz,Couldn't get a captcha from pool, generatingr   )r   r  r   r/   r  r   r   r  checkr^   r  )r4   r   logs      r8   test_empty_pool_fallbackz$CaptchaCase.test_empty_pool_fallbackI  s    /7/M,)-&  ""))+++\\ 	 S	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 		W	
 	
 	
 	-3355q999)M&&&s   A77A;>A;N),__name__
__module____qualname__r9   r=   ru   rc   ri   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittest
skipUnlessdjangoVERSIONr   skipIfr   r   r   r   r   r   r  r  r  r&  r,  r1  rM   r:   r8   r   r   $   s       : : ::K K K
  
D D DD D DD D D:D D D:Y Y Y  0
 
 
$  8H 8H 8HtM M MC C CL L L. . .
G G G
	 	 	= = =$ $ $+A +A +AZ  
C C C< X'13PQQ9 9 RQ9 X_V^g-/MNN9 9 ON9	
 	
 	
	H 	H 	H8 8 8	F 	F 	F
B 
B 
BA A A4C C CO O O&B B B0B B B
N 
N 
N 
N 
Nr:   r   c                      dS )N)trivialr;  rM   rM   r:   r8   trivial_challenger<  V  s    r:   ))r   r   r*   rB   r5  r   r7  captcha.confr   captcha.fieldsr   r   captcha.modelsr   django.corer   django.core.exceptionsr   django.testr	   r
   django.utilsr   PILr   testfixturesr   r8  django.core.urlresolversr   django.urlsdjango.utils.translationr   r   	cStringIOr   ImportErrorior   r   r<  rM   r:   r8   <module>rL     s     				 				    ! ! ! ! ! ! 9 9 9 9 9 9 9 9 ' ' ' ' ' ' " " " " " " 7 7 7 7 7 7 3 3 3 3 3 3 3 3 ! ! ! ! ! !       # # # # # #	>G0000000######	>VFFFFFFF666666'""""""" ' ' '&&&&&&&&'  4555nN nN nN nN nN( nN nN 65nNb         s   B BB