U
    [e7                     @   s   d Z ddlZG dd dejZG dd dejZG dd dejZG d	d
 d
eZG dd deZG dd dejZ	G dd dejZ
dS )z!Resolution ordering utility tests    Nc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test__mergeOrderingsc                 C   s   ddl m} ||S )Nr   )_legacy_mergeOrderings)zope.interface.ror   )selfZ	orderingsr    r   ^/var/www/html/services/stratfitenv/lib/python3.8/site-packages/zope/interface/tests/test_ro.py_callFUT   s    zTest__mergeOrderings._callFUTc                 C   s   |  | g g  d S NassertEqualr   r   r   r   r   
test_empty   s    zTest__mergeOrderings.test_emptyc                 C   s"   |  | dddgdddg d S )Nabcr
   r   r   r   r   test_single   s    z Test__mergeOrderings.test_singlec                 C   s$   |  | dgddggddg d S )Nr   r   r
   r   r   r   r   test_w_duplicates   s    z&Test__mergeOrderings.test_w_duplicatesc              
   C   sN   dddg}ddg}dddg}dg}|  | ||||gdddddddg d S )Nxyzq         r
   )r   ZO1ZO2ZO3ZO4r   r   r   &test_suffix_across_multiple_duplicates"   s    

z;Test__mergeOrderings.test_suffix_across_multiple_duplicatesN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r      s
   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test__flattenc                 C   s   ddl m} ||S )Nr   )_legacy_flatten)r   r   )r   obr   r   r   r   r   -   s    zTest__flatten._callFUTc                 C   s4   G dd dt }| }d|_| | ||g d S )Nc                   @   s   e Zd ZdS )z-Test__flatten.test_w_empty_bases.<locals>.FooNr   r   r   r   r   r   r   Foo2   s   r"   r   object	__bases__r   r   r   r"   Zfoor   r   r   test_w_empty_bases1   s    z Test__flatten.test_w_empty_basesc                 C   s*   G dd dt }| | ||t g d S )Nc                   @   s   e Zd ZdS )z-Test__flatten.test_w_single_base.<locals>.FooNr!   r   r   r   r   r"   9   s   r"   r$   r   r   r   r"   r   r   r   test_w_single_base8   s    z Test__flatten.test_w_single_basec                 C   s<   G dd dt }G dd d|}| | |||t g d S )Nc                   @   s   e Zd ZdS )z'Test__flatten.test_w_bases.<locals>.FooNr!   r   r   r   r   r"   >   s   r"   c                   @   s   e Zd ZdS )z'Test__flatten.test_w_bases.<locals>.BarNr!   r   r   r   r   Bar@   s   r+   r(   r   r"   r+   r   r   r   test_w_bases=   s    zTest__flatten.test_w_basesc              
   C   sf   G dd dt }G dd d|}G dd d|}G dd d||}| | ||||t ||t g d S )	Nc                   @   s   e Zd ZdS )z)Test__flatten.test_w_diamond.<locals>.FooNr!   r   r   r   r   r"   E   s   r"   c                   @   s   e Zd ZdS )z)Test__flatten.test_w_diamond.<locals>.BarNr!   r   r   r   r   r+   G   s   r+   c                   @   s   e Zd ZdS )z)Test__flatten.test_w_diamond.<locals>.BazNr!   r   r   r   r   BazI   s   r.   c                   @   s   e Zd ZdS )z)Test__flatten.test_w_diamond.<locals>.QuxNr!   r   r   r   r   QuxK   s   r/   r(   r   r"   r+   r.   r/   r   r   r   test_w_diamondD   s    zTest__flatten.test_w_diamondN)r   r   r   r   r'   r*   r-   r1   r   r   r   r   r   +   s
   r   c                   @   sP   e Zd 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S )Test_roNc                 K   s   ddl m} ||f|S )Nr   )
_legacy_ro)r   r3   )r   r    kwargsr3   r   r   r   r   S   s    zTest_ro._callFUTc                 C   s4   G dd dt }| }d|_| | ||g d S )Nc                   @   s   e Zd ZdS )z'Test_ro.test_w_empty_bases.<locals>.FooNr!   r   r   r   r   r"   X   s   r"   r   r#   r&   r   r   r   r'   W   s    zTest_ro.test_w_empty_basesc                 C   s*   G dd dt }| | ||t g d S )Nc                   @   s   e Zd ZdS )z'Test_ro.test_w_single_base.<locals>.FooNr!   r   r   r   r   r"   _   s   r"   r(   r)   r   r   r   r*   ^   s    zTest_ro.test_w_single_basec                 C   s<   G dd dt }G dd d|}| | |||t g d S )Nc                   @   s   e Zd ZdS )z!Test_ro.test_w_bases.<locals>.FooNr!   r   r   r   r   r"   d   s   r"   c                   @   s   e Zd ZdS )z!Test_ro.test_w_bases.<locals>.BarNr!   r   r   r   r   r+   f   s   r+   r(   r,   r   r   r   r-   c   s    zTest_ro.test_w_basesc                 C   sb   G dd dt }G dd d|}G dd d|}G dd d||}| | |||||t g d S )	Nc                   @   s   e Zd ZdS )z#Test_ro.test_w_diamond.<locals>.FooNr!   r   r   r   r   r"   k   s   r"   c                   @   s   e Zd ZdS )z#Test_ro.test_w_diamond.<locals>.BarNr!   r   r   r   r   r+   m   s   r+   c                   @   s   e Zd ZdS )z#Test_ro.test_w_diamond.<locals>.BazNr!   r   r   r   r   r.   o   s   r.   c                   @   s   e Zd ZdS )z#Test_ro.test_w_diamond.<locals>.QuxNr!   r   r   r   r   r/   q   s   r/   r(   r0   r   r   r   r1   j   s    zTest_ro.test_w_diamondc                 C   sb   G dd dt }|d}|d|}|d|}|d|}|d|}|d|||}|||||||gfS )	Nc                   @   s   e Zd Zdd Zdd ZdS )z Test_ro._make_IOErr.<locals>.Fooc                 W   s   || _ || _d S r	   r   r%   )r   namebasesr   r   r   __init__y   s    z)Test_ro._make_IOErr.<locals>.Foo.__init__c                 S   s   | j S r	   r   r   r   r   r   __repr__|   s    z)Test_ro._make_IOErr.<locals>.Foo.__repr__N)r   r   r   r8   r:   r   r   r   r   r"   x   s   r"   IExIStdErrIEnvErrIIOErrIOSErrIOErr)r$   )r   r"   r;   r<   r=   r>   r?   r@   r   r   r   _make_IOErrv   s    	



zTest_ro._make_IOErrc                 C   s"   |   \}}| | || d S r	   )rA   r   r   )r   r@   r7   r   r   r   test_non_orderable   s    zTest_ro.test_non_orderablec           
      C   s   ddl m} ddl m} ddl m} ddl m} G dd d|}||G dd	 d	t}G d
d d|}G dd dt}G dd d||}	| | ||	 ||	|||||||||tg d S )Nr   )implementer	Interface
providedBy)implementedByc                   @   s   e Zd ZdS )z?Test_ro.test_mixed_inheritance_and_implementation.<locals>.IFooNr!   r   r   r   r   IFoo   s   rI   c                   @   s   e Zd ZdS )zHTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsFooNr!   r   r   r   r   ImplementsFoo   s   rJ   c                   @   s   e Zd ZdS )zETest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooNr!   r   r   r   r   
ExtendsFoo   s   rK   c                   @   s   e Zd ZdS )zLTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsNothingNr!   r   r   r   r   ImplementsNothing   s   rL   c                   @   s   e Zd ZdS )zVTest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooImplementsNothingNr!   r   r   r   r   ExtendsFooImplementsNothing   s   rM   )zope.interfacerC   rE   rG   rH   r$   r   r   )
r   rC   rE   rG   rH   rI   rJ   rK   rL   rM   r   r   r   )test_mixed_inheritance_and_implementation   s*    z1Test_ro.test_mixed_inheritance_and_implementation)r   r   r   ZmaxDiffr   r'   r*   r-   r1   rA   rB   rO   r   r   r   r   r2   Q   s   r2   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	C3Settingc                 C   s   || _ || _d S r	   )_setting_value)r   Zsettingvaluer   r   r   r8      s    zC3Setting.__init__c                 C   s$   ddl m} t|j| jj| j d S Nr   ro)rN   rV   setattrC3rQ   r   rR   )r   rV   r   r   r   	__enter__   s    zC3Setting.__enter__c                 C   s$   ddl m} t|j| jj| j d S rT   )rN   rV   rW   rX   rQ   r   )r   tvtbrV   r   r   r   __exit__   s    zC3Setting.__exit__N)r   r   r   r8   rY   r]   r   r   r   r   rP      s   rP   c                       sh   e Zd Zdd Zdd ZefddZdd Zd	d
 Zdd Z	dd Z
dd Zdd Z fddZ  ZS )
Test_c3_roc                 C   s4   t |  ddlm} |d | _}| |j d S )Nr   )InstalledHandlerzzope.interface.ro)r2   setUpZzope.testing.loggingsupportr_   log_handlerZ
addCleanup	uninstall)r   r_   handlerr   r   r   r`      s    
zTest_c3_ro.setUpc                 K   s   ddl m} ||f|S rT   )r   rV   )r   r    r4   rV   r   r   r   r      s    zTest_c3_ro._callFUTc           	      C   s   |}G dd d|}G dd d|}G dd d|}G dd d||}G d	d
 d
||}G dd d||}t |dr| | | | |S )Nc                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.FNr!   r   r   r   r   F   s   rd   c                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.ENr!   r   r   r   r   E   s   re   c                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.DNr!   r   r   r   r   D   s   rf   c                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.CNr!   r   r   r   r   C   s   rg   c                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.BNr!   r   r   r   r   B   s   rh   c                   @   s   e Zd ZdS )z*Test_c3_ro.test_complex_diamond.<locals>.ANr!   r   r   r   r   A   s   ri   mro)hasattrr   rj   r   )	r   baseOrd   re   rf   rg   rh   ri   r   r   r   test_complex_diamond   s    
zTest_c3_ro.test_complex_diamondc              
   C   s@   ddl m} | |}| dd |jD ddddd	d
dg d S )Nr   rD   c                 S   s   g | ]
}|j qS r   r9   ).0r   r   r   r   
<listcomp>   s     z=Test_c3_ro.test_complex_diamond_interface.<locals>.<listcomp>ri   rh   rg   rf   re   rd   rE   )rN   rE   rn   r   __iro__)r   rE   ZIAr   r   r   test_complex_diamond_interface   s    
z)Test_c3_ro.test_complex_diamond_interfacec                 C   s>   ddl m} | |}| j|dd}| |j| |   d S )Nr   rD   T)use_legacy_ro)rN   rE   rn   r   ZassertNotEqualrq   _check_handler_complex_diamond)r   rE   ri   Zlegacy_A_iror   r   r   (test_complex_diamond_use_legacy_argument   s
    
z3Test_c3_ro.test_complex_diamond_use_legacy_argumentc                 C   sB   ddl m} | |}| j|dd}| t||j |   d S )Nr   rD   T)log_changed_ro)rN   rE   rn   r   r   tuplerq   rt   )r   rE   ri   Zcomputed_A_iror   r   r   ,test_complex_diamond_compare_legacy_argument   s
    
z7Test_c3_ro.test_complex_diamond_compare_legacy_argumentc                 C   sJ   | j }| dt|j |jd }| ddd |  D d d S )Nr   r   
c                 s   s   | ]}|  V  qd S r	   )rstrip)ro   lr   r   r   	<genexpr>  s     z<Test_c3_ro._check_handler_complex_diamond.<locals>.<genexpr>a  Object <InterfaceClass zope.interface.tests.test_ro.A> has different legacy and C3 MROs:
  Legacy RO (len=7)                 C3 RO (len=7; inconsistent=no)
  ==================================================================
    zope.interface.tests.test_ro.A    zope.interface.tests.test_ro.A
    zope.interface.tests.test_ro.B    zope.interface.tests.test_ro.B
  - zope.interface.tests.test_ro.E
    zope.interface.tests.test_ro.C    zope.interface.tests.test_ro.C
    zope.interface.tests.test_ro.D    zope.interface.tests.test_ro.D
                                    + zope.interface.tests.test_ro.E
    zope.interface.tests.test_ro.F    zope.interface.tests.test_ro.F
    zope.interface.Interface          zope.interface.Interface)ra   r   lenrecordsjoin
getMessage
splitlines)r   rc   recordr   r   r   rt      s    
z)Test_c3_ro._check_handler_complex_diamondc                 C   s   ddl m} G dd dt}|ddi }G dd d|}G d	d
 d
|}G dd d|}G dd d|}|d}|d|||f}	|d|||	f}
| j|
ddd}| ||
||	|||||g | jj\}| d|  | 	|j
 | j|
dd W 5 Q R X d S )Nr   rU   c                   @   s"   e Zd ZdZdddZdd ZdS )zUTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Basedr   Nc                 S   s   || _ || _d S r	   r5   )r   r6   r7   attrsr   r   r   r8     s    z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__init__c                 S   s   | j S r	   r9   r   r   r   r   r:     s    z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__repr__)r   N)r   r   r   r%   r8   r:   r   r   r   r   _Based  s   
r   rE   r   c                   @   s   e Zd ZdS )z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPluggableIndexNr!   r   r   r   r   IPluggableIndex!  s   r   c                   @   s   e Zd ZdS )zbTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.ILimitedResultIndexNr!   r   r   r   r   ILimitedResultIndex$  s   r   c                   @   s   e Zd ZdS )zZTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IQueryIndexNr!   r   r   r   r   IQueryIndex'  s   r   c                   @   s   e Zd ZdS )zYTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPathIndexNr!   r   r   r   r   
IPathIndex*  s   r   r$   	PathIndexExtendedPathIndexTF)rv   strictzused the legacyr   )rN   rV   r$   r   r   ra   r~   assertInr   assertRaises InconsistentResolutionOrderError)r   rV   r   rE   r   r   r   r   objr   r   resultr   r   r   r   :test_ExtendedPathIndex_implement_thing_implementedby_super  s6    


zETest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_superc              	   C   s`   t tk	r| d ddlm} ddlm} | t|t  	 |j
|j|j|j|j|jg d S )Nz$Requires Python 3 IOError == OSErrorr   )
interfacesrF   )OSErrorIOErrorZskipTestZzope.interface.commonr   rN   rG   r   listZ	flattenedZIOSErrorZIIOErrorZIEnvironmentErrorZIStandardErrorZ
IExceptionrE   )r   r   rG   r   r   r   test_OSError_IOErrorP  s    
zTest_c3_ro.test_OSError_IOErrorc                    sv  dd l }ddlm} z|`W n tk
r0   Y nX | j |d t|jj	dF t|jj
d, | |j tt|   W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X |  \}}| |j | j|dd W 5 Q R X t|jjdX t|jj
d> |  |d | | W 5 Q R X | ||jj W 5 Q R X W 5 Q R X | j|dd}| j|ddd}| || d S )	Nr   rU   errorTFr   ignore)rs   r   )warningsrN   rV   __warningregistry__AttributeErrorcatch_warningssimplefilterrP   rX   ZWARN_BAD_IROZ
STRICT_IROr   Z"InconsistentResolutionOrderWarningsuperr^   rB   rA   r   r   ZTRACK_BAD_IROr   ZBAD_IROSr   )r   r   rV   r@   _ZiroZ
legacy_iro	__class__r   r   rB   b  s,    

 6 

$zTest_c3_ro.test_non_orderable)r   r   r   r`   r   r$   rn   rr   ru   rx   rt   r   r   rB   __classcell__r   r   r   r   r^      s   

	?r^   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
TestC3FNc                 C   s   ddl m} ||||S )Nr   )rX   )r   rX   resolver)r   rg   r   	base_mrosrX   r   r   r   _makeOne  s    zTestC3._makeOnec                 C   sF   | j t| tjtjjid}|j}| tj| | |tj j d S )N)r   )	r   typeunittestTestCase__mro__memor   ZassertIsNoneZhad_inconsistency)r   c3r   r   r   r   test_base_mros_given  s    zTestC3.test_base_mros_givenc                 C   s>   |  t| }| |j d |_| | tt| j d S r	   )	r   r   ZassertIsNotNoneZ_C3__mro_merger   rj   r   r   )r   r   r   r   r   test_one_base_optimization  s    z!TestC3.test_one_base_optimization)FN)r   r   r   r   r   r   r   r   r   r   r     s   
r   c                   @   s.   e Zd ZG dd deZd	ddZdd ZdS )
Test_ROComparisonc                   @   s   e Zd ZdZdZdS )zTest_ROComparison.MockC3FN)r   r   r   direct_inconsistencybases_had_inconsistencyr   r   r   r   MockC3  s   r   Nr   c                 C   s    ddl m} ||p|  ||S )Nr   )_ROComparison)r   r   r   )r   r   Zc3_roZ	legacy_ror   r   r   r   r     s    zTest_ROComparison._makeOnec                 C   s\   |   }| d|j d|j_| d|j d|j_| d|j d|j_| d|j d S )NnoTdirectzdirect+basesFr7   )r   r   Z_inconsistent_labelr   r   r   )r   compr   r   r   test_inconsistent_label  s    z)Test_ROComparison.test_inconsistent_label)Nr   r   )r   r   r   r$   r   r   r   r   r   r   r   r     s   
r   )__doc__r   r   r   r   r2   r$   rP   r^   r   r   r   r   r   r   <module>   s   &b @