
>ฑU%  ใ               @   sธ   d  d l  m Z d  d l Z d  d l m Z d  d l m Z m Z m	 Z	 m
 Z
 m Z m Z e
 j Z e
 j Z Gd d   d e j  Z Gd d   d e j  Z e d	 k rด e j   d S)
้    )ฺcatch_warningsN)ฺis_instance)ฺ	MagicMockฺMockฺpatchฺsentinelฺ	mock_openฺcallc               @   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 S)ฺWithTestc             C   sK   t  d t t j   |  j t t j d  Wd  QRX|  j t t j  d  S)Nz%s.somethingฺ	unpatched)r   ฺ__name__r   ฺ
Something2ฺassertEqualฺ	somethingฺ	Something)ฺselfฉ r   ๚5/usr/lib/python3/dist-packages/mock/tests/testwith.pyฺtest_with_statement   s    zWithTest.test_with_statementc             C   s}   yD t  d t t j  ' |  j t t j d  t d   Wd  QRXWn t k
 rX Yn X|  j d  |  j t t j  d  S)Nz%s.somethingr   ฺpowzpatch swallowed exception)	r   r   r   r   r   r   ฺ	ExceptionZfailr   )r   r   r   r   ฺtest_with_statement_exception   s    z&WithTest.test_with_statement_exceptionc             C   s]   t  d t  3 } |  j t | d  |  j t | t  d  Wd  QRX|  j t t j  d  S)Nz%s.somethingr   zpatching wrong type)	r   r   r   r   ฺ
assertTruer   r   r   r   )r   ฺmock_somethingr   r   r   ฺtest_with_statement_as&   s
    zWithTest.test_with_statement_asc             C   sf   Gd d   d t   } | j } t j  | d   |  j | j | d  Wd  QRX|  j | j |  d  S)Nc               @   s   e  Z d  Z d Z d S)z6WithTest.test_patch_object_with_statement.<locals>.FooฺfooN)r   ฺ
__module__ฺ__qualname__r   r   r   r   r   ฺFoo/   s   r   r   r   )ฺobjectr   r   ZassertNotEqualr   )r   r   Zoriginalr   r   r   ฺ test_patch_object_with_statement.   s
    	z)WithTest.test_patch_object_with_statementc             C   s   t  d d  _ t d t  G } t d t  - } |  j t | d  |  j t | d  Wd  QRXWd  QRXWd  QRX|  j t t j  |  j t t j  d  S)NฺrecordTz%s.somethingz%s.something_elser   )	r   r   r   r   r   ฺsomething_elser   r   ฺSomethingElse)r   r   ฺmock_something_elser   r   r   ฺtest_with_statement_nested7   s    z#WithTest.test_with_statement_nestedc             C   s`   t  d t t j  0 } |  j t | d  |  j | t j d  Wd  QRX|  j t t j  d  S)Nz%s.somethingr   zwrong patch)r   r   r   ฺPatchedr   r   r   )r   r   r   r   r   ฺtest_with_statement_specifiedC   s    z&WithTest.test_with_statement_specifiedc             C   sz   t    } t    | _ t    | _ d | j _ |  } |  j | | j j  Wd  QRX| j j   | j j d  d  d   d  S)NF)r   ฺ	__enter__ฺ__exit__ฺreturn_valuer   ฺassert_called_with)r   ฺmockฺmr   r   r   ฺtestContextManagerMockingJ   s    		z"WithTest.testContextManagerMockingc             C   sZ   t    } |  j t   |  d d Wd  QRXWd  QRX| j j   |  j | j j  d  S)Nr   ้   )r   ฺassertRaisesฺ	TypeErrorr(   r+   r   r)   Zcalled)r   r,   r   r   r   ฺ$test_context_manager_with_magic_mockV   s    	z-WithTest.test_context_manager_with_magic_mockc             C   s   t  d t t j  Z } |  j t | d  t  d t   } |  j t | d  Wd  QRX|  j t | d  Wd  QRX|  j t t j d  d  S)Nz%s.somethingr   zrestored with wrong instanceznot restored)r   r   r   r&   r   r   r   )r   r   Z
mock_againr   r   r   ฺ"test_with_statement_same_attribute`   s    z+WithTest.test_with_statement_same_attributec             C   s   t  d t  G } |  j t | d  t  d t   } |  j t | d  Wd  QRXWd  QRX|  j t t j  |  j t t j  d  S)Nz%s.somethingr   z%s.something_else)r   r   r   r   r"   r   r   r#   )r   r   r$   r   r   r   ฺtest_with_statement_imbricatedm   s    z'WithTest.test_with_statement_imbricatedc             C   sน   i  } t  j | d d i   |  j | d d i  Wd  QRX|  j | i   |  j t  G t  j | d d i  ' |  j | d d i  t d   Wd  QRXWd  QRX|  j | i   d  S)NฺaฺbZKonrad)r   ฺdictr   r0   ฺ	NameError)r   r   r   r   r   ฺtest_dict_context_managery   s    z"WithTest.test_dict_context_managerN)r   r   r   r   r   r   r    r%   r'   r.   r2   r3   r4   r9   r   r   r   r   r
      s   	
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 S)ฺTestMockOpenc          
   C   sW   t    } t d t | d d ! } |  j | |  t d  Wd  QRX| j d  d  S)Nz%s.openฺcreateTr   )r   r   r   ฺassertIsฺopenฺassert_called_once_with)r   r,   ฺpatchedr   r   r   ฺtest_mock_open   s
    	zTestMockOpen.test_mock_openc             C   sถ   t    } | j } t d t | d d % t d   } | j   Wd  QRXWd  QRXt d  t   j   t   j   t   j d  d  d   g } |  j	 | j
 |  |  j | |  d  S)Nz%s.openr;   Tr   )r   r*   r   r   r=   ฺreadr	   r(   r)   r   ฺ
mock_callsr<   )r   r,   ฺhandleฺfฺexpected_callsr   r   r   ฺtest_mock_open_context_manager   s    		!z+TestMockOpen.test_mock_open_context_managerc              C   s๓   t    } t d t | d d E t d   } | j   Wd  QRXt d   } | j   Wd  QRXWd  QRXt d  t   j   t   j   t   j d  d  d   t d  t   j   t   j   t   j d  d  d   g } |  j | j	 |  d  S)Nz%s.openr;   Tr   ฺbar)
r   r   r   r=   rA   r	   r(   r)   r   rB   )r   r,   rD   rE   r   r   r   ฺ-test_mock_open_context_manager_multiple_times   s    	!!z:TestMockOpen.test_mock_open_context_manager_multiple_timesc          
   C   sa   t    } t |  t d t | d d ! } |  j | |  t d  Wd  QRX| j d  d  S)Nz%s.openr;   Tr   )r   r   r   r   r<   r=   r>   )r   r,   r?   r   r   r   ฺtest_explicit_mockฎ   s    	
zTestMockOpen.test_explicit_mockc          
   C   s\   t  d d  } t d t | d d  t d  } | j   } Wd  QRX|  j | d  d  S)Nฺ	read_datar   z%s.openr;   TrG   )r   r   r   r=   rA   r   )r   r,   ฺhฺresultr   r   r   ฺtest_read_dataน   s
    zTestMockOpen.test_read_datac             C   s์   t  d d  } t d t | d d 5 t d  } | j   } | j   } | j   } Wd  QRX|  j | d  |  j | d  |  j | d	  t  d d
  } t d t | d d  t d  } | j   } Wd  QRX|  j | d
  d  S)NrJ   zfoo
bar
baz
z%s.openr;   TrG   zfoo
zbar
zbaz
r   )r   r   r   r=   ฺreadliner   )r   r,   rK   ฺline1Zline2Zline3rL   r   r   r   ฺtest_readline_dataย   s    zTestMockOpen.test_readline_datac             C   sฦ   t  d d  } t d t | d d  t d  } | j   } Wd  QRX|  j | d d d	 g  t  d d
  } t d t | d d  t d  } | j   } Wd  QRX|  j | d d d g  d  S)NrJ   zfoo
bar
baz
z%s.openr;   TrG   zfoo
zbar
zbaz
zfoo
bar
bazZbaz)r   r   r   r=   ฺ	readlinesr   )r   r,   rK   rL   r   r   r   ฺtest_readlines_dataึ   s    z TestMockOpen.test_readlines_datac             C   s5   d } t  d |  } |  j |   j d  |  d  S)Nzfoo
bar
bazrJ   ้
   )r   r   rA   )r   Z	some_datar,   r   r   r   ฺ!test_mock_open_read_with_argument่   s    z.TestMockOpen.test_mock_open_read_with_argumentc             C   s๒   t  d d  } t d t | d d ) t d  } | j   } | j   } Wd  QRX|  j | d  |  j | d d	 g  t  d d  } t d t | d d ) t d  } | j   } | j   } Wd  QRX|  j | d  |  j | d
  d  S)NrJ   zfoo
bar
baz
z%s.openr;   TrG   zfoo
zbar
zbaz
zbar
baz
)r   r   r   r=   rN   rQ   r   rA   )r   r,   rK   rO   ฺrestr   r   r   ฺtest_interleaved_reads๐   s    z#TestMockOpen.test_interleaved_readsc             C   sด   t  d d  } |   } d | j _ d | j _ d g | j _ |  j | j   d  |  j | j   d  |  j | j   d g  |  j | j   d  |  j | j   d  d  S)NrJ   r   rG   )r   rA   r*   rN   rQ   r   )r   r,   rC   r   r   r   ฺtest_overriding_return_values  s    	z*TestMockOpen.test_overriding_return_valuesN)r   r   r   r@   rF   rH   rI   rM   rP   rR   rT   rV   rW   r   r   r   r   r:      s   		r:   ฺ__main__)ฺwarningsr   Z	unittest2ZunittestZmock.tests.supportr   r,   r   r   r   r   r   r	   r   r   r#   r"   ZTestCaser
   r:   r   ฺmainr   r   r   r   ฺ<module>   s   .		v