
    VhD                    H   d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ  G d d      Z G d	 d
ej                        Z
 G d dej                        Z G d de      Z G d de      Z G d deej                        Z G d dej                        Z G d dee      Z G d d      Z G d deej                        Z G d deej                        Z G d de      Z G d d ej                        Z G d! d"e      Z G d# d$e      Z G d% d&ej                        Z G d' d(e      Z G d) d*ej                        Z G d+ d,ej                        Z G d- d.ej                        Z G d/ d0ej                        Z G d1 d2ej                        Z G d3 d4ej                        Z G d5 d6eee      Z  G d7 d8ej                        Z! G d9 d:e!      Z" G d; d<ej                        Z# G d= d>ej                        Z$ G d? d@ej                        Z% G dA dBej                        Z& G dC dDej                        Z' G dE dFe'e      Z( G dG dHej                        Z) G dI dJe)e      Z* G dK dLej                        Z+ G dM dNe+ee      Z, G dO dP      Z- G dQ dR      Z.y)Sz@Test the new API for making and checking interface declarations
    N)MissingSomeAttrs)OptimizationTestMixin)SubclassableMixin)!NameAndModuleComparisonTestsMixinc                       e Zd Z	 ddZy)_Py3ClassAdvicec                     dd l }|j                  d      5 }|j                          	 t        |||       |r| j	                  d       	 	 d d d        y # t
        $ r Y d d d        yw xY w# 1 sw Y   y xY w)Nr   T)recordzDidn't raise TypeErrorF)warningscatch_warningsresetwarningsexecfail	TypeError)selfcodeglobslocsfails_under_py3kr   _s          V/home/dcms/DCMS/lib/python3.12/site-packages/zope/interface/tests/test_declarations.py_run_generated_codez#_Py3ClassAdvice._run_generated_code   s     	$$D$1 
	Q""$8T5$' $II67
	 
	
  
	 
	

	 
	s-   A+AA+	A(A+'A((A++A4N)T)__name__
__module____qualname__r        r   r   r      s     37r   r   c                       e Zd Zd Zd Zd Zy)
NamedTestsc                 r    ddl m}  |d       G d d             }| j                  |j                  d       y )Nr   namedfooc                       e Zd Zy)"NamedTests.test_class.<locals>.FooNr   r   r   r   r   r   Foor%   5       r   r'   zope.interface.declarationsr"   assertEqual__component_name__)r   r"   r'   s      r   
test_classzNamedTests.test_class2   s;    5	u	 	 
	 	""E	
r   c                 d    ddl m}  |d      d        }| j                  |j                  d       y )Nr   r!   r#   c                     t               NNotImplementedError)os    r   doFooz'NamedTests.test_function.<locals>.doFoo@   s    %''r   r)   )r   r"   r4   s      r   test_functionzNamedTests.test_function=   s3    5	u	( 
	( 	1159r   c                     ddl m}  G d d      } |       }  |d      |       | j                  |j                  d       y )Nr   r!   c                       e Zd Zy)%NamedTests.test_instance.<locals>.FooNr&   r   r   r   r'   r8   I       r   r'   r#   r)   )r   r"   r'   r#   s       r   test_instancezNamedTests.test_instanceF   s=    5	 	eeS""E	
r   N)r   r   r   r-   r5   r:   r   r   r   r   r   0   s    	
:

r   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)EmptyDeclarationTestsc                     ddl m}  |       S Nr   )Declarationr*   r?   r   r?   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyW   s    ;}r   c                 Z    | j                         }| j                  t        |      g        y r0   )rB   r+   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___empty[   s"    ~~dR(r   c                     ddl m} | j                         }| j                  t	        |j                               |g       y Nr   	Interface)zope.interface.interfacerK   rB   r+   rD   	flattenedr   rK   rF   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_empty_   s/    6~~dnn./)=r   c                 T    ddl m} | j                         }| j                  ||       y rI   )rL   rK   rB   assertNotInrN   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___emptyd   s!    6~~D)r   c                     ddl m} | j                         }| j                  |j	                  |             | j                  |j	                  |d             y )Nr   rJ   Tstrict)rL   rK   rB   
assertTrueextendsrN   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_emptyi   s?    6~~Y/0Yt<=r   c                 z    | j                         }t        |j                               }| j                  |g        y r0   )rB   rD   
interfacesr+   )r   rF   
iface_lists      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_emptyo   s/    ~~$//+,
R(r   c                 l    ddl m} | j                         }| j                  |j                  ||f       y rI   )rL   rK   rB   r+   __sro__rN   s      r   test___sro___z#EmptyDeclarationTests.test___sro___t   s*    6~~i'9:r   c                 j    ddl m} | j                         }| j                  |j                  |f       y rI   )rL   rK   rB   r+   __iro__rN   s      r   test___iro___z#EmptyDeclarationTests.test___iro___y   s'    6~~	|4r   c                     | j                         }| j                  |j                  d             | j                  |j                  dd      d       | j	                  |j
                         y )Nattrabcdef)rB   assertIsNonegetr+   assertFalse_v_attrsrE   s     r   test_getzEmptyDeclarationTests.test_get~   sT    ~~$((6*+%/7 	'r   c                     | j                         }t               |_        |j                  |       | j	                  |j                         y r0   )rB   objectrj   changedri   rE   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   s5    ~~T'r   N)r   r   r   rB   rG   rO   rR   rX   r\   r_   rb   rk   ro   r   r   r   r<   r<   S   s4    )>
*
>)
;
5
((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d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)DeclarationTestsc                     ddl m} |S r>   r@   rA   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;r   c                 .     | j                         |i |S r0   rs   r   argskws      r   _makeOnezDeclarationTests._makeOne       %t##%t2r22r   c                 n    | j                         }| j                  t        |j                        g        y r0   )rz   r+   rD   	__bases__rE   s     r   test_ctor_no_basesz#DeclarationTests.test_ctor_no_bases   s&    }}dnn-r2r   c                     ddl m}  |d      }| j                  |      }| j                  t	        |j
                        |g       y Nr   InterfaceClassIFoo)rL   r   rz   r+   rD   r}   r   r   r   rF   s       r   test_ctor_w_interface_in_basesz/DeclarationTests.test_ctor_w_interface_in_bases   s8    ;f%}}T"dnn-v6r   c                     ddl m}  |       }| j                  |      }| j                  t	        |j
                        |g       y Nr   
Implements)r*   r   rz   r+   rD   r}   )r   r   implrF   s       r   test_ctor_w_implements_in_basesz0DeclarationTests.test_ctor_w_implements_in_bases   s5    :|}}T"dnn-v6r   c                 |    | j                         }|j                  |       | j                  |j                         y r0   )rz   rn   rg   rj   rE   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s+    }}T$--(r   c                 H    | j                         }| j                  ||       y r0   )rz   rQ   rE   s     r   test___contains__w_selfz(DeclarationTests.test___contains__w_self   s    }}t$r   c                 d    ddl m}  |d      }| j                         }| j                  ||       y r   )rL   r   rz   rQ   r   s       r   "test___contains__w_unrelated_ifacez3DeclarationTests.test___contains__w_unrelated_iface   s*    ;f%}}t$r   c                 f    ddl m}  |d      }| j                  |      }| j                  ||       y r   )rL   r   rz   assertInr   s       r   !test___contains__w_base_interfacez2DeclarationTests.test___contains__w_base_interface   s+    ;f%}}T"dD!r   c                 z    ddl m}  |d      }| j                  |      }| j                  t	        |      |g       y r   rL   r   rz   r+   rD   r   s       r   test___iter___single_basez*DeclarationTests.test___iter___single_base   s3    ;f%}}T"ddV,r   c                     ddl m}  |d      } |d      }| j                  ||      }| j                  t	        |      ||g       y Nr   r   r   IBarr   r   r   r   r   rF   s        r   test___iter___multiple_basesz-DeclarationTests.test___iter___multiple_bases   sA    ;f%f%}}T4(ddD\2r   c                     ddl m}  |d      } |d|f      }| j                  |      }| j                  t	        |      |g       y r   r   r   s        r   test___iter___inheritancez*DeclarationTests.test___iter___inheritance   sA    ;f%ftg.}}T"ddV,r   c                     ddl m}  |d      } |d      }| j                  |||f      }| j                  t	        |      ||g       y r   r   r   s        r   'test___iter___w_nested_sequence_overlapz8DeclarationTests.test___iter___w_nested_sequence_overlap   sE    ;f%f%}}TD$<0ddD\2r   c                     ddl m} ddl m}  |d      }| j                  |      }| j	                  t        |j                               ||g       y )Nr   rJ   r   r   rL   rK   r   rz   r+   rD   rM   )r   rK   r   r   rF   s        r   test_flattened_single_basez+DeclarationTests.test_flattened_single_base   sA    6;f%}}T"dnn./$	1BCr   c                     ddl m} ddl m}  |d      } |d      }| j                  ||      }| j	                  t        |j                               |||g       y Nr   rJ   r   r   r   r   r   rK   r   r   r   rF   s         r   test_flattened_multiple_basesz.DeclarationTests.test_flattened_multiple_bases   sO    6;f%f%}}T4(dnn./$i1HIr   c                     ddl m} ddl m}  |d      } |d|f      }| j                  |      }| j	                  t        |j                               |||g       y r   r   r   s         r   test_flattened_inheritancez+DeclarationTests.test_flattened_inheritance   sQ    6;f%ftg.}}T"dnn./$i1HIr   c                     ddl m} ddl m}  |d      } |d      }| j                  |||f      }| j	                  t        |j                               |||g       y r   r   r   s         r   (test_flattened_w_nested_sequence_overlapz9DeclarationTests.test_flattened_w_nested_sequence_overlap   sU    6;f%f%
 }}TD$<0dnn./$i1HIr   c                     ddl m}  |d      } |d      }| j                  |      }||z
  }| j                  || j	                                | j                  t        |      |g       y r   rL   r   rz   assertIsInstancers   r+   rD   r   r   r   r   beforeafters         r    test___sub___unrelated_interfacez1DeclarationTests.test___sub___unrelated_interface   s_    ;f%f%t$eT%9%9%;<etf-r   c                     ddl m}  |d      }| j                  |      }||z
  }| j                  t	        |      g        y r   r   )r   r   r   r   r   s        r   test___sub___related_interfacez/DeclarationTests.test___sub___related_interface  s:    ;f%t$eb)r   c                     ddl m}  |d      } |d|f      }| j                  |      }||z
  }| j                  t	        |      g        y r   r   r   s         r   -test___sub___related_interface_by_inheritancez>DeclarationTests.test___sub___related_interface_by_inheritance
  sH    ;f%ftg.t$eb)r   c                     ddl m}  |d      } |d      }| j                  |      }||z   }| j                  || j	                                | j                  t        |      ||g       y r   r   r   s         r    test___add___unrelated_interfacez1DeclarationTests.test___add___unrelated_interface  sa    ;f%f%t$eT%9%9%;<etTl3r   c                     ddl m}  |d      } |d      } |d      }| j                  ||      }| j                  ||      }||z   }| j                  t	        |      |||g       y )Nr   r   r   r   IBazr   )r   r   r   r   r   r   otherr   s           r   test___add___related_interfacez/DeclarationTests.test___add___related_interface  sg    ;f%f%f%tT*dD)etT4&89r   c                    ddl m} ddl m} ddlm} ddlm}  |d      } |d|f      } ||j                  j                  d      5  | j                  |      }||z   }d d d        | j                  j                  |||f       | j                  |j                  ||f       | j                  t        |      ||g       y # 1 sw Y   dxY w)	Nr   rJ   ror   	C3SettingIBaseIDerivedT)zope.interfacerK   r   rL   r   zope.interface.tests.test_ror   C3
STRICT_IROrz   r+   ra   r}   rD   )	r   rK   r   r   r   r   r   baser   s	            r   "test___add___overlapping_interfacez3DeclarationTests.test___add___overlapping_interface%  s     	-%;:w'!*uh7ruu''. 	$=='D8OE	$ 	5)(DE8U*;<ex&78	$ 	$s   CCc                    ddl m} 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             } ||j                  j                  d      5   ||      |z   }	d d d        | j                  	j                  |	|||f       | j                  |	j                  ||f       | j                  t        |	      ||g       y # 1 sw Y   exY w)Nr   rJ   implementedByimplementerr   r   c                       e Zd Zy)PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr&   r   r   r   r   r   F  r9   r   r   c                       e Zd Zy)SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr&   r   r   r   r   r   I  r9   r   r   c                       e Zd Zy)ODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr&   r   r   r   Baser   L  r(   r   r   T)r   rK   r   r   r   r   r   r   r   r+   r^   r}   rD   )
r   rK   r   r   r   r   r   r   r   r   s
             r   0test___add___overlapping_interface_implementedByzADeclarationTests.test___add___overlapping_interface_implementedBy;  s    
 	-0.%:	I 		u 	 
U		 	 
	 ruu''. 	3!$'(2E	3 	%(KL8U*;<ex&78	3 	3s   'CC N)r   r   r   rs   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   rq      s~    3377)
%%"-3-3DJJJ.**4:9,9r   rq   c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestImmutableDeclarationc                     ddl m} |S )Nr   )_ImmutableDeclaration)r*   r   )r   r   s     r   rs   z(TestImmutableDeclaration._getTargetClassZ  s    E$$r   c                     ddl m} |S )Nr   )_empty)r*   r   )r   r   s     r   rB   z"TestImmutableDeclaration._getEmpty^  s
    6r   c                     dd l }|j                  |j                  | j                                     }| j	                  || j                                y )Nr   )pickleloadsdumpsrB   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_pickleb  s8    fll4>>+;<=fdnn./r   c                 j    | j                   | j                                | j                                y r0   )r   rs   rB   r   s    r   test_singletonz'TestImmutableDeclaration.test_singletong  s)    "D  "$NN	
r   c                 X    | j                  | j                         j                  d       y )Nr   )r+   rB   r}   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__m  s    )33R8r   c                     | j                         }d|_        | j                  | j                         j                  d       | j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)Nr   )   )rB   r}   r+   assertRaisesr   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__p  s\     )33R8y) 	#"EO	# 	# 	#s   A((A1c                     | j                         }|j                  }| j                  i |       d|d<   | j                  i |j                         y )N   r   )rB   
dependentsr+   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependentsx  sH     T"QU--.r   c                 B    | j                         j                  d        y r0   )rB   rn   r   s    r   test_changedz%TestImmutableDeclaration.test_changed  s      &r   c                     | j                  | j                         j                  |              | j                  | j                         j                  | d             | j                  | j                         j                  | d             y )NTrT   F)ri   rB   rW   r   s    r   test_extends_always_falsez2TestImmutableDeclaration.test_extends_always_false  sl    )11$78)11$t1DE)11$u1EFr   c                     | j                  | j                         j                  d             | j                  | j                         j                  dd      d       y )Nname*   )rg   rB   rh   r+   r   s    r   test_get_always_defaultz0TestImmutableDeclaration.test_get_always_default  sF    $..*..v67)--fb92>r   c                    | j                         }| j                  |j                  i        d|j                  d<   | j                  |j                  i        | j                  |j	                  d             i x}|_        d|d<   | j                  |j                  i        | j                  |j	                  d             y )Nr   rd   )rB   r+   rj   rg   rh   )r   rF   attrss      r   test_v_attrsz%TestImmutableDeclaration.test_v_attrs  s    ~~+ "f+$((6*+ ""f+$((6*+r   N)r   r   r   rs   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   X  s:    %0

9#/'G
?,r   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestImplementsc                     ddl m} |S r   )r*   r   )r   r   s     r   rs   zTestImplements._getTargetClass      :r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTestImplements._makeOne  r{   r   c                 2    ddl m}  G d d      } ||      S )Nr   r   c                       e Zd Zy)+TestImplements._makeOneToCompare.<locals>.ANr&   r   r   r   Ar    r9   r   r  r*   r   )r   r   r  s      r   _makeOneToComparez TestImplements._makeOneToCompare  s    =	 	 Qr   c                    | j                         }| j                  |j                  d        | j                  |j                  d       | j                  |j                  d       | j                  t        |j                        g        y )Nr   ?)rz   r+   inheritdeclaredr   rD   r}   r   r   s     r   r~   z!TestImplements.test_ctor_no_bases  sb    }}t,+,dnn-r2r   c                 h    | j                         }d|_        | j                  t        |      d       y )NTestingzclassImplements(Testing))rz   r   r+   reprr  s     r   test___repr__zTestImplements.test___repr__  s)    }}!d%?@r   c                 t    ddl m} | j                         }| j                  |j	                         |df       y )Nr   r   r0   )r*   r   rz   r+   
__reduce__)r   r   r   s      r   test___reduce__zTestImplements.test___reduce__  s,    =}}*]G,DEr   c                 X   ddl m} ddlm}  G d d      } G d d      } |d      }| j	                   ||       ||             | j	                  t         ||            t         ||                   | j                   ||      d        | j                  d  ||             | j                   ||       ||             | j                   ||      |       | j                   ||       ||             | j                   ||      |       | j                   ||      |       y )	Nr   r   r   c                       e Zd Zy)#TestImplements.test_sort.<locals>.ANr&   r   r   r   r  r    r9   r   r  c                       e Zd Zy)#TestImplements.test_sort.<locals>.BNr&   r   r   r   Br    r9   r   r  r   )r*   r   rL   r   r+   hash
assertLessassertGreaterassertLessEqualassertGreaterEqualassertNotEqual)r   r   r   r  r  r   s         r   	test_sortzTestImplements.test_sort  s   =;	 		 	 f%q)=+;<mA./mA6F1GHa($/!	
 	a(-*:;=+T2]1-}Q/?@a 0$7M!,d3r   c                    ddl m}  G d d      } G d d      } G d d      } ||      } ||      } ||      }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       y )	Nr   r   c                   $    e Zd Zd Zd Zd Zd Zy)1TestImplements.test_proxy_equality.<locals>.Proxyc                     || _         y r0   _wrapped)r   wrappeds     r   __init__z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__  s	     'r   c                     t               r0   r1   r   r   s     r   __getattr__z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__      )++r   c                      | j                   |k(  S r0   r&  r   r   s     r   __eq__z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__      }}--r   c                      | j                   |k7  S r0   r&  r/  s     r   __ne__z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__  r1  r   N)r   r   r   r)  r,  r0  r3  r   r   r   Proxyr$    s    (,..r   r4  c                       e Zd Zy)-TestImplements.test_proxy_equality.<locals>.ANr&   r   r   r   r  r6    r9   r   r  c                       e Zd Zy)-TestImplements.test_proxy_equality.<locals>.BNr&   r   r   r   r  r8    r9   r   r  )r*   r   r+   r   )r   r   r4  r  r  implementedByAimplementedByBproxys           r   test_proxy_equalityz"TestImplements.test_proxy_equality  s    =	. 	.	 		 	 'q)&q)n% 		
 	NN;NN;////E>2NE2r   c                 h   | j                         }| j                  |j                         | j                  d|j                         d|_        | j                  d|j                         |j                  d        | j                  |j                         | j                  d|j                         y )N_super_cacher   )rz   rg   r>  rQ   __dict__r   rn   r  s     r    test_changed_deletes_super_cachez/TestImplements.test_changed_deletes_super_cache  s    }}$++,7ndmm4T$++,7r   c                 "   | j                         }| j                  |j                         | j                  d|j                         |j                  d        | j                  |j                         | j                  d|j                         y )Nr>  )rz   rg   r>  rQ   r?  rn   r  s     r   %test_changed_does_not_add_super_cachez4TestImplements.test_changed_does_not_add_super_cache  si    }}$++,7T$++,7r   N)r   r   r   rs   rz   r  r~   r  r  r!  r<  r@  rB  r   r   r   r   r     s7    3 3A
F
42*3X
88r   r   c                        e Zd Zd 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d Zd Zd Zd Z fdZ fdZ fdZ fdZ fdZ fdZ xZS )Test_implementedByFallbackc                     ddl m} |S )Nr   )implementedByFallback)r*   rF  )r   rF  s     r   rs   z*Test_implementedByFallback._getTargetClass  s    E$$r   c                 .     | j                         |i |S r0   rv   rw   s      r   _callFUTz#Test_implementedByFallback._callFUT"  r{   r   c                      G d d      } |       }d |_         | j                  t        | j                  |            g        y )Nc                       e Zd ZdZy)]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foo__implemented__Nr   r   r   	__slots__r   r   r   r'   rK  &      ,Ir   r'   )rM  r+   rD   rH  r   r'   r#   s      r   5test_dictless_wo_existing_Implements_wo_registrationszPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations%  s9    	- 	-e"dmmC0126r   c                 h     G d d      } |       }| j                  t        | j                  |       y )Nc                   0    e Zd Zd Zd Z eee      Zd Zy)hTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                     t               r0   r1   r   s    r   	_get_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_impl/  r-  r   c                     t         r0   )r   )r   vals     r   	_set_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_impl2  s    r   c                     t               r0   r1   r   s    r   __call__zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__7  s    )++r   N)r   r   r   rW  rZ  propertyrM  r\  r   r   r   r'   rU  .  s    ,  'y)<O,r   r'   r   r   rH  rQ  s      r   @test_dictless_wo_existing_Implements_cant_assign___implemented__z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__,  s+    	, 	, e)T]]C8r   c                     ddl m}  G d d      } |       }d |_        t               }t	        |d      5 }|||<   | j                  | j                  |      |       d d d        y # 1 sw Y   y xY w)Nr   declarationsc                       e Zd ZdZy)\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.FoorL  NrN  r   r   r   r'   rd  A  rP  r   r'   #BuiltinImplementationSpecifications)r   rb  rM  rm   _MonkeyDictr   rH  )r   rb  r'   r#   regspecss         r   4test_dictless_wo_existing_Implements_w_registrationszOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations>  sm    /	- 	- e"h>@ 	3CHE#JMM$--,c2	3 	3 	3s   'A%%A.c                     ddl m}  |       } G d d      } |       }||_        | j                  | j	                  |      |       y )Nr   r   c                       e Zd ZdZy)KTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorL  NrN  r   r   r   r'   rl  P  rP  r   r'   )r*   r   rM  r   rH  )r   r   r   r'   r#   s        r   #test_dictless_w_existing_Implementsz>Test_implementedByFallback.test_dictless_w_existing_ImplementsL  s>    :|	- 	- e"dmmC($/r   c                     ddl m}  G d d      } |       } |d      }|f|_        | j                  t	        | j                  |            |g       y )Nr   r   c                       e Zd ZdZy)OTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.FoorL  NrN  r   r   r   r'   rp  Z  rP  r   r'   r   )rL   r   rM  r+   rD   rH  )r   r   r'   r#   r   s        r   'test_dictless_w_existing_not_ImplementszBTest_implementedByFallback.test_dictless_w_existing_not_ImplementsW  sL    ;	- 	- ef%#gdmmC01D6:r   c                 z    ddl m}  |        G fdd      }| j                  | j                  |             y )Nr   r   c                       e Zd ZW  Zy)JTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   r   rM  r   s   r   r'   rt  f      "Or   r'   r*   r   r   rH  r   r   r'   r   s      @r   "test_w_existing_attr_as_Implementsz=Test_implementedByFallback.test_w_existing_attr_as_Implementsb  0    :|	# 	# 	dmmC($/r   c                     ddl m} ddlm} t	        |d      5 }| j                  t        | j                  t                    g        | j                  t        | j                  t                    g        | j                  t        | j                  t                    g        t        t        t        fD ]B  }||   }| j                  ||       | j                  t        |      d|j                  d       D 	 d d d        y # 1 sw Y   y xY w)Nr   ra  r   re  classImplements())r   rb  r*   r   rf  r+   rD   rH  tupledictr   r  r   )r   rb  r   rh  typspecs         r   test_builtins_added_to_cachez7Test_implementedByFallback.test_builtins_added_to_cachek  s    /:>@ 
	4CHT$--"67<T$--"56;T$--"56;tT* 4Sz%%dJ7  d$'LL"344
	4 
	4 
	4s   C!DDc                    ddl m} t               t               t               }}}t        |d      5 }||t        <   ||t
        <   ||t        <   | j                  | j                  t              |       | j                  | j                  t
              |       | j                  | j                  t              |       d d d        y # 1 sw Y   y xY w)Nr   ra  re  )	r   rb  rm   rf  r  rD   r  r   rH  )r   rb  t_specl_specd_specrh  s         r   test_builtins_w_existing_cachez9Test_implementedByFallback.test_builtins_w_existing_cachez  s    /!'68VX>@ 	7CH!E%L E$K E$KMM$--.7MM$---v6MM$---v6	7 	7 	7s   BCCc                 l     G d d      }| j                  t        | j                  |            g        y )Nc                       e Zd Zy)ITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r+   rD   rH  r   r'   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertions  ,    	 	 	dmmC0126r   c                 l     G d d      }| j                  t        | j                  |            g        y )Nc                       e Zd Zy):Test_implementedByFallback.test_no_assertions.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r  r  s     r   test_no_assertionsz-Test_implementedByFallback.test_no_assertions  r  r   c                 h     G d d      } |       }| j                  t        | j                  |       y )Nc                       e Zd ZdZy)HTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNru  r   r   r   r'   r        "Or   r'   r^  rQ  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factory  s+    	# 	# e)T]]C8r   c                 z   ddl m}  G d d      } |       }d|_        | j                  |      }| j	                  |j                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  d|j                         y )Nr   )objectSpecificationDescriptorc                       e Zd ZdZd Zy)FTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                     t               r0   r1   r   s    r   r\  zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__  r-  r   )r   r   r   rM  r\  r   r   r   r'   r    s    "O,r   r'   r#   z*zope.interface.tests.test_declarations.foo__provides__)r*   r  r   rH  r+   r   r  rM  __providedBy__rQ   r?  )r   r  r'   r#   r  s        r   test_w_None_no_bases_w_factoryz9Test_implementedByFallback.test_w_None_no_bases_w_factory  s    M	, 	, e}}S!E	GdllC(c))40 =	
 	6r   c                    ddl m}  G d d      }| j                  |      }| j                  |j                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |j                         y )Nr   ClassProvidesc                       e Zd ZdZy)DTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNru  r   r   r   r'   r    r  r   r'   z*zope.interface.tests.test_declarations.Foo)r*   r  rH  r+   r   r   r  rM  r   r  r  )r   r  r'   r  s       r   test_w_None_no_bases_w_classz7Test_implementedByFallback.test_w_None_no_bases_w_class  s    =	# 	# }}S!E	GdllC(c))40	
 	m	
 	c00	
r   c                 z    ddl m}  |        G fdd      }| j                  | j                  |             y )Nr   r   c                       e Zd ZW  Zy)BTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNru  rv  s   r   r'   r    rw  r   r'   rx  ry  s      @r   test_w_existing_Implementsz5Test_implementedByFallback.test_w_existing_Implements  r{  r   c                 f   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } ||       G d
 d|             }| j	                  t        | j                  |            ||g       t        ||      }| j	                  t        | j                  |            |g       y )Nr   rJ   r   c                       e Zd Zy)STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)RTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr&   r   r   r   r   r    r(   r   r   c                       e Zd Zy)UTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr&   r   r   r   Derivedr    r(   r   r  r   rK   r*   r   r+   rD   rH  super	r   rK   r   r   r   r   r  sup	__class__s	           r   )test_super_when_base_implements_interfacezDTest_implementedByFallback.test_super_when_base_implements_interface  s    ,;	I 		u 	 
U		 	 
	 
X		d 	 
	 	dmmG45%7HIGW%dmmC01E7;r   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } G d
 d|      } G d d|      } ||       G d d||             }| j	                  t        | j                  |            ||g       t        ||      }	| j	                  t        | j                  |	            |g       y )Nr   rJ   r   c                       e Zd Zy)[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)ZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr&   r   r   r   r   r    r(   r   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr&   r   r   r   Child1r    r9   r   r  c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr&   r   r   r   Child2r    r9   r   r  c                       e Zd Zy)]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr&   r   r   r   r  r    r(   r   r  r  )r   rK   r   r   r   r   r  r  r  r  r  s             r   1test_super_when_base_implements_interface_diamondzLTest_implementedByFallback.test_super_when_base_implements_interface_diamond  s    ,;	I 		u 	 
U		 	 
		T 		T 	 
X		ff 	 
	 	dmmG45%7HIGW%dmmC01E7;r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	      } G d
 d|      } ||       G d d|             } ||       G d d||             }| j	                  |j
                  ||||t        f       | j	                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j	                  t        |
      |g       | j                  |
j                         y )Nr   rJ   r   c                       e Zd Zy)]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr&   r   r   r   r   r  
  r9   r   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr&   r   r   r   r   r    r9   r   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr&   r   r   r   r  r    r9   r   r  c                       e Zd Zy)^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr&   r   r   r   r  r    r(   r   r  c                       e Zd Zy)_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr&   r   r   r   r  r    r(   r   r  )r   rK   r*   r   r+   __mro__rm   rD   rH  r  rg   _dependents)r   rK   r   r   r   r   r  r  r  r  futr  s              r   3test_super_when_parent_implements_interface_diamondzNTest_implementedByFallback.test_super_when_parent_implements_interface_diamond  s   ,;	I 		u 		 		T 	 
U		T 	 
	 
X		ff 	 
	 	OOgvvtVD	
 	dmmG45%7HIGW%mmC cUG,#//*r   c                 L   ddl m} ddlm}  G d d|      } G d d|      } G d d	      } ||       G d
 d|             }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )Nr   rJ   r   c                       e Zd Zy)YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr&   r   r   r   r   r  (  r9   r   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr&   r   r   r   r   r  +  r9   r   r   c                       e Zd Zy)XTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr&   r   r   r   r   r  .  r9   r   r   c                       e Zd Zy)[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr&   r   r   r   r  r  1  r(   r   r  r  r  s	           r   /test_super_when_base_doesnt_implement_interfacezJTest_implementedByFallback.test_super_when_base_doesnt_implement_interface$  s    ,;	I 		u 		 	 
X		d 	 
	 	dmmG45zBGW%dmmC0126r   c                 6   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )
Nr   rJ   r   c                       e Zd Zy)HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr&   r   r   r   r   r  >  r9   r   r   c                       e Zd Zy)KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr&   r   r   r   r   r  A  r9   r   r   c                       e Zd Zy)JTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr&   r   r   r   r  r  D  r(   r   r  r  )r   rK   r   r   r   r  r  r  s          r   test_super_when_base_is_objectz9Test_implementedByFallback.test_super_when_base_is_object:  s    ,;	I 		u 	 
X		 	 
	 	dmmG45zBGW%dmmC0126r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d d             } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             }|}t	        ||      }t	        |	|      }t	        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   rJ   r   c                       e Zd Zy)RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr&   r   r   r   r   r  Q  r9   r   r   c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr&   r   r   r   IM1r  T  r9   r   r  c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr&   r   r   r   IM2r  W  r9   r   r  c                       e Zd Zy)UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr&   r   r   r   r   r  Z  r9   r   r   c                       e Zd Zy)WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr&   r   r   r   
IUnrelatedr  ]  r9   r   r  c                       e Zd Zy)QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr&   r   r   r   r   r  `  r(   r   r   c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr&   r   r   r   M1r  d  r(   r   r   c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr&   r   r   r   M2r  h  r(   r   r  c                       e Zd Zy)TTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr&   r   r   r   r  r  l  r(   r   r  r   rK   r*   r   r  r+   rD   rH  r   rK   r   r   r  r  r   r  r   r   r  r  dsdsm1sm2r  s                   r   (test_super_multi_level_multi_inheritancezCTest_implementedByFallback.test_super_multi_level_multi_inheritanceM  s   ,;	I 		) 		) 		u 		 	 
U		 	 
	 
S		 	 
	 
S		 	 
	 
Xz	*	b" 	 
+	 7G$B B dmmA./"JUC@	BdmmB/0uc*	,dmmC01u	'dmmC01	"r   )r   r   r   rs   _getFallbackClassrH  rR  r_  ri  rm  rq  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r  s   @r   rD  rD    s    %
 (379$3	0	;04
77797*
*0<,<8+B7,7&/" /"r   rD  c                       e Zd Zd Zy)Test_implementedByc                     ddl m} |S )Nr   r   r  )r   r   s     r   rs   z"Test_implementedBy._getTargetClass      =r   Nr   r   r   rs   r   r   r   r  r    s    r   r  c                   0    e Zd ZdZd Zde dz   dfdZd Zy)_ImplementsTestMixinTc                     t         r0   r1   )r   clsifaces      r   rH  z_ImplementsTestMixin._callFUT  s    !!r   Nz.Foo	not givenc                 H   ddl m} ddlm}  |d      }| j	                  ||      }| j                  ||       |j                  }	|| j                  |	|       | j                  |	j                  |       |dk(  r|n|}| j                  |	j                  |       | j                  |j                  |	       | j                  r^| j                  |j                  |       | j                  |j                  |       | j                  |j                  |j                         ||fS )Nr   r  r   r   r  )r*   r  rL   r   rH  r   rM  r+   r   r  FUT_SETS_PROVIDED_BYr   r  r  )
r   r'   	orig_spec	spec_namer  r  r   r   returnedr  s
             r   _check_implementerz'_ImplementsTestMixin._check_implementer  s     	>;f%==d+h$"" MM$	*"	$ K/#WdllG,c))40$$!!#"4"4mD!!#"2"2MBS--s/A/ABDyr   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy),_ImplementsTestMixin.test_class.<locals>.FooNr&   r   r   r   r'   r#    r9   r   r'   )r   r  s     r   r-   z_ImplementsTestMixin.test_class  s    	 	 	$r   )r   r   r   r  rH  r   r-   r   r   r   r  r    s'    "
 &*%-%6#.6%r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)Test_classImplementsOnlyFc                 $    ddl m}  |||       |S )Nr   )classImplementsOnly)r*   r'  )r   r  r  r'  s       r   rH  z!Test_classImplementsOnly._callFUT  s    CC'
r   c                 R   ddl m} ddlm}  |d      } |d      } ||      |f_         G fdd      }|_        | j                  ||       | j                  |j                         | j                  j
                  d        | j                  j                  |f       y )Nr   r   r   r   r   c                       e Zd ZW  Zy)@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNru  rv  s   r   r'   r*    rw  r   r'   )
r*   r   rL   r   r  r  rH  r   rM  r+   r   r   r   r   r   r'   r   s         @r   r  z3Test_classImplementsOnly.test_w_existing_Implements  s    :;f%f%$	# 	# c4 c))40t,0r   c                     ddl m} ddlm}  |d      } ||       G fdd      }| j	                  |dd        y )	Nr   r   r   r   c                       e Zd ZW  Zy)0Test_classImplementsOnly.test_class.<locals>.FooNru  )old_specs   r   r'   r.    s    &Or   r'   r
  r  )r*   r   rL   r   r   )r   r   r   r   r'   r/  s        @r   r-   z#Test_classImplementsOnly.test_class  s@    :;f%d#	' 	' 	XsDAr   c                     | j                  t        dt        fi       d       \  }} G d d|      }| j                  ||       | j	                  |j                  |             y )Nr'   r0  c                       e Zd Zy)RTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr&   r   r   r   Childr3    r9   r   r4  )r   typerm   rH  rV   r   )r   r   r   r4  s       r   *test_redundant_with_super_still_implementszCTest_classImplementsOnly.test_redundant_with_super_still_implements  s_    --	2& . 
e
	D 	 	eU#++E23r   N)r   r   r   r  rH  r  r-   r6  r   r   r   r%  r%    s     
1$	B
4r   r%  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Test_classImplementsc                 F    ddl m}  |||      }| j                  |       |S )Nr   classImplements)r*   r;  rg   )r   r  r  r;  results        r   rH  zTest_classImplements._callFUT  s)    ? 
 	&!
r   c                    | j                  |      \  }} G d d|      }| j                  ||      }| j                  d|j                         | j	                  d|j                         | j                  d|j                         |j
                  }| j                  |j                  d       | j                  |j                  |       | j                  |j                   |                    y )Nc                       e Zd Zy)ATest_classImplements.__check_implementer_redundant.<locals>.ChildNr&   r   r   r   r4  r?    r9   r   r4  rM  r  r  r   )r   rH  r   r?  rQ   rM  r+   r  r  rV   
providedBy)r   r   r   r4  r  r  s         r   __check_implementer_redundantz2Test_classImplements.__check_implementer_redundant  s     --d3e	D 	 ==.'):):;)8+<+<=nh&7&78$$+u-((12r   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy)UTest_classImplements.test_redundant_implementer_empty_class_declarations.<locals>.FooNr&   r   r   r   r'   rD    r9   r   r'   )2_Test_classImplements__check_implementer_redundantr  s     r   3test_redundant_implementer_empty_class_declarationszHTest_classImplements.test_redundant_implementer_empty_class_declarations  s    	 	 	**3/r   c                    ddl m} ddl m} ddl m} ddlm}  G d d      } ||j                  j                  d      5  | j                  ||       | j                  t         ||            |g        G d	 d
|      }| j                  ||       | j                  t         ||            |g       d d d        y # 1 sw Y   y xY w)Nr   rJ   r   r   r   c                       e Zd Zy)FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr&   r   r   r   r'   rI    r9   r   r'   Fc                       e Zd Zy)FTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr&   r   r   r   BazrK        r   rL  )r   rK   r   r   r   r   r   r   rH  r+   rD   )r   rK   r   r   r   r'   rL  s          r   $test_redundant_implementer_Interfacez9Test_classImplements.test_redundant_implementer_Interface  s    ,0%:	 	 ruu''/ 	DMM#y)T-"45	{Cc  MM#y)T-"45	{C	D 	D 	Ds    A4B==Cc                 
    ||fS r0   r   r   applied_firstapplied_seconds      r   _order_for_twoz#Test_classImplements._order_for_two  s    ~..r   c                 p   ddl m} ddlm}  |d      } |d      } ||      |f_         G fdd      }|_        | j                  ||       | j                  |j                         | j                  j
                  |       | j                  j                  | j                  ||             y )Nr   r   r   r   r   c                       e Zd ZW  Zy)<Test_classImplements.test_w_existing_Implements.<locals>.FooNru  rv  s   r   r'   rV  &  rw  r   r'   )r*   r   rL   r   r  r  rH  r   rM  r+   rS  r+  s         @r   r  z/Test_classImplements.test_w_existing_Implements  s    :;f%f%$	# 	# c4 c))40s+,,T48	:r   c                 b  	
 ddl m} ddlm}  |d      } |d      } |d|f      }|j	                  d|      
|f
_         G 
fdd	      } G 
fd
d      }|j	                  d|      	|f	_         G 	fdd||      }|	_        | j                  ||       | j                  |j                  	       | j                  	j                  |       | j                  	j
                  | j                  ||             | j                  	j                  | j                  ||      
fz          y )Nr   r   r   IRootISecondRootIExtendsRootRootc                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nru  	impl_roots   r   Root1r]  ;      'Or   r`  c                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nru  r^  s   r   Root2rc  >  ra  r   rd  ExtendsRoot1c                       e Zd ZW  Zy)LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNru  )impl_extends_roots   r   ExtendsRootrg  D  s    /Or   ri  )r*   r   rL   r   r"   r  r  rH  r   rM  r+   rS  r}   )r   r   r   rX  rY  rZ  r`  rd  ri  rh  r_  s            @@r   "test_w_existing_Implements_w_basesz7Test_classImplements.test_w_existing_Implements_w_bases1  s$   :;w'$]3%nuh?$$VU3	#X		( 	(	( 	( ',,^\J&2_"	0% 	0 %0!k;/k113DE*22K@*33,,\;H	J''k:i\I	
r   N)
r   r   r   rH  rE  rF  rN  rS  r  rj  r   r   r   r8  r8    s&    3&0D&/:&!
r   r8  c                       e Zd Zd Zd Zy)Test_classImplementsFirstc                 F    ddl m}  |||      }| j                  |       |S )Nr   )classImplementsFirst)r*   rn  rg   )r   r  r  rn  r<  s        r   rH  z"Test_classImplementsFirst._callFUTW  s)    D%
 	&!
r   c                 
    ||fS r0   r   rP  s      r   rS  z(Test_classImplementsFirst._order_for_two_  s    ..r   N)r   r   r   rH  rS  r   r   r   rl  rl  U  s    /r   rl  c                       e Zd Zd Zd Zy)Test__implements_advicec                     ddl m}  ||i |S )Nr   )_implements_advice)r*   rs  )r   rx   ry   rs  s       r   rH  z Test__implements_advice._callFUTe      B!4.2..r   c                 4   ddl m} ddl m ddlm}  |d       G fdd      }| j                  |       | j                  d|j                         | j                  |j                  |       | j                  t        |j                        g       y )	Nr   r   r:  r   r   c                       e Zd ZW  fW fZy)@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r   __implements_advice_data__)r   r;  s   r   r'   rw  o  s    +/'?)C&r   r'   rx  )r*   r   r;  rL   r   rH  rQ   r?  r   rM  r+   rD   )r   r   r   r'   r   r;  s       @@r   test_no_existing_implementsz3Test__implements_advice.test_no_existing_implementsi  s    :?;f%	D 	D 	c5s||D	
 	$$%v	
r   N)r   r   r   rH  ry  r   r   r   rq  rq  c  s    /
r   rq  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_implementerc                     ddl m} |S )Nr   r   )r*   r   )r   r   s     r   rs   z Test_implementer._getTargetClass~  rt   r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTest_implementer._makeOne  r{   r   c                 0     | j                   | } ||      S r0   rz   )r   r  ifaces	decorators       r   rH  zTest_implementer._callFUT  s    !DMM6*	~r   c                     ddl m}  |d      }| j                  |      }| j                  t        |t                      y r   )rL   r   rz   r   r   rm   )r   r   r   r  s       r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attr  s1    ;f%MM$'	)Y9r   c                 V   ddl m}  |d      } G d d      } |       }| j                  |      } ||      }| j                  ||       |j                  }| j                  |j                  d       | j                  |j                         | j                  |j                  |       y )Nr   r   r   c                       e Zd Zy);Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   z(zope.interface.tests.test_declarations.?)	rL   r   rz   r   rM  r+   r   rg   r  )r   r   r   r'   r#   r  r  r  s           r   test_nonclass_can_assign_attrz.Test_implementer.test_nonclass_can_assign_attr  s    ;f%	 	 eMM$'	S>h$""MME	
 	$,,(c))40r   c                 2   dd l }ddlm}  |d      }t        |j	                               }t        d      D ]  } G d d      }| j                  ||         |j                          t        |j	                               }d}| j                  |||z          y )Nr   r   r   il  c                       e Zd Zy)HTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr&   r   r   r   	TestClassr    rM  r   r  )	gcrL   r   lenget_objectsrangerH  collectr  )	r   r  r   r   begin_countr   r  	end_countfudge_factors	            r   $test_does_not_leak_on_unique_classesz5Test_implementer.test_does_not_leak_on_unique_classes  s     	;f%"..*+t 	+A  MM)T*		+ 	

()	 Yl(BCr   N)	r   r   r   rs   rz   rH  r  r  r  r   r   r   r{  r{  |  s!    3:1$Dr   r{  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_implementer_onlyc                     ddl m} |S )Nr   )implementer_only)r*   r  )r   r  s     r   rs   z%Test_implementer_only._getTargetClass  s    @r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTest_implementer_only._makeOne  r{   r   c                 4    | j                  |      } ||      S r0   r  )r   r  r  r  s       r   rH  zTest_implementer_only._callFUT  s    MM%(	~r   c                 v    ddl m}  |d      }| j                  |      }d }| j                  t        ||       y )Nr   r   r   c                      t               r0   r1   r   r   r   	_functionz6Test_implementer_only.test_function.<locals>._function      %''r   )rL   r   rz   r   
ValueError)r   r   r   r  r  s        r   r5   z#Test_implementer_only.test_function  s6    ;f%MM$'		( 	*i;r   c                     ddl m}  |d      }| j                  |      } G d d      }| j                  t        ||j
                         y )Nr   r   r   c                       e Zd Zd Zy).Test_implementer_only.test_method.<locals>.Barc                     t               r0   r1   r   s    r   _methodz6Test_implementer_only.test_method.<locals>.Bar._method  r-  r   N)r   r   r   r  r   r   r   Barr    s    ,r   r  )rL   r   rz   r   r  r  )r   r   r   r  r  s        r   test_methodz!Test_implementer_only.test_method  s?    ;f%MM$'		, 	, 	*i=r   N)r   r   r   rs   rz   rH  r5   r  r   r   r   r  r    s     3<	>r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ProvidesClassTestsc                     ddl m} |S Nr   ProvidesClassr*   r  r   r  s     r   rs   z"ProvidesClassTests._getTargetClass  r  r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zProvidesClassTests._makeOne  r{   r   c                     ddl m}  |d      } G d d      }| j                  ||      }| j                  t	        |      |g       y )Nr   r   r   c                       e Zd Zy)?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r   r   r   r   r'   r  s        r   test_simple_class_one_interfacez2ProvidesClassTests.test_simple_class_one_interface  sA    ;f%	 	 }}S$'ddV,r   c                     ddl m} ddlm}  |d      } G d d      }| j	                  ||      }|j                         \  }}| j                  ||       | j                  |||f       y )Nr   Providesr   r   c                       e Zd Zy)/ProvidesClassTests.test___reduce__.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   )r*   r  rL   r   rz   r  r   r+   )r   r  r   r   r'   r  klassrx   s           r   r  z"ProvidesClassTests.test___reduce__  s`    8;f%	 	 }}S$'oo'teX&T{+r   c                     ddl m}  |d      } G d d      }| j                  ||      }||_        | j	                  |j                  |       y )Nr   r   r   c                       e Zd Zy)2ProvidesClassTests.test___get___class.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   rL   r   rz   r  r   r  s        r   test___get___classz%ProvidesClassTests.test___get___class  sG    ;f%	 	 }}S$'c&&-r   c                     ddl m}  |d      } G d d      | j                  |      }|_        fd}| j	                  t
        |       y )Nr   r   r   c                       e Zd Zy)5ProvidesClassTests.test___get___instance.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   c                  *            } | j                   S r0   )r  )r#   r'   s    r   _testz7ProvidesClassTests.test___get___instance.<locals>._test  s    %C###r   )rL   r   rz   r  r   AttributeError)r   r   r   r  r  r'   s        @r   test___get___instancez(ProvidesClassTests.test___get___instance  sK    ;f%	 	 }}S$'	$ 	.%0r   N)	r   r   r   rs   rz   r  r  r  r  r   r   r   r  r    s     3-,	.1r   r  c                   $     e Zd Z fdZd Z xZS )ProvidesClassStrictTestsc                 @    t         |           G fdd      }|S )Nc                       e Zd Z fdZy)@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                 ,    j                  | |d      S NT)	base_mrosrU   _do_calculate_ro)r   r  r  s     r   r  zQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_ro&  "    $55Id 6  r   Nr   r   r   r  r  s   r   StrictProvidesr  %      r   r  r  rs   )r   r  r  r  s     @r   rs   z(ProvidesClassStrictTests._getTargetClass"  s$    /1	] 	 r   c           	          ddl m} ddl m} ddl m}  G d d|      } ||       G d d             }| j	                  ||      }| j                  |j                  | ||      | |t              |f       y )	Nr   rJ   r   r   c                       e Zd Zy)MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr&   r   r   r   r   r  4  r9   r   r   c                       e Zd Zy)LProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr&   r   r   r   r   r  7  r(   r   r   )r   rK   r   r   rz   r+   r^   rm   )r   rK   r   r   r   r   r  s          r   %test_overlapping_interfaces_correctedz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected-  s{     	-0.	I 	 
U		 	 
	 }}T5)$&!(
 	r   r   r   r   rs   r  r  r  s   @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d Zd Zd Zy)TestProvidesClassReprc                     ddl m} |S r  r  r  s     r   rs   z%TestProvidesClassRepr._getTargetClassG  r  r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTestProvidesClassRepr._makeOneK  r{   r   c                    ddl m}  |d      }|j                  dk(  sJ |j                  t        k(  sJ t	        |      dt         dk(  sJ  |d      }| j                  t        |       ||      }| j                  t	        |      d       y )Nr   r   r   z<InterfaceClass z.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))rL   r   r   r   r  rz   r5  r+   )r   r   r   r   insts        r   test__repr__z"TestProvidesClassRepr.test__repr__N  s    ;f%}}&&&(***Dz/z@@@@f%}}T$Zt4JA	
r   c                 ^    ddl m} |j                  }| j                  t	        |      d       y )Nr   dummyzIdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IDummyModule))zope.interface.testsr  r  r+   r  )r   r  providess      r   'test__repr__module_provides_typical_usez=TestProvidesClassRepr.test__repr__module_provides_typical_use]  s,     	/%%N	
r   c                     dd l }ddlm} |j                  }t	        |j
                  dz         D ]8  }| j                  |j                        5  |j                  ||       d d d        : y # 1 sw Y   ExY w)Nr   r  r   )	r   r  r  r  r  HIGHEST_PROTOCOLr   PicklingErrorr   )r   r   r  r  protos        r   test__repr__module_after_picklez5TestProvidesClassRepr.test__repr__module_after_picklei  sn    .%%622Q67 	.E""6#7#78 .Xu-. .	.. .s   A++A4	c                 Z   dd l }ddlm} ddlm} ddlm} ddlm}  |d      } |d      }|j                  }|`| j                  t        |d|        |||       |j                  }	| j                  t        |	      d	        |||       |j                  }	| j                  t        |	      d
       |j                  t           }
t        |
d      rJ  ||
||       | j                  t         |
d       | j#                  |
j                  |	       | j                  t        |	      d       y )Nr   alsoProvidesdirectlyProvidesr   r  r   r   r  zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar)zfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))sysr*   r  r  rL   r   r  r  r  
addCleanupsetattrr+   r  modulesr   hasattrdelattrr   )r   r  r  r  r   r  r   r   orig_providesr  	my_modules              r   #test__repr__directlyProvides_modulez9TestProvidesClassRepr.test__repr__directlyProvides_modules  s   <@;.f%f%**F%%%NO	

 	UD!%%N	
 KK)	9n555D$/N;i,,h7N	
r   c                     ddl m} ddlm}  |d      }| j	                  ||      }|xj
                  dz  c_        |xj
                  dz  c_        | j                  t        |      d       y )Nr   )
ModuleTyper   r   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))r*   r  rL   r   rz   _v_module_namesr+   r  )r   r  r   r   r  s        r   )test__repr__module_provides_cached_sharedz?TestProvidesClassRepr.test__repr__module_provides_cached_shared  s^    :;f%}}Z. 00 33JG	
r   c                     ddl m}  |dd      } |dd      } |d      }| j                  t        |       |||      }| j	                  t        |      d       y )	Nr   r   r   mod1r   mod2r   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)rL   r   rz   r5  r+   r  r   r   r   IFoo2r   r  s         r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_names  sW    ;f8v&9f%}}T$ZtU;JL	
r   c                     ddl m} ddl m}  G d d|      } G d d      } |t        |             }| j	                  |||      }| j                  t        |      d       y )	Nr   rJ   r   c                       e Zd ZdZy)KTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooDoes nothingNr   r   r   __doc__r   r   r   r   r        r   r   c                       e Zd ZdZy)JTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr  Nr  r   r   r   r  r    r  r   r  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r   rK   r   r5  rz   r+   r  )r   rK   r   r   r  r   r  s          r   'test__repr__implementedBy_in_interfacesz=TestProvidesClassRepr.test__repr__implementedBy_in_interfaces  sZ    ,0	9 		 	 T$Z(}}S$-J6	
r   c                 n    | j                  t        |             }| j                  t        |      d       y )Nz'directlyProvides(TestProvidesClassRepr)rz   r5  r+   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfaces  s,    }}T$Z(J5	
r   c                       fd G fdd      } j                   |             } j                  t        |      d       y )Nc                  (     j                  d       y )NzShould not call str)r   r   s   r   str___dont_call_mezGTestProvidesClassRepr.test__repr__non_class.<locals>.str___dont_call_me  s    II+,r   c                       e Zd ZdZW  Zd Zy);TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   c                      y)Nz<Object>r   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__  s    !r   N)r   r   r   r}   __str__r  )r  s   r   Objectr    s    I(G"r   r  zdirectlyProvides(<Object>))rz   r+   r  )r   r  r  r  s   `  @r   test__repr__non_classz+TestProvidesClassRepr.test__repr__non_class  s<    	-	" 	" }}VX&J(	
r   c                     ddl m} ddl m} ddlm}  |d      } ||       G d d             } | |             }| j                  t        |      d       y )	Nr   r   r@  r   r   c                       e Zd Zy)DTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr&   r   r   r   r'   r$    r(   r   r'   classImplements(Foo, IFoo))r*   r   r@  rL   r   r+   r  )r   r   r@  r   r   r'   r  s          r   !test__repr__providedBy_from_classz7TestProvidesClassRepr.test__repr__providedBy_from_class  sW    ;:;f%	T		 	 
	 #% J(	
r   c                     ddl m} ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d	             } |       } |||        ||      }	| j                  t        |	      d
       y )Nr   r  r   r"  r   r   r   c                       e Zd Zy)FTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr&   r   r   r   r'   r)    r(   r   r'   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r*   r  r   r@  rL   r   r+   r  )
r   r  r   r@  r   r   r   r'   r#   r  s
             r   #test__repr__providedBy_alsoProvidesz9TestProvidesClassRepr.test__repr__providedBy_alsoProvides  sr    <;:;f%f%	T		 	 
	 eS$#JE	
r   N)r   r   r   rs   rz   r  r  r  r  r   r  r  r  r   r&  r*  r   r   r   r  r  E  sD    3


..
`



(

$
 
r   r  c                       e Zd Zd Zd Zd Zy)Test_Providesc                     ddl m}  ||i |S )Nr   r  )r*   r  )r   rx   ry   r  s       r   rH  zTest_Provides._callFUT  s    8$$$r   c                    ddl m} ddlm}  |d      }i } G d d      }t	        ||      5  | j                  ||      }d d d        | j                  t              |g       | j                  |||f   |       y # 1 sw Y   =xY w)Nr   ra  r   r   c                       e Zd Zy).Test_Provides.test_no_cached_spec.<locals>.FooNr&   r   r   r   r'   r0    r9   r   r'   InstanceDeclarations)	r   rb  rL   r   _MonkeyrH  r+   rD   r   )r   rb  r   r   cacher'   r  s          r   test_no_cached_specz!Test_Provides.test_no_cached_spec  s    /;f%	 	 \> 	,==d+D	,ddV,eS$K($/	, 	,s   A==Bc                     ddl m} ddlm}  |d      }t	               } G d d      }||f|i}t        ||      5  | j                  ||      }d d d        | j                  |       y # 1 sw Y   xY w)Nr   ra  r   r   c                       e Zd Zy)-Test_Provides.test_w_cached_spec.<locals>.FooNr&   r   r   r   r'   r8  )  r9   r   r'   r1  )r   rb  rL   r   rm   r3  rH  r   )r   rb  r   r   priorr'   r4  r  s           r   test_w_cached_specz Test_Provides.test_w_cached_spec#  sp    /;f%	 	 te$\> 	,==d+D	,dE"	, 	,s   A**A3N)r   r   r   rH  r5  r:  r   r   r   r,  r,    s    %0#r   r,  c                   $    e Zd Zd Zd Zd Zd Zy)Test_directlyProvidesc                     ddl m}  ||i |S )Nr   r  )r*   r  )r   rx   ry   r  s       r   rH  zTest_directlyProvides._callFUT4      @,,,r   c                     ddl m} ddlm}  |d      } G d d      } |       }| j	                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)7Test_directlyProvides.test_w_normal_object.<locals>.FooNr&   r   r   r   r'   rA  =  r9   r   r'   	r*   r  rL   r   rH  r   r  r+   rD   r   r  r   r   r'   objs         r   test_w_normal_objectz*Test_directlyProvides.test_w_normal_object8  n    =;f%	 	 ec4 m	
 	!!"TF	
r   c                     ddl m} ddlm}  |d      } G d d      }| j	                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)/Test_directlyProvides.test_w_class.<locals>.FooNr&   r   r   r   r'   rI  N  r9   r   r'   )	r*   r  rL   r   rH  r   r  r+   rD   r   r  r   r   r'   s        r   test_w_classz"Test_directlyProvides.test_w_classI  sg    =;f%	 	 	c4 m	
 	!!"TF	
r   c                     ddl m} ddlm}  |d      }i  G fdd      } |       }| j	                  ||       | j                  d   |       | j                  t        d         |g       y )Nr   r  r   r   c                       e Zd Zd Z fdZy):Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 $    |dk(  ry t        |      Nr  r1   r+  s     r   __getattribute__zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__`  s    ;&)$//r   c                     ||<   y r0   r   )r   r   valuethe_dicts      r   __setattr__zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__f  s    !&r   Nr   r   r   rQ  rU  rT  s   r   r'   rN  _  s    0'r   r'   r  )r*   r  rL   r   rH  r   r+   rD   )r   r  r   r   r'   rD  rT  s         @r   test_w_classless_objectz-Test_directlyProvides.test_w_classless_objectY  sj    =;f%	' 	' ec4 h~6Fh~67$@r   N)r   r   r   rH  rE  rK  rX  r   r   r   r<  r<  2  s    -
"
 Ar   r<  c                       e Zd Zd Zd Zd Zy)Test_alsoProvidesc                     ddl m}  ||i |S )Nr   r  )r*   r  )r   rx   ry   r  s       r   rH  zTest_alsoProvides._callFUTq  s    <T(R((r   c                     ddl m} ddlm}  |d      } G d d      } |       }| j	                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr&   r   r   r   r'   r^  z  r9   r   r'   rB  rC  s         r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_providesu  rF  r   c                 &   ddl m} ddl m} ddlm}  |d      } |d      } G d d      } |       } |||       | j                  ||       | j                  |j                  |       | j                  t        |j                        ||g       y )	Nr   r  r  r   r   r   c                       e Zd Zy)7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr&   r   r   r   r'   rb    r9   r   r'   )
r*   r  r  rL   r   rH  r   r  r+   rD   )r   r  r  r   r   r   r'   rD  s           r   test_w_existing_providesz*Test_alsoProvides.test_w_existing_provides  s    =@;f%f%	 	 ed#c4 m	
 	!!"T4L	
r   N)r   r   r   rH  r_  rc  r   r   r   rZ  rZ  o  s    )
"
r   rZ  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_noLongerProvidesc                     ddl m}  ||i |S )Nr   )noLongerProvides)r*   rg  )r   rx   ry   rg  s       r   rH  zTest_noLongerProvides._callFUT  r>  r   c                     ddl m}  |d      } G d d      } |       }| j                  ||       | j                  t	        |j
                        g        y )Nr   r   r   c                       e Zd Zy)<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr&   r   r   r   r'   rj    r9   r   r'   )rL   r   rH  r+   rD   r  )r   r   r   r'   rD  s        r   r_  z/Test_noLongerProvides.test_wo_existing_provides  sN    ;f%	 	 ec4 !!"B	
r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  ||       | j                  t        |j                        g        y )Nr   r  r   r   c                       e Zd Zy)?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr&   r   r   r   r'   rm    r9   r   r'   r*   r  rL   r   rH  r+   rD   r  )r   r  r   r   r'   rD  s         r   test_w_existing_provides_hitz2Test_noLongerProvides.test_w_existing_provides_hit  s[    @;f%	 	 ed#c4 !!"B	
r   c                     ddl m} ddlm}  |d      } |d      } G d d      } |       } |||       | j	                  ||       | j                  t        |j                        |g       y )Nr   r  r   r   r   c                       e Zd Zy)@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr&   r   r   r   r'   rr    r9   r   r'   rn  )r   r  r   r   r   r'   rD  s          r   test_w_existing_provides_missz3Test_noLongerProvides.test_w_existing_provides_miss  sg    @;f%f%	 	 ed#c4 !!"TF	
r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  t
        | j                  ||       y )Nr   r   r   r   c                       e Zd Zy)DTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr&   r   r   r   r'   rv    r(   r   r'   )r*   r   rL   r   r   r  rH  )r   r   r   r   r'   rD  s         r   !test_w_iface_implemented_by_classz7Test_noLongerProvides.test_w_iface_implemented_by_class  sO    ;;f%	T		 	 
	 e*dmmS$?r   N)r   r   r   rH  r_  ro  rs  rw  r   r   r   re  re    s    -


 
@r   re  c                   *    e Zd Zd Zd Zd Zd Zd Zy)ClassProvidesBaseFallbackTestsc                     ddl m} |S Nr   )ClassProvidesBaseFallbackr*   r|  r   r|  s     r   rs   z.ClassProvidesBaseFallbackTests._getTargetClass      I((r   c                 F     G d d| j                               } |||      S )Nc                       e Zd Zd Zy)8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                      || _         || _        y r0   )_cls_implements)r   kis      r   r)  zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__  s    	#$ r   N)r   r   r   r)  r   r   r   r  r    s    %r   r  rv   )r   r  
implementsr  s       r   rz   z'ClassProvidesBaseFallbackTests._makeOne  s&    	%d**, 	%
 uj))r   c                     ddl m}  |d      } G d d      }| j                  ||      x}|_        | j	                  |j                  |       y )Nr   r   r   c                       e Zd Zy)GClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r  )r   r   r   r'   cpbps        r   test_w_same_class_via_classz:ClassProvidesBaseFallbackTests.test_w_same_class_via_class  sG    ;f%	 	 #'--T"::sc&&-r   c                     ddl m}  |d      } G d d      } |       }| j                  ||      |_        | j	                  |j                  |       y )Nr   r   r   c                       e Zd Zy)JClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r  )r   r   r   r'   r#   s        r   test_w_same_class_via_instancez=ClassProvidesBaseFallbackTests.test_w_same_class_via_instance  sI    ;f%	 	 e==d3c&&-r   c                     ddl m}  |d      } G d d      } G d d|      } |       }| j                  ||      |_        | j	                  t
        t        |d       | j	                  t
        t        |d       y )	Nr   r   r   c                       e Zd Zy)BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   c                       e Zd Zy)BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr&   r   r   r   r  r    r9   r   r  r  )rL   r   rz   r  r   r  getattr)r   r   r   r'   r  bars         r   test_w_different_classz5ClassProvidesBaseFallbackTests.test_w_different_class  si    ;f%	 		# 	 e==d3.'3G.'3Gr   N)r   r   r   rs   rz   r  r  r  r   r   r   ry  ry    s    )
	*.	.Hr   ry  c                       e Zd Zd Zd Zy)ClassProvidesBaseTestsc                     ddl m} |S )Nr   )ClassProvidesBase)r*   r  )r   r  s     r   rs   z&ClassProvidesBaseTests._getTargetClass  s    A  r   c                     ddl m} |S r{  r}  r~  s     r   r  z(ClassProvidesBaseTests._getFallbackClass  r  r   N)r   r   r   rs   r  r   r   r   r  r    s    !)r   r  c                   $    e Zd Zd Zd Zd Zd Zy)ClassProvidesTestsc                     ddl m} |S Nr   r  r*   r  r   r  s     r   rs   z"ClassProvidesTests._getTargetClass$  r  r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zClassProvidesTests._makeOne(  r{   r   c                 :   ddl m} ddlm}  |d      } |d      } ||       G d d             }| j	                  |t        |      |      x}|_        | j                  |j                  |       | j                  t         |       j                        |g       y )Nr   r   r   r   r   c                       e Zd Zy)7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr&   r   r   r   r'   r  1  r(   r   r'   )
r*   r   rL   r   rz   r5  r  r   r+   rD   r   r   r   r   r   r'   cps          r   test_w_simple_metaclassz*ClassProvidesTests.test_w_simple_metaclass+  s    ;;f%f%	T		 	 
	 !%c49d CCSc&&+ce001D6:r   c                    ddl m} ddlm}  |d      } |d      } ||       G d d             }| j	                  |t        |      |      x}|_        | j                  |j                         t        |      |t        |      |ff       y )Nr   r   r   r   r   c                       e Zd Zy)/ClassProvidesTests.test___reduce__.<locals>.FooNr&   r   r   r   r'   r  ?  r(   r   r'   )	r*   r   rL   r   rz   r5  r  r+   r  r  s          r   r  z"ClassProvidesTests.test___reduce__9  s    ;;f%f%	T		 	 
	 !%c49d CCSr(S$s)T$:;	=r   N)r   r   r   rs   rz   r  r  r   r   r   r  r  "  s    3;=r   r  c                   $     e Zd Z fdZd Z xZS )ClassProvidesStrictTestsc                 @    t         |           G fdd      }|S )Nc                       e Zd Z fdZy)EClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                 ,    j                  | |d      S r  r  )r   r  r  s     r   r  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roO  r  r   Nr  r  s   r   StrictClassProvidesr  N  r  r   r  r  )r   r  r  r  s     @r   rs   z(ClassProvidesStrictTests._getTargetClassK  s$    /1	- 	 #"r   c           
      .   ddl m} ddl m} ddl m}  G d d|      } ||       G d dt                     } |d	t
        fi       }| j                  |||      }| j                  |j                  | ||      | |t               |t
              |f       y )
Nr   rJ   r   r   c                       e Zd Zy)MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr&   r   r   r   r   r  ]  r9   r   r   c                       e Zd Zy)QClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr&   r   r   r   	metaclassr  `  r(   r   r  r  )	r   rK   r   r   r5  rm   rz   r+   r^   )r   rK   r   r   r   r  r  r  s           r   r  z>ClassProvidesStrictTests.test_overlapping_interfaces_correctedV  s     	-0.	I 	 
U		 	 
	 I
 }}S)U3)$$&!(
 	r   r  r  s   @r   r  r  H  s    	#r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestClassProvidesReprc                     ddl m} |S r  r  r  s     r   rs   z%TestClassProvidesRepr._getTargetClassw  r  r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTestClassProvidesRepr._makeOne{  r{   r   c                 x    | j                  t        |       t              }| j                  t        |      d       y )Nz'directlyProvides(TestClassProvidesRepr)r  r  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__empty~  s.    }}T$Z.J5	
r   c                     ddl m}  G d d|      }| j                  t        |       t        |      }| j	                  t        |      d       y )Nr   rJ   c                       e Zd ZdZy)=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr  r   r   r   r   r    r  r   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rK   rz   r5  r+   r  )r   rK   r   r  s       r   test__repr__providing_onez/TestClassProvidesRepr.test__repr__providing_one  sA    ,	9 	 }}T$Zt4J;	
r   c                     ddl m}  |dd      } |dd      } |d      }| j                  t        |       t        |||      }| j	                  t        |      d       y )	Nr   r   r   r  r  r  r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  s         r   r  z1TestClassProvidesRepr.test__repr__duplicate_names  sY    ;f8v&9f%}}T$ZtT5AJL	
r   c                     ddl m} ddl m} ddlm}  |d      } ||       G d d             } ||      }| j                  t        |      d       y )	Nr   r   r   r   r   c                       e Zd Zy)<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr&   r   r   r   r'   r    r(   r   r'   r%  )r*   r   r   rL   r   r+   r  )r   r   r   r   r   r'   r  s          r   test__repr__implementedByz/TestClassProvidesRepr.test__repr__implementedBy  sU    =;;f%	T		 	 
	 S!J(	
r   c                     ddl m}  G d d      } | |             }| j                  t        |      dt         d        |       }d|_         ||      }| j                  t        |      d       y )Nr   r   c                       e Zd Zd Zy)RTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                     | S r0   r   r   s    r   r\  z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__  s    r   N)r   r   r   r\  r   r   r   Callabler    s    r   r  r}  z.?)zclassImplements(Callable))r*   r   r+   r  r   )r   r   r  r  cs        r   *test__repr__implementedBy_generic_callablez@TestClassProvidesRepr.test__repr__implementedBy_generic_callable  sp    =	 	 XZ(Jxj,	

 J
QJ'	
r   N)
r   r   r   rs   rz   r  r  r  r  r  r   r   r   r  r  u  s%    3





 
r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_directlyProvidedByc                     ddl m}  ||i |S )Nr   )directlyProvidedBy)r*   r  )r   rx   ry   r  s       r   rH  z Test_directlyProvidedBy._callFUT  rt  r   c                 z     G d d      } |       }| j                  t        | j                  |            g        y )Nc                       e Zd Zy)NTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   r  rQ  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance  s3    	 	 edmmC0126r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  t        | j                  |            g        y )Nr   r   r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr&   r   r   r   r'   r    r(   r   r'   )r*   r   rL   r   r+   rD   rH  )r   r   r   r   r'   r#   s         r   -test_w_declarations_in_class_but_not_instancezETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance  sU    ;;f%	T		 	 
	 edmmC0126r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  t        | j                  |            |g       y )Nr   r  r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   )r*   r  rL   r   r+   rD   rH  )r   r  r   r   r'   r#   s         r   -test_w_declarations_in_instance_but_not_classzETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class  sO    @;f%	 	 ed#dmmC01D6:r   c                     ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d             } |       } |||       | j                  t        | j                  |            |g       y )	Nr   r  r   r   r   r   c                       e Zd Zy)NTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr&   r   r   r   r'   r    r(   r   r'   )r*   r  r   rL   r   r+   rD   rH  )r   r  r   r   r   r   r'   r#   s           r   )test_w_declarations_in_instance_and_classzATest_directlyProvidedBy.test_w_declarations_in_instance_and_class  sn    @;;f%f%	T		 	 
	 ed#dmmC01D6:r   N)r   r   r   rH  r  r  r  r  r   r   r   r  r    s    /7
7
;;r   r  c                       e Zd Zd Zd Zd Zy)Test_providerc                     ddl m} |S )Nr   )provider)r*   r  )r   r  s     r   rs   zTest_provider._getTargetClass  s
    8r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   zTest_provider._makeOne  r{   r   c                     ddl m} ddlm}  |d      }| j	                  |       G d d             }| j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)'Test_provider.test_w_class.<locals>.FooNr&   r   r   r   r'   r  	  r(   r   r'   )	r*   r  rL   r   rz   r   r  r+   rD   rJ  s        r   rK  zTest_provider.test_w_class  so    =;f%	t		 	 
	 	m	
 	!!"TF	
r   N)r   r   r   rs   rz   rK  r   r   r   r  r    s    3
r   r  c                   $    e Zd Zd Zd Zd Zd Zy)Test_moduleProvidesc                     ddl m} ddlm}  |d      }d||d}i }dj	                  dd	g      }t        |||       |d
   }| j                  t        |       y )Nr   moduleProvidesr   r   zope.interface.tests.foor   r  r   
z
def foo():    moduleProvides(IFoo)r#   )r*   r  rL   r   joinr   r   r   )r   r  r   r   r   r   CODEr#   s           r   test_called_from_functionz-Test_moduleProvides.test_called_from_function  sg    >;f%7#14Ayy&
  	T5$5k)S)r   c                     ddl m} ddlm}  |d      }d||d}i }dj	                  dd	g      }| j                  t              5  t        |||       d d d        y # 1 sw Y   y xY w)
Nr   r  r   r   r  r  r  zclass Foo(object):r  r*   r  rL   r   r  r   r   r   )r   r  r   r   r   r   r  s          r   test_called_from_classz*Test_moduleProvides.test_called_from_class'  sq    >;f%7#14Ayy &
  y) 	$ud#	$ 	$ 	$s   AA%c                     ddl m} ddlm}  |d      }d||d}dj	                  dg      }t        ||       |d	   }| j                  t        |      |g       y )
Nr   r  r   r   r  r  r  moduleProvides(IFoo)r  )r*   r  rL   r   r  r   r+   rD   )r   r  r   r   r   r  r  s          r   "test_called_once_from_module_scopez6Test_moduleProvides.test_called_once_from_module_scope5  sd    >;f%7#14Ayy"
  	T5^$ddV,r   c                     ddl m} ddlm}  |d      }d||d}dj	                  ddg      }| j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)	Nr   r  r   r   r  r  r  r  r  )r   r  r   r   r   r  s         r   #test_called_twice_from_module_scopez7Test_moduleProvides.test_called_twice_from_module_scopeB  sl    >;f%7#14A yy""
  y) 	u	 	 	s   AA"N)r   r   r   r  r  r  r  r   r   r   r  r    s    *$-r   r  c                   X    e Zd Zd 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y)#Test_getObjectSpecificationFallbackc                     ddl m} |S )Nr   )getObjectSpecificationFallback)r*   r  )r   r  s     r   r  z5Test_getObjectSpecificationFallback._getFallbackClassS  s    N--r   c                 .     | j                         |i |S r0   rv   rw   s      r   rH  z,Test_getObjectSpecificationFallback._callFUTZ  r{   r   c                     i  G fdd      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Z fdZd Zy)TTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                 `    |dk(  rt        |      	 |   S # t        $ r t        |      w xY wrP  )r  KeyError)r   r   rT  s     r   rQ  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__a  s?    ;&(../#D>) /(../s    -c                     t               r0   r1   )r   r   rS  s      r   rU  z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__j  r-  r   NrV  rW  s   r   r'   r	  `  s    /,r   r'   rH  r+   rD   )r   r'   r#   r  rT  s       @r   #test_wo_existing_provides_classlesszGTest_getObjectSpecificationFallback.test_wo_existing_provides_classless]  s=    	, 	, e}}S!dR(r   c                     ddl m} ddlm}  |d      }d } |||       | j	                  |      }| j                  ||j                         y )Nr   r  r   r   c                      t               r0   r1   r   r   r   r#   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foov  r  r   )r*   r  rL   r   rH  r   r  )r   r  r   r   r#   r  s         r   test_existing_provides_is_speczBTest_getObjectSpecificationFallback.test_existing_provides_is_specq  sE    @;f%	( 	d#}}S!dC,,-r   c                     d }t               |_        | j                  |      }| j                  t	        |      g        y )Nc                      t               r0   r1   r   r   r   r#   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo  r  r   )rm   r  rH  r+   rD   )r   r#   r  s      r   "test_existing_provides_is_not_speczFTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec}  s5    	( "8}}S!dR(r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  |      }| j                  t        |      |g       y )Nr   r  r   r   c                       e Zd Zy)GTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr&   r   r   r   r'   r    r9   r   r'   )r*   r  rL   r   rH  r+   rD   )r   r  r   r   r'   r#   r  s          r   test_existing_providesz:Test_getObjectSpecificationFallback.test_existing_provides  sS    @;f%	 	 ed#}}S!ddV,r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)WTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr&   r   r   r   r'   r    r(   r   r'   )r*   r   rL   r   rH  r+   rD   r   r   r   r   r'   r#   r  s          r   &test_wo_provides_on_class_w_implementszJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements  s[    ;;f%	T		 	 
	 e}}S!ddV,r   c                 ~     G d d      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)XTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr&   r   r   r   r'   r     r9   r   r'   r  r   r'   r#   r  s       r   'test_wo_provides_on_class_wo_implementszKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements  7    	 	 e}}S!dR(r   c                 H    t        j                  | | j                  d       y )Nr  expected_missingr   test_raisesrH  r   s    r   ,test_catches_only_AttributeError_on_provideszPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_provides  s    $$$--.	
r   c                 J    t        j                  | | j                  dd        y )Nr  )r&  r  r'  r   s    r   )test_catches_only_AttributeError_on_classzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_class  s     $$MM(		
r   c                 D     G d d      }| j                   |              y )Nc                       e Zd Z ee      Zy)lTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrError.<locals>.FooN)r   r   r   r   r  r  r   r   r   r'   r.    s    +N;Lr   r'   )rH  r  s     r   ;test_raises_AttrError_w_provides_fails_type_check_AttrErrorz_Test_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrError  s    	< 	< 	cer   c                      G d d      }| j                  t              5 }| j                   |              d d d        | j                  dj                  j
                  d          y # 1 sw Y   3xY w)Nc                       e Zd Z ee      Zy)oTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr  r   r   r   r'   r2    s    +L9Lr   r'   r  r   )r   r3  rH  r+   	exceptionrx   )r   r'   excs      r   >test_raises_AttrError_w_provides_fails_type_check_RuntimeErrorzbTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError  sb    	: 	: |, 	!MM#% 	! 	cmm&8&8&;<	! 	!s   A))A2N)r   r   r   r  rs   rH  r  r  r  r  r  r"  r)  r+  r/  r6  r   r   r   r  r  Q  sE    .
 (O3)(
.)--)


	=r   r  c                       e Zd Zd Zy)Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r*   r:  )r   r:  s     r   rs   z+Test_getObjectSpecification._getTargetClass  s    F%%r   Nr  r   r   r   r8  r8    s    &r   r8  c                        e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	 Z fd
Z fdZ fdZ fdZ fdZd Zd Z xZS )Test_providedByFallbackc                     ddl m} |S )Nr   )providedByFallback)r*   r>  )r   r>  s     r   r  z)Test_providedByFallback._getFallbackClass  s    B!!r   c                 .     | j                         |i |S r0   rv   rw   s      r   rH  z Test_providedByFallback._callFUT  r{   r   c                 ~     G d d      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)NTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr&   r   r   r   r'   rB    r9   r   r'   r  r!  s       r   )test_wo_providedBy_on_class_wo_implementszATest_providedByFallback.test_wo_providedBy_on_class_wo_implements  r#  r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||      |_        | j                  |      }| j                  t        |      |g       y )Nr   r  r   r   c                       e Zd Zy)ATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr&   r   r   r   r'   rF    r9   r   r'   )r*   r  rL   r   r  rH  r+   rD   )r   r  r   r   r'   r#   r  s          r   test_w_providedBy_valid_specz4Test_providedByFallback.test_w_providedBy_valid_spec  sX    8;f%	 	 e%c40}}S!ddV,r   c                      G d d      } |       }t               |_        | j                  |      }| j                  t	        |      g        y )Nc                       e Zd Zy)CTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr&   r   r   r   r'   rJ    r9   r   r'   )rm   r  rH  r+   rD   r!  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec  sA    	 	 e#X}}S!dR(r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }t	               |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)VTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr&   r   r   r   r'   rN  	  r(   r   r'   )	r*   r   rL   r   rm   r  rH  r+   rD   r  s          r   1test_w_providedBy_invalid_spec_class_w_implementszITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements	  se    ;;f%	T		 	 
	 e#X}}S!ddV,r   c                      G d d      } |       }t               |_        t               x}|_        | j                  |      }| j	                  ||       y )Nc                       e Zd Zy)cTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr&   r   r   r   r'   rR  	  r9   r   r'   rm   r  r  rH  r   r   r'   r#   expectedr  s        r   >test_w_providedBy_invalid_spec_w_provides_no_provides_on_classzVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class	  sJ    	 	 e#X&,h.3#}}S!dH%r   c                      G d d      } |       }t               |_        t               x}|_        t               |_        | j                  |      }| j	                  ||       y )Nc                       e Zd Zy)eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr&   r   r   r   r'   rY  	  r9   r   r'   rS  rT  s        r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class	  sT    	 	 e#X&,h.3#!8}}S!dH%r   c                    ddl m} ddlm}  |d      } ||       G d d             } |       }t	               |_        t	               x|_        |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr&   r   r   r   r'   r]  +	  r(   r   r'   )
r*   r   rL   r   rm   r  r  rH  r+   rD   r  s          r   @test_w_providedBy_invalid_spec_w_provides_same_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class&	  sw    ;;f%	T		 	 
	 e#X.4h63+}}S!ddV,r   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } ||       G d
 d|             } |       }| j	                  t        | j                  |            ||g       t        ||      }| j                  |      }	| j                  |	j                         | j	                  t        |	      |g       y )Nr   rJ   r   c                       e Zd Zy)PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr&   r   r   r   r   ra  9	  r9   r   r   c                       e Zd Zy)STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr&   r   r   r   r   rc  <	  r9   r   r   c                       e Zd Zy)OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr&   r   r   r   r   re  ?	  r(   r   r   c                       e Zd Zy)RTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr&   r   r   r   r  rg  C	  r(   r   r  
r   rK   r*   r   r+   rD   rH  r  rg   r  )r   rK   r   r   r   r   r  derivedr  r  r  s             r   r  zATest_providedByFallback.test_super_when_base_implements_interface5	  s    ,;	I 		u 	 
U		 	 
	 
X		d 	 
	 )dmmG45%7HIGW%mmC #//*cUG,r   c                 Z   ddl m} ddlm}  G d d|      } G d d|      } G d d	      } ||       G d
 d|             } |       }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )Nr   rJ   r   c                       e Zd Zy)VTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr&   r   r   r   r   rl  S	  r9   r   r   c                       e Zd Zy)YTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr&   r   r   r   r   rn  V	  r9   r   r   c                       e Zd Zy)UTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr&   r   r   r   r   rp  Y	  r9   r   r   c                       e Zd Zy)XTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr&   r   r   r   r  rr  \	  r(   r   r  r  )
r   rK   r   r   r   r   r  ri  r  r  s
            r   r  zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfaceO	  s    ,;	I 		u 		 	 
X		d 	 
	 )dmmG45zBGW%dmmC0126r   c                 ~   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } |       }| j	                  t        | j                  |            |g       t        ||      }| j                  |      }| j                  |j                         | j	                  t        |      g        y )
Nr   rJ   r   c                       e Zd Zy)ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr&   r   r   r   r   ru  j	  r9   r   r   c                       e Zd Zy)HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr&   r   r   r   r   rw  m	  r9   r   r   c                       e Zd Zy)GTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr&   r   r   r   r  ry  p	  r(   r   r  rh  )
r   rK   r   r   r   r  ri  r  r  r  s
            r   r  z6Test_providedByFallback.test_super_when_base_is_objectf	  s    ,;	I 		u 	 
X		 	 
	 )dmmG45zBGW%mmC #//*cB'r   c                    ddl m} ddlm} ddlm}  G d d|      } G d d|      } ||       G d	 d
             } G d d|      } |       }| j                  t        | j                  |            |g        |||       | j                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j                  |
j                         | j                  t        |
      |g       y )Nr   rJ   r  r   c                       e Zd Zy)OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr&   r   r   r   r   r|  	  r9   r   r   c                       e Zd Zy)RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr&   r   r   r   r   r~  	  r9   r   r   c                       e Zd Zy)NTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr&   r   r   r   r   r  	  r(   r   r   c                       e Zd Zy)QTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr&   r   r   r   r  r  	  r9   r   r  )r   rK   r*   r  r   r+   rD   rH  r  rg   r  )r   rK   r  r   r   r   r   r  ri  r  r  r  s              r   (test_super_when_object_directly_providesz@Test_providedByFallback.test_super_when_object_directly_provides|	  s    ,@;	I 		u 	 
U		 	 
		d 	 )dmmG45w?(+dmmG45%7HIGW%mmC #//*cUG,r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d d             } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             } |       }t	        ||      }t	        |	|      }t	        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   rJ   r   c                       e Zd Zy)OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr&   r   r   r   r   r  	  r9   r   r   c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr&   r   r   r   r  r  	  r9   r   r  c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr&   r   r   r   r  r  	  r9   r   r  c                       e Zd Zy)RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr&   r   r   r   r   r  	  r9   r   r   c                       e Zd Zy)TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr&   r   r   r   r  r  	  r9   r   r  c                       e Zd Zy)NTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr&   r   r   r   r   r  	  r(   r   r   c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr&   r   r   r   r   r  	  r(   r   r   c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr&   r   r   r   r  r  	  r(   r   r  c                       e Zd Zy)QTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr&   r   r   r   r  r  	  r(   r   r  r  r  s                   r   r  z@Test_providedByFallback.test_super_multi_level_multi_inheritance	  s   ,;	I 		) 		) 		u 		 	 
U		 	 
	 
S		 	 
	 
S		 	 
	 
Xz	*	b" 	 
+	 I7ABlBldmmA./"JUC@	BdmmB/0uc*	,dmmC01u	'dmmC01	"r   c                 R    t        j                  | | j                  dt               y )Nr  )r&  r  )r   r(  rH  rm   r   s    r   .test_catches_only_AttributeError_on_providedByzFTest_providedByFallback.test_catches_only_AttributeError_on_providedBy	  s    $$T4==6F/5	7r   c                 H    t        j                  | | j                  d       y )Nr  r%  r'  r   s    r   r+  zATest_providedByFallback.test_catches_only_AttributeError_on_class	  s     	$$$--+	?r   )r   r   r   r  rs   rH  rC  rG  rK  rO  rV  rZ  r^  r  r  r  r  r  r  r+  r  r  s   @r   r<  r<    s[    "
 (O3)-)-	&
&--47.(,-:/"b7
?r   r<  c                       e Zd Zd Zy)Test_providedByc                     ddl m} |S )Nr   r"  )r*   r@  )r   r@  s     r   rs   zTest_providedBy._getTargetClass	  r  r   Nr  r   r   r   r  r  	  s    r   r  c                   @    e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zy	)
*ObjectSpecificationDescriptorFallbackTestsc                     ddl m} |S )Nr   )%ObjectSpecificationDescriptorFallback)r*   r  )r   r  s     r   r  z<ObjectSpecificationDescriptorFallbackTests._getFallbackClass	  s    	244r   c                 .     | j                         |i |S r0   rv   rw   s      r   rz   z3ObjectSpecificationDescriptorFallbackTests._makeOne	  r{   r   c                     ddl m} ddlm}  |d      } G d d      } |||      |_        | j                         |_        | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)OObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr&   r   r   r   r'   r  	  r9   r   r'   )	r*   r  rL   r   r  rz   r  r+   rD   )r   r  r   r   r'   s        r   test_accessed_via_classzBObjectSpecificationDescriptorFallbackTests.test_accessed_via_class	  sX    8;f%	 	 $C.!]]_c001D6:r   c                    ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d             } |||      |_        | j                         |_         |       }| j                  t        |j                        |g       y )	Nr   r  r   r   r   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr&   r   r   r   r'   r  	  r(   r   r'   )
r*   r  r   rL   r   r  rz   r  r+   rD   )r   r  r   r   r   r   r'   r#   s           r   "test_accessed_via_inst_wo_provideszMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides	  s~    8;;f%f%	T		 	 
	 $C.!]]_ec001D6:r   c                 B   ddl m} ddl m} ddl m} ddlm}  |d      } |d      } |d      } ||       G d	 d
             } |||      |_        | j                         |_         |       }	 ||	|       | j                  t        |	j                        ||g       y )Nr   r  r  r   r   r   r   r   c                       e Zd Zy)YObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr&   r   r   r   r'   r  
  r(   r   r'   )r*   r  r  r   rL   r   r  rz   r  r+   rD   )
r   r  r  r   r   r   r   r   r'   r#   s
             r   !test_accessed_via_inst_w_provideszLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides
  s    8@;;f%f%f%	T		 	 
	 $C.!]]_ed#c001D$<@r   c                       G d dt                G  fdd      } |       } j                        5  t        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)vObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr&   r   r   r   MyExceptionr  
  r9   r   r  c                   D    e Zd ZW j                         Ze fd       Zy)nObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                     r0   r   )r   r  s    r   r  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__#
  s	    !!r   Nr   r   r   rz   r  r]  r  )r  r   s   r   r'   r   
  s     !]]_N" "r   r'   r  )	Exceptionr   r  )r   r'   r#   r  s   `  @r   6test_arbitrary_exception_accessing_provides_not_caughtzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught
  sP    	) 		" 	" e{+ 	+C)*	+ 	+ 	+s   AAc                       G d dt               } G  fdd      } |       }t        |d      } j                  |       y )Nc                       e Zd Zy)mObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr&   r   r   r   r  r  -
  r9   r   r  c                   @    e Zd ZW  j                         Zed        Zy)eObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                     t         r0   )r  r   s    r   r  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__3
  s    $$r   Nr  r   s   r   r'   r  0
  s     !]]_N% %r   r'   r  )r  r  assertIsNotNone)r   r  r'   r#   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught+
  s=    	) 		% 	% e3 01X&r   c                     ddl m} ddl m}  G d d|      } ||       G d d             }| j                         |_        t         |       d      }| j                  |       y )	Nr   rJ   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr&   r   r   r   r   r  ?
  r9   r   r   c                       e Zd Zed        Zy)YObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                      y r0   r   r   s    r   r  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__E
  s    r   N)r   r   r   r]  r  r   r   r   r'   r  B
  s      r   r'   r  )r   rK   r   rz   r  r  rg   )r   rK   r   r   r'   r  s         r   !test_None_in__provides__overrideszLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides;
  s_    ,.	9 	 
T		 	 
	 "]]_35"23(#r   N)r   r   r   r  rs   rz   r  r  r  r  r  r  r   r   r   r  r  	  s2    5 (O3
;; A&+ ' $r   r  c                       e Zd Zd Zy)"ObjectSpecificationDescriptorTestsc                     ddl m} |S )Nr   )ObjectSpecificationDescriptor)r*   r  )r   r  s     r   rs   z2ObjectSpecificationDescriptorTests._getTargetClassV
  s    M,,r   Nr  r   r   r   r  r  O
  s    -r   r  c                       e Zd Zd Zd Zd Zy)r3  c                     || _         |D ci c]  }|t        ||       c}| _        |j                         D ]  \  }}t	        |||        y c c}w r0   )moduler  
to_restoreitemsr  )r   r  ry   keyrS  s        r   r)  z_Monkey.__init__`
  sR    @BC3 44C((* 	(JCFC'	( Ds   Ac                     | S r0   r   r   s    r   	__enter__z_Monkey.__enter__f
  s    r   c                 v    | j                   j                         D ]  \  }}t        | j                  ||        y r0   )r  r  r  r  )r   exc_typeexc_valexc_tbr  rS  s         r   __exit__z_Monkey.__exit__i
  s2    ////1 	-JCDKKe,	-r   Nr   r   r   r)  r  r  r   r   r   r3  r3  ^
  s    (-r   r3  c                       e Zd Zd Zd Zd Zy)rf  c                     || _         t        ||      | _        | j                  j                         | _        | j                  j                          | j                  j                  |       y r0   )r  r  targetcopyr  clearupdate)r   r  attrnamery   s       r   r)  z_MonkeyDict.__init__q
  sM    fh/++**,2r   c                     | j                   S r0   )r  r   s    r   r  z_MonkeyDict.__enter__x
  s    {{r   c                     | j                   j                          | j                   j                  | j                         y r0   )r  r  r  r  )r   r  r  r  s       r   r  z_MonkeyDict.__exit__{
  s(    4??+r   Nr  r   r   r   rf  rf  n
  s    ,r   rf  )/r  unittestr  r   r   r   #zope.interface.tests.test_interfacer   r   TestCaser   r<   rq   r   r   rD  r  r  r%  r8  rl  rq  r{  r  r  r  r  r,  r<  rZ  re  ry  r  r  r  r  r  r  r  r  r8  r<  r  r  r  r3  rf  r   r   r   <module>r     s    1 6 2& ( 
""  
F7(H-- 7(tH9, H9V@,4 @,F{86&&{8|c"!2!2 c"L3.'% '%T/43X5F5F /4dn
/1B1B n
b/ 4 /
h// 
2AD+ ADH >4  >F91** 91x#1 #LG
H-- G
T #H%%  #F:AH-- :Az)
)) )
X<@H-- <@~4HX%6%6 4Hn)")"#=** #=L*1 *ZM
H-- M
`3;h// 3;l
H%% 
49(++ 9xx=(*;*; x=v&"E"7&~?h// ~?B-+m$1B1B m$`	-2	-- - , ,r   