a
    ze                     @   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   9/usr/lib/python3.9/unittest/test/testmock/testcallable.pyassertNotCallable   s    zTestCallable.assertNotCallablec                 C   sF   t  t fD ]4}| t| | t|d | |jjt	| qd S )N__call__)
r   r   assertRaises	TypeErrorr   hasattrZassertIn	__class____name__reprr   r   r   r   test_non_callable   s    zTestCallable.test_non_callablec                 C   s$   |  ttt |  ttt d S r   )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 r   )	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>.MagicSubNr%   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 )N%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 )Nr+   Tspec_setr.   r3   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 )Nr+   r,   	r	   r   r   r/   r0   r1   r   r   r   r   r4   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 )Nr+   r7   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|}dD ]}|||fD ]}tdt fi ||i}| }|  | t|t | t	t
|d	 | }|  |d
dd |d
dd |d
dd |jd
dd W d    qD1 s0    Y  qDq6d 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 r   r   r   r   r   r   r   e       zGTestCallable.test_patch_spec_callable_class.<locals>.CallableX.__call__N)r   r&   r'   r   r   r   r   r   	CallableXd   s   r?   c                   @   s   e Zd ZdS )z8TestCallable.test_patch_spec_callable_class.<locals>.SubNr%   r   r   r   r   Subg   s   r@   c                   @   s   e Zd ZdS )z:TestCallable.test_patch_spec_callable_class.<locals>.MultiNr%   r   r   r   r   Multij   s   rA   )r-   r8   r+   Z	foobarbaz         )r   r   r	   r   r2   r   r   r   r   AttributeErrorgetattrZfoo)	r   r?   r@   rA   argZKlassr   r5   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 r   )r
   r   r   r   )r   r   r5   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)r5   Zsomeargs)r
   r   r   r   Zwibbler2   r   r   r   r   test_create_autospec_instance   s
    
z*TestCallable.test_create_autospec_instanceN)r   r&   r'   r   r   r    r$   r*   r6   r9   r<   r=   rI   rJ   rL   r   r   r   r   r      s   			r   __main__)ZunittestZunittest.test.testmock.supportr   r   r   Zunittest.mockr   r   r   r   r	   r
   r   ZTestCaser   r   mainr   r   r   r   <module>   s   $ 