o
    h8                     @   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
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                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test__mergeOrderingsc                 C      ddl m} ||S )Nr   )_legacy_mergeOrderings)zope.interface.ror   )selfZ	orderingsr    r   O/var/www/html/venv/lib/python3.10/site-packages/zope/interface/tests/test_ro.py_callFUT      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   |  | g dg d 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   s@   g d}ddg}g d}dg}|  | ||||gg d d S )N)xyzqr   )         )r   r   r   r   r   r   r   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                   @   r   )Test__flattenc                 C   r   )Nr   )_legacy_flatten)r   r"   )r   obr"   r   r   r	   r
   0   r   zTest__flatten._callFUTc                 C   2   G dd d}| }d|_ | | ||g d S )Nc                   @      e Zd ZdS )z-Test__flatten.test_w_empty_bases.<locals>.FooNr   r   r    r   r   r   r	   Foo6       r'   r   	__bases__r   r
   r   r'   Zfoor   r   r	   test_w_empty_bases4      z Test__flatten.test_w_empty_basesc                 C   (   G dd d}|  | ||tg d S )Nc                   @   r%   )z-Test__flatten.test_w_single_base.<locals>.FooNr&   r   r   r   r	   r'   ?   r(   r'   r   r
   objectr   r'   r   r   r	   test_w_single_base=      z Test__flatten.test_w_single_basec                 C   :   G dd d}G dd d|}|  | |||tg d S )Nc                   @   r%   )z'Test__flatten.test_w_bases.<locals>.FooNr&   r   r   r   r	   r'   F   r(   r'   c                   @   r%   )z'Test__flatten.test_w_bases.<locals>.BarNr&   r   r   r   r	   BarI   r(   r5   r/   r   r'   r5   r   r   r	   test_w_basesD      zTest__flatten.test_w_basesc              
   C   sd   G dd d}G dd d|}G dd d|}G dd d||}|  | ||||t||tg d S )	Nc                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.FooNr&   r   r   r   r	   r'   P   r(   r'   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.BarNr&   r   r   r   r	   r5   S   r(   r5   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.BazNr&   r   r   r   r	   BazV   r(   r9   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.QuxNr&   r   r   r   r	   QuxY   r(   r:   r/   r   r'   r5   r9   r:   r   r   r	   test_w_diamondN   s   zTest__flatten.test_w_diamondN)r   r   r    r
   r,   r2   r7   r<   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      ddl m} ||fi |S )Nr   )
_legacy_ro)r   r?   )r   r#   kwargsr?   r   r   r	   r
   c      zTest_ro._callFUTc                 C   r$   )Nc                   @   r%   )z'Test_ro.test_w_empty_bases.<locals>.FooNr&   r   r   r   r	   r'   i   r(   r'   r   r)   r+   r   r   r	   r,   g   r-   zTest_ro.test_w_empty_basesc                 C   r.   )Nc                   @   r%   )z'Test_ro.test_w_single_base.<locals>.FooNr&   r   r   r   r	   r'   r   r(   r'   r/   r1   r   r   r	   r2   p   r3   zTest_ro.test_w_single_basec                 C   r4   )Nc                   @   r%   )z!Test_ro.test_w_bases.<locals>.FooNr&   r   r   r   r	   r'   y   r(   r'   c                   @   r%   )z!Test_ro.test_w_bases.<locals>.BarNr&   r   r   r   r	   r5   |   r(   r5   r/   r6   r   r   r	   r7   w   r8   zTest_ro.test_w_basesc                 C   s`   G dd d}G dd d|}G dd d|}G dd d||}|  | |||||tg d S )	Nc                   @   r%   )z#Test_ro.test_w_diamond.<locals>.FooNr&   r   r   r   r	   r'      r(   r'   c                   @   r%   )z#Test_ro.test_w_diamond.<locals>.BarNr&   r   r   r   r	   r5      r(   r5   c                   @   r%   )z#Test_ro.test_w_diamond.<locals>.BazNr&   r   r   r   r	   r9      r(   r9   c                   @   r%   )z#Test_ro.test_w_diamond.<locals>.QuxNr&   r   r   r   r	   r:      r(   r:   r/   r;   r   r   r	   r<      s   zTest_ro.test_w_diamondc                 C   s`   G dd d}|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      || _ || _d S r   r   r*   )r   namebasesr   r   r	   __init__      
z)Test_ro._make_IOErr.<locals>.Foo.__init__c                 S      | j S r   r   r   r   r   r	   __repr__      z)Test_ro._make_IOErr.<locals>.Foo.__repr__N)r   r   r    rF   rJ   r   r   r   r	   r'      s    r'   IExIStdErrIEnvErrIIOErrIOSErrIOErrr   )r   r'   rL   rM   rN   rO   rP   rQ   r   r   r	   _make_IOErr   s   




zTest_ro._make_IOErrc                 C   s"   |   \}}| | || d S r   )rR   r   r
   )r   rQ   rE   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	}G d
d d|}G dd d}G dd d||}	| | ||	 ||	|||||||||tg d S )Nr   	Interface)implementedBy)implementer
providedByc                   @   r%   )z?Test_ro.test_mixed_inheritance_and_implementation.<locals>.IFooNr&   r   r   r   r	   IFoo   r(   rZ   c                   @   r%   )zHTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsFooNr&   r   r   r   r	   ImplementsFoo   s    r[   c                   @   r%   )zETest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooNr&   r   r   r   r	   
ExtendsFoo   r(   r\   c                   @   r%   )zLTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsNothingNr&   r   r   r   r	   ImplementsNothing   r(   r]   c                   @   r%   )zVTest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooImplementsNothingNr&   r   r   r   r	   ExtendsFooImplementsNothing   r(   r^   )zope.interfacerU   rV   rW   rY   r   r
   r0   )
r   rU   rV   rW   rY   rZ   r[   r\   r]   r^   r   r   r	   )test_mixed_inheritance_and_implementation   s*   z1Test_ro.test_mixed_inheritance_and_implementation)r   r   r    ZmaxDiffr
   r,   r2   r7   r<   rR   rS   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 )	C3Settingc                 C   rB   r   )_setting_value)r   Zsettingvaluer   r   r	   rF      rG   zC3Setting.__init__c                 C   s$   ddl m} t|j| jj| j d S Nr   ro)r_   rg   setattrC3rb   r   rc   )r   rg   r   r   r	   	__enter__      zC3Setting.__enter__c                 C   s$   ddl m} t|j| jj| j d S re   )r_   rg   rh   ri   rb   r   )r   tvtbrg   r   r   r	   __exit__   rk   zC3Setting.__exit__N)r   r   r    rF   rj   ro   r   r   r   r	   ra      s    ra   c                       sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Z 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)r=   setUpZzope.testing.loggingsupportrq   log_handlerZ
addCleanup	uninstall)r   rq   handlerr   r   r	   rr      s   
zTest_c3_ro.setUpc                 K   r>   re   )r   rg   )r   r#   r@   rg   r   r   r	   r
      rA   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rC| | | | |S )Nc                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.FNr&   r   r   r   r	   F   r(   rv   c                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.ENr&   r   r   r   r	   E   r(   rw   c                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.DNr&   r   r   r   r	   D   r(   rx   c                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.CNr&   r   r   r   r	   C   r(   ry   c                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.BNr&   r   r   r   r	   B   r(   rz   c                   @   r%   )z+Test_c3_ro._make_complex_diamond.<locals>.ANr&   r   r   r   r	   A   r(   r{   mro)hasattrr   r|   r
   )r   baserv   rw   rx   ry   rz   r{   r   r   r	   _make_complex_diamond   s   
z Test_c3_ro._make_complex_diamondc                 C   s   |  t d S r   )r   r0   r   r   r   r	   test_complex_diamond_object  s   z&Test_c3_ro.test_complex_diamond_objectc                 C   s6   ddl m} | |}| dd |jD g d d S )Nr   rT   c                 S   s   g | ]}|j qS r   rI   ).0r   r   r   r	   
<listcomp>  s    z=Test_c3_ro.test_complex_diamond_interface.<locals>.<listcomp>)r{   rz   ry   rx   rw   rv   rU   )r_   rU   r   r   __iro__)r   rU   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   rT   T)use_legacy_ro)r_   rU   r   r
   ZassertNotEqualr   _check_handler_complex_diamond)r   rU   r{   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   rT   T)log_changed_ro)r_   rU   r   r
   r   tupler   r   )r   rU   r{   Zcomputed_A_iror   r   r	   ,test_complex_diamond_compare_legacy_argument  s
   
z7Test_c3_ro.test_complex_diamond_compare_legacy_argumentc                 C   sV   | j }| dt|j |jd }djdd}| ddd |  D | d S )	Nr   r   a  Object <InterfaceClass {name}> 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.Interfacezzope.interface.tests.test_ro.A)rD   
c                 s   s    | ]}|  V  qd S r   )rstrip)r   lnr   r   r	   	<genexpr>;  s    z<Test_c3_ro._check_handler_complex_diamond.<locals>.<genexpr>)rs   r   lenrecordsformatjoin
getMessage
splitlines)r   ru   recordexpectedr   r   r	   r   &  s   
z)Test_c3_ro._check_handler_complex_diamondc                 C   s  ddl m} G dd d}|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 d    d S 1 sw   Y  d S )Nr   rf   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   rB   r   rC   )r   rD   rE   attrsr   r   r	   rF   H  rG   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__init__c                 S   rH   r   rI   r   r   r   r	   rJ   L  rK   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__repr__)r   N)r   r   r    r*   rF   rJ   r   r   r   r	   _BasedE  s    
r   rU   r   c                   @   r%   )z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPluggableIndexNr&   r   r   r   r	   IPluggableIndexQ  r(   r   c                   @   r%   )zbTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.ILimitedResultIndexNr&   r   r   r   r	   ILimitedResultIndexT  r(   r   c                   @   r%   )zZTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IQueryIndexNr&   r   r   r   r	   IQueryIndexW  r(   r   c                   @   r%   )zYTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPathIndexNr&   r   r   r   r	   
IPathIndexZ  r(   r   r0   	PathIndexExtendedPathIndexTF)r   strictzused the legacyr   )
r_   rg   r
   r   rs   r   assertInr   assertRaises InconsistentResolutionOrderError)r   rg   r   rU   r   r   r   r   objr   r   resultr   r   r   r	   :test_ExtendedPathIndex_implement_thing_implementedby_super?  s>   


"zETest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_superc              	   C   sN   ddl m} ddlm} | t|t  |j|j	|j
|j|j|jg d S )Nr   rX   )
interfaces)r_   rY   Zzope.interface.commonr   r   listOSErrorZ	flattenedZIOSErrorZIIOErrorZIEnvironmentErrorZIStandardErrorZ
IExceptionrU   )r   rY   r   r   r   r	   test_OSError_IOError  s   zTest_c3_ro.test_OSError_IOErrorc                    s  dd l }ddlm} z|`W n	 ty   Y nw | V |d t|jj	d: t|jj
d# | |j t   W d    n1 sHw   Y  W d    n1 sWw   Y  W d    n1 sfw   Y  W d    n1 suw   Y  |  \}}| |j | j|dd W d    n1 sw   Y  t|jjdE t|jj
d. |  |d | | W d    n1 sw   Y  | ||jj W d    n1 sw   Y  W d    n1 sw   Y  | j|dd}| j|ddd}| || d S )	Nr   rf   errorTFr   ignore)r   r   )warningsr_   rg   __warningregistry__AttributeErrorcatch_warningssimplefilterra   ri   ZWARN_BAD_IROZ
STRICT_IROr   Z"InconsistentResolutionOrderWarningsuperrS   rR   r   r
   ZTRACK_BAD_IROr   ZBAD_IROSr   )r   r   rg   rQ   _ZiroZ
legacy_iro	__class__r   r	   rS     s^   

 


 
zTest_c3_ro.test_non_orderable)r   r   r    rr   r
   r   r   r   r   r   r   r   r   rS   __classcell__r   r   r   r	   rp      s    

	Erp   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   )ri   )r   ri   resolver)r   ry   r   	base_mrosri   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   r|   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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+basesFrE   )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     s    
r   )
__doc__r   r   r   r!   r=   ra   rp   r   r   r   r   r   r	   <module>   s   2q [