B
    v9a¶B  ã               @   sd   d dl Z d dlZd dlZd dlZd dlmZ G dd„ dejƒZG dd„ dejƒZe	dkr`e 
¡  dS )é    N)Úproductc               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_Assertionsc             C   sì   |   dd¡ |  dd¡ |  | j| j dd¡ |  | j| jdd¡ | j dddd | j| j| j dddd | j dddd | jdddd | j| j| j dddd | j| j| jdddd |   td	ƒtd	ƒ¡ |  | j| jtd	ƒtd	ƒ¡ d S )
NgÜ1¯  ð?g      ð?g›ò×  ð?gš™™™™™ñ?r   )Úplacesé   yš™™™™™¹?š™™™™™¹?Úinf)ÚassertAlmostEqualÚassertNotAlmostEqualÚassertRaisesÚfailureExceptionÚfloat)Úself© r   ú%/usr/lib/python3.7/test_assertions.pyÚtest_AlmostEqual	   s$    z Test_Assertions.test_AlmostEqualc             C   s  | j dddd | j dddd | jdddd | jdddd | j dddd | j| j| jdddd | j| j| j dddd | j| j| jdddd | jt| j ddddd | jt| jddddd tj ¡ }|tjdd	 }| j ||tjd
d	d | j||tjdd	d d S )Ngš™™™™™ñ?g      ð?g      à?)Údeltagš™™™™™©?é   )r   r   é
   )Zsecondsé   é   )r   r   r	   r
   Ú	TypeErrorÚdatetimeZnowZ	timedelta)r   ÚfirstÚsecondr   r   r   Útest_AmostEqualWithDelta    s*    


z(Test_Assertions.test_AmostEqualWithDeltac             C   sÂ  dd„ }|   t|t¡ |   t|tdƒ¡ y|   tdd„ ¡ W n4 | jk
rp } z|  dt|ƒ¡ W d d }~X Y nX |  d¡ y|   t|t¡ W n tk
r¢   Y nX |  d¡ |   t¡8}yt‚W n( tk
rê } z
|}‚ W d d }~X Y nX W d Q R X |  |j	|¡ |   t¡ tdƒ‚W d Q R X y|   t¡ W d Q R X W n6 | jk
rr } z|  dt|ƒ¡ W d d }~X Y nX |  d¡ y|   t¡
 t‚W d Q R X W n tk
r²   Y nX |  d¡ d S )	Nc             S   s   | ‚d S )Nr   )Úer   r   r   Ú_raise<   s    z1Test_Assertions.test_assertRaises.<locals>._raiseÚkeyc               S   s   d S )Nr   r   r   r   r   Ú<lambda>A   ó    z3Test_Assertions.test_assertRaises.<locals>.<lambda>zKeyError not raisedzassertRaises() didn't failz0assertRaises() didn't let exception pass through)
r	   ÚKeyErrorr
   ÚassertInÚstrÚfailÚ
ValueErrorÚ	ExceptionÚassertIsZ	exception)r   r   r   ÚcmÚexcr   r   r   Útest_assertRaises;   sD    "

"
z!Test_Assertions.test_assertRaisesc                s^   G dd„ dƒ‰ d ‰G ‡ ‡fdd„dt jƒ}|dƒ ¡  |  ˆƒ ¡ |dƒ ¡  |  ˆƒ ¡ d S )Nc               @   s   e Zd ZdS )z<Test_Assertions.test_assertRaises_frames_survival.<locals>.AN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚAh   s   r,   c                   s*   e Zd Z‡ ‡fdd„Zdd„ Zdd„ ZdS )z>Test_Assertions.test_assertRaises_frames_survival.<locals>.Fooc                s6   ˆ ƒ }t  |¡‰yt‚W n tk
r0   t‚Y nX d S )N)ÚweakrefÚrefÚOSErrorr#   )r   Úa)r,   Úwrr   r   Úfoon   s    
zBTest_Assertions.test_assertRaises_frames_survival.<locals>.Foo.fooc             S   s   |   t| j¡ d S )N)r	   r#   r2   )r   r   r   r   Útest_functionalw   s    zNTest_Assertions.test_assertRaises_frames_survival.<locals>.Foo.test_functionalc          	   S   s"   |   t¡ |  ¡  W d Q R X d S )N)r	   r#   r2   )r   r   r   r   Ú	test_withz   s    zHTest_Assertions.test_assertRaises_frames_survival.<locals>.Foo.test_withN)r)   r*   r+   r2   r3   r4   r   )r,   r1   r   r   ÚFool   s   	r5   r3   r4   )ÚunittestÚTestCaseÚrunÚassertIsNone)r   r5   r   )r,   r1   r   Ú!test_assertRaises_frames_survivale   s    z1Test_Assertions.test_assertRaises_frames_survivalc          
   C   sd   |   dd¡ y|   ddd¡ W n6 | jk
rT } z|  d|jd ¡ W d d }~X Y nX |  d¡ d S )NzAla ma kotazr+zk.tZMessager   z"assertNotRegex should have failed.)ÚassertNotRegexr
   r    Úargsr"   )r   r   r   r   r   ÚtestAssertNotRegexƒ   s    $z"Test_Assertions.testAssertNotRegexN)r)   r*   r+   r   r   r(   r:   r=   r   r   r   r   r      s
   *r   c               @   s  e Zd 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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDS )EÚTestLongMessagezŒTest that the individual asserts honour longMessage.
    This actually tests all the message behaviour for
    asserts that use longMessage.c                sD   G ‡ fdd„dt jƒ}G ‡ fdd„dt jƒ}|dƒˆ _|dƒˆ _d S )Nc                   s   e Zd ZdZ” jZdd„ ZdS )z0TestLongMessage.setUp.<locals>.TestableTestFalseFc             S   s   d S )Nr   )r   r   r   r   ÚtestTest—   s    z9TestLongMessage.setUp.<locals>.TestableTestFalse.testTestN)r)   r*   r+   ÚlongMessager
   r?   r   )r   r   r   ÚTestableTestFalse“   s   rA   c                   s   e Zd ZdZ” jZdd„ ZdS )z/TestLongMessage.setUp.<locals>.TestableTestTrueTc             S   s   d S )Nr   )r   r   r   r   r?   ž   s    z8TestLongMessage.setUp.<locals>.TestableTestTrue.testTestN)r)   r*   r+   r@   r
   r?   r   )r   r   r   ÚTestableTestTrueš   s   rB   r?   )r6   r7   ÚtestableTrueÚtestableFalse)r   rA   rB   r   )r   r   ÚsetUp’   s    
zTestLongMessage.setUpc             C   s   |   tjj¡ d S )N)Ú
assertTruer6   r7   r@   )r   r   r   r   ÚtestDefault¤   s    zTestLongMessage.testDefaultc             C   sl   |   | j d d¡d¡ |   | j dd¡d¡ |   | j d d¡d¡ |   | j dd¡d¡ | j tƒ d¡ d S )Nr2   Úbarz	bar : foo)ZassertEqualrD   Ú_formatMessagerC   Úobject)r   r   r   r   Útest_formatMsg§   s
    zTestLongMessage.test_formatMsgc             C   s*   d  dd„ tdƒD ƒ¡}| j |d¡ d S )NÚ c             s   s   | ]}t |ƒV  qd S )N)Úchr)Ú.0Úir   r   r   ú	<genexpr>²   s    zCTestLongMessage.test_formatMessage_unicode_error.<locals>.<genexpr>éÿ   u   ï¿½)ÚjoinÚrangerC   rI   )r   Zoner   r   r   Ú test_formatMessage_unicode_error±   s    z0TestLongMessage.test_formatMessage_unicode_errorc       
   
      sn   ‡ ‡fdd„}xZt |ƒD ]N\}}||ƒ}i }|d }	|	r@ddi}ˆjˆj|d |||Ž W dQ R X qW dS )a_  
        Check that methodName(*args) raises the correct error messages.
        errors should be a list of 4 regex that match the error when:
          1) longMessage = False and no msg passed;
          2) longMessage = False and msg passed;
          3) longMessage = True and no msg passed;
          4) longMessage = True and msg passed;
        c                s$   | dk }|rˆj }nˆj}t|ˆ ƒS )Nr   )rD   rC   Úgetattr)rO   ZuseTestableFalseZtest)Ú
methodNamer   r   r   Ú	getMethod¿   s
    z1TestLongMessage.assertMessages.<locals>.getMethodr   ÚmsgÚoops)Úexpected_regexN)Ú	enumerateÚassertRaisesRegexr
   )
r   rV   r<   ÚerrorsrW   rO   rZ   Z
testMethodÚkwargsZwithMsgr   )rV   r   r   ÚassertMessages¶   s    	
zTestLongMessage.assertMessagesc             C   s   |   ddddddg¡ d S )NrF   )Fz^False is not true$z^oops$z^False is not true : oops$)r_   )r   r   r   r   ÚtestAssertTrueÒ   s    zTestLongMessage.testAssertTruec             C   s   |   ddddddg¡ d S )NZassertFalse)Tz^True is not false$z^oops$z^True is not false : oops$)r_   )r   r   r   r   ÚtestAssertFalse×   s    zTestLongMessage.testAssertFalsec             C   s   |   ddddddg¡ d S )NZassertNotEqual)r   r   z^1 == 1$z^oops$z^1 == 1 : oops$)r_   )r   r   r   r   ÚtestNotEqualÜ   s    zTestLongMessage.testNotEqualc             C   s   |   ddddddg¡ d S )Nr   )r   r   z)^1 != 2 within 7 places \(1 difference\)$z^oops$z0^1 != 2 within 7 places \(1 difference\) : oops$)r_   )r   r   r   r   ÚtestAlmostEqualá   s
    zTestLongMessage.testAlmostEqualc             C   s   |   ddddddg¡ d S )Nr   )r   r   z^1 == 1 within 7 places$z^oops$z^1 == 1 within 7 places : oops$)r_   )r   r   r   r   ÚtestNotAlmostEqualè   s    z"TestLongMessage.testNotAlmostEqualc             C   s   |   ddddddg¡ d S )NZ_baseAssertEqual)r   r   z^1 != 2$z^oops$z^1 != 2 : oops$)r_   )r   r   r   r   Útest_baseAssertEqualí   s    z$TestLongMessage.test_baseAssertEqualc             C   s    |   dg d gfddddg¡ d S )NZassertSequenceEqualz\+ \[None\]$z^oops$z\+ \[None\] : oops$)r_   )r   r   r   r   ÚtestAssertSequenceEqualñ   s    z'TestLongMessage.testAssertSequenceEqualc             C   s&   |   dtƒ td gƒfddddg¡ d S )NZassertSetEqualzNone$z^oops$zNone : oops$)r_   Úset)r   r   r   r   ÚtestAssertSetEqualø   s    z"TestLongMessage.testAssertSetEqualc             C   s   |   dd g fddddg¡ d S )Nr    z^None not found in \[\]$z^oops$z^None not found in \[\] : oops$)r_   )r   r   r   r   ÚtestAssertIný   s    zTestLongMessage.testAssertInc             C   s    |   dd d gfddddg¡ d S )NZassertNotInz%^None unexpectedly found in \[None\]$z^oops$z,^None unexpectedly found in \[None\] : oops$)r_   )r   r   r   r   ÚtestAssertNotIn  s    zTestLongMessage.testAssertNotInc             C   s"   |   di ddifddddg¡ d S )NZassertDictEqualr   Úvaluez\+ \{'key': 'value'\}$z^oops$z\+ \{'key': 'value'\} : oops$)r_   )r   r   r   r   ÚtestAssertDictEqual	  s    z#TestLongMessage.testAssertDictEqualc          	   C   sB   t  ¡ 0 t  dt¡ |  dddii fddddg¡ W d Q R X d S )NÚignoreZassertDictContainsSubsetr   rk   z^Missing: 'key'$z^oops$z^Missing: 'key' : oops$)ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr_   )r   r   r   r   ÚtestAssertDictContainsSubset  s    
z,TestLongMessage.testAssertDictContainsSubsetc             C   s   |   ddddddg¡ d S )NZassertMultiLineEqual)rL   r2   z\+ foo$z^oops$z\+ foo : oops$)r_   )r   r   r   r   ÚtestAssertMultiLineEqual  s    z(TestLongMessage.testAssertMultiLineEqualc             C   s   |   ddddddg¡ d S )NZ
assertLess)r   r   z^2 not less than 1$z^oops$z^2 not less than 1 : oops$)r_   )r   r   r   r   ÚtestAssertLess  s    zTestLongMessage.testAssertLessc             C   s   |   ddddddg¡ d S )NZassertLessEqual)r   r   z^2 not less than or equal to 1$z^oops$z&^2 not less than or equal to 1 : oops$)r_   )r   r   r   r   ÚtestAssertLessEqual#  s    z#TestLongMessage.testAssertLessEqualc             C   s   |   ddddddg¡ d S )NZassertGreater)r   r   z^1 not greater than 2$z^oops$z^1 not greater than 2 : oops$)r_   )r   r   r   r   ÚtestAssertGreater)  s    z!TestLongMessage.testAssertGreaterc             C   s   |   ddddddg¡ d S )NZassertGreaterEqual)r   r   z"^1 not greater than or equal to 2$z^oops$z)^1 not greater than or equal to 2 : oops$)r_   )r   r   r   r   ÚtestAssertGreaterEqual/  s    z&TestLongMessage.testAssertGreaterEqualc             C   s   |   ddddddg¡ d S )Nr9   )znot Nonez^'not None' is not None$z^oops$z^'not None' is not None : oops$)r_   )r   r   r   r   ÚtestAssertIsNone5  s    z TestLongMessage.testAssertIsNonec             C   s   |   ddddddg¡ d S )NZassertIsNotNone)Nz^unexpectedly None$z^oops$z^unexpectedly None : oops$)r_   )r   r   r   r   ÚtestAssertIsNotNone;  s    z#TestLongMessage.testAssertIsNotNonec             C   s   |   ddddddg¡ d S )Nr%   )Nr2   z^None is not 'foo'$z^oops$z^None is not 'foo' : oops$)r_   )r   r   r   r   ÚtestAssertIsA  s    zTestLongMessage.testAssertIsc             C   s   |   ddddddg¡ d S )NZassertIsNot)NNz^unexpectedly identical: None$z^oops$z%^unexpectedly identical: None : oops$)r_   )r   r   r   r   ÚtestAssertIsNotG  s    zTestLongMessage.testAssertIsNotc             C   s   |   ddddddg¡ d S )NZassertRegex)r2   rH   z^Regex didn't match:z^oops$z!^Regex didn't match: (.*) : oops$)r_   )r   r   r   r   ÚtestAssertRegexM  s
    zTestLongMessage.testAssertRegexc             C   s   |   ddddddg¡ d S )Nr;   )r2   r2   z^Regex matched:z^oops$z^Regex matched: (.*) : oops$)r_   )r   r   r   r   r=   T  s
    z"TestLongMessage.testAssertNotRegexc             C   sz   t | j| jfi ddifƒ}xZt||ƒD ]L\\}}}t||ƒ}	|  |j|¡" |	||Ž}
|ƒ  W dQ R X W dQ R X q&W dS )a–  
        Check that the correct error messages are raised while executing:
          with method(*args):
              func()
        *errors* should be a list of 4 regex that match the error when:
          1) longMessage = False and no msg passed;
          2) longMessage = False and msg passed;
          3) longMessage = True and no msg passed;
          4) longMessage = True and msg passed;
        rX   rY   N)r   rD   rC   ÚziprU   r\   r
   )r   rV   r<   Úfuncr]   ÚpÚclsr^   ÚerrÚmethodr&   r   r   r   ÚassertMessagesCM\  s    
z TestLongMessage.assertMessagesCMc          	   C   s"   |   dtfdd„ ddddg¡ d S )Nr	   c               S   s   d S )Nr   r   r   r   r   r   p  r   z2TestLongMessage.testAssertRaises.<locals>.<lambda>z^TypeError not raised$z^oops$z^TypeError not raised : oops$)rƒ   r   )r   r   r   r   ÚtestAssertRaiseso  s    z TestLongMessage.testAssertRaisesc          	   C   sH   |   dtdfdd„ ddddg¡ dd	„ }|   dtd
f|ddddg¡ d S )Nr\   zunused regexc               S   s   d S )Nr   r   r   r   r   r   x  r   z7TestLongMessage.testAssertRaisesRegex.<locals>.<lambda>z^TypeError not raised$z^oops$z^TypeError not raised : oops$c               S   s   t dƒ‚d S )Nr2   )r   r   r   r   r   Úraise_wrong_message}  s    zBTestLongMessage.testAssertRaisesRegex.<locals>.raise_wrong_messageÚregexz^"regex" does not match "foo"$z%^"regex" does not match "foo" : oops$)rƒ   r   )r   r…   r   r   r   ÚtestAssertRaisesRegexu  s    z%TestLongMessage.testAssertRaisesRegexc          	   C   s"   |   dtfdd„ ddddg¡ d S )NZassertWarnsc               S   s   d S )Nr   r   r   r   r   r   †  r   z1TestLongMessage.testAssertWarns.<locals>.<lambda>z^UserWarning not triggered$z^oops$z"^UserWarning not triggered : oops$)rƒ   ÚUserWarning)r   r   r   r   ÚtestAssertWarns…  s    zTestLongMessage.testAssertWarnsc          	   C   sH   |   dtdfdd„ ddddg¡ dd	„ }|   dtd
f|ddddg¡ d S )NZassertWarnsRegexzunused regexc               S   s   d S )Nr   r   r   r   r   r   Ž  r   z6TestLongMessage.testAssertWarnsRegex.<locals>.<lambda>z^UserWarning not triggered$z^oops$z"^UserWarning not triggered : oops$c               S   s   t  d¡ d S )Nr2   )rn   Úwarnr   r   r   r   r…   “  s    zATestLongMessage.testAssertWarnsRegex.<locals>.raise_wrong_messager†   z^"regex" does not match "foo"$z%^"regex" does not match "foo" : oops$)rƒ   rˆ   )r   r…   r   r   r   ÚtestAssertWarnsRegex‹  s    z$TestLongMessage.testAssertWarnsRegexN)%r)   r*   r+   Ú__doc__rE   rG   rK   rT   r_   r`   ra   rb   rc   rd   re   rf   rh   ri   rj   rl   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r=   rƒ   r„   r‡   r‰   r‹   r   r   r   r   r>      sD   
	r>   Ú__main__)r   rn   r-   r6   Ú	itertoolsr   r7   r   r>   r)   Úmainr   r   r   r   Ú<module>   s      