o
    Êó·i“=  ã                   @   s    d Z ddlZddlZddl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   úbC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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
   4   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	   ÚFoo:   ó    r'   r   ©Ú	__bases__r   r
   ©r   r'   Zfoor   r   r	   Útest_w_empty_bases8   ó   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'   C   r(   r'   ©r   r
   Úobject©r   r'   r   r   r	   Útest_w_single_baseA   ó   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'   J   r(   r'   c                   @   r%   )z'Test__flatten.test_w_bases.<locals>.BarNr&   r   r   r   r	   ÚBarM   r(   r5   r/   ©r   r'   r5   r   r   r	   Útest_w_basesH   ó   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'   T   r(   r'   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.BarNr&   r   r   r   r	   r5   W   r(   r5   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.BazNr&   r   r   r   r	   ÚBazZ   r(   r9   c                   @   r%   )z)Test__flatten.test_w_diamond.<locals>.QuxNr&   r   r   r   r	   ÚQux]   r(   r:   r/   ©r   r'   r5   r9   r:   r   r   r	   Útest_w_diamondR   s   ÿzTest__flatten.test_w_diamondN)r   r   r    r
   r,   r2   r7   r<   r   r   r   r	   r!   2   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
   g   ó   zTest_ro._callFUTc                 C   r$   )Nc                   @   r%   )z'Test_ro.test_w_empty_bases.<locals>.FooNr&   r   r   r   r	   r'   m   r(   r'   r   r)   r+   r   r   r	   r,   k   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'   v   r(   r'   r/   r1   r   r   r	   r2   t   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'   }   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   {   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=   d   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   sÀ   | j }|  dt|jƒ¡ |jd }djdd�}tjj t	 
d¡dft	 
d¡d	ft	 
d
¡dft	 
d¡dft	 
d¡dfg¡}d dd„ | ¡  ¡ D ƒ¡}|  | ||d¡| t ||¡|d¡¡ d S )Nr   r   an  Object <InterfaceClass {name}> has different legacy and C3 MROs:
  Legacy RO (len=7)            C3 RO (len=7; inconsistent=no)
  ========================================================
    interface.tests.test_ro.A    interface.tests.test_ro.A
    interface.tests.test_ro.B    interface.tests.test_ro.B
  - interface.tests.test_ro.E
    interface.tests.test_ro.C    interface.tests.test_ro.C
    interface.tests.test_ro.D    interface.tests.test_ro.D
                               + interface.tests.test_ro.E
    interface.tests.test_ro.F    interface.tests.test_ro.F
    interface.Interface          interface.Interfacezinterface.tests.test_ro.A)rD   zzope\.Ú z5Legacy RO \(len=7\) +C3 RO \(len=7; inconsistent=no\)z1Legacy RO (len=7)  C3 RO (len=7; inconsistent=no)z=+z +\+z    +z*interface\.Interface +interface\.Interfacez(interface.Interface  interface.InterfaceÚ
c                 s   s   � | ]}|  ¡ V  qd S r   )Úrstrip)r�   Úlnr   r   r	   Ú	<genexpr>K  s   € z<Test_c3_ro._check_handler_complex_diamond.<locals>.<genexpr>)rs   r   ÚlenÚrecordsÚformatÚzopeZtestingZrenormalizingZOutputCheckerÚreÚcompileÚjoinÚ
getMessageÚ
splitlinesÚ
assertTrueÚcheck_outputZoutput_differenceÚdoctestZExample)r   ru   ÚrecordÚexpectedÚcheckerÚgotr   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 sƒw   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   [  rG   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__init__c                 S   rH   r   rI   r   r   r   r	   rJ   _  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	   Ú_BasedX  s    
r¡   rU   r   c                   @   r%   )z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPluggableIndexNr&   r   r   r   r	   ÚIPluggableIndexd  r(   r¢   c                   @   r%   )zbTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.ILimitedResultIndexNr&   r   r   r   r	   ÚILimitedResultIndexg  r(   r£   c                   @   r%   )zZTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IQueryIndexNr&   r   r   r   r	   ÚIQueryIndexj  r(   r¤   c                   @   r%   )zYTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPathIndexNr&   r   r   r   r	   Ú
IPathIndexm  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_superR  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 s˜w   Y  t|jjdƒ�E t|jj
dƒ�. | ¡ � | d¡ |  |¡ W d   ƒ n1 sÆw   Y  |  ||jj¡ W d   ƒ n1 sÝw   Y  W d   ƒ n1 sìw   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Å   Zzope.testing.renormalizingr“   rÆ   r   r!   r=   ra   rp   rÀ   rÍ   r   r   r   r	   Ú<module>   s   2q j