
    =e                         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e j                  Zedk    r e j                     dS dS )    N)is_instanceX	SomeClass)Mock	MagicMockNonCallableMagicMockNonCallableMockpatchcreate_autospecCallableMixinc                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )TestCallablec                     |                      t          |t                               |                     t          |t                               d S N)
assertTruer   r   assertFalser   selfmocks     :/usr/lib/python3.11/unittest/test/testmock/testcallable.pyassertNotCallablezTestCallable.assertNotCallable   sC    D*>??@@@T=99:::::    c                    t                      t                      fD ]m}|                     t          |           |                     t          |d                     |                     |j        j        t          |                     nd S )N__call__)
r   r	   assertRaises	TypeErrorr   hasattrassertIn	__class____name__reprr   s     r   test_non_callablezTestCallable.test_non_callable   s    (**O,=,== 	? 	?Di...WT:66777MM$.14::>>>>	? 	?r   c                     |                      t          t          t                               |                      t          t          t
                               d S r   )r   
issubclassr   r   r   r	   r   s    r   test_hierarchyzTestCallable.test_hierarchy   sA    
9d33444
#7IIJJJJJr   c                 &   t                      }|                     t          t          |j                  t
                               t                      }|                     t          t          |j                  t                               d S r   )	r	   r   r$   typeoner   r   twor   )r   r)   r*   s      r   test_attributeszTestCallable.test_attributes#   sf    
4==$77888"$$
4==)<<=====r   c                 N    G d dt                     } |            }|                     t          t          |j                  |                      G d dt
                    } |            }|                     t          t          |j                  |                     d S )Nc                       e Zd ZdS )-TestCallable.test_subclasses.<locals>.MockSubNr    
__module____qualname__ r   r   MockSubr.   ,           Dr   r3   c                       e Zd ZdS ).TestCallable.test_subclasses.<locals>.MagicSubNr/   r2   r   r   MagicSubr6   2   r4   r   r7   )r   r   r$   r(   r)   r   r*   )r   r3   r)   r7   r*   s        r   test_subclasseszTestCallable.test_subclasses+   s    	 	 	 	 	d 	 	 	 gii
4=='::;;;	 	 	 	 	y 	 	 	 hjj
4==(;;<<<<<r   c                 0   t          dt          z  d          }|                                }|                     |j                    |            }|                                 |                     |           |                     t          |           d S )N%s.XTspec	r
   r    start
addCleanupstopassert_called_once_withr   r   r   r   patcherr   instances       r   test_patch_speczTestCallable.test_patch_spec9   s    )555}}%%%466$$&&&x((()X.....r   c                 0   t          dt          z  d          }|                                }|                     |j                    |            }|                                 |                     |           |                     t          |           d S )Nr:   Tspec_setr=   rB   s       r   test_patch_spec_setz TestCallable.test_patch_spec_setE   s    )D999}}%%%466$$&&&x((()X.....r   c                    t          dt          z  t                                }|                                }|                     |j                   |                     |           |                     t          |           d S )Nr:   r;   	r
   r    r   r>   r?   r@   r   r   r   r   rC   r   s      r   test_patch_spec_instancez%TestCallable.test_patch_spec_instanceQ   sn    )444}}%%%t$$$)T*****r   c                    t          dt          z  t                                }|                                }|                     |j                   |                     |           |                     t          |           d S )Nr:   rG   rK   rL   s      r   test_patch_spec_set_instancez)TestCallable.test_patch_spec_set_instanceZ   sn    )ACC888}}%%%t$$$)T*****r   c           	          G d dt                     } G d d|          } G d dt          |          }dD ]}|||fD ]}t          dt          z  fi ||i5 } |            }|                                 |                     t          |t                               |                     t          t          |d	            |            }|                                  |d
dd           |                    d
dd           |                    d
dd           |j                            d
dd           d d d            n# 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )>TestCallable.test_patch_spec_callable_class.<locals>.CallableXc                     d S r   r2   r%   s    r   r   zGTestCallable.test_patch_spec_callable_class.<locals>.CallableX.__call__e   s      r   N)r    r0   r1   r   r2   r   r   	CallableXrR   d   s        $$$$$r   rT   c                       e Zd ZdS )8TestCallable.test_patch_spec_callable_class.<locals>.SubNr/   r2   r   r   SubrV   g   r4   r   rW   c                       e Zd ZdS ):TestCallable.test_patch_spec_callable_class.<locals>.MultiNr/   r2   r   r   MultirY   j   r4   r   rZ   )r<   rH   r:   	foobarbaz         )r   r   r
   r    rA   r   r   r   r   AttributeErrorgetattrfoo)	r   rT   rW   rZ   argKlassr   rD   results	            r   test_patch_spec_callable_classz+TestCallable.test_patch_spec_callable_classc   s   	% 	% 	% 	% 	% 	% 	% 	%	 	 	 	 	) 	 	 		 	 	 	 	Is 	 	 	 & 	@ 	@C"C. @ @6H,==e== @#tvvH00222OOK)$D$DEEE%%ngx&13 3 3 &XZZF44666F1aOOO221a;;;JJq!Q'''J66q!Q???!@ @ @ @ @ @ @ @ @ @ @ @ @ @ @@	@ 	@s   CEEEc                     t          t                    } |            }|                     t          |           t          t                                }|                     t          |           d S r   )r   r   r   r   )r   r   rD   s      r   test_create_autospecz!TestCallable.test_create_autospec   s]    q!!466)X...qss##)T*****r   c                    t          t          d          }|                     t          |           |                                 |j                                         |                     t          |j        dd           d S )NT)rD   someargs)r   r   r   r   wibblerA   r   s     r   test_create_autospec_instancez*TestCallable.test_create_autospec_instance   sm    y4888)T***++---)T[&6BBBBBr   N)r    r0   r1   r   r"   r&   r+   r8   rE   rI   rM   rO   re   rg   rl   r2   r   r   r   r      s        ; ; ;
? ? ?K K K
> > >= = =	/ 	/ 	/	/ 	/ 	/+ + ++ + +@ @ @>+ + +C C C C Cr   r   __main__)unittestunittest.test.testmock.supportr   r   r   unittest.mockr   r   r   r	   r
   r   r   TestCaser   r    mainr2   r   r   <module>rs      s   
  D D D D D D D D D D                 BC BC BC BC BC8$ BC BC BCJ zHMOOOOO r   