a
    ze                 
   @   s  d dl Z d dlZd dlZd dlZd dl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mZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ zG d	d
 d
eZW n( ey Z zeZW Y dZ[n
dZ[0 0 zG dd deeZ W n* ey& Z zeZ W Y dZ[n
dZ[0 0 zG dd de!eZ"W n* eyh Z zeZ"W Y dZ[n
dZ[0 0 zG dd deZ#W n* ey Z zeZ#W Y dZ[n
dZ[0 0 z&G dd de$eZ%G dd de%Z&W n* ey Z zeZ&W Y dZ[n
dZ[0 0 zedde'dZ(W n* ey8 Z zeZ(W Y dZ[n
dZ[0 0 zeddZ)W n* eyr Z zeZ)W Y dZ[n
dZ[0 0 zeddddZ*W n* ey Z zeZ*W Y dZ[n
dZ[0 0 zG dd deZ+W n ey   Y n0 d>d d!Z,d"d# Z-G d$d% d%ej.Z/G d&d' d'Z0G d(d) d)ej.Z1G d*d+ d+ej.Z2G d,d- d-ej.Z3G d.d/ d/ej.Z4G d0d1 d1ej.Z5G d2d3 d3ej.Z6d4Z7d5Z8G d6d7 d7ej.Z9G d8d9 d9ej.Z:d:Z;d:Z<d:Z=d:Z>d:Z?d:Z@G d;d< d<ej.ZAe'd=kreB  dS )?    N)OrderedDict)EnumIntEnumEnumMetaFlagIntFlaguniqueauto)StringIO)dumpsloadsPicklingErrorHIGHEST_PROTOCOL)support)	ALWAYS_EQ)	timedeltac                   @   s   e Zd ZdZdZdZdS )Stooges         N__name__
__module____qualname__ZLARRYCURLYMOE r   r   $/usr/lib/python3.9/test/test_enum.pyr      s   r   c                   @   s   e Zd ZdZdZdZdS )
IntStoogesr   r   r   Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdZdS )FloatStoogesg=
ףp=?g(\@gR$_	$	@Nr   r   r   r   r   r   "   s   r   c                   @   s   e Zd ZdZdZdZdS )FlagStoogesr   r   r   Nr   r   r   r   r   r    *   s   r    c                   @   s   e Zd ZdZdS )StrEnumzaccepts only string valuesN)r   r   r   __doc__r   r   r   r   r!   3   s   r!   c                   @   s   e Zd ZdZdZdS )NameGuido van RossumzBarry WarsawN)r   r   r   BDFLZFLUFLr   r   r   r   r#   5   s   r#   Questionzwho what when where whymoduleAnswerzhim this then there becauseTheoryzrule law suppositionspanish_inquisition)qualnamec                   @   s   e Zd ZdZdZdZdS )Fruitr   r   r   N)r   r   r   ZTOMATOZBANANAZCHERRYr   r   r   r   r-   L   s   r-   c                 C   s8   |d u r|}t td D ]}| tt||d| qd S Nr   )protocol)ranger   r   r   )	assertionsourcetargetr/   r   r   r   test_pickle_dump_loadS   s    r4   c              	   C   sJ   t td D ]8}| | t||d W d    q1 s:0    Y  qd S r.   )r0   r   r   )r1   	exceptionobjr/   r   r   r   test_pickle_exceptionY   s    
r7   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestHelpersc                 C   sN   G dd d}dD ]6}| }|  t| t||d | t| qd S )Nc                   @   s   e Zd ZdS )z+TestHelpers.test_is_descriptor.<locals>.fooNr   r   r   r   r   r   r   foob   s   r:   )__get____set__
__delete__r   )assertFalseenum_is_descriptorsetattr
assertTrue)selfr:   attrr6   r   r   r   test_is_descriptora   s    zTestHelpers.test_is_descriptorc                 C   s8   dD ]}|  t| qdD ]}| t| qd S )N)_a_Z_aa_)aa__a__aa____a___a____a________________)rB   r?   
_is_sunderr>   rC   sr   r   r   test_is_sunderj   s    zTestHelpers.test_is_sunderc                 C   s8   dD ]}|  t| qdD ]}| t| qd S )N)rL   Z__aa__)rG   rH   rI   rJ   rK   rF   rM   rN   rO   rP   rQ   rR   rS   )rB   r?   
_is_dunderr>   rU   r   r   r   test_is_dunderr   s    zTestHelpers.test_is_dunderN)r   r   r   rE   rW   rY   r   r   r   r   r8   ^   s   	r8   c                   @   s   e Zd ZdddZdd ZdS )classpropertyNc                 C   s2   || _ || _|| _|d u r(|d ur(|j}|| _d S N)fgetfsetfdelr"   )rC   r\   r]   r^   docr   r   r   __init__}   s    zclassproperty.__init__c                 C   s
   |  |S r[   )r\   )rC   instance
ownerclassr   r   r   r;      s    zclassproperty.__get__)NNNN)r   r   r   r`   r;   r   r   r   r   rZ   {   s   
rZ   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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcddĄ ZdddƄ ZeddȄ Zfddʄ Zgdd̄ Zhdd΄ ZiddЄ Zjdd҄ ZkddԄ Zlddք Zmdd؄ Znddڄ Zodd܄ Zpddބ Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zeejdd dkddd  ZdS (  TestEnumc                 C   s   G dd dt }|| _G dd dtt }|| _G dd dt}|| _G dd dtt }|| _d	d
lm	} G dd d|t }|| _
d S )Nc                   @   s   e Zd ZdZdZdZdZdS )zTestEnum.setUp.<locals>.Seasonr   r   r      N)r   r   r   SPRINGSUMMERAUTUMNWINTERr   r   r   r   Season   s   ri   c                   @   s   e Zd ZdZdZde ZdS )z!TestEnum.setUp.<locals>.KonstantsgB
@JM!	@r   N)r   r   r   EZPITAUr   r   r   r   	Konstants   s   rm   c                   @   s    e Zd ZdZdZdZdZdZdS )zTestEnum.setUp.<locals>.Grades   rd   r   r   r   Nr   r   r   ABCDFr   r   r   r   Grades   s
   ru   c                   @   s   e Zd ZdZdZdZdZdS )z#TestEnum.setUp.<locals>.DirectionalZeastZwestZnorthZsouthN)r   r   r   ZEASTWESTZNORTHZSOUTHr   r   r   r   Directional   s   rw   r   )datec                   @   s   e Zd ZdZdZdS )zTestEnum.setUp.<locals>.Holiday)  r   r   )ry   r      N)r   r   r   ZNEW_YEARIDES_OF_MARCHr   r   r   r   Holiday   s   r|   )r   ri   floatrm   r   ru   strrw   datetimerx   r|   )rC   ri   rm   ru   rw   rx   r|   r   r   r   setUp   s    zTestEnum.setUpc                 C   s&   | j }| tt|tg d d S )N)	__class__r"   __members__r   re   rf   rg   rh   )ri   assertEqualsetdirrC   ri   r   r   r   test_dir_on_class   s
    

zTestEnum.test_dir_on_classc                 C   s(   | j }| tt|jtg d d S )N)r   r"   r   namevalue)ri   r   r   r   rh   r   r   r   r   test_dir_on_item   s
    
zTestEnum.test_dir_on_itemc                 C   sN   G dd dt }| tt|tg d | tt|jtg d d S )Nc                   @   s   e Zd ZdZdZdd ZdS )z3TestEnum.test_dir_with_added_behavior.<locals>.Testthatthosec                 S   s
   d| j  S )NzWowser! I'm %s!r   rC   r   r   r   wowser   s    z:TestEnum.test_dir_with_added_behavior.<locals>.Test.wowserN)r   r   r   thistheser   r   r   r   r   Test   s   r   )r   r"   r   r   r   r   )r   r"   r   r   r   r   )r   r   r   r   r   )rC   r   r   r   r   test_dir_with_added_behavior   s    


z%TestEnum.test_dir_with_added_behaviorc                 C   sB   G dd dt }G dd d|}| tt|jtg d d S )Nc                   @   s   e Zd Zdd ZdS )zBTestEnum.test_dir_on_sub_with_behavior_on_super.<locals>.SuperEnumc                 S   s   dS )Nzdid you see me?r   r   r   r   r   	invisible   s    zLTestEnum.test_dir_on_sub_with_behavior_on_super.<locals>.SuperEnum.invisibleN)r   r   r   r   r   r   r   r   	SuperEnum   s   r   c                   @   s   e Zd ZdZdS )z@TestEnum.test_dir_on_sub_with_behavior_on_super.<locals>.SubEnumrn   Nr   r   r   sampler   r   r   r   SubEnum   s   r   )r   r"   r   r   r   r   )r   r   r   r   r   rC   r   r   r   r   r   &test_dir_on_sub_with_behavior_on_super   s    
z/TestEnum.test_dir_on_sub_with_behavior_on_superc                 C   s>   G dd dt }G dd d|}| dhtt|jk d S )Nc                   @   s   e Zd ZdddZdS )zZTestEnum.test_dir_on_sub_with_behavior_including_instance_dict_on_super.<locals>.SuperEnum c                 S   s   t | |}||_||_|S r[   )int__new___value_description)clsr   r   r6   r   r   r   r      s    zbTestEnum.test_dir_on_sub_with_behavior_including_instance_dict_on_super.<locals>.SuperEnum.__new__N)r   r   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )zXTestEnum.test_dir_on_sub_with_behavior_including_instance_dict_on_super.<locals>.SubEnumrn   Nr   r   r   r   r   r      s   r   r   )r   rB   r   r   r   r   r   r   r   >test_dir_on_sub_with_behavior_including_instance_dict_on_super   s    zGTestEnum.test_dir_on_sub_with_behavior_including_instance_dict_on_superc                 C   s   | j }| ||j|j d S r[   )ri   assertIsrh   r   r   r   r   test_enum_in_enum_out   s    zTestEnum.test_enum_in_enum_outc                 C   s   | j }| |jjd d S Nr   )ri   r   re   r   r   r   r   r   test_enum_value   s    zTestEnum.test_enum_valuec                 C   s   |  tjjd d S )Nr   )r   r   r   r   r   r   r   r   test_intenum_value   s    zTestEnum.test_intenum_valuec                 C   s  | j }t|}| t|t| | t|d| | |j|j|j|jg| td	 dD ]\}}||}| |t
|| | |j| | || | |j| | || | t|| | || | t|d|  | t|d|| q^d S )Nrd   zSPRING SUMMER AUTUMN WINTERr   zSeason.z<Season.{0}: {1}>)ri   listr   lenre   rf   rg   rh   	enumeratesplitgetattrr   assertNotEqualr   assertInr   typeassertIsInstancer~   reprformat)rC   ri   lstiZseasoner   r   r   	test_enum   s*    
zTestEnum.test_enumc                 C   s   | j }| |jjd | |jjd | t d|j_W d    n1 sN0    Y  | t d|j_W d    n1 s0    Y  d S )Nre   r   Zinviernor   )ri   r   re   r   r   assertRaisesAttributeErrorr   r   r   r   test_value_name  s    &zTestEnum.test_value_namec                 C   s:   | j }| t d|_W d    n1 s,0    Y  d S )Nzreally cold)ri   r   r   rh   r   r   r   r   test_changing_member  s    zTestEnum.test_changing_memberc                 C   s   G dd dt }| t|d |`| t|d | t |`W d    n1 sX0    Y  | t |`W d    n1 s0    Y  | t |j`	W d    n1 s0    Y  d S )Nc                   @   s$   e Zd ZdZdZdZdZdd ZdS )z0TestEnum.test_attribute_deletion.<locals>.Seasonr   r   r   rd   c                 S   s   d S r[   r   )r   r   r   r   spam  s    z5TestEnum.test_attribute_deletion.<locals>.Season.spamN)r   r   r   re   rf   rg   rh   r   r   r   r   r   ri     s
   ri   r   )
r   rB   hasattrr   r>   r   r   re   ZDRYr   r   r   r   r   test_attribute_deletion  s    	""z TestEnum.test_attribute_deletionc                 C   s"   G dd dt }| t| d S )Nc                   @   s   e Zd ZdS )z*TestEnum.test_bool_of_class.<locals>.EmptyNr9   r   r   r   r   Empty,  s   r   r   rB   bool)rC   r   r   r   r   test_bool_of_class+  s    zTestEnum.test_bool_of_classc                 C   s,   G dd dt }|D ]}| t| qd S )Nc                   @   s   e Zd ZdZdZdZdS )z+TestEnum.test_bool_of_member.<locals>.Countr   r   r   N)r   r   r   Zzeroonetwor   r   r   r   Count1  s   r   r   )rC   r   memberr   r   r   test_bool_of_member0  s    zTestEnum.test_bool_of_memberc                 C   s(  |  t  G dd dt}W d    n1 s00    Y  |  t  G dd dt}W d    n1 sj0    Y  |  t  G dd dt}W d    n1 s0    Y  |  t  G dd dt}W d    n1 s0    Y  |  t  G dd dt}W d    n1 s0    Y  d S )Nc                   @   s   e Zd ZdZdS *TestEnum.test_invalid_names.<locals>.Wrong	   N)r   r   r   mror   r   r   r   Wrong:  s   r   c                   @   s   e Zd ZdZdS )r      N)r   r   r   _create_r   r   r   r   r   =  s   c                   @   s   e Zd ZdZdS r   )r   r   r   _get_mixins_r   r   r   r   r   @  s   c                   @   s   e Zd ZdZdS )r   r   N)r   r   r   
_find_new_r   r   r   r   r   C  s   c                   @   s   e Zd ZdZdS r   )r   r   r   Z
_any_name_r   r   r   r   r   F  s   r   
ValueErrorr   rC   r   r   r   r   test_invalid_names8  s    ....zTestEnum.test_invalid_namesc                 C   s~   G dd dt }| |j | |j G dd dt }| |j | |j G dd dtt }| |j | |j d S )Nc                   @   s   e Zd ZdZdZdS )z!TestEnum.test_bool.<locals>.LogicTFNr   r   r   truefalser   r   r   r   LogicK  s   r   c                   @   s   e Zd ZdZdZdd ZdS )z%TestEnum.test_bool.<locals>.RealLogicTFc                 S   s
   t | jS r[   )r   r   r   r   r   r   __bool__T  s    z.TestEnum.test_bool.<locals>.RealLogic.__bool__N)r   r   r   r   r   r   r   r   r   r   	RealLogicQ  s   r   c                   @   s   e Zd ZdZdZdS )z$TestEnum.test_bool.<locals>.IntLogicr   r   Nr   r   r   r   r   IntLogicY  s   r   )r   rB   r   r   r>   r   )rC   r   r   r   r   r   r   	test_boolI  s    zTestEnum.test_boolc                 C   s   | j }| |j| | t d|v  W d    n1 s<0    Y  | t d|v  W d    n1 sn0    Y  |d}| || G dd dt}| |j| d S )Nr   rg   c                   @   s   e Zd ZdZdZdS )z)TestEnum.test_contains.<locals>.OtherEnumr   r   Nr   r   r   r   r   r   r   r   r   	OtherEnumj  s   r   )ri   r   rg   r   	TypeErrorr   ZassertNotInr   )rC   ri   valr   r   r   r   test_contains_  s    &&zTestEnum.test_containsc                 C   s   | j }| t |j|jk  W d    n1 s20    Y  | t |jdk W d    n1 sf0    Y  | |jd G dd dt}| |j|j | t |j|jk  W d    n1 s0    Y  d S )Nrd   r   c                   @   s   e Zd ZdZdZdZdS )z'TestEnum.test_comparisons.<locals>.Partr   r   r   N)r   r   r   re   CLIPZBARRELr   r   r   r   Partw  s   r   )ri   r   r   re   rh   r   r   r   )rC   ri   r   r   r   r   test_comparisonsn  s    *(zTestEnum.test_comparisonsc                 C   s   G dd dt }t|}| ||j|j|j|jg | |j|j | |jj	d | |jj	d | |d|j | |d|j | |jj
d | dd |j D dd	g d S )
Nc                   @   s$   e Zd ZdZdZd ZZdZdZdS )z-TestEnum.test_enum_duplicates.<locals>.Seasonr   r   r   rd   N)	r   r   r   re   rf   rg   FALLrh   ANOTHER_SPRINGr   r   r   r   ri     s
   ri   r   r   rg   c                 S   s   g | ]\}}|j |kr|qS r   r   .0kvr   r   r   
<listcomp>      z1TestEnum.test_enum_duplicates.<locals>.<listcomp>r   r   )r   r   r   re   rf   rg   rh   r   r   r   r   r   items)rC   ri   r   r   r   r   test_enum_duplicates  s$    zTestEnum.test_enum_duplicatesc                 C   s   |  t  G dd dt}W d    n1 s00    Y  |  t  G dd dt}W d    n1 sj0    Y  |  t  G dd dt}W d    n1 s0    Y  d S )Nc                   @   s   e Zd ZdZdZdZdZdS )+TestEnum.test_duplicate_name.<locals>.Colorr   r   r   rd   Nr   r   r   redgreenbluer   r   r   r   Color  s   r   c                   @   s    e Zd ZdZdZdZdd ZdS )r   r   r   r   c                 S   s   dS )Nr   r   r   r   r   r   r     s    /TestEnum.test_duplicate_name.<locals>.Color.redNr   r   r   r   r   r     s   c                   @   s$   e Zd Zedd ZdZdZdZdS )r   c                 S   s   dS )NZredderr   r   r   r   r   r     s    r   r   r   r   N)r   r   r   propertyr   r   r   r   r   r   r   r     s
   
r   r   r   rC   r   r   r   r   test_duplicate_name  s    ..zTestEnum.test_duplicate_namec                 C   s^   G dd dt }| t||j|jg | t|j| | |jjd | |jjd d S )Nc                   @   s   e Zd ZdZdZdS )z/TestEnum.test_enum_with_value_name.<locals>.Huhr   r   N)r   r   r   r   r   r   r   r   r   Huh  s   r   r   r   )r   r   r   r   r   r   r   )rC   r   r   r   r   test_enum_with_value_name  s    
z"TestEnum.test_enum_with_value_namec                 C   s   | j }| d|jdt|j | d|jdt|j | d|jdt|j | d|jdt|j | d|jdt|j | d|jdt|j d S N{}{:}{:20}{:^20}{:>20}{:<20})ri   r   r   re   r~   r   r   r   r   test_format_enum  s&    zTestEnum.test_format_enumc                 C   s:   G dd dt }| t|jd | d|jd d S )Nc                   @   s    e Zd Ze Ze Zdd ZdS )z=TestEnum.test_str_override_enum.<locals>.EnumWithStrOverridesc                 S   s   dS NStr!r   r   r   r   r   __str__  s    zETestEnum.test_str_override_enum.<locals>.EnumWithStrOverrides.__str__N)r   r   r   r	   r   r   r  r   r   r   r   EnumWithStrOverrides  s   r  r  r   r   r   r~   r   r   )rC   r  r   r   r   test_str_override_enum  s    zTestEnum.test_str_override_enumc                 C   s:   G dd dt }| t|jd | d|jd d S )Nc                   @   s   e Zd ZdZdZdd ZdS )zBTestEnum.test_format_override_enum.<locals>.EnumWithFormatOverride      ?       @c                 S   s   dS )NFormat!!r   rC   specr   r   r   
__format__  s    zMTestEnum.test_format_override_enum.<locals>.EnumWithFormatOverride.__format__Nr   r   r   r   r   r  r   r   r   r   EnumWithFormatOverride  s   r  zEnumWithFormatOverride.oner   r  r  )rC   r  r   r   r   test_format_override_enum  s    z"TestEnum.test_format_override_enumc                 C   s:   G dd dt }| t|jd | d|jd d S )Nc                   @   s(   e Zd Ze Ze Zdd Zdd ZdS )zNTestEnum.test_str_and_format_override_enum.<locals>.EnumWithStrFormatOverridesc                 S   s   dS r  r   r   r   r   r   r    s    zVTestEnum.test_str_and_format_override_enum.<locals>.EnumWithStrFormatOverrides.__str__c                 S   s   dS NFormat!r   r  r   r   r   r    s    zYTestEnum.test_str_and_format_override_enum.<locals>.EnumWithStrFormatOverrides.__format__N)r   r   r   r	   r   r   r  r  r   r   r   r   EnumWithStrFormatOverrides  s   r  r  r   r  r  )rC   r  r   r   r   !test_str_and_format_override_enum  s    z*TestEnum.test_str_and_format_override_enumc                 C   s<   G dd dt t}| t|jd | d|jd d S )Nc                   @   s   e Zd ZdZdZdd ZdS )zBTestEnum.test_str_override_mixin.<locals>.MixinEnumWithStrOverrider	  r
  c                 S   s   dS )NOverridden!r   r   r   r   r   r    s    zJTestEnum.test_str_override_mixin.<locals>.MixinEnumWithStrOverride.__str__N)r   r   r   r   r   r  r   r   r   r   MixinEnumWithStrOverride  s   r  r  r   r}   r   r   r~   r   r   )rC   r  r   r   r   test_str_override_mixin  s    z TestEnum.test_str_override_mixinc                 C   s<   G dd dt t}| t|jd | d|jd d S )Nc                   @   s$   e Zd ZdZdZdd Zdd ZdS )zPTestEnum.test_str_and_format_override_mixin.<locals>.MixinWithStrFormatOverridesr	  r
  c                 S   s   dS r  r   r   r   r   r   r    s    zXTestEnum.test_str_and_format_override_mixin.<locals>.MixinWithStrFormatOverrides.__str__c                 S   s   dS r  r   r  r   r   r   r    s    z[TestEnum.test_str_and_format_override_mixin.<locals>.MixinWithStrFormatOverrides.__format__N)r   r   r   r   r   r  r  r   r   r   r   MixinWithStrFormatOverrides  s   r  r  r   r  r  )rC   r  r   r   r   "test_str_and_format_override_mixin  s    z+TestEnum.test_str_and_format_override_mixinc                 C   s<   G dd dt t}| t|jd | d|jd d S )Nc                   @   s   e Zd ZdZdZdd ZdS )z6TestEnum.test_format_override_mixin.<locals>.TestFloatr	  r
  c                 S   s   dS )NTestFloat success!r   r  r   r   r   r    s    zATestEnum.test_format_override_mixin.<locals>.TestFloat.__format__Nr  r   r   r   r   	TestFloat   s   r  zTestFloat.oner   r  r  )rC   r  r   r   r   test_format_override_mixin  s    z#TestEnum.test_format_override_mixinc                 C   s   |  ||||j d S r[   )r   r   r   )rC   r  r   r   r   r   assertFormatIsValue  s    zTestEnum.assertFormatIsValuec                 C   sz   | j }| d|j | d|j | d|j | d|j | d|j | d|j | d|j | d|j d S )	Nr   r   r   r   r   r  z{:%Y %m}z{:%Y %m %M:00})r|   r  r{   )rC   r|   r   r   r   test_format_enum_date  s    zTestEnum.test_format_enum_datec                 C   s   | j }| d|j | d|j | d|j | d|j | d|j | d|j | d|j | d|j | d	|j d S )
Nr   r   r   r   r   r  z{:n}z{:5.2}z{:f})rm   r  rl   )rC   rm   r   r   r   test_format_enum_float  s    zTestEnum.test_format_enum_floatc                 C   s   | j }| d|j | d|j | d|j | d|j | d|j | d|j | d|j | d|j | d	|j d S )
Nr   r   r   r   r   r  z{:+}z{:08X}z{:b})ru   r  rr   )rC   ru   r   r   r   test_format_enum_int"  s    zTestEnum.test_format_enum_intc                 C   s^   | j }| d|j | d|j | d|j | d|j | d|j | d|j d S r   )rw   r  rv   )rC   rw   r   r   r   test_format_enum_str.  s    zTestEnum.test_format_enum_strc                 C   s&   G dd dt }| t|jd d S )Nc                   @   s$   e Zd Zd\ZZZdd ZejZdS )z1TestEnum.test_object_str_override.<locals>.Colorsr   r   r   c                 S   s   d| j f S )Nztest.%s)_name_r   r   r   r   __repr__:  s    z:TestEnum.test_object_str_override.<locals>.Colors.__repr__N)	r   r   r   REDGREENBLUEr&  objectr  r   r   r   r   Colors8  s   
r+  ztest.RED)r   r   r~   r'  )rC   r+  r   r   r   test_object_str_override7  s    z!TestEnum.test_object_str_overridec                 C   s   G dd dt }G dd dt }G dd d|t|}| |jtu  | t|jd | t|jdd G d	d
 d
||}| t|jd | t|jdd d S )Nc                   @   s   e Zd Zdd ZdS )z2TestEnum.test_enum_str_override.<locals>.MyStrEnumc                 S   s   dS )NMyStrr   r   r   r   r   r  A  s    z:TestEnum.test_enum_str_override.<locals>.MyStrEnum.__str__Nr   r   r   r  r   r   r   r   	MyStrEnum@  s   r/  c                   @   s   e Zd Zdd ZdS )z5TestEnum.test_enum_str_override.<locals>.MyMethodEnumc                 S   s
   d| j  S )NzHello!  My name is %sr   r   r   r   r   helloD  s    z;TestEnum.test_enum_str_override.<locals>.MyMethodEnum.helloNr   r   r   r0  r   r   r   r   MyMethodEnumC  s   r2  c                   @   s   e Zd ZdZdZdS )z2TestEnum.test_enum_str_override.<locals>.Test1Enumr   r   Nr   r   r   OneZTwor   r   r   r   	Test1EnumF  s   r5  r-  r   c                   @   s   e Zd ZdZdZdS )z2TestEnum.test_enum_str_override.<locals>.Test2Enumr   r   Nr3  r   r   r   r   	Test2EnumM  s   r6  )r   r   rB   _member_type_r   r~   r4  r   )rC   r/  r2  r5  r6  r   r   r   test_enum_str_override?  s    zTestEnum.test_enum_str_overridec                 C   s<  G dd dt }G dd d|tj}| t|jd |t d< |t d< t| j|j t| j| G dd d|}G dd	 d	|tj}| |j	| |t d< |t d	< t| j|j
 t| j| G d
d dt }G dd d|t}| |j	| | |d|j |t d< |t d< t| jt|j t| jt| d S )Nc                   @   s   e Zd ZdZdd ZdS )z1TestEnum.test_inherited_data_type.<locals>.HexIntHexIntc                 S   s   t | S r[   hexr   r   r   r   r&  V  s    z:TestEnum.test_inherited_data_type.<locals>.HexInt.__repr__Nr   r   r   r&  r   r   r   r   r9  T  s   r9  c                   @   s   e Zd ZdZdZdZdZdS )z1TestEnum.test_inherited_data_type.<locals>.MyEnumMyEnumr   r   r   N)r   r   r   rp   rq   rr   r   r   r   r   r=  X  s   r=  z<MyEnum.A: 0x1>c                   @   s   e Zd ZdZdS )z3TestEnum.test_inherited_data_type.<locals>.SillyIntSillyIntNr9   r   r   r   r   r>  c  s   r>  c                   @   s   e Zd ZdZdZdZdZdS )z6TestEnum.test_inherited_data_type.<locals>.MyOtherEnumMyOtherEnumrd   rn      N)r   r   r   rs   rk   rt   r   r   r   r   r?  f  s   r?  c                   @   s   e Zd ZdZdd ZdS )z4TestEnum.test_inherited_data_type.<locals>.BrokenInt	BrokenIntc                 S   s   t | |S r[   )r   r   r   r   r   r   r   r   s  s    z<TestEnum.test_inherited_data_type.<locals>.BrokenInt.__new__Nr   r   r   r   r   rA  q  s   rA  c                   @   s   e Zd ZdZdZdZdZdS )z7TestEnum.test_inherited_data_type.<locals>.MyBrokenEnumMyBrokenEnum      r   N)r   r   r   GHIr   r   r   r   rC  u  s   rC  rD  )r   r?   r   r   r   rp   globalsr4   r   r7  rk   rF  r7   r   r   r   )rC   r9  r=  r>  r?  rA  rC  r   r   r   test_inherited_data_typeS  s,    





z!TestEnum.test_inherited_data_typec                 C   s   |  td$ G dd dttt}W d    n1 s60    Y  G dd dt}G dd dt}|  td$ G dd d||t}W d    n1 s0    Y  d S )	Nztoo many data typesc                   @   s   e Zd ZdZdS z.TestEnum.test_too_many_data_types.<locals>.Huhr   Nr   r   r   r4  r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )z0TestEnum.test_too_many_data_types.<locals>.MyStrc                 S   s   d|  S )Nz	hello, %sr   r   r   r   r   r0    s    z6TestEnum.test_too_many_data_types.<locals>.MyStr.helloNr1  r   r   r   r   r-    s   r-  c                   @   s   e Zd Zdd ZdS )z0TestEnum.test_too_many_data_types.<locals>.MyIntc                 S   s   t | S r[   r:  r   r   r   r   r     s    z5TestEnum.test_too_many_data_types.<locals>.MyInt.reprN)r   r   r   r   r   r   r   r   MyInt  s   rM  c                   @   s   e Zd ZdZdS rK  rL  r   r   r   r   r     s   )assertRaisesRegexr   r~   r   r   )rC   r   r-  rM  r   r   r   test_too_many_data_types  s    2z!TestEnum.test_too_many_data_typesc                 C   sH   | j }i }d||j< d||j< d||j< d||j< | ||j d d S )NZ1225Z0315Z0704Z1031)ri   rh   re   rf   rg   r   )rC   ri   Zdatesr   r   r   	test_hash  s    



zTestEnum.test_hashc                 C   s(   G dd dt t}| |j|jk  d S )Nc                   @   s   e Zd ZdZde ZdS )z/TestEnum.test_intenum_from_scratch.<locals>.phyr   r   Nr   r   r   pitaur   r   r   r   phy  s   rT  r   r   rB   rR  rS  rC   rT  r   r   r   test_intenum_from_scratch  s    z"TestEnum.test_intenum_from_scratchc                 C   s8   G dd dt t}G dd d|}| |j|jk  d S )Nc                   @   s   e Zd ZdS )z0TestEnum.test_intenum_inherited.<locals>.IntEnumNr9   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZde ZdS )z,TestEnum.test_intenum_inherited.<locals>.phyr   r   NrQ  r   r   r   r   rT    s   rT  rU  )rC   r   rT  r   r   r   test_intenum_inherited  s    zTestEnum.test_intenum_inheritedc                 C   s(   G dd dt t}| |j|jk  d S )Nc                   @   s   e Zd ZdZde ZdS )z1TestEnum.test_floatenum_from_scratch.<locals>.phyrj   r   NrQ  r   r   r   r   rT    s   rT  r}   r   rB   rR  rS  rV  r   r   r   test_floatenum_from_scratch  s    z$TestEnum.test_floatenum_from_scratchc                 C   s8   G dd dt t}G dd d|}| |j|jk  d S )Nc                   @   s   e Zd ZdS )z4TestEnum.test_floatenum_inherited.<locals>.FloatEnumNr9   r   r   r   r   	FloatEnum  s   r[  c                   @   s   e Zd ZdZde ZdS )z.TestEnum.test_floatenum_inherited.<locals>.phyrj   r   NrQ  r   r   r   r   rT    s   rT  rY  )rC   r[  rT  r   r   r   test_floatenum_inherited  s    z!TestEnum.test_floatenum_inheritedc                 C   s(   G dd dt t}| |j|jk  d S )Nc                   @   s   e Zd ZdZdZdS )z/TestEnum.test_strenum_from_scratch.<locals>.phyPiTauNrQ  r   r   r   r   rT    s   rT  r~   r   rB   rR  rS  rV  r   r   r   test_strenum_from_scratch  s    z"TestEnum.test_strenum_from_scratchc                 C   s8   G dd dt t}G dd d|}| |j|jk  d S )Nc                   @   s   e Zd ZdS )z0TestEnum.test_strenum_inherited.<locals>.StrEnumNr9   r   r   r   r   r!     s   r!   c                   @   s   e Zd ZdZdZdS )z,TestEnum.test_strenum_inherited.<locals>.phyr]  r^  NrQ  r   r   r   r   rT    s   rT  r_  )rC   r!   rT  r   r   r   test_strenum_inherited  s    zTestEnum.test_strenum_inheritedc                 C   s0  G dd dt }| g d|j d | dd t|jD g d t|}| t|t| | t|d d	}| }t|d
D ]\}}||}| || | t	|| | |j
| | || | ||d
 | | d|  k odk n   | t|| | |t	 | |t qd S )Nc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	z&TestEnum.test_intenum.<locals>.WeekDayr   r   r   rd   rn   r@  rD  N)
r   r   r   SUNDAYMONDAYTUESDAY	WEDNESDAYTHURSDAYFRIDAYSATURDAYr   r   r   r   WeekDay  s   ri  )rG   bcrk  c                 S   s   g | ]}|qS r   r   )r   r   r   r   r   r     r   z)TestEnum.test_intenum.<locals>.<listcomp>)r   r   r   rD  z8SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAYr   r   rE  )r   r   rc  r0   rd  r   r   r   r   r   r   r   indexrB   r   r   r   r   )rC   ri  r   r3   r   Zweekdayr   r   r   r   test_intenum  s&    	 zTestEnum.test_intenumc                 C   sT   G dd dt }| |j|j | |djd | dd |j D dg d S )Nc                   @   s,   e Zd ZdZdZd ZZdZdZdZ	dZ
dS )	z1TestEnum.test_intenum_duplicates.<locals>.WeekDayr   r   r   rd   rn   r@  rD  N)r   r   r   rb  rc  rd  TEUSDAYre  rf  rg  rh  r   r   r   r   ri    s   ri  r   rd  c                 S   s   g | ]\}}|j |kr|qS r   r   r   r   r   r   r     s   
z4TestEnum.test_intenum_duplicates.<locals>.<listcomp>rn  )r   r   rn  rd  r   r   r   r   )rC   ri  r   r   r   test_intenum_duplicates  s    z TestEnum.test_intenum_duplicatesc                 C   sP   |  tddtj | t tdd W d    n1 sB0    Y  d S )Ns    bigs    )r   r   
from_bytesr   r   r   r   r   r   r   test_intenum_from_bytes  s    z TestEnum.test_intenum_from_bytesc                 C   sl   t tjj}| t|tj t tjjd }| t t| W d    n1 s^0    Y  d S )Ng{Gz?)	r}   r;  r   r   r   r   fromhexr   r   )rC   hr   r   r   test_floatenum_fromhex  s
    zTestEnum.test_floatenum_fromhexc                 C   s,   t ttrtt| jtj t| jt d S r[   )
isinstancer   	Exceptionr4   r   r   r   r   r   r   test_pickle_enum  s    
zTestEnum.test_pickle_enumc                 C   s,   t ttrtt| jtj t| jt d S r[   )rv  r   rw  r4   r   r   r   r   r   r   test_pickle_int  s    
zTestEnum.test_pickle_intc                 C   s,   t ttrtt| jtj t| jt d S r[   )rv  r   rw  r4   r   r   r   r   r   r   test_pickle_float  s    
zTestEnum.test_pickle_floatc                 C   s,   t ttrtt| jtj t| jt d S r[   )rv  r)   rw  r4   r   Zhimr   r   r   r   test_pickle_enum_function  s    
z"TestEnum.test_pickle_enum_functionc                 C   s,   t ttrtt| jtj t| jt d S r[   )rv  r&   rw  r4   r   Zwhor   r   r   r   %test_pickle_enum_function_with_module  s    
z.TestEnum.test_pickle_enum_function_with_modulec                 C   s    t ttrt| tjd d S )Nr+   )rv  r*   rw  r   r   r   r   r   r    test_enum_function_with_qualname  s    
z)TestEnum.test_enum_function_with_qualnamec                 C   s<   G dd dt }|| j_d| jj | j_t| j| jj d S )Nc                   @   s   e Zd ZdZdZdS )zLTestEnum.test_class_nested_enum_and_pickle_protocol_four.<locals>.NestedEnumcommonZrareN)r   r   r   twigsZshinyr   r   r   r   
NestedEnum!  s   r  z%s.NestedEnum)r   r   r  r   r   r4   r   r  )rC   r  r   r   r   /test_class_nested_enum_and_pickle_protocol_four  s    z8TestEnum.test_class_nested_enum_and_pickle_protocol_fourc                 C   s>   G dd dt }tj|_ttD ]}| |j|d q d S )Nc                   @   s   e Zd ZdZdZdS )z6TestEnum.test_pickle_by_name.<locals>.ReplaceGlobalIntr   r   N)r   r   r   ONETWOr   r   r   r   ReplaceGlobalInt*  s   r  r  )r   r?   _reduce_ex_by_name__reduce_ex__r0   r   r   r  )rC   r  protor   r   r   test_pickle_by_name)  s    zTestEnum.test_pickle_by_namec                 C   sD   t ddtd}|t d< t| t| jt|j t| jt	| d S )N	BadPicklezdill sweet bread-n-butterr'   )
r   r   rI  r?   _make_class_unpicklabler7   r   r   Zdillr   )rC   r  r   r   r   test_exploding_pickle1  s    

zTestEnum.test_exploding_picklec                 C   s$   G dd dt t}| |jd d S )Nc                   @   s   e Zd ZdZdZdZdS )z-TestEnum.test_string_enum.<locals>.SkillLevelz'what is the sound of one hand clapping?z#why did the chicken cross the road?knock, knock!N)r   r   r   ZmasterZ
journeyman
apprenticer   r   r   r   
SkillLevel;  s   r  r  )r~   r   r   r  )rC   r  r   r   r   test_string_enum:  s    zTestEnum.test_string_enumc                 C   sL   G dd dt }| |d|j | t|d|j | |d |j d S )Nc                   @   s   e Zd ZdZdZdZdZdS )z-TestEnum.test_getattr_getitem.<locals>.Periodr   r   r   rd   N)r   r   r   morningnoonZeveningnightr   r   r   r   PeriodB  s   r  r   r  r  )r   r   r  r   r  r  rC   r  r   r   r   test_getattr_getitemA  s    zTestEnum.test_getattr_getitemc                 C   s   | j }| t|d d S )N__eq__)ri   rB   r   r   r   r   r   test_getattr_dunderK  s    zTestEnum.test_getattr_dunderc                 C   s4   G dd dt }| t||j|j|j|jg d S )Nc                   @   s   e Zd ZdZdZdZdZdS )z-TestEnum.test_iteration_order.<locals>.Seasonr   rd   r   r   N)r   r   r   rf   rh   rg   re   r   r   r   r   ri   P  s   ri   )r   r   r   rf   rh   rg   re   r   r   r   r   test_iteration_orderO  s
    zTestEnum.test_iteration_orderc                 C   s2   |  tt| j| jj| jj| jj| jjg d S r[   )r   r   reversedri   rh   rg   rf   re   r   r   r   r   test_reversed_iteration_orderZ  s    z&TestEnum.test_reversed_iteration_orderc                 C   s   t dd}t|}| t|t| | t|d| | |j|j|jg| td dD ]X\}}||}| t	|j
| | || | |j| | || | t|| q^d S NSummerMonthjune july augustr   r   r   r   r   r   junejulyaugustr   r   r   r   r   r   r   r   r   rC   r  r   r   monthr   r   r   r   !test_programmatic_function_stringa  s    
z*TestEnum.test_programmatic_function_stringc                 C   s   t dddd}t|}| t|t| | t|d| | |j|j|jg| td dD ]X\}}||}| t	|j
| | || | |j| | || | t|| qbd S )Nr  r  
   startr   r  r  r   r   r   ,test_programmatic_function_string_with_startr  s    z5TestEnum.test_programmatic_function_string_with_startc                 C   s   t dg d}t|}| t|t| | t|d| | |j|j|jg| td dD ]X\}}||}| t	|j
| | || | |j| | || | t|| qbd S )Nr  r  r  r  r   r  r   r  r  r   r   r   &test_programmatic_function_string_list  s    z/TestEnum.test_programmatic_function_string_listc                 C   s   t dg ddd}t|}| t|t| | t|d| | |j|j|jg| td dD ]X\}}||}| t	|j
| | || | |j| | || | t|| qfd S )Nr  r     r  r   r  r  r  r   r   r   1test_programmatic_function_string_list_with_start  s    z:TestEnum.test_programmatic_function_string_list_with_startc                 C   s   t dd}t|}| t|t| | t|d| | |j|j|jg| td dD ]X\}}||}| t	|j
| | || | |j| | || | t|| q^d S Nr  ))r  r   )r  r   )r  r   r   r  r   r  r  r   r   r   #test_programmatic_function_iterable  s$    z,TestEnum.test_programmatic_function_iterablec                 C   s   t dtd}t|}| t|t| | t|d| | |j|j|jg| td	 dD ]X\}}||}| t
|j| | || | |j| | || | t|| qbd S r  )r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r   r  r   r   r   $test_programmatic_function_from_dict  s$    z-TestEnum.test_programmatic_function_from_dictc                 C   s   t ddtd}t|}| t|t| | t|d| | |j|j|jg| td	 dD ]F\}}||}| || | |j
| | || | t|| qbd S )Nr  r  )r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   r   r  r   r   r   test_programmatic_function_type  s    z(TestEnum.test_programmatic_function_typec                 C   s   t ddtdd}t|}| t|t| | t|d| | |j|j|jg| td	 dD ]F\}}||}| || | |j
| | || | t|| qdd S )Nr  r     )r   r  r   r  r  r   r   r   *test_programmatic_function_type_with_start  s    z3TestEnum.test_programmatic_function_type_with_startc                 C   s   t dd}t|}| t|t| | t|d| | |j|j|jg| td dD ]F\}}||}| || | |j	| | 
|| | t|| q^d S r  r   r   r   r   r  r  r  r   r   r   r   r   r   r  r   r   r   -test_programmatic_function_type_from_subclass  s    
z6TestEnum.test_programmatic_function_type_from_subclassc                 C   s   t dddd}t|}| t|t| | t|d| | |j|j|jg| td dD ]F\}}||}| || | |j	| | 
|| | t|| qbd S )Nr  r  (   r  r   r  r  r   r   r   8test_programmatic_function_type_from_subclass_with_start  s    zATestEnum.test_programmatic_function_type_from_subclass_with_startc                 C   sT   t ttrt| tjd | tjtd | tjttd t| jtj d S )Nr$   r%   )	rv  r#   rw  r   r%   rB   r   r   r4   r   r   r   r   test_subclassing  s    
zTestEnum.test_subclassingc                 C   s   G dd dt }| t  G dd d|}W d    n1 s@0    Y  | td" G dd d|t}W d    n1 s~0    Y  d S )Nc                   @   s   e Zd ZdZdZdZdS )z&TestEnum.test_extending.<locals>.Colorr   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )z*TestEnum.test_extending.<locals>.MoreColorrd   rn   r@  Nr   r   r   ZcyanmagentaZyellowr   r   r   r   	MoreColor  s   r  z0EvenMoreColor: cannot extend enumeration 'Color'c                   @   s   e Zd ZdZdS )z.TestEnum.test_extending.<locals>.EvenMoreColorrD  N)r   r   r   Z
chartrueser   r   r   r   EvenMoreColor   s   r  )r   r   r   rN  r   )rC   r   r  r  r   r   r   test_extending  s
    .zTestEnum.test_extendingc                 C   s8   G dd dt }| t|j| | |j d d S )Nc                   @   s   e Zd ZdZdZdd ZdS )z/TestEnum.test_exclude_methods.<locals>.whateverr   r   c                 S   s
   d| j  S )Nz
no, not %sr   r   r   r   r   really'  s    z6TestEnum.test_exclude_methods.<locals>.whatever.reallyN)r   r   r   r   r   r  r   r   r   r   whatever$  s   r  zno, not that)r   ZassertIsNotr   r  r   r   )rC   r  r   r   r   test_exclude_methods#  s    zTestEnum.test_exclude_methodsc                 C   s@   |  t" G dd dtt}W d    n1 s20    Y  d S )Nc                   @   s   e Zd ZdZdS )z4TestEnum.test_wrong_inheritance_order.<locals>.Wrongzerror before this pointN)r   r   r   ZNotHerer   r   r   r   r   .  s   r   )r   r   r   r~   r   r   r   r   test_wrong_inheritance_order,  s    z%TestEnum.test_wrong_inheritance_orderc                 C   sT   G dd dt }G dd dt }| |j|j | |j|j | |j|j d S )Nc                   @   s   e Zd ZdZdZdZdS )z2TestEnum.test_intenum_transitivity.<locals>.numberr   r   r   N)r   r   r   r   r   threer   r   r   r   number2  s   r  c                   @   s   e Zd ZdZdZdZdS )z2TestEnum.test_intenum_transitivity.<locals>.numeror   r   r   N)r   r   r   unodostresr   r   r   r   numero6  s   r  )r   r   r   r  r   r  r  r  )rC   r  r  r   r   r   test_intenum_transitivity1  s
    z"TestEnum.test_intenum_transitivityc                 C   s4   G dd dt }G dd dt }| t||j d S )Nc                   @   s   e Zd ZdZdZdS )z4TestEnum.test_wrong_enum_in_call.<locals>.Monochromer   r   Nr   r   r   blackwhiter   r   r   r   
Monochrome?  s   r  c                   @   s   e Zd ZdZdZdS )z0TestEnum.test_wrong_enum_in_call.<locals>.Genderr   r   Nr   r   r   malefemaler   r   r   r   GenderB  s   r  )r   r   r   r  rC   r  r  r   r   r   test_wrong_enum_in_call>  s    z TestEnum.test_wrong_enum_in_callc                 C   s4   G dd dt }G dd dt}| t||j d S )Nc                   @   s   e Zd ZdZdZdS )z:TestEnum.test_wrong_enum_in_mixed_call.<locals>.Monochromer   r   Nr  r   r   r   r   r  H  s   r  c                   @   s   e Zd ZdZdZdS )z6TestEnum.test_wrong_enum_in_mixed_call.<locals>.Genderr   r   Nr  r   r   r   r   r  K  s   r  )r   r   r   r   r  r  r   r   r   test_wrong_enum_in_mixed_callG  s    z&TestEnum.test_wrong_enum_in_mixed_callc                 C   s8   G dd dt }G dd dt }| ||j|j d S )Nc                   @   s   e Zd ZdZdZdS )z6TestEnum.test_mixed_enum_in_call_1.<locals>.Monochromer   r   Nr  r   r   r   r   r  Q  s   r  c                   @   s   e Zd ZdZdZdS )z2TestEnum.test_mixed_enum_in_call_1.<locals>.Genderr   r   Nr  r   r   r   r   r  T  s   r  )r   r   r  r  r  r   r   r   test_mixed_enum_in_call_1P  s    z"TestEnum.test_mixed_enum_in_call_1c                 C   s8   G dd dt }G dd dt}| ||j|j d S )Nc                   @   s   e Zd ZdZdZdS )z6TestEnum.test_mixed_enum_in_call_2.<locals>.Monochromer   r   Nr  r   r   r   r   r  Z  s   r  c                   @   s   e Zd ZdZdZdS )z2TestEnum.test_mixed_enum_in_call_2.<locals>.Genderr   r   Nr  r   r   r   r   r  ]  s   r  )r   r   r   r  r  r  r   r   r   test_mixed_enum_in_call_2Y  s    z"TestEnum.test_mixed_enum_in_call_2c                 C   s6   G dd dt }G dd d|}| t|jd d S )Nc                   @   s   e Zd Zdd ZdS )z*TestEnum.test_flufl_enum.<locals>.Fluflnumc                 S   s
   t | jS r[   )r   r   r   r   r   r   __int__d  s    z2TestEnum.test_flufl_enum.<locals>.Fluflnum.__int__N)r   r   r   r  r   r   r   r   Fluflnumc  s   r  c                   @   s   e Zd ZdZdZdZdS )z0TestEnum.test_flufl_enum.<locals>.MailManOptionsr   r   r   N)r   r   r   option1Zoption2Zoption3r   r   r   r   MailManOptionsf  s   r  r   )r   r   r   r  )rC   r  r  r   r   r   test_flufl_enumb  s    zTestEnum.test_flufl_enumc                 C   s   G dd dt }| |jjt | |jt G dd dtt}| |jjt | |jt G dd dt}| |jjt	 | |jt	 d S )Nc                   @   s   e Zd ZdZdZdS )z+TestEnum.test_introspection.<locals>.Numberd      Nr   r   r   r   r   Numberm  s   r  c                   @   s   e Zd ZdZdZdZdS )z+TestEnum.test_introspection.<locals>.StringZsoftZroughZhardN)r   r   r   yarnZropeZwirer   r   r   r   Stringr  s   r  c                   @   s   e Zd ZdZdZdS )z*TestEnum.test_introspection.<locals>.Plainr  r   N)r   r   r   vanillar   r   r   r   r   Plainx  s   r  )
r   r   r   r7  r   r~   r   r  r  r*  )rC   r  r  r  r   r   r   test_introspectionl  s    zTestEnum.test_introspectionc                 C   sx   G dd dt }| t |d W d    n1 s80    Y  | t |d  W d    n1 sj0    Y  d S )Nc                   @   s   e Zd ZdZdZdZdS )z0TestEnum.test_no_such_enum_member.<locals>.Colorr   r   r   Nr   r   r   r   r   r     s   r   rd   Z
chartreuse)r   r   r   KeyErrorr   r   r   r   test_no_such_enum_member~  s
    &z!TestEnum.test_no_such_enum_memberc                 C   s&   G dd dt }| t|jd d S )Nc                   @   s    e Zd ZdZdZdZdd ZdS )z%TestEnum.test_new_repr.<locals>.Colorr   r   r   c                 S   s
   d| j  S )Nz!don't you just love shades of %s?r   r   r   r   r   r&    s    z.TestEnum.test_new_repr.<locals>.Color.__repr__N)r   r   r   r   r   r   r&  r   r   r   r   r     s   r   z#don't you just love shades of blue?)r   r   r   r   r   r   r   r   test_new_repr  s
    zTestEnum.test_new_reprc                 C   s8   G dd dt }G dd dt|}| t|jd d S )Nc                   @   s   e Zd Zdd ZdS )z,TestEnum.test_inherited_repr.<locals>.MyEnumc                 S   s
   d| j  S )NzMy name is %s.r   r   r   r   r   r&    s    z5TestEnum.test_inherited_repr.<locals>.MyEnum.__repr__Nr<  r   r   r   r   r=    s   r=  c                   @   s   e Zd ZdZdZdZdS )z/TestEnum.test_inherited_repr.<locals>.MyIntEnumr   r   r   N)r   r   r   r   r   Ztheotherr   r   r   r   	MyIntEnum  s   r  zMy name is that.)r   r   r   r   r   )rC   r=  r  r   r   r   test_inherited_repr  s    zTestEnum.test_inherited_reprc                    sd   G  fdddt t G dd dt d}G dd dt d}G dd	 d	|}G d
d d|}d S )Nc                       s   e Zd Z fddZ  ZS )z3TestEnum.test_multiple_mixin_mro.<locals>.auto_enumc           	         s   t | }||_t|j}d}|jD ].}|| }|tu r>|}n|}|d7 }|||< q$| D ]\}}||vr\|||< q\t| | |||S Nr   r   )r   	_cls_namer   _member_namesEllipsisr   superr   )	metaclsr   bases	classdicttempnamesr   r   r   )r   	auto_enumr   r   r     s"    





z;TestEnum.test_multiple_mixin_mro.<locals>.auto_enum.__new__r   r   r   r   __classcell__r   r  r   r   r    s   r  c                   @   s   e Zd ZdS )z:TestEnum.test_multiple_mixin_mro.<locals>.AutoNumberedEnumNr9   r   r   r   r   AutoNumberedEnum  s   r  )	metaclassc                   @   s   e Zd ZdS )z5TestEnum.test_multiple_mixin_mro.<locals>.AutoIntEnumNr9   r   r   r   r   AutoIntEnum  s   r  c                   @   s   e Zd ZdZdZdZdS )z8TestEnum.test_multiple_mixin_mro.<locals>.TestAutoNumber.r   Nr   r   r   rG   rj  rk  r   r   r   r   TestAutoNumber  s   r  c                   @   s   e Zd ZdZdZdZdS )z5TestEnum.test_multiple_mixin_mro.<locals>.TestAutoInt.r   Nr  r   r   r   r   TestAutoInt  s   r  )r   r   r   )rC   r  r  r  r  r   r  r   test_multiple_mixin_mro  s
    z TestEnum.test_multiple_mixin_mroc                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d t	| j|d | |jj
d t	| j|j t	| j| d S )	Nc                       sH   e Zd ZdZdd Zdd Zedd Z dd	 Zd
d Z fddZdS )z:TestEnum.test_subclasses_with_getnewargs.<locals>.NamedIntNamedIntc                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S Nr   z name and value must be specifiedr   r   r   r   _intname_argsr   argsr  r   rC   r   r   r   r     s    zBTestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__new__c                 S   s   | j S r[   r  r   r   r   r   __getnewargs__  s    zITestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__getnewargs__c                 S   s   | j S r[   r  r   r   r   r   r     s    zCTestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S Nz{}({!r}, {})r   r   r   r   r&  r   r   r   r   r&    s    zCTestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r   r  __objclass__r*  r&  rC   baseZbase_strr   r   r   r    s
    

zBTestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S Nz({0} + {1})r   rv  r   r   rC   otherr  r  r   r   __add__  s    zBTestEnum.test_subclasses_with_getnewargs.<locals>.NamedInt.__add__N)	r   r   r   r   r  r   r&  r  r  r   r  r   r   r    s   	
	r  c                   @   s   e Zd ZdZdZdZdS )z5TestEnum.test_subclasses_with_getnewargs.<locals>.NEINEIzthe-xr   zthe-yr   Nr   r   r   xyr   r   r   r   r    s   r  NamedInt('(the-x + the-y)', 3)testrn   r   r   r   r   r   r   r   r  r  rI  r4   r   rC   r  ZNI5r   r  r   test_subclasses_with_getnewargs  s    '


z(TestEnum.test_subclasses_with_getnewargsc                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d t	| j|d | |jj
d t	| j|j t	| j| d S )	Nc                       sH   e Zd ZdZdd Zdd Zedd Z dd	 Zd
d Z fddZdS )z=TestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedIntr  c                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S r   r  r  r   r   r   r     s    zETestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__new__c                 S   s
   | j i fS r[   r  r   r   r   r   __getnewargs_ex__  s    zOTestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__getnewargs_ex__c                 S   s   | j S r[   r  r   r   r   r   r   
  s    zFTestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S r	  r
  r   r   r   r   r&    s    zFTestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r  r  r   r   r   r    s
    

zETestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S r  r  r  r  r   r   r    s    zETestEnum.test_subclasses_with_getnewargs_ex.<locals>.NamedInt.__add__N)	r   r   r   r   r   r   r&  r  r  r   r  r   r   r    s   	
	r  c                   @   s   e Zd ZdZdZdZdS )z8TestEnum.test_subclasses_with_getnewargs_ex.<locals>.NEIr  r  r  Nr  r   r   r   r   r  $  s   r  r  r  rn   r   r  r  r   r  r   "test_subclasses_with_getnewargs_ex  s    '


z+TestEnum.test_subclasses_with_getnewargs_exc                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d t	| j|d | |jj
d t	| j|j t	| j| d S )	Nc                       sH   e Zd ZdZdd Zdd Zedd Z dd	 Zd
d Z fddZdS )z6TestEnum.test_subclasses_with_reduce.<locals>.NamedIntr  c                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S r   r  r  r   r   r   r   8  s    z>TestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__new__c                 S   s   | j | jfS r[   r   r  r   r   r   r   
__reduce__A  s    zATestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__reduce__c                 S   s   | j S r[   r  r   r   r   r   r   C  s    z?TestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S r	  r
  r   r   r   r   r&  F  s    z?TestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r  r  r   r   r   r  K  s
    

z>TestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S r  r  r  r  r   r   r  T  s    z>TestEnum.test_subclasses_with_reduce.<locals>.NamedInt.__add__N)	r   r   r   r   r#  r   r&  r  r  r   r  r   r   r  6  s   	
	r  c                   @   s   e Zd ZdZdZdZdS )z1TestEnum.test_subclasses_with_reduce.<locals>.NEIr  r  r  Nr  r   r   r   r   r  ]  s   r  r  r  rn   r   r  r  r   r  r   test_subclasses_with_reduce5  s    '


z$TestEnum.test_subclasses_with_reducec                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d t	| j|d | |jj
d t	| j|j t	| j| d S )	Nc                       sH   e Zd ZdZdd Zdd Zedd Z dd	 Zd
d Z fddZdS )z9TestEnum.test_subclasses_with_reduce_ex.<locals>.NamedIntr  c                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S r   r  r  r   r   r   r   q  s    zATestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__new__c                 S   s   | j | jfS r[   r"  rC   r  r   r   r   r  z  s    zGTestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__reduce_ex__c                 S   s   | j S r[   r  r   r   r   r   r   |  s    zBTestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S r	  r
  r   r   r   r   r&    s    zBTestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r  r  r   r   r   r    s
    

zATestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S r  r  r  r  r   r   r    s    zATestEnum.test_subclasses_with_reduce_ex.<locals>.NamedInt.__add__N)	r   r   r   r   r  r   r&  r  r  r   r  r   r   r  o  s   	
	r  c                   @   s   e Zd ZdZdZdZdS )z4TestEnum.test_subclasses_with_reduce_ex.<locals>.NEIr  r  r  Nr  r   r   r   r   r    s   r  r  r  rn   r   r  r  r   r  r   test_subclasses_with_reduce_exn  s    '


z'TestEnum.test_subclasses_with_reduce_exc                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d | |jj	d t
| jt|j t
| jt| d S )	Nc                       s@   e Zd ZdZdd Zedd Z dd Zdd	 Z fd
dZdS )zHTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedIntr  c                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S r   r  r  r   r   r   r     s    zPTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedInt.__new__c                 S   s   | j S r[   r  r   r   r   r   r     s    zQTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S r	  r
  r   r   r   r   r&    s    zQTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r  r  r   r   r   r    s
    

zPTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S r  r  r  r  r   r   r    s    zPTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NamedInt.__add__Nr   r   r   r   r   r&  r  r  r   r  r   r   r    s   	
	r  c                   @   s   e Zd ZdZdZdZdS )zCTestEnum.test_subclasses_without_direct_pickle_support.<locals>.NEIr  r  r  Nr  r   r   r   r   r    s   r  r  r  rn   r   )r   r   r   r   r   r   r  r  rI  r   r7   r   r   r   r  r   r  r   -test_subclasses_without_direct_pickle_support  s    %


z6TestEnum.test_subclasses_without_direct_pickle_supportc                    s   G  fdddt  G dd d t}| |jtj | t|j|j d  t d< |t d<  dd}| |d | |jj	d t
| j|j t
| j| d S )	Nc                       s@   e Zd ZdZdd Zedd Z dd Zdd	 Z fd
dZdS )zSTestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedIntr  c                 W   sB   |}|^}}t |dkr tdtj| g|R  }||_||_|S r   r  r  r   r   r   r     s    z[TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedInt.__new__c                 S   s   | j S r[   r  r   r   r   r   r     s    z\TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedInt.__name__c                 S   s   d t| j| jt| S r	  r
  r   r   r   r   r&    s    z\TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedInt.__repr__c                 S   s&   t }|j}|jtu r|| S || S r[   r  r  r   r   r   r    s
    

z[TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedInt.__str__c                    sB   t | t | }t|  r:t| r: d| j|j|S |S d S r  r  r  r  r   r   r    s    z[TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NamedInt.__add__Nr'  r   r  r   r   r    s   	
	r  c                   @   s    e Zd ZdZdZdZdd ZdS )zNTestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NEIr  r  r  c                 S   s   t | j| jffS r[   )r   r   r%  r%  r   r   r   r    s    z\TestEnum.test_subclasses_without_direct_pickle_support_using_name.<locals>.NEI.__reduce_ex__N)r   r   r   r  r  r  r   r   r   r   r    s   r  r  r  rn   r   )r   r   r   r   r   r   r  r  rI  r   r4   r  r   r  r   8test_subclasses_without_direct_pickle_support_using_name  s    %


zATestEnum.test_subclasses_without_direct_pickle_support_using_namec                 C   s\   G dd dt t}| t|j| | |jt  | |jd |t	 d< t
| j|j d S )Nc                   @   s   e Zd ZdZdZdZdZdS )z/TestEnum.test_tuple_subclass.<locals>.SomeTuple	SomeTuple)r   zfor the money)r   zfor the showr   zfor the musicN)r   r   r   firstsecondthirdr   r   r   r   r*    s   r*  r+  )tupler   r   r   r,  r   r-  r   r.  rI  r4   )rC   r*  r   r   r   test_tuple_subclass  s    
zTestEnum.test_tuple_subclassc                 C   sd   G dd dt }| t||j|j|jg | t|jd | |jjd | |d|j d S )Nc                   @   s(   e Zd ZdZdZdZdd Zdd ZdS )zITestEnum.test_duplicate_values_give_unique_enum_items.<locals>.AutoNumberr   c                 S   s"   t | jd }t| }||_|S r   r   r   r*  r   r   r   r   r6   r   r   r   r   $  s    
zQTestEnum.test_duplicate_values_give_unique_enum_items.<locals>.AutoNumber.__new__c                 S   s
   t | jS r[   r   r   r   r   r   r   r  )  s    zQTestEnum.test_duplicate_values_give_unique_enum_items.<locals>.AutoNumber.__int__N)r   r   r   r,  r-  r.  r   r  r   r   r   r   
AutoNumber   s
   r4  r   r   r   )	r   r   r   r,  r-  r.  r   r   r   )rC   r4  r   r   r   ,test_duplicate_values_give_unique_enum_items  s    z5TestEnum.test_duplicate_values_give_unique_enum_itemsc                 C   sZ   G dd dt }G dd d|}| t||j|j|jg | ttt|g d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )zBTestEnum.test_inherited_new_from_enhanced_enum.<locals>.AutoNumberc                 S   s"   t | jd }t| }||_|S r   r1  r2  r   r   r   r   5  s    
zJTestEnum.test_inherited_new_from_enhanced_enum.<locals>.AutoNumber.__new__c                 S   s
   t | jS r[   r3  r   r   r   r   r  :  s    zJTestEnum.test_inherited_new_from_enhanced_enum.<locals>.AutoNumber.__int__N)r   r   r   r   r  r   r   r   r   r4  4  s   r4  c                   @   s   e Zd ZdZdZdZdS )z=TestEnum.test_inherited_new_from_enhanced_enum.<locals>.Colorr   Nr   r   r   r   r   r   <  s   r   r$  )r   r   r   r   r   r   mapr   rC   r4  r   r   r   r   %test_inherited_new_from_enhanced_enum3  s    z.TestEnum.test_inherited_new_from_enhanced_enumc                 C   sZ   G dd dt }G dd d|}| t||j|j|jg | ttt|g d d S )Nc                   @   s   e Zd Zdd ZdS )z?TestEnum.test_inherited_new_from_mixed_enum.<locals>.AutoNumberc                 S   s$   t | jd }t| |}||_|S r   )r   r   r   r   r   r2  r   r   r   r   E  s    zGTestEnum.test_inherited_new_from_mixed_enum.<locals>.AutoNumber.__new__Nr   r   r   r   r   r4  D  s   r4  c                   @   s   e Zd ZdZdZdZdS )z:TestEnum.test_inherited_new_from_mixed_enum.<locals>.Colorr   Nr   r   r   r   r   r   J  s   r   r$  )r   r   r   r   r   r   r6  r   r7  r   r   r   "test_inherited_new_from_mixed_enumC  s    z+TestEnum.test_inherited_new_from_mixed_enumc                 C   s0   G dd dt }| t|j | |jt d S )Nc                   @   s   e Zd ZdZdS )z,TestEnum.test_equality.<locals>.OrdinaryEnumr   N)r   r   r   rG   r   r   r   r   OrdinaryEnumR  s   r:  )r   r   r   rG   )rC   r:  r   r   r   test_equalityQ  s    zTestEnum.test_equalityc                 C   s   G dd dt }G dd d|}| |j|j | |j|j | |j|j | 	|j|j | 
|j|j | |j|j d S )Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z0TestEnum.test_ordered_mixin.<locals>.OrderedEnumc                 S   s   | j |j u r| j|jkS tS r[   r   r   NotImplementedrC   r  r   r   r   __ge__Y  s    z7TestEnum.test_ordered_mixin.<locals>.OrderedEnum.__ge__c                 S   s   | j |j u r| j|jkS tS r[   r<  r>  r   r   r   __gt__]  s    z7TestEnum.test_ordered_mixin.<locals>.OrderedEnum.__gt__c                 S   s   | j |j u r| j|jkS tS r[   r<  r>  r   r   r   __le__a  s    z7TestEnum.test_ordered_mixin.<locals>.OrderedEnum.__le__c                 S   s   | j |j u r| j|jk S tS r[   r<  r>  r   r   r   __lt__e  s    z7TestEnum.test_ordered_mixin.<locals>.OrderedEnum.__lt__N)r   r   r   r?  r@  rA  rB  r   r   r   r   OrderedEnumX  s   rC  c                   @   s    e Zd ZdZdZdZdZdZdS )z*TestEnum.test_ordered_mixin.<locals>.Gradern   rd   r   r   r   Nro   r   r   r   r   Gradei  s
   rD  )r   ZassertGreaterrp   rq   ZassertLessEqualrt   rr   Z
assertLessrs   ZassertGreaterEqualr   r   )rC   rC  rD  r   r   r   test_ordered_mixinW  s    zTestEnum.test_ordered_mixinc                 C   s^   G dd dt }G dd d|}| t  G dd d|}W d    n1 sP0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z'TestEnum.test_extending2.<locals>.Shadec                 S   s   t | j d S r[   )printr   r   r   r   r   shadex  s    z-TestEnum.test_extending2.<locals>.Shade.shadeNr   r   r   rG  r   r   r   r   Shadew  s   rI  c                   @   s   e Zd ZdZdZdZdS )z'TestEnum.test_extending2.<locals>.Colorr   r   r   Nr   r   r   r   r   r   z  s   r   c                   @   s   e Zd ZdZdZdZdS )z+TestEnum.test_extending2.<locals>.MoreColorrd   rn   r@  Nr  r   r   r   r   r    s   r  )r   r   r   rC   rI  r   r  r   r   r   test_extending2v  s    zTestEnum.test_extending2c                 C   sF   G dd dt }G dd d|}G dd d|}| |j d d S )Nc                   @   s   e Zd Zdd ZdS )z'TestEnum.test_extending3.<locals>.Shadec                 S   s   | j S r[   r   r   r   r   r   rG    s    z-TestEnum.test_extending3.<locals>.Shade.shadeNrH  r   r   r   r   rI    s   rI  c                   @   s   e Zd Zdd ZdS )z'TestEnum.test_extending3.<locals>.Colorc                 S   s
   d| j  S )Nz%s hexlified!r  r   r   r   r   r;    s    z+TestEnum.test_extending3.<locals>.Color.hexN)r   r   r   r;  r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )z+TestEnum.test_extending3.<locals>.MoreColorrd   rn   r@  Nr  r   r   r   r   r    s   r  z5 hexlified!)r   r   r  r;  rJ  r   r   r   test_extending3  s    zTestEnum.test_extending3c                 C   s6   G dd dt }G dd d|}| t|j| d S )Nc                   @   s   e Zd Zdd ZdS )z3TestEnum.test_subclass_duplicate_name.<locals>.Basec                 S   s   d S r[   r   r   r   r   r   r    s    z8TestEnum.test_subclass_duplicate_name.<locals>.Base.testNr   r   r   r  r   r   r   r   Base  s   rN  c                   @   s   e Zd ZdZdS )z3TestEnum.test_subclass_duplicate_name.<locals>.Testr   NrM  r   r   r   r   r     s   r   )r   r   r   r  rC   rN  r   r   r   r   test_subclass_duplicate_name  s    z%TestEnum.test_subclass_duplicate_namec                    sD   ddl m  G  fdddt}G dd d|}| |jjd d S )Nr   DynamicClassAttributec                       s   e Zd Z dd ZdS )z;TestEnum.test_subclass_duplicate_name_dynamic.<locals>.Basec                 S   s   dS )Ndynamicr   r   r   r   r   r    s    z@TestEnum.test_subclass_duplicate_name_dynamic.<locals>.Base.testNrM  r   rQ  r   r   rN    s   rN  c                   @   s   e Zd ZdZdS )z;TestEnum.test_subclass_duplicate_name_dynamic.<locals>.Testr   NrM  r   r   r   r   r     s   r   rS  )typesrR  r   r   r  rO  r   rQ  r   $test_subclass_duplicate_name_dynamic  s    z-TestEnum.test_subclass_duplicate_name_dynamicc                 C   s^   G dd dt }G dd d|}| t  G dd d|}W d    n1 sP0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z/TestEnum.test_no_duplicates.<locals>.UniqueEnumc                    sB    j }t fdd|D r> j}| jj}td||f d S )Nc                 3   s   | ]} j |j kV  qd S r[   r  )r   r   r   r   r   	<genexpr>  r   zKTestEnum.test_no_duplicates.<locals>.UniqueEnum.__init__.<locals>.<genexpr>z-aliases not allowed in UniqueEnum:  %r --> %r)r   anyr   r   r   )rC   r  r   rG   r   r   r   r   r`     s    z8TestEnum.test_no_duplicates.<locals>.UniqueEnum.__init__Nr   r   r   r`   r   r   r   r   
UniqueEnum  s   rY  c                   @   s   e Zd ZdZdZdZdS z*TestEnum.test_no_duplicates.<locals>.Colorr   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdZdS rZ  )r   r   r   r   r   r   Zgrener   r   r   r   r     s   )r   r   r   )rC   rY  r   r   r   r   test_no_duplicates  s    
zTestEnum.test_no_duplicatesc                 C   s:   G dd dt }| t|jjdd | |jjd d S )Nc                   @   s@   e Zd ZdZdZdZdZdZdZdZ	dZ
d	d
 Zedd ZdS )z"TestEnum.test_init.<locals>.Planet)gITf|Dg    
BA)gQX4Eg    WAgoEg    TXA)g	Dg    (IA)gcEg   A)g[\h}Eg    ，A)g#'?TQEg   _xA)gJ-UEg    wAc                 S   s   || _ || _d S r[   massradius)rC   r^  r_  r   r   r   r`     s    z+TestEnum.test_init.<locals>.Planet.__init__c                 S   s   d}|| j  | j| j  S )NgyдW=r]  )rC   rF  r   r   r   surface_gravity  s    z2TestEnum.test_init.<locals>.Planet.surface_gravityN)r   r   r   ZMERCURYZVENUSEARTHZMARSZJUPITERZSATURNZURANUSZNEPTUNEr`   r   r`  r   r   r   r   Planet  s   rb  r   g#@r\  )r   r   roundra  r`  r   )rC   rb  r   r   r   	test_init  s    zTestEnum.test_initc                 C   s|   G dd dt t}| t|d | t|d | t|d | t|jt  | |j|ju  | |j	|j
u  d S )Nc                   @   s   e Zd ZdZdd ZdZe ZedD ]Z	e	d dfede	 < q&ed	D ]Z	e	d
 dfede	 < qHedD ]Z	e	dfede	 < qje
ZeZeZdS )z$TestEnum.test_ignore.<locals>.Periodz3
            different lengths of time
            c                 S   s   t | |}||_||_|S r[   )r   r   r   period)r   r   re  r6   r   r   r   r     s    z,TestEnum.test_ignore.<locals>.Period.__new__zPeriod i   r  r  zmonth_%d5   rD  Zweekzweek_%d    Zdayzday_%dN)r   r   r   r"   r   _ignore_varsr  r0   r   day_1ZOneDayZweek_1ZOneWeekmonth_1ZOneMonthr   r   r   r   r    s   r  ri  r   )r   r   r>   r   rB   rv  rk  rl  Zday_30Zweek_4Zday_28r  r   r   r   test_ignore  s    zTestEnum.test_ignorec                 C   s   G dd dt }G dd d|}| t||j|j|jg t|tdD ]2\}}|d7 }| |j|g | 	||g| qJd S )Nc                   @   s   e Zd Zdd ZdS )z6TestEnum.test_nonhash_value.<locals>.AutoNumberInAListc                 S   s$   t | jd g}t| }||_|S r   r1  r2  r   r   r   r     s    
z>TestEnum.test_nonhash_value.<locals>.AutoNumberInAList.__new__Nr   r   r   r   r   AutoNumberInAList  s   rn  c                   @   s   e Zd ZdZdZdZdS )z1TestEnum.test_nonhash_value.<locals>.ColorInAListr   Nr   r   r   r   r   ColorInAList  s   ro  r   r   )
r   r   r   r   r   r   zipr0   r   r   )rC   rn  ro  r?   r   r   r   r   test_nonhash_value  s    zTestEnum.test_nonhash_valuec                 C   s^   G dd dt t}G dd d|}| t||j|jg | |jd | |d|j d S )Nc                   @   s   e Zd Zdd ZdS )zHTestEnum.test_conflicting_types_resolved_in_new.<locals>.LabelledIntEnumc                 W   s$   |\}}t | |}||_||_|S r[   )r   r   labelr   )r   r  r   rr  r6   r   r   r   r     s
    zPTestEnum.test_conflicting_types_resolved_in_new.<locals>.LabelledIntEnum.__new__Nr   r   r   r   r   LabelledIntEnum  s   rs  c                   @   s   e Zd ZdZdZdS )zETestEnum.test_conflicting_types_resolved_in_new.<locals>.LabelledList)r   ZUnprocessed)r   zPayment CompleteN)r   r   r   unprocessedpayment_completer   r   r   r   LabelledList  s   rv  r   )r   r   r   r   rt  ru  )rC   rs  rv  r   r   r   &test_conflicting_types_resolved_in_new  s
    z/TestEnum.test_conflicting_types_resolved_in_newc                 C   s`   G dd dt }| t||j|j|jg | |jjd | |jjd | |jjd d S )Nc                   @   s   e Zd Ze Ze Ze ZdS )z(TestEnum.test_auto_number.<locals>.ColorNr   r   r   r	   r   r   r   r   r   r   r   r     s   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_auto_number  s
    zTestEnum.test_auto_numberc                 C   s`   G dd dt }| t||j|j|jg | |jjd | |jjd | |jjd d S )Nc                   @   s&   e Zd Zdd Ze Ze Ze ZdS )z&TestEnum.test_auto_name.<locals>.Colorc                 S   s   | S r[   r   r   r  countZlastr   r   r   _generate_next_value_  s    z<TestEnum.test_auto_name.<locals>.Color._generate_next_value_N)r   r   r   r}  r	   r   r   r   r   r   r   r   r     s   r   r   r   r   ry  r   r   r   r   test_auto_name  s
    zTestEnum.test_auto_namec                 C   sp   G dd dt }G dd d|}| t||j|j|jg | |jjd | |jjd | |jjd d S )Nc                   @   s   e Zd Zdd ZdS )z5TestEnum.test_auto_name_inherit.<locals>.AutoNameEnumc                 S   s   | S r[   r   r{  r   r   r   r}  &  s    zKTestEnum.test_auto_name_inherit.<locals>.AutoNameEnum._generate_next_value_N)r   r   r   r}  r   r   r   r   AutoNameEnum%  s   r  c                   @   s   e Zd Ze Ze Ze ZdS )z.TestEnum.test_auto_name_inherit.<locals>.ColorNrx  r   r   r   r   r   (  s   r   r   r   r   ry  )rC   r  r   r   r   r   test_auto_name_inherit$  s    zTestEnum.test_auto_name_inheritc                 C   s$   G dd dt }| |jjd d S )Nc                   @   s   e Zd ZdZe ZdS )z)TestEnum.test_auto_garbage.<locals>.Colorr   Nr   r   r   r   r	   r   r   r   r   r   r   3  s   r   r   )r   r   r   r   r   r   r   r   test_auto_garbage2  s    zTestEnum.test_auto_garbagec                 C   s`   G dd dt }| t||j|j|jg | |jjd | |jjd | |jjd d S )Nc                   @   s   e Zd ZdZdZe ZdS )z3TestEnum.test_auto_garbage_corrected.<locals>.Colorr   r   N)r   r   r   r   r   r	   r   r   r   r   r   r   9  s   r   r   r   r   ry  r   r   r   r   test_auto_garbage_corrected8  s
    z$TestEnum.test_auto_garbage_correctedc                 C   s>   |  t  G dd dt}W d    n1 s00    Y  d S )Nc                   @   s&   e Zd Ze Ze Ze Zdd ZdS )z'TestEnum.test_auto_order.<locals>.Colorc                 S   s   | S r[   r   r{  r   r   r   r}  I  s    z=TestEnum.test_auto_order.<locals>.Color._generate_next_value_N)r   r   r   r	   r   r   r   r}  r   r   r   r   r   E  s   r   r   r   r   r   r   test_auto_orderC  s    zTestEnum.test_auto_orderc                    s\   t   d _G  fdddt}| t||j|jg | |jjd | |jjd d S )Nzpathological casec                       s   e Zd Z Zdd Ze ZdS )z-TestEnum.test_auto_order_wierd.<locals>.Colorc                 S   s   | S r[   r   r{  r   r   r   r}  Q  s    zCTestEnum.test_auto_order_wierd.<locals>.Color._generate_next_value_N)r   r   r   r   r}  r	   r   r   Z
weird_autor   r   r   O  s   r   r   )r	   r   r   r   r   r   r   r   r   r  r   test_auto_order_wierdL  s    zTestEnum.test_auto_order_wierdc                 C   s0   G dd dt }| |j|j|jgt| d S )Nc                   @   s"   e Zd Ze  ZZe Ze ZdS )z+TestEnum.test_duplicate_auto.<locals>.DupesNr   r   r   r	   r,  Zprimeror-  r.  r   r   r   r   DupesY  s   
r  r   r   r,  r-  r.  r   rC   r  r   r   r   test_duplicate_autoX  s    zTestEnum.test_duplicate_autoc              
   C   s^   G dd dt }z|d W n4 tyP } z| |jd u  W Y d }~nd }~0 0 tdd S )Nc                   @   s   e Zd ZdZdZdZdS )z,TestEnum.test_default_missing.<locals>.Colorr   r   r   N)r   r   r   r'  r(  r)  r   r   r   r   r   `  s   r   rD  Exception not raised.)r   r   rB   __context__rw  rC   r   excr   r   r   test_default_missing_  s    &zTestEnum.test_default_missingc              
   C   s  G dd dt }| |d|j z|d W n4 tyb } z| |jd u  W Y d }~nd }~0 0 tdz|d W n6 ty } z| t|jt W Y d }~nd }~0 0 tdz|d W n6 t	y } z| t|jt W Y d }~nd }~0 0 tdd S )Nc                   @   s$   e Zd ZdZdZdZedd ZdS )z$TestEnum.test_missing.<locals>.Colorr   r   r   c                 S   s0   |dkr| j S |dkrdS |dkr(tnd S d S )Nr  
bad returnrn   	error out)r   ZeroDivisionError)r   itemr   r   r   	_missing_p  s    z.TestEnum.test_missing.<locals>.Color._missing_N)r   r   r   r   r   r   classmethodr  r   r   r   r   r   l  s
   r   r  rD  r  r  r  )
r   r   r   r   rB   r  rw  r   rv  r  r  r   r   r   test_missingk  s"    &((zTestEnum.test_missingc                    s   dd l }dd l}G dd dtj G dd d}G  fddd}|| }|| }|  | | d  | | d  d S )Nr   c                   @   s   e Zd ZdZdZdS )z8TestEnum.test_missing_exceptions_reset.<locals>.TestEnumZval1Zval2N)r   r   r   ZVAL1ZVAL2r   r   r   r   rc     s   rc   c                   @   s   e Zd Zdd ZdS )z6TestEnum.test_missing_exceptions_reset.<locals>.Class1c                 S   s"   z
t  W n t y   Y n0 d S r[   r   r   r   r   r   r`     s    
z?TestEnum.test_missing_exceptions_reset.<locals>.Class1.__init__NrX  r   r   r   r   Class1  s   r  c                       s   e Zd Z fddZdS )z6TestEnum.test_missing_exceptions_reset.<locals>.Class2c                    s$   z d W n t y   Y n0 d S )NZinvalid_valuer  r   rc   r   r   r`     s    z?TestEnum.test_missing_exceptions_reset.<locals>.Class2.__init__NrX  r   r  r   r   Class2  s   r  )gcweakrefr?   r   refZcollectr   )rC   r  r  r  r  Zclass_1_refZclass_2_refr   r  r   test_missing_exceptions_reset  s    z&TestEnum.test_missing_exceptions_resetc                 C   s  G dd d}G dd d}G dd dt }G dd dt }G d	d
 d
|t }| |jjd | |jjd | |jjd | |jd | t|jd G dd
 d
||t }| |jjd | |jjd | |jjd | |jd | t|jd G dd
 d
||t }| |jjd | |jjd | |jjd | |jd | t|jd G dd d||t }| |jjd | |jjd | |jjd | t|jd | |j d G dd d||t }| |jjd | |jjd | |jjd | t|jd | |j d | |j	 d G dd d|||}| |jjd | |jjd | |jjd | t|jd | |j d | |j	 d G dd d|||}	| |	jjd | |	jjd | |	jjd | t|	jd | |	j d | |	j	 d G dd d|t
||}
| |
jjd | |
jjd | |
jjd | t|
jd | |
j d | |	j	 d | t|
t d S )Nc                   @   s   e Zd Zedd ZdS )z.TestEnum.test_multiple_mixin.<locals>.MaxMixinc                 S   s   t | }|| _|S r[   )r   MAX)r   maxr   r   r   r    s    z2TestEnum.test_multiple_mixin.<locals>.MaxMixin.MAXN)r   r   r   rZ   r  r   r   r   r   MaxMixin  s   r  c                   @   s   e Zd Zdd ZdS )z.TestEnum.test_multiple_mixin.<locals>.StrMixinc                 S   s
   | j  S r[   r%  lowerr   r   r   r   r    s    z6TestEnum.test_multiple_mixin.<locals>.StrMixin.__str__Nr.  r   r   r   r   StrMixin  s   r  c                   @   s   e Zd Zdd ZdS )z.TestEnum.test_multiple_mixin.<locals>.SomeEnumc                 S   s   dS )Nbooyahr   r   r   r   r   behavior  s    z7TestEnum.test_multiple_mixin.<locals>.SomeEnum.behaviorN)r   r   r   r  r   r   r   r   SomeEnum  s   r  c                   @   s   e Zd Zdd Zdd ZdS )z1TestEnum.test_multiple_mixin.<locals>.AnotherEnumc                 S   s   dS )Nnuhuh!r   r   r   r   r   r    s    z:TestEnum.test_multiple_mixin.<locals>.AnotherEnum.behaviorc                 S   s   dS )N
what's up?r   r   r   r   r   social  s    z8TestEnum.test_multiple_mixin.<locals>.AnotherEnum.socialN)r   r   r   r  r  r   r   r   r   AnotherEnum  s   r  c                   @   s   e Zd Ze Ze Ze ZdS z+TestEnum.test_multiple_mixin.<locals>.ColorNr   r   r   r	   r'  r(  r)  r   r   r   r   r     s   r   r   r   r   
Color.BLUEc                   @   s   e Zd Ze Ze Ze ZdS r  r  r   r   r   r   r     s   r   c                   @   s   e Zd Ze Ze Ze ZdS r  r  r   r   r   r   r     s   c                   @   s   e Zd Ze Ze Ze ZdS )z/TestEnum.test_multiple_mixin.<locals>.CoolColorNr  r   r   r   r   	CoolColor  s   r  r  c                   @   s   e Zd Ze Ze Ze ZdS )z1TestEnum.test_multiple_mixin.<locals>.CoolerColorNr  r   r   r   r   CoolerColor  s   r  r  r  c                   @   s   e Zd Ze Ze Ze ZdS )z2TestEnum.test_multiple_mixin.<locals>.CoolestColorNr  r   r   r   r   CoolestColor  s   r  c                   @   s   e Zd Ze Ze Ze ZdS )z3TestEnum.test_multiple_mixin.<locals>.ConfusedColorNr  r   r   r   r   ConfusedColor  s   r  c                   @   s   e Zd Ze Ze Ze ZdS )z3TestEnum.test_multiple_mixin.<locals>.ReformedColorNr  r   r   r   r   ReformedColor  s   r  )r   r   r'  r   r(  r)  r  r~   r  r  r   rB   
issubclassr   )rC   r  r  r  r  r   r  r  r  r  r  r   r   r   test_multiple_mixin  sr    zTestEnum.test_multiple_mixinc                 C   sN   G dd dt t}tG dd d|}G dd d|}tG dd d|}d S )	Nc                   @   s   e Zd Zdd ZdS )z7TestEnum.test_multiple_inherited_mixin.<locals>.StrEnumc                 _   sB   |D ]$}t |tstd|t|jf qtj| g|R i |S )Nz%Enumeration '%s' (%s) is not a string)rv  r~   r   r   r   r   )r   r  kwargsrG   r   r   r   r     s    
z?TestEnum.test_multiple_inherited_mixin.<locals>.StrEnum.__new__Nr   r   r   r   r   r!     s   r!   c                   @   s   e Zd ZdZdZdZdS )z9TestEnum.test_multiple_inherited_mixin.<locals>.Decision1REVERT
REVERT_ALLRETRYNr   r   r   r  r  r  r   r   r   r   	Decision1  s   r  c                   @   s   e Zd ZdS )z6TestEnum.test_multiple_inherited_mixin.<locals>.MyEnumNr9   r   r   r   r   r=    s   r=  c                   @   s   e Zd ZdZdZdZdS )z9TestEnum.test_multiple_inherited_mixin.<locals>.Decision2r  r  r  Nr  r   r   r   r   	Decision2!  s   r  )r~   r   r   )rC   r!   r  r=  r  r   r   r   test_multiple_inherited_mixin  s    z&TestEnum.test_multiple_inherited_mixinc                 C   s   G dd dt }G dd d}G dd d||tj}G dd d|}| t|j| | t|jd	 G d
d d|}| |jd d S )Nc                       s   e Zd Z fddZ  ZS )z5TestEnum.test_multiple_mixin_inherited.<locals>.MyIntc                    s   t  | |S r[   )r  r   rB  r  r   r   r   )  s    z=TestEnum.test_multiple_mixin_inherited.<locals>.MyInt.__new__r  r   r   r  r   rM  (  s   rM  c                   @   s   e Zd Zdd ZdS )z8TestEnum.test_multiple_mixin_inherited.<locals>.HexMixinc                 S   s   t | S r[   r:  r   r   r   r   r&  -  s    zATestEnum.test_multiple_mixin_inherited.<locals>.HexMixin.__repr__Nr<  r   r   r   r   HexMixin,  s   r  c                   @   s   e Zd ZdS )z9TestEnum.test_multiple_mixin_inherited.<locals>.MyIntEnumNr9   r   r   r   r   r  0  s   r  c                   @   s   e Zd ZdZdS )z3TestEnum.test_multiple_mixin_inherited.<locals>.Foor   N)r   r   r   TESTr   r   r   r   Foo3  s   r  Z0x1c                   @   s   e Zd ZdZdd ZdS )z3TestEnum.test_multiple_mixin_inherited.<locals>.Feer   c                 S   s   |d7 }t | |}||_|S r   )r   r   r   r   r   r   r   r   r   r   :  s    z;TestEnum.test_multiple_mixin_inherited.<locals>.Fee.__new__N)r   r   r   r  r   r   r   r   r   Fee8  s   r  r   )r   r?   r   rB   rv  r  r   r   )rC   rM  r  r  r  r  r   r   r   test_multiple_mixin_inherited'  s    z&TestEnum.test_multiple_mixin_inheritedc                 C   s  G dd dt t}G dd dt t}G dd d||}|}| t||j|j|jg | |jd | |jjd | |d|j | 	|jj
 |d	}| t||j|j|jg | |jd | |jjd | |d|j | 	|jj
 | 	t|| | |j
 d S )
Nc                       s    e Zd Ze fddZ  ZS )zRTestEnum.test_miltuple_mixin_with_common_data_type.<locals>.CaseInsensitiveStrEnumc                    s6   | j  D ]}|j | kr
|  S q
t |S r[   )_member_map_valuesr   r  r  r  r  r  r   r   r  C  s    
z\TestEnum.test_miltuple_mixin_with_common_data_type.<locals>.CaseInsensitiveStrEnum._missing_)r   r   r   r  r  r  r   r   r  r   CaseInsensitiveStrEnumB  s   r  c                   @   s,   e Zd Zdd Zedd Zedd ZdS )zJTestEnum.test_miltuple_mixin_with_common_data_type.<locals>.LenientStrEnumc                 W   s
   d| _ d S )NT_valid)rC   r  r   r   r   r`   K  s    zSTestEnum.test_miltuple_mixin_with_common_data_type.<locals>.LenientStrEnum.__init__c                 S   s2   | j | |}d|_| |_||_|| j|< |S )NF)r7  r   r  upperr%  r   r  )r   r   unknownr   r   r   r  M  s    

zTTestEnum.test_miltuple_mixin_with_common_data_type.<locals>.LenientStrEnum._missing_c                 S   s   | j S r[   r  r   r   r   r   validX  s    zPTestEnum.test_miltuple_mixin_with_common_data_type.<locals>.LenientStrEnum.validN)r   r   r   r`   r  r  r   r  r   r   r   r   LenientStrEnumJ  s
   

r  c                   @   s   e Zd ZdZdZdZdS )zETestEnum.test_miltuple_mixin_with_common_data_type.<locals>.JobStatusactivependingZ
terminatedN)r   r   r   ACTIVEPENDING
TERMINATEDr   r   r   r   	JobStatus\  s   r  r  ZActivemissing)r~   r   r   r   r  r  r  r   r   rB   r  rv  r>   )rC   r  r  r  ZJSr  r   r   r   )test_miltuple_mixin_with_common_data_typeA  s"    z2TestEnum.test_miltuple_mixin_with_common_data_typec                 C   s(   d}t |dd}i }i }t||| d S )Nz8from enum import Enum; Enum('Animal', 'ANT BEE CAT DOG')z<string>exec)compiler  )rC   codeZ	global_nsZlocal_lsr   r   r   test_empty_globalsp  s
    zTestEnum.test_empty_globalsNr   r   r   z+private variables are now normal attributesc                 C   s   |  t  G dd dt}W d    n1 s00    Y  | |jjd z>|  t  G dd dt}W d    n1 s|0    Y  W n ty   Y n0 d S )Nc                   @   s   e Zd ZdZdS )<TestEnum.test_warning_for_private_variables.<locals>.PrivateRadarN)r   r   r   _Private__corporalr   r   r   r   Private  s   r  r  c                   @   s   e Zd ZdZdS )r  ZHoolihanN)r   r   r   Z_Private__major_r   r   r   r   r    s   )assertWarnsDeprecationWarningr   r   r  r   r   )rC   r  r   r   r   "test_warning_for_private_variablesy  s    .2z+TestEnum.test_warning_for_private_variables)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r!  r"  r#  r,  r8  rJ  rO  rP  rW  rX  rZ  r\  r`  ra  rm  ro  rr  ru  rx  ry  rz  r{  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r&  r(  r)  r0  r5  r8  r9  r;  rE  rK  rL  rP  rU  r[  rd  rm  rq  rw  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  unittest
skipUnlesssysversion_infor  r   r   r   r   rc      s  #	
				.		
	
					


%999957
	%"`/	rc   c                   @   sD   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S )	TestOrderc                 C   s   G dd dt }d S )Nc                   @   s   e Zd ZdZdZdZdZdS )z*TestOrder.test_same_members.<locals>.Colorred green bluer   r   r   Nr   r   r   _order_r   r   r   r   r   r   r   r     s   r   r   r   r   r   r   test_same_members  s    zTestOrder.test_same_membersc                 C   s   G dd dt }d S )Nc                   @   s    e Zd ZdZdZdZdZeZdS )z7TestOrder.test_same_members_with_aliases.<locals>.Colorr  r   r   r   Nr   r   r   r  r   r   r   verder   r   r   r   r     s
   r   r  r   r   r   r   test_same_members_with_aliases  s    z(TestOrder.test_same_members_with_aliasesc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )N#member order does not match _order_c                   @   s   e Zd ZdZdZdZdZdS )z6TestOrder.test_same_members_wrong_order.<locals>.Colorr  r   r   r   N)r   r   r   r  r   r   r   r   r   r   r   r     s   r   rN  r   r   r   r   r   r   test_same_members_wrong_order  s    z'TestOrder.test_same_members_wrong_orderc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )Nr  c                   @   s   e Zd ZdZdZdZdZdS )z5TestOrder.test_order_has_extra_members.<locals>.Colorred green blue purpler   r   r   Nr  r   r   r   r   r     s   r   r  r   r   r   r   test_order_has_extra_members  s    z&TestOrder.test_order_has_extra_membersc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )Nr  c                   @   s    e Zd ZdZdZdZdZeZdS )zBTestOrder.test_order_has_extra_members_with_aliases.<locals>.Colorr  r   r   r   Nr  r   r   r   r   r     s
   r   r  r   r   r   r   )test_order_has_extra_members_with_aliases  s    z3TestOrder.test_order_has_extra_members_with_aliasesc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )Nr  c                   @   s    e Zd ZdZdZdZdZdZdS )z4TestOrder.test_enum_has_extra_members.<locals>.Colorr  r   r   r   rd   N)r   r   r   r  r   r   r   purpler   r   r   r   r     s
   r   r  r   r   r   r   test_enum_has_extra_members  s    z%TestOrder.test_enum_has_extra_membersc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )Nr  c                   @   s$   e Zd ZdZdZdZdZdZeZdS )zATestOrder.test_enum_has_extra_members_with_aliases.<locals>.Colorr  r   r   r   rd   N)	r   r   r   r  r   r   r   r  r  r   r   r   r   r     s   r   r  r   r   r   r   (test_enum_has_extra_members_with_aliases  s    z2TestOrder.test_enum_has_extra_members_with_aliasesN)
r   r   r   r  r  r  r  r  r  r  r   r   r   r   r    s   		r  c                   @   s  e Zd ZdZG dd deZG dd deZG dd de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*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zejd4d5 Z d6d7 Z!d8S )9TestFlagzTests of the Flags.c                   @   s   e Zd Zd\ZZZdS )zTestFlag.Perm)rd   r   r   N)r   r   r   RWXr   r   r   r   Perm  s   r  c                   @   s    e Zd ZdZdZdZdZdZdS )zTestFlag.Openr   r   r   r      Nr   r   r   ROWORWACCEr   r   r   r   Open  s
   r  c                   @   s$   e Zd ZdZdZdZdZeeB ZdS )zTestFlag.Colorr   r   r   rd   Nr   r   r   BLACKr'  r(  r)  ZPURPLEr   r   r   r   r     s
   r   c                 C   s  | j }| t|jd | t|jd | t|jd | t|j|jB d | t|j|jB |jB d | t|dd | t|j d | t|j d	 | t|j d | t|j|jB  d | t|j|jB |jB  d | t|d
d | j}| t|jd | t|jd | t|j	d | t|j|j
B d | t|j|j
B d | t|j d | t|j d | t|j	 d | t|j|j
B  d | t|j|j
B  d d S )NPerm.RPerm.WPerm.XPerm.R|W
Perm.R|W|Xr   Perm.0Perm.W|XPerm.R|XOpen.ROOpen.WOOpen.ACOpen.CE
Open.CE|WOOpen.CE|AC|RW|WO
Open.CE|RWOpen.RWr  r   r~   r  r  r  r  r  r   r  r  rC   r  r  r   r   r   test_str  s0     zTestFlag.test_strc                 C   s  | j }| t|jd | t|jd | t|jd | t|j|jB d | t|j|jB |jB d | t|dd | t|j d | t|j d	 | t|j d | t|j|jB  d | t|j|jB |jB  d | t|d
d | j}| t|jd | t|jd | t|j	d | t|j|j
B d | t|j|j
B d | t|j d | t|j d | t|j	 d | t|j|j
B  d | t|j|j
B  d d S )N<Perm.R: 4><Perm.W: 2><Perm.X: 1><Perm.R|W: 6><Perm.R|W|X: 7>r   <Perm.0: 0>z<Perm.W|X: 3>z<Perm.R|X: 5>r  <Open.RO: 0><Open.WO: 1><Open.AC: 3><Open.CE: 524288><Open.CE|WO: 524289>z<Open.CE|AC|RW|WO: 524291>z<Open.CE|RW: 524290>z<Open.RW: 2>r  r   r   r  r  r  r  r  r   r  r  r  r   r   r   	test_repr  s0     zTestFlag.test_reprc                 C   s8   | j }| t|jdd | t|j|jB dd d S )Nr   r  r  r  r   r   r  r  rC   r  r   r   r   test_format	  s    zTestFlag.test_formatc                 C   s   | j }|D ]X}|D ]N}| ||B ||j|jB  | ||B j|j|jB  | t||B | qq
|D ]}| ||B | qh| j}| |j|jB |j d S r[   r  r   r   r   r   r  r  r  rC   r  r   jr  r   r   r   test_or	  s    zTestFlag.test_orc           
      C   s   | j }|j|jB }|j|jB }|j|jB }|j|jB |jB }t||||||dg }|D ]<}|D ]2}| ||@ j|j|j@  | t||@ | qbqZ|D ]4}| ||@ | | ||@ | | ||@ | q| j	}	| |	j
|	j@ |	j
 d S Nr   )r  r  r  r  r   r   r   r   r   r  r  r  
rC   r  r  RXWXRWXr  r   r-  r  r   r   r   test_and#	  s     zTestFlag.test_andc                 C   s   | j }|D ]<}|D ]2}| ||A j|j|jA  | t||A | qq
|D ],}| ||dA | | |d|A | qL| j}| |j|jA |j | |j|jA |j d S r/  r+  r,  r   r   r   test_xor5	  s    zTestFlag.test_xorc           	      C   s   | j }|j|jB }|j|jB }|j|jB }|j|jB |jB }t||||||dg }|D ]&}| t| | | |  | qZ|D ]}| |  | q| j}| |j	|j	 @ |j
 | |j	|jB |j	 @ |j d S r/  )r  r  r  r  r   r   r   r   r  r   r  r  	rC   r  r  r1  r2  r3  r  r   r  r   r   r   test_invertB	  s    zTestFlag.test_invertc                 C   sD   | j }|D ]}| | q
| j}|D ]}| t|jt| q$d S r[   r  rB   r  r   r   r   rC   r  fr  r   r   r   r   R	  s    zTestFlag.test_boolc                 C   s   t dd}t|}| t|t| | t|d| | ||j|j|jg td D ]b\}}d|> }||}| |j	| | t
|j	t | |j| | || | t
|| q\d S Nr  R W Xr   r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   rC   r  r   r   nr   r   r   r   r    test_programatic_function_stringZ	  s    
z)TestFlag.test_programatic_function_stringc                 C   s   t dddd}t|}| t|t| | t|d| | ||j|j|jg td D ]b\}}d|> }||}| |j	| | t
|j	t | |j| | || | t
|| q`d S Nr  r<  rE  r  r   r=  r>  r   r   r   +test_programatic_function_string_with_starti	  s    z4TestFlag.test_programatic_function_string_with_startc                 C   s   t dg d}t|}| t|t| | t|d| | ||j|j|jg td D ]b\}}d|> }||}| |j	| | t
|j	t | |j| | || | t
|| q`d S Nr  )r  r  r  r   r<  r   r=  r>  r   r   r   %test_programatic_function_string_listx	  s    z.TestFlag.test_programatic_function_string_listc                 C   s   t dd}t|}| t|t| | t|d| | ||j|j|jg td D ]j\}}dd| d > }||}| |j	| | t
|j	t | |j| | || | t
|| q\d S Nr  ))r  r   )r  rE  )r  rh  r   r<  r   r   r=  r>  r   r   r   "test_programatic_function_iterable	  s    
z+TestFlag.test_programatic_function_iterablec                 C   s   t dtd}t|}| t|t| | t|d| | ||j|j|jg td	 D ]j\}}dd| d > }||}| |j
| | t|j
t | |j| | || | t|| q`d S rE  )r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r>  r   r   r   #test_programatic_function_from_dict	  s    z,TestFlag.test_programatic_function_from_dictc                 C   s2   t ttrtt| jtjtjB  t| jt d S r[   )rv  r    rw  r4   r   r   r   r   r   r   r   test_pickle	  s    
zTestFlag.test_picklec                 C   s   | j }| j}| |j|v  | |j|v  | t d|v  W d    n1 sT0    Y  | t d|v  W d    n1 s0    Y  | t d|v  W d    n1 s0    Y  | t d|v  W d    n1 s0    Y  d S )Nr  r  r   )r  r   r>   r  r  r   r   rC   r  r   r   r   r   r   	  s    &&&zTestFlag.test_containsc           	      C   s   | j }|\}}}||B }||B }||B }||B |B }| ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  d S r[   )r  rB   r>   	rC   r  r  r  r  r  r1  r2  r3  r   r   r   test_member_contains	  s$    
zTestFlag.test_member_containsc                 C   s`   G dd dt }| t||j|j|jg | |jjd | |jjd | |jjd d S )Nc                   @   s   e Zd Ze Ze Ze ZdS )z(TestFlag.test_auto_number.<locals>.ColorNrx  r   r   r   r   r   	  s   r   r   r   rd   )r   r   r   r   r   r   r   r   r   r   r   rz  	  s
    zTestFlag.test_auto_numberc                 C   s@   |  td  G dd dt}W d    n1 s20    Y  d S )Nz Invalid Flag value: .not an int.c                   @   s   e Zd ZdZe ZdS )z0TestFlag.test_auto_number_garbage.<locals>.Colorz
not an intNr  r   r   r   r   r   	  s   r   )rN  r   r   r   r   r   r   test_auto_number_garbage	  s    z!TestFlag.test_auto_number_garbagec                 C   s   G dd dt }d}| td| |d | td| |d | td| |d | td| |d | td| |d	 | td| |d	 d S )
Nc                   @   s   e Zd ZdZdZdZdS )0TestFlag.test_cascading_failure.<locals>.Bizarrer   rd   r@  N)r   r   r   rk  dr:  r   r   r   r   Bizarre	  s   rO  rM  z5 is not a valid rn   z2 is not a valid r   z1 is not a valid r   )r   rN  r   )rC   rO  r   r   r   r   test_cascading_failure	  s    zTestFlag.test_cascading_failurec                 C   s0   G dd dt }| |j|j|jgt| d S )Nc                   @   s"   e Zd Ze  ZZe Ze ZdS )z+TestFlag.test_duplicate_auto.<locals>.DupesNr  r   r   r   r   r  	  s   
r  r  r  r   r   r   r  	  s    zTestFlag.test_duplicate_autoc                 C   s(   G dd dt }| t|dd d S )Nc                   @   s   e Zd ZdZdZdZdS )z&TestFlag.test_bizarre.<locals>.Bizarrer   rd   r@  N)r   r   r   rj  rk  rN  r   r   r   r   rO  	  s   rO  rD  z<Bizarre.d|c|b: 7>)r   r   r   )rC   rO  r   r   r   test_bizarre	  s    zTestFlag.test_bizarrec                 C   sP  G dd d}G dd d}G dd d|t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd G dd d||t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd G dd d||t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd d S )Nc                   @   s   e Zd Zedd ZdS )z.TestFlag.test_multiple_mixin.<locals>.AllMixinc                 S   s<   t | }d }|r2|d }|dd  D ]}||O }q$|| _|S r  r   ALLr   membersZ	all_valuer   r   r   r   rS  	  s    
z2TestFlag.test_multiple_mixin.<locals>.AllMixin.ALLNr   r   r   rZ   rS  r   r   r   r   AllMixin	  s   rW  c                   @   s   e Zd Zdd ZdS )z.TestFlag.test_multiple_mixin.<locals>.StrMixinc                 S   s
   | j  S r[   r  r   r   r   r   r  
  s    z6TestFlag.test_multiple_mixin.<locals>.StrMixin.__str__Nr.  r   r   r   r   r  
  s   r  c                   @   s   e Zd Ze Ze Ze ZdS z+TestFlag.test_multiple_mixin.<locals>.ColorNr  r   r   r   r   r   	
  s   r   r   r   rd   rD  r  c                   @   s   e Zd Ze Ze Ze ZdS rX  r  r   r   r   r   r   
  s   r   c                   @   s   e Zd Ze Ze Ze ZdS rX  r  r   r   r   r   r   
  s   )r   r   r'  r   r(  r)  rS  r~   rC   rW  r  r   r   r   r   r  	  s(    zTestFlag.test_multiple_mixinc                    s   G dd dt  t d fddfddtdD }t| W d    n1 s`0    Y  | d	 | d
td d S )Nc                   @   sL   e Zd Ze Ze Ze Ze Ze Ze Z	e Z
e Zdd Zdd ZdS )z0TestFlag.test_unique_composite.<locals>.TestFlagc                 S   s   | |u S r[   r   r>  r   r   r   r  1
  s    z7TestFlag.test_unique_composite.<locals>.TestFlag.__eq__c                 S   s
   t | jS r[   hashr   r   r   r   r   __hash__3
  s    z9TestFlag.test_unique_composite.<locals>.TestFlag.__hash__Nr   r   r   r	   r   r   r  ZfourZfiveZsixZsevenZeightr  r\  r   r   r   r   r  (
  s   r  Fc                     s<   z t dD ]}  |  q
W n ty6   dY n0 d S N   Tr0   addrw  r   r  failedseenr   r   
cycle_enum8
  s
    z2TestFlag.test_unique_composite.<locals>.cycle_enumc                    s   g | ]}t j d qS )r3   	threadingThreadr   rO   rf  r   r   r   ?
  s   z2TestFlag.test_unique_composite.<locals>.<listcomp>rE  ;at least one thread failed while creating composite membersr_  "too many composite members created)r   r   r0   r   start_threadsr>   r   r   rC   threadsr   r  rf  rd  re  r   test_unique_composite%
  s    
zTestFlag.test_unique_compositec                    s:  G fdddt }G  fddd| G dd d }G dd d|} jd	 d |jd	 d |jd
 d |jd	d |jd
d G dd d|}G dd d|}G dd d|}|jd	 d |jd	d |jd
 d |jd	d |jd
d d S )Nc                       s   e Zd Z fddZ  ZS )z+TestFlag.test_init_subclass.<locals>.MyEnumc                    s0   t  jf i | | jdd d| _d S )N_testFr=  )r  __init_subclass__r>   __dict__get_test1r   kwds)r   rC   r   r   ru  M
  s    z=TestFlag.test_init_subclass.<locals>.MyEnum.__init_subclass__r   r   r   ru  r  r   r   r  r   r=  L
  s   r=  c                       s   e Zd Z fddZ  ZS )z.TestFlag.test_init_subclass.<locals>.TheirEnumc                    s    t  | jf i | d| _d S )N	TheirEnum)r  ru  _test2ry  )r|  r   r   r   ru  S
  s    z@TestFlag.test_init_subclass.<locals>.TheirEnum.__init_subclass__r{  r   )r|  r  r   r|  R
  s   r|  c                   @   s   e Zd Zdd ZdS )z.TestFlag.test_init_subclass.<locals>.WhoseEnumc                 [   s   d S r[   r   ry  r   r   r   ru  W
  s    z@TestFlag.test_init_subclass.<locals>.WhoseEnum.__init_subclass__Nr   r   r   ru  r   r   r   r   	WhoseEnumV
  s   r  c                   @   s   e Zd ZdZdS )z+TestFlag.test_init_subclass.<locals>.NoEnumr   Nr   r   r   r  r   r   r   r   NoEnumY
  s   r  rx  r}  Fc                   @   s   e Zd Zdd ZdS )z,TestFlag.test_init_subclass.<locals>.OurEnumc                 [   s
   d| _ d S )NOurEnum)r}  ry  r   r   r   ru  b
  s    z>TestFlag.test_init_subclass.<locals>.OurEnum.__init_subclass__Nr~  r   r   r   r   r  a
  s   r  c                   @   s   e Zd Zdd ZdS )z.TestFlag.test_init_subclass.<locals>.WhereEnumc                 [   s   d S r[   r   ry  r   r   r   ru  e
  s    z@TestFlag.test_init_subclass.<locals>.WhereEnum.__init_subclass__Nr~  r   r   r   r   	WhereEnumd
  s   r  c                   @   s   e Zd ZdZdS )z.TestFlag.test_init_subclass.<locals>.NeverEnumr   Nr  r   r   r   r   	NeverEnumg
  s   r  )r   r   rv  r>   rw  )rC   r=  r  r  r  r  r  r   )r|  rC   r   test_init_subclassK
  s"    zTestFlag.test_init_subclassN)"r   r   r   r"   r   r  r  r   r  r'  r*  r.  r4  r5  r7  r   r@  rB  rD  rF  rG  rH  r   rK  rz  rL  rP  r  rQ  r  r   reap_threadsrs  r  r   r   r   r   r    s:   +
%r  c                   @   s   e Zd ZdZG dd deZG dd deZG dd de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*d+ Zd,d- Zejd.d/ Zd0S )1TestIntFlagzTests of the IntFlags.c                   @   s   e Zd ZdZdZdZdS )zTestIntFlag.Permr   r   rd   N)r   r   r   r  r  r  r   r   r   r   r  s
  s   r  c                   @   s    e Zd ZdZdZdZdZdZdS )zTestIntFlag.Openr   r   r   r   r  Nr  r   r   r   r   r  x
  s
   r  c                   @   s$   e Zd ZdZdZdZdZeeB ZdS )zTestIntFlag.Colorr   r   r   rd   Nr  r   r   r   r   r   
  s
   r   c                 C   s   | j }| |jtu  | j}|D ]"}| t|| | ||j q | t|j|j	B | | |j|j	B d |D ]"}| t|| | ||j qt| t|j
|jB | | |j
|jB d d S )Nr   )r  rB   r7  r   r  rv  r   r   r  r  r   r  )rC   r  r  r:  r   r   r   	test_type
  s    zTestIntFlag.test_typec                 C   sn  | j }| t|jd | t|jd | t|jd | t|j|jB d | t|j|jB |jB d | t|jdB d | t|dd	 | t|dd
 | t|j d | t|j d | t|j d | t|j|jB  d | t|j|jB |jB  d | t|jdB  d | t|dd | t|dd | j}| t|jd | t|jd | t|j	d | t|j|j
B d | t|j|j
B d | t|dd | t|j d | t|j d | t|j	 d | t|j|j
B  d | t|j|j
B  d | t|dd d S )Nr  r  r	  r
  r  rE  zPerm.8|Rr   r  zPerm.8r  r  zPerm.-8r  r  r  r  r  r  rd   zOpen.4r  r  zOpen.AC|RW|WOr  r  r  r   r   r   r  
  s<     zTestIntFlag.test_strc                 C   sn  | j }| t|jd | t|jd | t|jd | t|j|jB d | t|j|jB |jB d | t|jdB d | t|dd	 | t|dd
 | t|j d | t|j d | t|j d | t|j|jB  d | t|j|jB |jB  d | t|jdB  d | t|dd | t|dd | j}| t|jd | t|jd | t|j	d | t|j|j
B d | t|j|j
B d | t|dd | t|j d | t|j d | t|j	 d | t|j|j
B  d | t|j|j
B  d  | t|d!d" d S )#Nr  r  r  r  r  rE  z<Perm.8|R: 12>r   r   z<Perm.8: 8>z<Perm.W|X: -5>z<Perm.R|X: -3>z<Perm.R|W: -2>z<Perm.X: -7>z<Perm.-8: -8>z<Perm.W|X: -13>r  z<Perm.R|W|X: -1>r  z<Perm.R|W|X: -9>r!  r"  r#  r$  r%  rd   z<Open.4: 4>z<Open.CE|AC|RW|WO: -1>z<Open.CE|RW: -2>z<Open.CE: -4>z<Open.AC|RW|WO: -524289>z<Open.RW: -524290>r  z<Open.CE|AC|RW|WO: -5>r&  r  r   r   r   r'  
  s<     zTestIntFlag.test_reprc                 C   s8   | j }| t|jdd | t|j|jB dd d S )Nr   45r(  r)  r   r   r   r*  
  s    zTestIntFlag.test_formatc                 C   sL  | j }|D ]}|D ]J}| ||B |j|jB  | ||B j|j|jB  | t||B | qtdD ]}| ||B |j|B  | ||B j|j|B  | t||B | | ||B ||jB  | ||B j||jB  | t||B | qfq
|D ]4}| ||B | | |dB | | d|B | q| j}| |j|jB |j d S NrE  r   	r  r   r   r   r   r0   r  r  r  r,  r   r   r   r.  
  s&    zTestIntFlag.test_orc           
   	   C   s  | j }|j|jB }|j|jB }|j|jB }|j|jB |jB }t||||||dg }|D ]}|D ]h}| ||@ |j|j@ d||f  | ||@ j|j|j@ d||f  | t||@ |d||f  qdt	dD ]}| ||@ |j|@  | ||@ j|j|@  | t||@ | | ||@ ||j@  | ||@ j||j@  | t||@ | qqZ|D ]6}| ||@ | | |d@ | | d|@ | qf| j
}	| |	j|	j@ |	j d S )Nr   zi is %r, j is %rrE  rD  )r  r  r  r  r   r   r   r   r   r0   r  r  r  r0  r   r   r   r4  
  s0    
"$ zTestIntFlag.test_andc                 C   sR  | j }|D ]}|D ]J}| ||A |j|jA  | ||A j|j|jA  | t||A | qtdD ]}| ||A |j|A  | ||A j|j|A  | t||A | | ||A ||jA  | ||A j||jA  | t||A | qfq
|D ]$}| |dA | | d|A | q| j}| |j|jA |j | |j|jA |j d S r  r  r,  r   r   r   r5    s&    zTestIntFlag.test_xorc           	      C   s  | j }|j|jB }|j|jB }|j|jB }|j|jB |jB }t||||||dg }|D ]L}| | |j  | | j|j  | t| | | |  | qZ|D ]}| |  | q| j	}| |j
|j
 @ |j | |j
|jB |j
 @ |j d S r/  )r  r  r  r  r   r   r   r   r   r  r   r  r  r6  r   r   r   r7  !  s     zTestIntFlag.test_invertc                 C   s   t dd}t|}| t|t| | t|d| | ||j|j|jg td D ]n\}}d|> }||}| |j	| | t
|j	t | || | |j| | || | t
|| q\d S r;  r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r>  r   r   r   r@  3  s    
z,TestIntFlag.test_programatic_function_stringc                 C   s   t dddd}t|}| t|t| | t|d| | ||j|j|jg td D ]n\}}d|> }||}| |j	| | t
|j	t | || | |j| | || | t
|| q`d S rA  r  r>  r   r   r   rB  C  s    z7TestIntFlag.test_programatic_function_string_with_startc                 C   s   t dg d}t|}| t|t| | t|d| | ||j|j|jg td D ]n\}}d|> }||}| |j	| | t
|j	t | || | |j| | || | t
|| q`d S rC  r  r>  r   r   r   rD  S  s    z1TestIntFlag.test_programatic_function_string_listc                 C   s   t dd}t|}| t|t| | t|d| | ||j|j|jg td D ]v\}}dd| d > }||}| |j	| | t
|j	t | || | |j| | || | t
|| q\d S rE  r  r>  r   r   r   rF  c  s    
z.TestIntFlag.test_programatic_function_iterablec                 C   s   t dtd}t|}| t|t| | t|d| | ||j|j|jg td	 D ]v\}}dd| d > }||}| |j
| | t|j
t | || | |j| | || | t|| q`d S rE  )r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r>  r   r   r   rG  s  s    z/TestIntFlag.test_programatic_function_from_dictc                 C   sx   t dg }t|}| t|t| | t|d| t dg }t|}| t|t| | t|d| d S )Nr  r   Thingr?   r   r   r   r   r   rC   r  r   r  r   r   r   )test_programatic_function_from_empty_list  s    z5TestIntFlag.test_programatic_function_from_empty_listc                 C   sp   t dd}t|}| t|t| | t|d| t dd}| t|t| | t|d| d S )Nr  r   r   r  r  r  r   r   r   *test_programatic_function_from_empty_tuple  s    z6TestIntFlag.test_programatic_function_from_empty_tuplec                 C   s  | j }| j}| |j|v  | |j|v  | |j|v  | |j|v  | t d|v  W d    n1 st0    Y  | t d|v  W d    n1 s0    Y  | t d|v  W d    n1 s0    Y  | t d|v  W d    n1 s0    Y  d S )Nr(  r  r   )r  r   rB   r(  r  r>   r   r   rI  r   r   r   r     s    &&&zTestIntFlag.test_containsc           	      C   s  | j }|\}}}||B }||B }||B }||B |B }| ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | ||v  | t | d|v  W d    n1 s0    Y  d S )Nr  )r  rB   r>   r   r   rJ  r   r   r   rK    s(    
z TestIntFlag.test_member_containsc                 C   sD   | j }|D ]}| | q
| j}|D ]}| t|jt| q$d S r[   r8  r9  r   r   r   r     s    zTestIntFlag.test_boolc                 C   sP  G dd d}G dd d}G dd d|t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd G dd d||t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd G dd d||t }| |jjd | |jjd | |jjd	 | |jjd
 | t|jd d S )Nc                   @   s   e Zd Zedd ZdS )z1TestIntFlag.test_multiple_mixin.<locals>.AllMixinc                 S   s<   t | }d }|r2|d }|dd  D ]}||O }q$|| _|S r  rR  rT  r   r   r   rS    s    
z5TestIntFlag.test_multiple_mixin.<locals>.AllMixin.ALLNrV  r   r   r   r   rW    s   rW  c                   @   s   e Zd Zdd ZdS )z1TestIntFlag.test_multiple_mixin.<locals>.StrMixinc                 S   s
   | j  S r[   r  r   r   r   r   r    s    z9TestIntFlag.test_multiple_mixin.<locals>.StrMixin.__str__Nr.  r   r   r   r   r    s   r  c                   @   s   e Zd Ze Ze Ze ZdS z.TestIntFlag.test_multiple_mixin.<locals>.ColorNr  r   r   r   r   r     s   r   r   r   rd   rD  r  c                   @   s   e Zd Ze Ze Ze ZdS r  r  r   r   r   r   r     s   r   c                   @   s   e Zd Ze Ze Ze ZdS r  r  r   r   r   r   r     s   )r   r   r'  r   r(  r)  rS  r~   rY  r   r   r   r    s(    zTestIntFlag.test_multiple_mixinc                    s   G dd dt  t d fddfddtdD }t| W d    n1 s`0    Y  | d	 | d
td d S )Nc                   @   sL   e Zd Ze Ze Ze Ze Ze Ze Z	e Z
e Zdd Zdd ZdS )z3TestIntFlag.test_unique_composite.<locals>.TestFlagc                 S   s   | |u S r[   r   r>  r   r   r   r    s    z:TestIntFlag.test_unique_composite.<locals>.TestFlag.__eq__c                 S   s
   t | jS r[   rZ  r   r   r   r   r\    s    z<TestIntFlag.test_unique_composite.<locals>.TestFlag.__hash__Nr]  r   r   r   r   r    s   r  Fc                     s<   z t dD ]}  |  q
W n ty6   dY n0 d S r^  r`  rb  rc  r   r   rf    s
    z5TestIntFlag.test_unique_composite.<locals>.cycle_enumc                    s   g | ]}t j d qS rg  rh  rk  rl  r   r   r     s   z5TestIntFlag.test_unique_composite.<locals>.<listcomp>rE  rm  r_  rn  )r   r   r0   r   ro  r>   r   r   rp  r   rr  r   rs    s    
z!TestIntFlag.test_unique_compositeN)r   r   r   r"   r   r  r  r   r  r  r'  r*  r.  r4  r5  r7  r@  rB  rD  rF  rG  r  r  r   rK  r   r  r   r  rs  r   r   r   r   r  p
  s2   !!	+r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestEmptyAndNonLatinStringsc                 C   s8   |  t tdd}W d    n1 s*0    Y  d S )N	empty_abc)r   rq   rr   r   )rC   r  r   r   r   test_empty_string  s    z-TestEmptyAndNonLatinStrings.test_empty_stringc                 C   s&   t dd}t|d}| |jd d S )N	greek_abc)   αrq   rr   r  r   r   r   r   r   )rC   r  r  r   r   r   test_non_latin_character_string  s    

z;TestEmptyAndNonLatinStrings.test_non_latin_character_stringc                 C   s&   t dd}t|d}| |jd d S )N
hebrew_123)   א23r  r   r  )rC   r  r  r   r   r   test_non_latin_number_string#  s    

z8TestEmptyAndNonLatinStrings.test_non_latin_number_stringN)r   r   r   r  r  r  r   r   r   r   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
TestUniquec                 C   s,   t G dd dt}t G dd dt}d S )Nc                   @   s   e Zd ZdZdZdZdS )z+TestUnique.test_unique_clean.<locals>.Cleanr   r  g      @Nr   r   r   r   r   r  r   r   r   r   Clean,  s   r  c                   @   s   e Zd ZdZdZdZdS )z-TestUnique.test_unique_clean.<locals>.Cleanerr   r   r   N)r   r   r   singledoubletripler   r   r   r   Cleaner1  s   r  r   r   r   )rC   r  r  r   r   r   test_unique_clean+  s    zTestUnique.test_unique_cleanc                 C   s   |  td$ tG dd dt}W d    n1 s60    Y  |  td$ tG dd dt}W d    n1 sv0    Y  d S )Nz	tres.*onec                   @   s   e Zd ZdZdZdZdS )z+TestUnique.test_unique_dirty.<locals>.Dirtyr   r  Nr  r   r   r   r   Dirty9  s   r  zdouble.*single.*turkey.*triplec                   @   s   e Zd ZdZdZdZdZdS )z-TestUnique.test_unique_dirty.<locals>.Dirtierr   r   N)r   r   r   r  r  r  Zturkeyr   r   r   r   DirtierB  s   r  )rN  r   r   r   r   )rC   r  r  r   r   r   test_unique_dirty7  s    0zTestUnique.test_unique_dirtyc                 C   s,   t G dd dt}t G dd dt}d S )Nc                   @   s   e Zd ZdZdZdZdS )z/TestUnique.test_unique_with_name.<locals>.Sillyr   r  r   N)r   r   r   r   r   r   r   r   r   r   SillyJ  s   r  c                   @   s   e Zd ZdZdZdZdZdS )z1TestUnique.test_unique_with_name.<locals>.Sillierr   r   r   rd   N)r   r   r   r  r   r  r   r   r   r   r   SillierO  s   r  r  )rC   r  r  r   r   r   test_unique_with_nameI  s    z TestUnique.test_unique_with_nameN)r   r   r   r  r  r  r   r   r   r   r  )  s   r  a  Help on class Color in module %s:

class Color(enum.Enum)
 |  Color(value, names=None, *, module=None, qualname=None, type=None, start=1)
 |  
 |  An enumeration.
 |  
 |  Method resolution order:
 |      Color
 |      enum.Enum
 |      builtins.object
 |  
 |  Data and other attributes defined here:
 |  
 |  blue = <Color.blue: 3>
 |  
 |  green = <Color.green: 2>
 |  
 |  red = <Color.red: 1>
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from enum.Enum:
 |  
 |  name
 |      The name of the Enum member.
 |  
 |  value
 |      The value of the Enum member.
 |  
 |  ----------------------------------------------------------------------
 |  Readonly properties inherited from enum.EnumMeta:
 |  
 |  __members__
 |      Returns a mapping of member name->value.
 |      
 |      This mapping lists all enum members, including aliases. Note that this
 |      is a read-only view of the internal mapping.a  Help on class Color in module %s:

class Color(enum.Enum)
 |  Color(value, names=None, *, module=None, qualname=None, type=None, start=1)
 |  
 |  Method resolution order:
 |      Color
 |      enum.Enum
 |      builtins.object
 |  
 |  Data and other attributes defined here:
 |  
 |  blue = <Color.blue: 3>
 |  
 |  green = <Color.green: 2>
 |  
 |  red = <Color.red: 1>
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from enum.Enum:
 |  
 |  name
 |  
 |  value
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from enum.EnumMeta:
 |  
 |  __members__c                   @   s8   e Zd ZdZG dd deZdd Zdd Zdd	 ZdS )

TestStdLibNc                   @   s   e Zd ZdZdZdZdS )zTestStdLib.Colorr   r   r   Nr   r   r   r   r   r     s   r   c                 C   sT   t jd u rtt }ntt }t }tj|d}|| j |	 
 }| || d S )N)output)r!   r"   !expected_help_output_without_docsr   expected_help_output_with_docsr
   pydocZHelperr   getvaluestripr   )rC   Zexpected_textr  helperresultr   r   r   
test_pydoc  s    


zTestStdLib.test_pydocc                 C   s   t dtfdd| jjfdtfd| jjfd| jjfdtjd fd| jj	fd	tjd	 ff	}t t
| j}| | |  d
}| D ]@}|| || krt  tdd||| || df dd d}q|r| d d S )Nr   )r"   An enumeration.r   r   r   r   r   r   r   Fz.
%s
     key: %s
  result: %s
expected: %s
%s
K===========================================================================r   sepT/result does not equal expected, see print above)dictr   r   r   r   r   r   r   rv  r   inspectZ
getmembersr   keysrF  fail)rC   r  r  rd  r   r   r   r   test_inspect_getmembers  s2    



z"TestStdLib.test_inspect_getmembersc                 C   s2  ddl m} |ddttd|dd| jdd|dd	ttjd|d
d| jtd|dd| j| jjd|dd| j| jjd|dd| j| jj	d|ddt
t
jd d|ddt
t
jd dg	}|jdd d tt | j}|jdd d d}t||D ],\}}||krtdd||df dd d}q|r.| d d S )Nr   )	Attributer   data)r   kindZdefining_classr*  r"   r  r   r   r   r   r   r   r   r   c                 S   s   | j S r[   r   r  r   r   r   <lambda>  r   z>TestStdLib.test_inspect_classify_class_attrs.<locals>.<lambda>)keyc                 S   s   | j S r[   r   r  r   r   r   r    r   Fz
%s
%s
%s
%s
r  r   r  Tr  )r  r  r*  r   r   r   r   r   r   r   r   rv  sortr   Zclassify_class_attrsrp  rF  r  )rC   r  r  r  rd  r   rr   r   r   !test_inspect_classify_class_attrs  sN    




z,TestStdLib.test_inspect_classify_class_attrs)	r   r   r   ZmaxDiffr   r   r  r  r  r   r   r   r   r    s
   r  c                   @   s   e Zd Zdd ZdS )MiscTestCasec                 C   s   t | t d S r[   )r   Zcheck__all__r?   r   r   r   r   test__all__  s    zMiscTestCase.test__all__N)r   r   r   r  r   r   r   r   r    s   r  rn   c                   @   sX   e Zd Zdd Zdd Zeejdd dkdd	d
 Z	eejdkddd Z
dS )TestIntEnumConvertc                 C   s4   t jjddtdk dd d}| |djd d S )	NUnittestConvertztest.test_enum__main__r  c                 S   s
   |  dS NZCONVERT_TEST_
startswithr  r   r   r   r    r   zGTestIntEnumConvert.test_convert_value_lookup_priority.<locals>.<lambda>filterrn   CONVERT_TEST_NAME_A)r?   r   	_convert_r   r   r   rC   r  r   r   r   "test_convert_value_lookup_priority  s    
z5TestIntEnumConvert.test_convert_value_lookup_priorityc                 C   s   t jjddtdk dd d}| |j|j | |jd | |jd | |j	d | |j
d | jdd	 t|D g d
d d S )Nr  r  r  c                 S   s
   |  dS r  r  r  r   r   r   r    r   z1TestIntEnumConvert.test_convert.<locals>.<lambda>r  rn   c                 S   s    g | ]}|d d dvr|qS )r   r   )ZCOrP   r   )r   r   r   r   r   r     s   z3TestIntEnumConvert.test_convert.<locals>.<listcomp>z&Names other than CONVERT_TEST_* found.)msg)r?   r   r  r   r   CONVERT_TEST_NAME_Fr  CONVERT_TEST_NAME_BCONVERT_TEST_NAME_CCONVERT_TEST_NAME_DCONVERT_TEST_NAME_Er   r  r   r   r   test_convert  s    
zTestIntEnumConvert.test_convertNr   )r   rE  z_convert was deprecated in 3.8c                 C   sL   |  t. tjjddtdk dd d W d    n1 s>0    Y  d S )Nr  r  r  c                 S   s
   |  dS r  r  r  r   r   r   r    r   z6TestIntEnumConvert.test_convert_warn.<locals>.<lambda>r  )r  r  r?   r   _convertr   r   r   r   r   test_convert_warn  s    
z$TestIntEnumConvert.test_convert_warnr  z_convert was removed in 3.9c                 C   sL   |  t. tjjddtdk dd d W d    n1 s>0    Y  d S )Nr  r  r  c                 S   s
   |  dS r  r  r  r   r   r   r  (  r   z7TestIntEnumConvert.test_convert_raise.<locals>.<lambda>r  )r   r   r?   r   r  r   r   r   r   r   test_convert_raise!  s    
z%TestIntEnumConvert.test_convert_raise)r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r    s   

r  r  )N)Cr?   r  r  r  r  ri  collectionsr   r   r   r   r   r   r   r	   ior
   pickler   r   r   r   r  r   Ztest.supportr   r   r   r   rw  r  r   r   r}   r   r    r~   r!   r#   r   r&   r)   r*   r-   r4   r7   ZTestCaser8   rZ   rc   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  mainr   r   r   r   <module>   s   $
                >   +   +/'P/
