o
    $x`Ñ7  ã                   @   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                   @   ó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   )ÚselfÚ	orderingsr   © r	   ú>/usr/lib/python3/dist-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   ÚO1ÚO2ÚO3Ú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   -   r   zTest__flatten._callFUTc                 C   ó4   G dd„ dt ƒ}|ƒ }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
   ÚFoo2   ó    r,   r	   ©ÚobjectÚ	__bases__r   r   ©r   r,   Úfoor	   r	   r
   Útest_w_empty_bases1   ó   z Test__flatten.test_w_empty_basesc                 C   ó*   G dd„ dt ƒ}|  |  |¡|t g¡ d S )Nc                   @   r*   )z-Test__flatten.test_w_single_base.<locals>.FooNr+   r	   r	   r	   r
   r,   9   r-   r,   ©r/   r   r   ©r   r,   r	   r	   r
   Útest_w_single_base8   ó   z Test__flatten.test_w_single_basec                 C   ó<   G dd„ dt ƒ}G dd„ d|ƒ}|  |  |¡||t g¡ d S )Nc                   @   r*   )z'Test__flatten.test_w_bases.<locals>.FooNr+   r	   r	   r	   r
   r,   >   r-   r,   c                   @   r*   )z'Test__flatten.test_w_bases.<locals>.BarNr+   r	   r	   r	   r
   ÚBar@   r-   r;   r6   ©r   r,   r;   r	   r	   r
   Útest_w_bases=   ó   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                   @   r*   )z)Test__flatten.test_w_diamond.<locals>.FooNr+   r	   r	   r	   r
   r,   E   r-   r,   c                   @   r*   )z)Test__flatten.test_w_diamond.<locals>.BarNr+   r	   r	   r	   r
   r;   G   r-   r;   c                   @   r*   )z)Test__flatten.test_w_diamond.<locals>.BazNr+   r	   r	   r	   r
   ÚBazI   r-   r?   c                   @   r*   )z)Test__flatten.test_w_diamond.<locals>.QuxNr+   r	   r	   r	   r
   ÚQuxK   r-   r@   r6   ©r   r,   r;   r?   r@   r	   r	   r
   Útest_w_diamondD   s   ÿzTest__flatten.test_w_diamondN)r#   r$   r%   r   r3   r8   r=   rB   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   rE   )r   r(   ÚkwargsrE   r	   r	   r
   r   S   ó   zTest_ro._callFUTc                 C   r)   )Nc                   @   r*   )z'Test_ro.test_w_empty_bases.<locals>.FooNr+   r	   r	   r	   r
   r,   X   r-   r,   r	   r.   r1   r	   r	   r
   r3   W   r4   zTest_ro.test_w_empty_basesc                 C   r5   )Nc                   @   r*   )z'Test_ro.test_w_single_base.<locals>.FooNr+   r	   r	   r	   r
   r,   _   r-   r,   r6   r7   r	   r	   r
   r8   ^   r9   zTest_ro.test_w_single_basec                 C   r:   )Nc                   @   r*   )z!Test_ro.test_w_bases.<locals>.FooNr+   r	   r	   r	   r
   r,   d   r-   r,   c                   @   r*   )z!Test_ro.test_w_bases.<locals>.BarNr+   r	   r	   r	   r
   r;   f   r-   r;   r6   r<   r	   r	   r
   r=   c   r>   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                   @   r*   )z#Test_ro.test_w_diamond.<locals>.FooNr+   r	   r	   r	   r
   r,   k   r-   r,   c                   @   r*   )z#Test_ro.test_w_diamond.<locals>.BarNr+   r	   r	   r	   r
   r;   m   r-   r;   c                   @   r*   )z#Test_ro.test_w_diamond.<locals>.BazNr+   r	   r	   r	   r
   r?   o   r-   r?   c                   @   r*   )z#Test_ro.test_w_diamond.<locals>.QuxNr+   r	   r	   r	   r
   r@   q   r-   r@   r6   rA   r	   r	   r
   rB   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   ó   || _ || _d S r   ©r#   r0   )r   ÚnameÚbasesr	   r	   r
   Ú__init__y   ó   
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%   rL   rP   r	   r	   r	   r
   r,   x   s    r,   ÚIExÚIStdErrÚIEnvErrÚIIOErrÚIOSErrÚIOErr)r/   )r   r,   rR   rS   rT   rU   rV   rW   r	   r	   r
   Ú_make_IOErrv   s   	



zTest_ro._make_IOErrc                 C   s"   |   ¡ \}}|  |  |¡|¡ d S r   )rX   r   r   )r   rW   rK   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                   @   r*   )z?Test_ro.test_mixed_inheritance_and_implementation.<locals>.IFooNr+   r	   r	   r	   r
   ÚIFoo˜   r-   r`   c                   @   r*   )zHTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsFooNr+   r	   r	   r	   r
   ÚImplementsFoo›   s    ra   c                   @   r*   )zETest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooNr+   r	   r	   r	   r
   Ú
ExtendsFooŸ   r-   rb   c                   @   r*   )zLTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsNothingNr+   r	   r	   r	   r
   ÚImplementsNothing¢   r-   rc   c                   @   r*   )zVTest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooImplementsNothingNr+   r	   r	   r	   r
   ÚExtendsFooImplementsNothing¥   r-   rd   )Úzope.interfacerZ   r\   r^   r_   r/   r   r   )
r   rZ   r\   r^   r_   r`   ra   rb   rc   rd   r	   r	   r
   Ú)test_mixed_inheritance_and_implementation�   s*   úþz1Test_ro.test_mixed_inheritance_and_implementation)r#   r$   r%   ÚmaxDiffr   r3   r8   r=   rB   rX   rY   rf   r	   r	   r	   r
   rC   Q   s    rC   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	C3Settingc                 C   rH   r   )Ú_settingÚ_value)r   ÚsettingÚvaluer	   r	   r
   rL   µ   rM   zC3Setting.__init__c                 C   s$   ddl m} t|j| jj| jƒ d S ©Nr   ©Úro)re   ro   ÚsetattrÚC3ri   r#   rj   )r   ro   r	   r	   r
   Ú	__enter__¹   ó   zC3Setting.__enter__c                 C   s$   ddl m} t|j| jj| jƒ d S rm   )re   ro   rp   rq   ri   r#   )r   ÚtÚvÚtbro   r	   r	   r
   Ú__exit__½   rs   zC3Setting.__exit__N)r#   r$   r%   rL   rr   rw   r	   r	   r	   r
   rh   ³   s    rh   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)rC   ÚsetUpÚzope.testing.loggingsupportry   Úlog_handlerÚ
addCleanupÚ	uninstall)r   ry   Úhandlerr	   r	   r
   rz   Ã   s   
zTest_c3_ro.setUpc                 K   rD   rm   )r   ro   )r   r(   rF   ro   r	   r	   r
   r   É   rG   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ƒrE|  | ¡ |  |¡¡ |S )Nc                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.FNr+   r	   r	   r	   r
   ÚFÐ   r-   r€   c                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.ENr+   r	   r	   r	   r
   ÚEÒ   r-   r�   c                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.DNr+   r	   r	   r	   r
   ÚDÔ   r-   r‚   c                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.CNr+   r	   r	   r	   r
   ÚCÖ   r-   rƒ   c                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.BNr+   r	   r	   r	   r
   ÚBØ   r-   r„   c                   @   r*   )z*Test_c3_ro.test_complex_diamond.<locals>.ANr+   r	   r	   r	   r
   ÚAÚ   r-   r…   Úmro)Úhasattrr   r†   r   )	r   ÚbaseÚOr€   r�   r‚   rƒ   r„   r…   r	   r	   r
   Útest_complex_diamondÍ   s   
zTest_c3_ro.test_complex_diamondc                 C   s6   ddl m} |  |¡}|  dd„ |jD ƒg d¢¡ d S )Nr   r[   c                 S   s   g | ]}|j ‘qS r	   rO   )Ú.0r   r	   r	   r
   Ú
<listcomp>è   s    z=Test_c3_ro.test_complex_diamond_interface.<locals>.<listcomp>)r…   r„   rƒ   r‚   r�   r€   r\   )re   r\   rŠ   r   Ú__iro__)r   r\   Ú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   r[   T)Úuse_legacy_ro)re   r\   rŠ   r   ÚassertNotEqualr�   Ú_check_handler_complex_diamond)r   r\   r…   Ú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   r[   T)Úlog_changed_ro)re   r\   rŠ   r   r   Útupler�   r’   )r   r\   r…   Ú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)r‹   Ú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)r|   r   ÚlenÚrecordsÚjoinÚ
getMessageÚ
splitlines)r   r   Úrecordr	   r	   r
   r’   ÿ   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 d   ƒ d S 1 s„w   Y  d S )Nr   rn   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   rH   r   rI   )r   rJ   rK   Úattrsr	   r	   r
   rL     rM   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__init__c                 S   rN   r   rO   r   r	   r	   r
   rP     rQ   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__repr__)r	   N)r#   r$   r%   r0   rL   rP   r	   r	   r	   r
   Ú_Based  s    
r¤   r\   r	   c                   @   r*   )z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPluggableIndexNr+   r	   r	   r	   r
   ÚIPluggableIndex!  r-   r¥   c                   @   r*   )zbTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.ILimitedResultIndexNr+   r	   r	   r	   r
   ÚILimitedResultIndex$  r-   r¦   c                   @   r*   )zZTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IQueryIndexNr+   r	   r	   r	   r
   ÚIQueryIndex'  r-   r§   c                   @   r*   )zYTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPathIndexNr+   r	   r	   r	   r
   Ú
IPathIndex*  r-   r¨   r/   Ú	PathIndexÚExtendedPathIndexTF)r•   Ústrictzused the legacy©r«   )re   ro   r/   r   r   r|   rž   ÚassertInr    ÚassertRaisesÚ InconsistentResolutionOrderError)r   ro   r¤   r\   r¥   r¦   r§   r¨   Úobjr©   rª   Úresultr¢   r	   r	   r
   Ú:test_ExtendedPathIndex_implement_thing_implementedby_super  s8   
ÿø

"ÿzETest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_superc              	   C   s`   t tu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   )Ú
interfacesr]   )ÚOSErrorÚIOErrorÚskipTestÚzope.interface.commonr³   re   r^   r   ÚlistÚ	flattenedÚIOSErrorÚIIOErrorÚIEnvironmentErrorÚIStandardErrorÚ
IExceptionr\   )r   r³   r^   r	   r	   r
   Útest_OSError_IOErrorP  s   
úþzTest_c3_ro.test_OSError_IOErrorc                    s  dd l }ddlm} z|`W n	 ty   Y nw | ¡ �X | d¡ t|jj	dƒ�< t|jj
dƒ�% |  |j¡� tt| ƒ ¡  W d   ƒ n1 sJw   Y  W d   ƒ n1 sYw   Y  W d   ƒ n1 shw   Y  W d   ƒ n1 sww   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   rn   ÚerrorTFr¬   Úignore)r�   r«   )Úwarningsre   ro   Ú__warningregistry__ÚAttributeErrorÚcatch_warningsÚsimplefilterrh   rq   ÚWARN_BAD_IROÚ
STRICT_IROr®   Ú"InconsistentResolutionOrderWarningÚsuperrx   rY   rX   r¯   r   ÚTRACK_BAD_IROr­   ÚBAD_IROSr   )r   rÂ   ro   rW   Ú_ÚiroÚ
legacy_iro©Ú	__class__r	   r
   rY   b  sF   ÿ

 ÿ€ÿ€ €þÿ 

þü€ zTest_c3_ro.test_non_orderable)r#   r$   r%   rz   r   r/   rŠ   r�   r”   r˜   r’   r²   r¿   rY   Ú__classcell__r	   r	   rÐ   r
   rx   Á   s    

	?rx   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   )rq   )r   rq   Úresolver)r   rƒ   r«   Ú	base_mrosrq   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­   ÚassertIsNoneÚ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×   ÚassertIsNotNoneÚ_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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Þ   Úc3_roÚ	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+basesFrK   )rÖ   r   Ú_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&   rC   r/   rh   rx   rÓ   rä   r	   r	   r	   r
   Ú<module>   s   &b @