B
    u9aC              $   @   s   d Z ddlZddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&g$Zg Zd'd( Zd)Zd*Zi Zeee	 e xeD ]Z
eee
 e	 e qW ed+efeZ[[[
[G d,d- d-ejZed.kre  dS )/z@Test the functionality of Python classes implementing operators.    NaddZraddsubZrsubmulZrmulmatmulZrmatmultruedivZrtruedivfloordivZ	rfloordivmodZrmoddivmodZrdivmodpowZrpowrshiftZrrshiftlshiftZrlshiftandZrandorZrorxorZrxorcontainsgetitemsetitemdelitemnegposabsZinitc                s    fdd}|S )Nc                 s   t  j| f  | |S )N)callLstappend__name__)argskwargs)f  /usr/lib/python3.7/test_class.pytrackC   s    ztrackCall.<locals>.trackr   )r   r   r   )r   r   	trackCallB   s    r    a  
@trackCall
def __hash__(self, *args):
    return hash(id(self))

@trackCall
def __str__(self, *args):
    return "AllTests"

@trackCall
def __repr__(self, *args):
    return "AllTests"

@trackCall
def __int__(self, *args):
    return 1

@trackCall
def __index__(self, *args):
    return 1

@trackCall
def __float__(self, *args):
    return 1.0

@trackCall
def __eq__(self, *args):
    return True

@trackCall
def __ne__(self, *args):
    return False

@trackCall
def __lt__(self, *args):
    return False

@trackCall
def __le__(self, *args):
    return True

@trackCall
def __gt__(self, *args):
    return False

@trackCall
def __ge__(self, *args):
    return True
z-@trackCall
def __%s__(self, *args):
    pass
AllTestsc               @   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d Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$
ClassTestsc             C   s   g t d d < d S )N)r   )selfr   r   r   setUp   s    zClassTests.setUpc             C   s*   t d d  }||kr&| d||f  d S )Nz=Expected call list:
  %s
does not match actual call list
  %s)r   fail)r#   Zexpected_callsZactualCallListr   r   r   assertCallStack   s    zClassTests.assertCallStackc             C   s   t  }| d|ffg d S )N__init__)r!   r&   )r#   Zfoor   r   r   testInit   s    zClassTests.testInitc             C   sn  t  }g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < |d  | d|dffg g td d < d|  | d	|dffg g td d < |d  | d
|dffg g td d < d|  | d|dffg g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < t|d | d|dffg g td d < td| | d|dffg g td d < |d  | d|dffg g td d < d|  | d|dffg g td d < |d?  | d|dffg g td d < d|?  | d|dffg g td d < |d>  | d|dffg g td d < d|>  | d|dffg g td d < |d@  | d|dffg g td d < d|@  | d|dffg g td d < |dB  | d|dffg g td d < d|B  | d|dffg g td d < |dA  | d|dffg g td d < d|A  | d|dffg d S )N   __add____radd____sub____rsub____mul____rmul__
__matmul____rmatmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod__
__divmod____rdivmod____pow____rpow__
__rshift____rrshift__
__lshift____rlshift____and____rand____or____ror____xor____rxor__)r!   r   r&   r	   )r#   testmer   r   r   testBinaryOps   s    

zClassTests.testBinaryOpsc          
   C   s  t  }G dd d}yd| k | d W n tk
r@   Y nX g td d < d|k | d|dffg g td d < |d  | d|dffg g td d < d|d< | d|ddffg g td d < |d= | d|dffg g td d < |d d	  | d|td d	ffg g td d < d
|d d	< | d|td d	d
ffg g td d < |d d	= | d|td d	ffg g td d < |ddd  | d|tdddffg g td d < d|ddd< | d|tddddffg g td d < |ddd= | d|tdddffg g td d < |d d	dd dddf  | d|td d	d ttd dd ddfffg g td d < d|d d	dd dddf< | d|td d	d ttd dd ddfdffg g td d < |d d	dd dddf= | d|td d	d ttd dd ddfffg d S )Nc               @   s   e Zd ZdS )z,ClassTests.testListAndDictOps.<locals>.EmptyN)r   
__module____qualname__r   r   r   r   Empty  s    rJ   r)   z$failed, should have raised TypeError__contains____getitem____setitem____delitem__*   z
The Answer   i   
   zA lot.   d   ZStrange)r!   r%   	TypeErrorr   r&   sliceEllipsis)r#   rF   rJ   r   r   r   testListAndDictOps  sr    




zClassTests.testListAndDictOpsc             C   s  t  }g td d < |  | d|ffg g td d < |
  | d|ffg g td d < t| | d|ffg g td d < t| | d|ffg g td d < t| | d|ffg g td d < t| | d|ffg g td d < t| | d|ffg d S )N__neg____pos____abs____int__	__float__	__index__)r!   r   r&   r   intfloatocthex)r#   rF   r   r   r   testUnaryOpsX  s,    zClassTests.testUnaryOpsc             C   s  t  }g td d < t| | d|ffg g td d < t| | d|ffg g td d < t| | d|ffg g td d < |dk | d|dffg g td d < |dk  | d|dffg g td d < |dk | d|dffg g td d < |dk | d|dffg g td d < d|k | dd|ffg g td d < d|k  | dd|ffg g td d < d|k | dd|ffg g td d < d|k | dd|ffg d S )	N__hash____repr____str__r)   __eq____lt____gt____ne__)r!   r   hashr&   reprstr)r#   rF   r   r   r   testMiscr  sD    zClassTests.testMiscc             C   s   G dd dt }| }g td d < |j | d|dffg g td d < d|_| d|ddffg g td d < |`| d|d	ffg d S )
Nc               @   s0   e Zd Zedd Zedd Zedd ZdS )z/ClassTests.testGetSetAndDel.<locals>.ExtraTestsc             W   s   dS )NZSomeValr   )r#   r   r   r   r   __getattr__  s    z;ClassTests.testGetSetAndDel.<locals>.ExtraTests.__getattr__c             W   s   d S )Nr   )r#   r   r   r   r   __setattr__  s    z;ClassTests.testGetSetAndDel.<locals>.ExtraTests.__setattr__c             W   s   d S )Nr   )r#   r   r   r   r   __delattr__  s    z;ClassTests.testGetSetAndDel.<locals>.ExtraTests.__delattr__N)r   rH   rI   r    rn   ro   rp   r   r   r   r   
ExtraTests  s   rq   rn   spamzspam, spam, spam and hamro   eggsrp   cardinal)r!   r   rr   r&   rs   rt   )r#   rq   rF   r   r   r   testGetSetAndDel  s    
zClassTests.testGetSetAndDelc                s@   g  G  fddd}| }~dd l }|  | dg  d S )Nc                   s   e Zd Z fddZdS )z#ClassTests.testDel.<locals>.DelTestc                s     d d S )Nzcrab people, crab people)r   )r#   )xr   r   __del__  s    z+ClassTests.testDel.<locals>.DelTest.__del__N)r   rH   rI   rw   r   )rv   r   r   DelTest  s   rx   r   zcrab people, crab people)gcZcollectassertEqual)r#   rx   rF   ry   r   )rv   r   testDel  s    zClassTests.testDelc          
   C   sL   G dd d}dd }x0t tttttttt|g
D ]}| 	t
||  q0W d S )Nc               @   s0   e Zd Zdd ZeZeZeZeZeZeZ	eZ
dS )z4ClassTests.testBadTypeReturned.<locals>.BadTypeClassc             S   s   d S )Nr   )r#   r   r   r   r[     s    z<ClassTests.testBadTypeReturned.<locals>.BadTypeClass.__int__N)r   rH   rI   r[   r\   __complex__re   rd   	__bytes____bool__r]   r   r   r   r   BadTypeClass  s   r   c             S   s   g |  S )Nr   )rv   r   r   r   index  s    z-ClassTests.testBadTypeReturned.<locals>.index)r_   complexrl   rk   bytesbinr`   ra   boolassertRaisesrT   )r#   r   r   r   r   r   r   testBadTypeReturned  s    
zClassTests.testBadTypeReturnedc             C   s:   G dd d}t |  G dd d}| tt |  d S )Nc               @   s   e Zd ZdS )z$ClassTests.testHashStuff.<locals>.C0N)r   rH   rI   r   r   r   r   C0  s   r   c               @   s   e Zd Zdd ZdS )z$ClassTests.testHashStuff.<locals>.C2c             S   s   dS )Nr)   r   )r#   otherr   r   r   rf         z+ClassTests.testHashStuff.<locals>.C2.__eq__N)r   rH   rI   rf   r   r   r   r   C2  s   r   )rj   r   rT   )r#   r   r   r   r   r   testHashStuff  s    
zClassTests.testHashStuffc             C   sJ   G dd d}| |_ | }y
|  W n tk
r:   Y nX | d d S )Nc               @   s   e Zd ZdS )z%ClassTests.testSFBug532646.<locals>.AN)r   rH   rI   r   r   r   r   A  s   r   zFailed to raise RecursionError)__call__RecursionErrorr%   )r#   r   ar   r   r   testSFBug532646  s    
zClassTests.testSFBug532646c          
      s   dd  G  fddd}y| j  W n< tk
rb } zt|dkrR| d|  W d d }~X Y nX G  fddd}| | k G  fd	d
d
}y
|  W n" tk
r } zW d d }~X Y nX | d d S )Nc             S   s   t dd S )Nbooh)AttributeError)r#   r   r   r   r     s    zBClassTests.testForExceptionsRaisedInInstanceGetattr2.<locals>.boohc                   s   e Zd Ze ZdS )z?ClassTests.testForExceptionsRaisedInInstanceGetattr2.<locals>.AN)r   rH   rI   propertyr   r   )r   r   r   r     s   r   r   z(attribute error for A().a got masked: %sc                   s   e Zd Ze ZdS )z?ClassTests.testForExceptionsRaisedInInstanceGetattr2.<locals>.EN)r   rH   rI   r   rf   r   )r   r   r   E
  s   r   c                   s   e Zd Ze ZdS )z?ClassTests.testForExceptionsRaisedInInstanceGetattr2.<locals>.IN)r   rH   rI   r   r'   r   )r   r   r   I  s   r   z)attribute error for I.__init__ got masked)r   r   rl   r%   )r#   r   rv   r   r   r   )r   r   )testForExceptionsRaisedInInstanceGetattr2  s     
z4ClassTests.testForExceptionsRaisedInInstanceGetattr2c             C   s  G dd d}G dd d|}|d}|d}|  |j|j | |j|j | |j|j |  |j|dj |  t|jt|j |  t|jt|dj | |j|j | |j|j |  |j|j |  t|jt|j |t|jdA }t|j d S )Nc               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z1ClassTests.testHashComparisonOfMethods.<locals>.Ac             S   s
   || _ d S )N)rv   )r#   rv   r   r   r   r'     s    z:ClassTests.testHashComparisonOfMethods.<locals>.A.__init__c             S   s   d S )Nr   )r#   r   r   r   r     s    z3ClassTests.testHashComparisonOfMethods.<locals>.A.fc             S   s   d S )Nr   )r#   r   r   r   g   s    z3ClassTests.testHashComparisonOfMethods.<locals>.A.gc             S   s   | j |j kS )N)rv   )r#   r   r   r   r   rf   "  s    z8ClassTests.testHashComparisonOfMethods.<locals>.A.__eq__c             S   s   | j S )N)rv   )r#   r   r   r   rc   $  s    z:ClassTests.testHashComparisonOfMethods.<locals>.A.__hash__N)r   rH   rI   r'   r   r   rf   rc   r   r   r   r   r     s
   r   c               @   s   e Zd ZdS )z1ClassTests.testHashComparisonOfMethods.<locals>.BN)r   rH   rI   r   r   r   r   B&  s   r   r)   rP   )rz   r   ZassertNotEqualr   rj   )r#   r   r   Za1Za2r   r   r   r   testHashComparisonOfMethods  s     z&ClassTests.testHashComparisonOfMethodsc          	   C   s   G dd d}dd }t dd}| |d t||| | | d d	 t dd}| |d | || t|| | t | d  W d Q R X d S )
Nc               @   s   e Zd ZdS )z2ClassTests.testSetattrWrapperNameIntern.<locals>.AN)r   rH   rI   r   r   r   r   r   =  s   r   c             S   s   dS )Nsummar   )r#   r   r   r   r   r   @  s    z4ClassTests.testSetattrWrapperNameIntern.<locals>.adds   __add__asciir*   r)   r   )rl   ZassertIsNottypero   rz   rp   r   rT   )r#   r   r   nameZname2r   r   r   testSetattrWrapperNameIntern;  s    

z'ClassTests.testSetattrWrapperNameInternc          	   C   s6   G dd d}|  t t|dd  W d Q R X d S )Nc               @   s   e Zd ZdS )z.ClassTests.testSetattrNonStringName.<locals>.AN)r   rH   rI   r   r   r   r   r   P  s   r      x)r   rT   r   ro   )r#   r   r   r   r   testSetattrNonStringNameO  s    z#ClassTests.testSetattrNonStringNamec          	   C   s  G dd d}d}|  td |d W d Q R X |  td ||d W d Q R X |  t| | d W d Q R X |  td t|d W d Q R X |  t| t| d W d Q R X G dd d}d}|  t| |d W d Q R X |  t| ||d W d Q R X |  t| t|d W d Q R X G d	d
 d
}d}|  t| | d W d Q R X |  t| t| d W d Q R X d S )Nc               @   s   e Zd ZdS )z2ClassTests.testConstructorErrorMessages.<locals>.CN)r   rH   rI   r   r   r   r   CZ  s   r   zHC.__init__\(\) takes exactly one argument \(the instance to initialize\)zC\(\) takes no argumentsrO   c                   s(   e Zd Z fddZ fddZ  ZS )z2ClassTests.testConstructorErrorMessages.<locals>.Dc                s   t  j| f|| d S )N)super__new__)clsr   r   )	__class__r   r   r   p  s    z:ClassTests.testConstructorErrorMessages.<locals>.D.__new__c                s   t  j|| d S )N)r   r'   )r#   r   r   )r   r   r   r'   r  s    z;ClassTests.testConstructorErrorMessages.<locals>.D.__init__)r   rH   rI   r   r'   __classcell__r   r   )r   r   Do  s   r   zIobject.__new__\(\) takes exactly one argument \(the type to instantiate\)c                   s   e Zd Z fddZ  ZS )z2ClassTests.testConstructorErrorMessages.<locals>.Ec                s   t  j|| d S )N)r   r'   )r#   r   r   )r   r   r   r'     s    z;ClassTests.testConstructorErrorMessages.<locals>.E.__init__)r   rH   rI   r'   r   r   r   )r   r   r     s   r   zMobject.__init__\(\) takes exactly one argument \(the instance to initialize\))ZassertRaisesRegexrT   r   r'   object)r#   r   Z	error_msgr   r   r   r   r   testConstructorErrorMessagesV  s4    z'ClassTests.testConstructorErrorMessagesN)r   rH   rI   r$   r&   r(   rG   rW   rb   rm   ru   r{   r   r   r   r   r   r   r   r   r   r   r   r   r"      s"   wI0"r"   __main__)__doc__ZunittestZ	testmethsr   r    ZstatictestsZmethod_templatedexecglobalsmethodr   r   r!   ZTestCaser"   r   mainr   r   r   r   <module>   sl   6
    