B
    18\                 @   sf   d dl Z d dlmZmZmZ d dlmZmZmZm	Z	m
Z
mZmZ G dd de jZedkrbe   dS )    N)is_instanceX	SomeClass)Mock	MagicMockNonCallableMagicMockNonCallableMockpatchcreate_autospecCallableMixinc               @   sl   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S )TestCallablec             C   s$   |  t|t | t|t d S )N)
assertTruer   r   assertFalser   )selfmock r   g/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/testmock/testcallable.pyassertNotCallable   s    zTestCallable.assertNotCallablec             C   sJ   xDt  t fD ]4}| t| | t|d | |jjt	| qW d S )N__call__)
r   r   assertRaises	TypeErrorr   hasattrassertIn	__class____name__repr)r   r   r   r   r   test_non_callable   s    zTestCallable.test_non_callablec             C   s$   |  ttt |  ttt d S )N)r   
issubclassr   r   r   r   )r   r   r   r   test_hierarchy   s    zTestCallable.test_hierarchyc             C   s<   t  }| tt|jt t }| tt|jt d S )N)	r   r   r   typeoner   r   twor   )r   r    r!   r   r   r   test_attributes#   s    zTestCallable.test_attributesc             C   s\   G dd dt }| }| tt|j| G dd dt}| }| tt|j| d S )Nc               @   s   e Zd ZdS )z-TestCallable.test_subclasses.<locals>.MockSubN)r   
__module____qualname__r   r   r   r   MockSub,   s   r%   c               @   s   e Zd ZdS )z.TestCallable.test_subclasses.<locals>.MagicSubN)r   r#   r$   r   r   r   r   MagicSub2   s   r&   )r   r   r   r   r    r   r!   )r   r%   r    r&   r!   r   r   r   test_subclasses+   s    zTestCallable.test_subclassesc             C   sL   t dt dd}| }| |j | }|  | | | t| d S )Nz%s.XT)spec)	r	   r   start
addCleanupstopassert_called_once_withr   r   r   )r   patcherr   instancer   r   r   test_patch_spec9   s    
zTestCallable.test_patch_specc             C   sL   t dt dd}| }| |j | }|  | | | t| d S )Nz%s.XT)spec_set)	r	   r   r)   r*   r+   r,   r   r   r   )r   r-   r   r.   r   r   r   test_patch_spec_setE   s    
z TestCallable.test_patch_spec_setc             C   s@   t dt t d}| }| |j | | | t| d S )Nz%s.X)r(   )	r	   r   r   r)   r*   r+   r   r   r   )r   r-   r   r   r   r   test_patch_spec_instanceQ   s
    
z%TestCallable.test_patch_spec_instancec             C   s@   t dt t d}| }| |j | | | t| d S )Nz%s.X)r0   )	r	   r   r   r)   r*   r+   r   r   r   )r   r-   r   r   r   r   test_patch_spec_set_instanceZ   s
    
z)TestCallable.test_patch_spec_set_instancec       	      C   s   G dd dt }G dd d|}G dd dt|}xdD ]}x|||fD ]}tdt f||iz}| }|  | t|t | t	t
|d	 | }|  |d
dd |d
dd |d
dd |jd
dd W d Q R X qHW q8W d S )Nc               @   s   e Zd Zdd ZdS )z>TestCallable.test_patch_spec_callable_class.<locals>.CallableXc             S   s   d S )Nr   )r   r   r   r   r   e   s    zGTestCallable.test_patch_spec_callable_class.<locals>.CallableX.__call__N)r   r#   r$   r   r   r   r   r   	CallableXd   s   r4   c               @   s   e Zd ZdS )z8TestCallable.test_patch_spec_callable_class.<locals>.SubN)r   r#   r$   r   r   r   r   Subh   s   r5   c               @   s   e Zd ZdS )z:TestCallable.test_patch_spec_callable_class.<locals>.MultiN)r   r#   r$   r   r   r   r   Multik   s   r6   )r(   r0   z%s.XZ	foobarbaz         )r   r   r	   r   r,   r   r   r   r   AttributeErrorgetattrfoo)	r   r4   r5   r6   argKlassr   r.   resultr   r   r   test_patch_spec_callable_classc   s"    

z+TestCallable.test_patch_spec_callable_classc             C   s4   t t}| }| t| t t }| t| d S )N)r
   r   r   r   )r   r   r.   r   r   r   test_create_autospec   s
    
z!TestCallable.test_create_autospecc             C   s@   t tdd}| t| |  |j  | t|jdd d S )NT)r.   Zsomeargs)r
   r   r   r   Zwibbler,   )r   r   r   r   r   test_create_autospec_instance   s
    
z*TestCallable.test_create_autospec_instanceN)r   r#   r$   r   r   r   r"   r'   r/   r1   r2   r3   r@   rA   rC   r   r   r   r   r      s   		 	r   __main__)unittestZunittest.test.testmock.supportr   r   r   unittest.mockr   r   r   r   r	   r
   r   TestCaser   r   mainr   r   r   r   <module>   s   $ 