B
    18™\¶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   úa/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/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   é
   )Úsecondsé   é   )r   r   r	   r
   Ú	TypeErrorÚdatetimeÚnowÚ	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ÚassertIsÚ	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   r0   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)r0   Úwrr   r   Úfoon   s    
zBTest_Assertions.test_assertRaises_frames_survival.<locals>.Foo.fooc             S   s   |   t| j¡ d S )N)r	   r&   r6   )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&   r6   )r   r   r   r   Ú	test_withz   s    zHTest_Assertions.test_assertRaises_frames_survival.<locals>.Foo.test_withN)r-   r.   r/   r6   r7   r8   r   )r0   r5   r   r   ÚFool   s   	r9   r7   r8   )ÚunittestÚTestCaseÚrunÚassertIsNone)r   r9   r   )r0   r5   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>   rA   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
   rC   r   )r   r   r   ÚTestableTestFalse“   s   rE   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   rC   ž   s    z8TestLongMessage.setUp.<locals>.TestableTestTrue.testTestN)r-   r.   r/   rD   r
   rC   r   )r   r   r   ÚTestableTestTrueš   s   rF   rC   )r:   r;   ÚtestableTrueÚtestableFalse)r   rE   rF   r   )r   r   ÚsetUp’   s    
zTestLongMessage.setUpc             C   s   |   tjj¡ d S )N)Ú
assertTruer:   r;   rD   )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 )Nr6   Úbarz	bar : foo)ÚassertEqualrH   Ú_formatMessagerG   Ú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ÚrangerG   rN   )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   )rH   rG   Úgetattr)rT   ZuseTestableFalseÚtest)Ú
methodNamer   r   r   Ú	getMethod¿   s
    z1TestLongMessage.assertMessages.<locals>.getMethodr   ÚmsgÚoops)Úexpected_regexN)Ú	enumerateÚassertRaisesRegexr
   )
r   r\   r@   Úerrorsr]   rT   r`   Ú
testMethodÚkwargsZwithMsgr   )r\   r   r   ÚassertMessages¶   s    	
zTestLongMessage.assertMessagesc             C   s   |   ddddddg¡ d S )NrJ   )Fz^False is not true$z^oops$z^False is not true : oops$)rf   )r   r   r   r   ÚtestAssertTrueÒ   s    zTestLongMessage.testAssertTruec             C   s   |   ddddddg¡ d S )NÚassertFalse)Tz^True is not false$z^oops$z^True is not false : oops$)rf   )r   r   r   r   ÚtestAssertFalse×   s    zTestLongMessage.testAssertFalsec             C   s   |   ddddddg¡ d S )NÚassertNotEqual)r   r   z^1 == 1$z^oops$z^1 == 1 : oops$)rf   )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$)rf   )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$)rf   )r   r   r   r   ÚtestNotAlmostEqualè   s    z"TestLongMessage.testNotAlmostEqualc             C   s   |   ddddddg¡ d S )NÚ_baseAssertEqual)r   r   z^1 != 2$z^oops$z^1 != 2 : oops$)rf   )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 )NÚassertSequenceEqualz\+ \[None\]$z^oops$z\+ \[None\] : oops$)rf   )r   r   r   r   ÚtestAssertSequenceEqualñ   s    z'TestLongMessage.testAssertSequenceEqualc             C   s&   |   dtƒ td gƒfddddg¡ d S )NÚassertSetEqualzNone$z^oops$zNone : oops$)rf   Ú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$)rf   )r   r   r   r   ÚtestAssertIný   s    zTestLongMessage.testAssertInc             C   s    |   dd d gfddddg¡ d S )NÚassertNotInz%^None unexpectedly found in \[None\]$z^oops$z,^None unexpectedly found in \[None\] : oops$)rf   )r   r   r   r   ÚtestAssertNotIn  s    zTestLongMessage.testAssertNotInc             C   s"   |   di ddifddddg¡ d S )NÚassertDictEqualr   Úvaluez\+ \{'key': 'value'\}$z^oops$z\+ \{'key': 'value'\} : oops$)rf   )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ÚignoreÚassertDictContainsSubsetr   ry   z^Missing: 'key'$z^oops$z^Missing: 'key' : oops$)ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningrf   )r   r   r   r   ÚtestAssertDictContainsSubset  s    
z,TestLongMessage.testAssertDictContainsSubsetc             C   s   |   ddddddg¡ d S )NÚassertMultiLineEqual)rQ   r6   z\+ foo$z^oops$z\+ foo : oops$)rf   )r   r   r   r   ÚtestAssertMultiLineEqual  s    z(TestLongMessage.testAssertMultiLineEqualc             C   s   |   ddddddg¡ d S )NÚ
assertLess)r   r   z^2 not less than 1$z^oops$z^2 not less than 1 : oops$)rf   )r   r   r   r   ÚtestAssertLess  s    zTestLongMessage.testAssertLessc             C   s   |   ddddddg¡ d S )NÚassertLessEqual)r   r   z^2 not less than or equal to 1$z^oops$z&^2 not less than or equal to 1 : oops$)rf   )r   r   r   r   ÚtestAssertLessEqual#  s    z#TestLongMessage.testAssertLessEqualc             C   s   |   ddddddg¡ d S )NÚassertGreater)r   r   z^1 not greater than 2$z^oops$z^1 not greater than 2 : oops$)rf   )r   r   r   r   ÚtestAssertGreater)  s    z!TestLongMessage.testAssertGreaterc             C   s   |   ddddddg¡ d S )NÚassertGreaterEqual)r   r   z"^1 not greater than or equal to 2$z^oops$z)^1 not greater than or equal to 2 : oops$)rf   )r   r   r   r   ÚtestAssertGreaterEqual/  s    z&TestLongMessage.testAssertGreaterEqualc             C   s   |   ddddddg¡ d S )Nr=   )znot Nonez^'not None' is not None$z^oops$z^'not None' is not None : oops$)rf   )r   r   r   r   ÚtestAssertIsNone5  s    z TestLongMessage.testAssertIsNonec             C   s   |   ddddddg¡ d S )NÚassertIsNotNone)Nz^unexpectedly None$z^oops$z^unexpectedly None : oops$)rf   )r   r   r   r   ÚtestAssertIsNotNone;  s    z#TestLongMessage.testAssertIsNotNonec             C   s   |   ddddddg¡ d S )Nr(   )Nr6   z^None is not 'foo'$z^oops$z^None is not 'foo' : oops$)rf   )r   r   r   r   ÚtestAssertIsA  s    zTestLongMessage.testAssertIsc             C   s   |   ddddddg¡ d S )NÚassertIsNot)NNz^unexpectedly identical: None$z^oops$z%^unexpectedly identical: None : oops$)rf   )r   r   r   r   ÚtestAssertIsNotG  s    zTestLongMessage.testAssertIsNotc             C   s   |   ddddddg¡ d S )NÚassertRegex)r6   rL   z^Regex didn't match:z^oops$z!^Regex didn't match: (.*) : oops$)rf   )r   r   r   r   ÚtestAssertRegexM  s
    zTestLongMessage.testAssertRegexc             C   s   |   ddddddg¡ d S )Nr?   )r6   r6   z^Regex matched:z^oops$z^Regex matched: (.*) : oops$)rf   )r   r   r   r   rA   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;
        r^   r_   N)r   rH   rG   ÚziprZ   rb   r
   )r   r\   r@   Úfuncrc   ÚpÚclsre   Ú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 )Nrb   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 )Nr6   )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 )NÚ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 )NÚ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 )Nr6   )r}   Ú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__rI   rK   rP   rY   rf   rg   ri   rk   rl   rm   ro   rq   rt   ru   rw   rz   r   rƒ   r…   r‡   r‰   r‹   rŒ   rŽ   r   r‘   r“   rA   rš   r›   rž   r¡   r¤   r   r   r   r   rB      sD   
	rB   Ú__main__)r   r}   r1   r:   Ú	itertoolsr   r;   r   rB   r-   Úmainr   r   r   r   Ú<module>   s      