
    Vh8                        d Z ddlZ G d dej                        Z G d dej                        Z G d dej                        Z G d	 d
      Z G d de      Z G d dej                        Z G d dej                        Z	y)z!Resolution ordering utility tests    Nc                   *    e Zd Zd Zd Zd Zd Zd Zy)Test__mergeOrderingsc                     ddl m}  ||      S )Nr   )_legacy_mergeOrderings)zope.interface.ror   )self	orderingsr   s      L/home/dcms/DCMS/lib/python3.12/site-packages/zope/interface/tests/test_ro.py_callFUTzTest__mergeOrderings._callFUT   s    <%i00    c                 F    | j                  | j                  g       g        y NassertEqualr   r   s    r
   
test_emptyzTest__mergeOrderings.test_empty   s    r*B/r   c                 N    | j                  | j                  g d      g d       y )N)abcr   r   s    r
   test_singlez Test__mergeOrderings.test_single   s    7Ir   c                 T    | j                  | j                  dgddgg      ddg       y )Nr   r   r   r   s    r
   test_w_duplicatesz&Test__mergeOrderings.test_w_duplicates"   s*    Sz':;c3ZHr   c                 p    g d}ddg}g d}dg}| j                  | j                  ||||g      g d       y )N)xyzqr   )         )r   r   r   r   r    r!   r   r   )r   O1O2O3O4s        r
   &test_suffix_across_multiple_duplicatesz;Test__mergeOrderings.test_suffix_across_multiple_duplicates%   sA    3ZUBB'786	8r   N)__name__
__module____qualname__r   r   r   r   r&    r   r
   r   r      s    10JI8r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test__flattenc                     ddl m}  ||      S )Nr   )_legacy_flatten)r   r.   )r   obr.   s      r
   r   zTest__flatten._callFUT0   s    5r""r   c                 x     G d d      } |       }d|_         | j                  | j                  |      |g       y )Nc                       e Zd Zy)-Test__flatten.test_w_empty_bases.<locals>.FooNr'   r(   r)   r*   r   r
   Foor2   6       r   r4   r*   	__bases__r   r   r   r4   foos      r
   test_w_empty_basesz Test__flatten.test_w_empty_bases4   7    	 	 es+cU3r   c                 f     G d d      }| j                  | j                  |      |t        g       y )Nc                       e Zd Zy)-Test__flatten.test_w_single_base.<locals>.FooNr3   r*   r   r
   r4   r>   ?   r5   r   r4   r   r   objectr   r4   s     r
   test_w_single_basez Test__flatten.test_w_single_base=   +    	 	 	s+c6];r   c                 ~     G d d      } G d d|      }| j                  | j                  |      ||t        g       y )Nc                       e Zd Zy)'Test__flatten.test_w_bases.<locals>.FooNr3   r*   r   r
   r4   rF   F   r5   r   r4   c                       e Zd Zy)'Test__flatten.test_w_bases.<locals>.BarNr3   r*   r   r
   BarrH   I   r5   r   rI   r?   r   r4   rI   s      r
   test_w_baseszTest__flatten.test_w_basesD   :    	 		# 	 	s+c3-?@r   c           
           G d d      } G d d|      } G d d|      } G d d||      }| j                  | j                  |      |||t        ||t        g       y )	Nc                       e Zd Zy))Test__flatten.test_w_diamond.<locals>.FooNr3   r*   r   r
   r4   rO   P   r5   r   r4   c                       e Zd Zy))Test__flatten.test_w_diamond.<locals>.BarNr3   r*   r   r
   rI   rQ   S   r5   r   rI   c                       e Zd Zy))Test__flatten.test_w_diamond.<locals>.BazNr3   r*   r   r
   BazrS   V   r5   r   rT   c                       e Zd Zy))Test__flatten.test_w_diamond.<locals>.QuxNr3   r*   r   r
   QuxrV   Y   r5   r   rW   r?   r   r4   rI   rT   rW   s        r
   test_w_diamondzTest__flatten.test_w_diamondN   s`    	 		# 		# 		#s 	 	s+sCc6B	Dr   N)r'   r(   r)   r   r:   rB   rK   rY   r*   r   r
   r,   r,   .   s    #4<ADr   r,   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy)
Test_roNc                      ddl m}  ||fi |S )Nr   )
_legacy_ro)r   r]   )r   r/   kwargsr]   s       r
   r   zTest_ro._callFUTc   s    0"'''r   c                 x     G d d      } |       }d|_         | j                  | j                  |      |g       y )Nc                       e Zd Zy)'Test_ro.test_w_empty_bases.<locals>.FooNr3   r*   r   r
   r4   ra   i   r5   r   r4   r*   r6   r8   s      r
   r:   zTest_ro.test_w_empty_basesg   r;   r   c                 f     G d d      }| j                  | j                  |      |t        g       y )Nc                       e Zd Zy)'Test_ro.test_w_single_base.<locals>.FooNr3   r*   r   r
   r4   rd   r   r5   r   r4   r?   rA   s     r
   rB   zTest_ro.test_w_single_basep   rC   r   c                 ~     G d d      } G d d|      }| j                  | j                  |      ||t        g       y )Nc                       e Zd Zy)!Test_ro.test_w_bases.<locals>.FooNr3   r*   r   r
   r4   rg   y   r5   r   r4   c                       e Zd Zy)!Test_ro.test_w_bases.<locals>.BarNr3   r*   r   r
   rI   ri   |   r5   r   rI   r?   rJ   s      r
   rK   zTest_ro.test_w_basesw   rL   r   c                      G d d      } G d d|      } G d d|      } G d d||      }| j                  | j                  |      ||||t        g       y )	Nc                       e Zd Zy)#Test_ro.test_w_diamond.<locals>.FooNr3   r*   r   r
   r4   rl      r5   r   r4   c                       e Zd Zy)#Test_ro.test_w_diamond.<locals>.BarNr3   r*   r   r
   rI   rn      r5   r   rI   c                       e Zd Zy)#Test_ro.test_w_diamond.<locals>.BazNr3   r*   r   r
   rT   rp      r5   r   rT   c                       e Zd Zy)#Test_ro.test_w_diamond.<locals>.QuxNr3   r*   r   r
   rW   rr      r5   r   rW   r?   rX   s        r
   rY   zTest_ro.test_w_diamond   s[    	 		# 		# 		#s 	 	s+sCf5	7r   c                      G d d      } |d      } |d|      } |d|      } |d|      } |d|      } |d|||      }|||||||gfS )	Nc                       e Zd Zd Zd Zy) Test_ro._make_IOErr.<locals>.Fooc                      || _         || _        y r   r'   r7   )r   namebasess      r
   __init__z)Test_ro._make_IOErr.<locals>.Foo.__init__        $!&r   c                     | j                   S r   r'   r   s    r
   __repr__z)Test_ro._make_IOErr.<locals>.Foo.__repr__       }}$r   N)r'   r(   r)   rz   r~   r*   r   r
   r4   ru      s    '%r   r4   IExIStdErrIEnvErrIIOErrIOSErrIOErrr*   )r   r4   r   r   r   r   r   r   s           r
   _make_IOErrzTest_ro._make_IOErr   so    	% 	% %ji%i)Xw'Xw'GWff5uffgwDDDr   c                 l    | j                         \  }}| j                  | j                  |      |       y r   )r   r   r   )r   r   ry   s      r
   test_non_orderablezTest_ro.test_non_orderable   s-    '')uu-u5r   c                 `   ddl m} ddl m} ddl m} ddl m}  G d d|      } ||       G d d	             } G d
 d|      } G d d      } G d d||      }	| j                  | j                   | |	                    ||	       ||       ||      || ||       |t              g       y )Nr   	Interface)implementedBy)implementer
providedByc                       e Zd Zy)?Test_ro.test_mixed_inheritance_and_implementation.<locals>.IFooNr3   r*   r   r
   IFoor      r5   r   r   c                       e Zd Zy)HTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsFooNr3   r*   r   r
   ImplementsFoor      s    r   r   c                       e Zd Zy)ETest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooNr3   r*   r   r
   
ExtendsFoor      r5   r   r   c                       e Zd Zy)LTest_ro.test_mixed_inheritance_and_implementation.<locals>.ImplementsNothingNr3   r*   r   r
   ImplementsNothingr      r5   r   r   c                       e Zd Zy)VTest_ro.test_mixed_inheritance_and_implementation.<locals>.ExtendsFooImplementsNothingNr3   r*   r   r
   ExtendsFooImplementsNothingr      r5   r   r   )zope.interfacer   r   r   r   r   r   r@   )
r   r   r   r   r   r   r   r   r   r   s
             r
   )test_mixed_inheritance_and_implementationz1Test_ro.test_mixed_inheritance_and_implementation   s     	-0.-	9 	 
T		 	 
		 		 		*6G 	 	MM*%@%BCD67:&=),-6"$	%r   )r'   r(   r)   maxDiffr   r:   rB   rK   rY   r   r   r   r*   r   r
   r[   r[   `   s1    G(4<A7"E,6
!%r   r[   c                       e Zd Zd Zd Zd Zy)	C3Settingc                      || _         || _        y r   )_setting_value)r   settingvalues      r
   rz   zC3Setting.__init__   s    r   c                 z    ddl m} t        |j                  | j                  j
                  | j                         y Nr   ro)r   r   setattrC3r   r'   r   )r   r   s     r
   	__enter__zC3Setting.__enter__   s#    %t}}--t{{;r   c                 z    ddl m} t        |j                  | j                  j
                  | j                         y r   )r   r   r   r   r   r'   )r   tvtbr   s        r
   __exit__zC3Setting.__exit__   s#    %t}}--t}}=r   N)r'   r(   r)   rz   r   r   r*   r   r
   r   r      s    <>r   r   c                   Z     e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z fdZ xZS )
Test_c3_roc                     t         j                  |        ddlm}  |d      x| _        }| j                  |j                         y )Nr   )InstalledHandlerzzope.interface.ro)r[   setUpzope.testing.loggingsupportr   log_handler
addCleanup	uninstall)r   r   handlers      r
   r   zTest_c3_ro.setUp   s6    d@%56I%JJ7))*r   c                      ddl m}  ||fi |S r   )r   r   )r   r/   r^   r   s       r
   r   zTest_c3_ro._callFUT   s    ("r   c                     G d d|      } G d d|      } G d d|      } G d d||      } G d	 d
||      } G d d||      }t        |d      r/| j                  |j                         | j                  |             |S )Nc                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.FNr3   r*   r   r
   Fr      r5   r   r   c                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.ENr3   r*   r   r
   Er      r5   r   r   c                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.DNr3   r*   r   r
   Dr      r5   r   r   c                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.CNr3   r*   r   r
   Cr      r5   r   r   c                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.BNr3   r*   r   r
   Br      r5   r   r   c                       e Zd Zy)+Test_c3_ro._make_complex_diamond.<locals>.ANr3   r*   r   r
   Ar      r5   r   r   mro)hasattrr   r   r   )r   baser   r   r   r   r   r   s           r
   _make_complex_diamondz Test_c3_ro._make_complex_diamond   s    	 		 		 		1 		1 		1 	 1eQUUWdmmA&67r   c                 .    | j                  t               y r   )r   r@   r   s    r
   test_complex_diamond_objectz&Test_c3_ro.test_complex_diamond_object  s    ""6*r   c                     ddl m} | j                  |      }| j                  |j                  D cg c]  }|j
                   c}g d       y c c}w )Nr   r   )r   r   r   r   r   r   r   )r   r   r   r   __iro__r'   )r   r   IAr   s       r
   test_complex_diamond_interfacez)Test_c3_ro.test_complex_diamond_interface	  s?    ,''	2!#,AQZZ,7	
,s   Ac                     ddl m} | j                  |      }| j                  |d      }| j	                  |j
                  |       | j                          y )Nr   r   T)use_legacy_ro)r   r   r   r   assertNotEqualr   _check_handler_complex_diamond)r   r   r   legacy_A_iros       r
   (test_complex_diamond_use_legacy_argumentz3Test_c3_ro.test_complex_diamond_use_legacy_argument  sI    ,&&y1}}Qd};AII|4 	++-r   c                     ddl m} | j                  |      }| j                  |d      }| j	                  t        |      |j                         | j                          y )Nr   r   T)log_changed_ro)r   r   r   r   r   tupler   r   )r   r   r   computed_A_iros       r
   ,test_complex_diamond_compare_legacy_argumentz7Test_c3_ro.test_complex_diamond_compare_legacy_argument  sL    ,&&y1q>~.		:++-r   c                 0   | j                   }| j                  dt        |j                               |j                  d   }dj	                  d      }| j                  dj                  d |j                         j                         D              |       y )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)rx   
c              3   <   K   | ]  }|j                           y wr   )rstrip).0lns     r
   	<genexpr>z<Test_c3_ro._check_handler_complex_diamond.<locals>.<genexpr>;  s     MbbiikMs   )r   r   lenrecordsformatjoin
getMessage
splitlines)r   r   recordexpecteds       r
   r   z)Test_c3_ro._check_handler_complex_diamond&  s    ""C01#B CI&1 CI C
 	 	IIMF,=,=,?,J,J,LMM	
r   c                 "   ddl m}  G d d      } |ddi       } G d d|      } G d	 d
|      } G d d|      } G d d|      } |d      } |d|||f      }	 |d|||	f      }
| j                  |
dd      }| j                  ||
||	|||||g       | j                  j
                  \  }| j                  d|j                                | j                  |j                        5  | j                  |
d       d d d        y # 1 sw Y   y xY w)Nr   r   c                       e Zd ZdZddZd Zy)UTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Basedr*   Nc                      || _         || _        y r   rw   )r   rx   ry   attrss       r
   rz   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__init__H  r{   r   c                     | j                   S r   r}   r   s    r
   r~   z^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>._Based.__repr__L  r   r   )r*   N)r'   r(   r)   r7   rz   r~   r*   r   r
   _Basedr   E  s    I'%r   r   r   r*   c                       e Zd Zy)^Test_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPluggableIndexNr3   r*   r   r
   IPluggableIndexr   Q  r5   r   r   c                       e Zd Zy)bTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.ILimitedResultIndexNr3   r*   r   r
   ILimitedResultIndexr  T  r5   r   r  c                       e Zd Zy)ZTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IQueryIndexNr3   r*   r   r
   IQueryIndexr  W  r5   r   r  c                       e Zd Zy)YTest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super.<locals>.IPathIndexNr3   r*   r   r
   
IPathIndexr  Z  r5   r   r	  r@   	PathIndexExtendedPathIndexTF)r   strictzused the legacyr  )
r   r   r   r   r   r   assertInr   assertRaises InconsistentResolutionOrderError)r   r   r   r   r   r  r  r	  objr
  r  resultr   s                r
   :test_ExtendedPathIndex_implement_thing_implementedby_superzETest_c3_ro.test_ExtendedPathIndex_implement_thing_implementedby_super?  s<    	&	% 	% ;B/		i 		/ 		/ 		 	 X;[#(FG	 # +y9
 d5  
 	" 	 ""**'):):)<=rBBC 	:MM+DM9	: 	: 	:s   (DDc           	         ddl m} ddlm} | j	                  t         |t                     j                               |j                  |j                  |j                  |j                  |j                  |j                  g       y )Nr   r   )
interfaces)r   r   zope.interface.commonr  r   listOSError	flattenedIOSErrorIIOErrorIEnvironmentErrorIStandardError
IExceptionr   )r   r   r  s      r
   test_OSError_IOErrorzTest_c3_ro.test_OSError_IOError  si    -4GI&0023####,,))%%$$		r   c           	         dd l }ddlm} 	 |`|j                         5  |j                  d       t        |j                  j                  d      5  t        |j                  j                  d      5  | j                  |j                        5  t        | 9          d d d        d d d        d d d        d d d        | j                         \  }}| j                  |j                         5  | j#                  |d       d d d        t        |j                  j$                  d      5  t        |j                  j                  d      5  |j                         5  |j                  d       | j#                  |       d d d        | j'                  ||j                  j(                         d d d        d d d        | j#                  |d      }| j#                  |dd      }| j+                  ||       y # t        $ r Y w xY w# 1 sw Y   ixY w# 1 sw Y   nxY w# 1 sw Y   sxY w# 1 sw Y   xxY w# 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)	Nr   r   errorTFr  ignore)r   r  )warningsr   r   __warningregistry__AttributeErrorcatch_warningssimplefilterr   r   WARN_BAD_IRO
STRICT_IROr  "InconsistentResolutionOrderWarningsuperr   r   r  r   TRACK_BAD_IROr  BAD_IROSr   )r   r#  r   r   _iro
legacy_iro	__class__s          r
   r   zTest_c3_ro.test_non_orderable  s   %	& $$& 	1!!'*""D 1  %1
 &&r'L'LM 1G.011 1	1 ##%qrBBC 	.MM%M-	. EE
 	1EEe
	1
 ((* %%%h/e$% MM%0	1 	1 mmE%m0]]5U]K
j);  		1 11 1 1 1	1 	1	. 	.% %	1 	1 	1 	1s   G4 2H+!H2HH	H%H-H++H8'!II#I<.I*I4	H HH	HHHH(	#H++H58II
II	II&)r'   r(   r)   r   r   r   r   r   r   r   r   r  r  r   __classcell__)r1  s   @r
   r   r      sA    + 4+
..
2C:J$* $*r   r   c                        e Zd ZddZd Zd Zy)TestC3Nc                 4    ddl m} |j                  |||      S )Nr   )r   )r   r   resolver)r   r   r  	base_mrosr   s        r
   _makeOnezTestC3._makeOne  s    ({{1fi00r   c                 <   | j                  t        |       t        j                  t        j                  j                  i      }|j
                  }| j                  t        j                  |       | j                  |t        j                     j                         y )N)r7  )	r8  typeunittestTestCase__mro__memor  assertIsNonehad_inconsistency)r   c3r>  s      r
   test_base_mros_givenzTestC3.test_base_mros_given  st    ]]J(((*;*;*C*CD  
 wwh''.$x001CCDr   c                     | j                  t        |             }| j                  |j                         d |_        | j                  |j                         t        t        |       j                               y r   )	r8  r:  assertIsNotNone_C3__mro_merger   r   r  r=  )r   rA  s     r
   test_one_base_optimizationz!TestC3.test_one_base_optimization  sT    ]]4:& 	R[[)	4T
(:(:#;<r   )FN)r'   r(   r)   r8  rB  rG  r*   r   r
   r4  r4    s    1E=r   r4  c                   .    e Zd Z G d d      ZddZd Zy)Test_ROComparisonc                       e Zd ZdZdZy)Test_ROComparison.MockC3FN)r'   r(   r)   direct_inconsistencybases_had_inconsistencyr*   r   r
   MockC3rK    s    $"'r   rN  Nc                 F    ddl m}  ||xs | j                         ||      S )Nr   )_ROComparison)r   rP  rN  )r   rA  c3_ro	legacy_rorP  s        r
   r8  zTest_ROComparison._makeOne  s    3R04;;=%CCr   c                 j   | j                         }| j                  d|j                         d|j                  _        | j                  d|j                         d|j                  _        | j                  d|j                         d|j                  _        | j                  d|j                         y )NnoTdirectzdirect+basesFry   )r8  r   _inconsistent_labelrA  rL  rM  )r   comps     r
   test_inconsistent_labelz)Test_ROComparison.test_inconsistent_label  s    }}t778'+$4#;#;<*.')A)AB',$$":":;r   )Nr*   r*   )r'   r(   r)   rN  r8  rX  r*   r   r
   rI  rI    s    ( (D<r   rI  )
__doc__r;  r<  r   r,   r[   r   r   r4  rI  r*   r   r
   <module>rZ     s    ( 88,, 80/DH%% /Ddn%h n%b> >W* W*t=X =0<)) <r   