
    i4                       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 ddlm	Z	  ed          Z
 ed	          Z G d
 d          Z G d d          Z G d d          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 d0 d1e          Z  G d2 d3ej                  Z! G d4 d5ej                  Z" G d6 d7ej                  Z# G d8 d9ej                  Z$ G d: d;ej                  Z% G d< d=ej                  Z& G d> d?ee&e          Z' G d@ dAej                  Z( G dB dCe(          Z) G dD dEej                  Z* G dF dGej                  Z+ G dH dIej                  Z, G dJ dKej                  Z- G dL dMej                  Z. G dN dOe.e          Z/ G dP dQej                  Z0 G dR dSe0e          Z1 G dT dUej                  Z2 G dV dWe2ee          Z3 G dX dY          Z4 G dZ d[          Z5dS )\z@Test the new API for making and checking interface declarations
    N)InterfaceClass)MissingSomeAttrs)OptimizationTestMixin)SubclassableMixin)!NameAndModuleComparisonTestsMixinIBarIFooc                       e Zd ZdS )FooN__name__
__module____qualname__     Q/usr/local/lib/python3.11/dist-packages/zope/interface/tests/test_declarations.pyr   r   !   s        Dr   r   c                       e Zd ZdZdS )FooImplementedNoneNr   r   r   __implemented__r   r   r   r   r   %   s        OOOr   r   c                       e Zd ZdZd ZdS )	FooNoCallNc                     t                      NNotImplementedErrorselfs    r   __call__zFooNoCall.__call__,   s    !###r   )r   r   r   r   r   r   r   r   r   r   )   s(        O$ $ $ $ $r   r   c                       e Zd Z	 ddZdS )_Py3ClassAdviceTc                 "   dd l }|                    d          5 }|                                 	 t          |||           |r|                     d           n# t
          $ r Y d d d            dS w xY w	 d d d            d S # 1 swxY w Y   d S )Nr   T)recordzDidn't raise TypeErrorF)warningscatch_warningsresetwarningsexecfail	TypeError)r   codeglobslocsfails_under_py3kr$   _s          r   _run_generated_codez#_Py3ClassAdvice._run_generated_code2   s    	$$D$11 
	Q""$$$8T5$''' $ 8II6777	    
	 
	 
	 
	 
	 
	 
	 
	

 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s4   BAB
A3$B2A33BBBN)T)r   r   r   r/   r   r   r   r!   r!   0   s-         37     r   r!   c                        e Zd Zd Zd Zd ZdS )
NamedTestsc                     ddl m}  |d           G d d                      }|                     |j        d           d S )Nr   namedfooc                       e Zd ZdS )"NamedTests.test_class.<locals>.FooNr   r   r   r   r   r7   I           Dr   r   zope.interface.declarationsr4   assertEqual__component_name__)r   r4   r   s      r   
test_classzNamedTests.test_classF   sz    555555	u	 	 	 	 	 	 	 
	 	"E	
 	
 	
 	
 	
r   c                 p    ddl m}  |d          d             }|                     |j        d           d S )Nr   r3   r5   c                     t                      r   r   )os    r   doFooz'NamedTests.test_function.<locals>.doFooT   s    %'''r   r9   )r   r4   rA   s      r   test_functionzNamedTests.test_functionQ   sV    555555	u	( 	( 
	( 	1599999r   c                     ddl m}  G d d          } |            }  |d          |           |                     |j        d           d S )Nr   r3   c                       e Zd ZdS )%NamedTests.test_instance.<locals>.FooNr   r   r   r   r   rE   ]           Dr   r   r5   r9   )r   r4   r   r5   s       r   test_instancezNamedTests.test_instanceZ   s    555555	 	 	 	 	 	 	 	ceeeS"E	
 	
 	
 	
 	
r   N)r   r   r   r=   rB   rG   r   r   r   r1   r1   D   sA        	
 	
 	
: : :

 

 

 

 

r   r1   c                   J    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S )EmptyDeclarationTestsc                 "    ddl m}  |            S Nr   )Declarationr:   rL   r   rL   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyk   s     ;;;;;;{}}r   c                 t    |                                  }|                     t          |          g            d S r   )rO   r;   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___emptyo   s3    ~~dR(((((r   c                     ddl m} |                                 }|                     t	          |                                          |g           d S Nr   	Interface)zope.interface.interfacerX   rO   r;   rQ   	flattenedr   rX   rS   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_emptys   sS    666666~~dnn..//)=====r   c                 f    ddl m} |                                 }|                     ||           d S rV   )rY   rX   rO   assertNotInr[   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___emptyx   s?    666666~~D)))))r   c                     ddl m} |                                 }|                     |                    |                     |                     |                    |d                     d S )Nr   rW   Tstrict)rY   rX   rO   
assertTrueextendsr[   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_empty}   si    666666~~Y//000Yt<<=====r   c                     |                                  }t          |                                          }|                     |g            d S r   )rO   rQ   
interfacesr;   )r   rS   
iface_lists      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_empty   sD    ~~$//++,,
R(((((r   c                 t    ddl m} |                                 }|                     |j        ||f           d S rV   )rY   rX   rO   r;   __sro__r[   s      r   test___sro___z#EmptyDeclarationTests.test___sro___   sF    666666~~i'9:::::r   c                 r    ddl m} |                                 }|                     |j        |f           d S rV   )rY   rX   rO   r;   __iro__r[   s      r   test___iro___z#EmptyDeclarationTests.test___iro___   sC    666666~~	|44444r   c                    |                                  }|                     |                    d                     |                     |                    dd          d           |                     |j                   d S )Nattrabcdef)rO   assertIsNonegetr;   assertFalse_v_attrsrR   s     r   test_getzEmptyDeclarationTests.test_get   ss    ~~$((6**+++%//777 	'''''r   c                     |                                  }t                      |_        |                    |           |                     |j                   d S r   )rO   objectrw   changedrv   rR   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   sJ    ~~T'''''r   N)r   r   r   rO   rT   r\   r_   re   ri   rl   ro   rx   r|   r   r   r   rI   rI   g   s          ) ) )> > >
* * *
> > >) ) )
; ; ;
5 5 5
( ( (( ( ( ( (r   rI   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dS )DeclarationTestsc                     ddl m} |S rK   rM   rN   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;;;;;;r   c                 6     |                                  |i |S r   r   r   argskws      r   _makeOnezDeclarationTests._makeOne   #    %t##%%t2r222r   c                 ~    |                                  }|                     t          |j                  g            d S r   )r   r;   rQ   	__bases__rR   s     r   test_ctor_no_basesz#DeclarationTests.test_ctor_no_bases   s5    }}dn--r22222r   c                     t          d          }|                     |          }|                     t          |j                  |g           d S Nr	   )r   r   r;   rQ   r   r   r	   rS   s      r   test_ctor_w_interface_in_basesz/DeclarationTests.test_ctor_w_interface_in_bases   sH    f%%}}T""dn--v66666r   c                     ddl m}  |            }|                     |          }|                     t	          |j                  |g           d S Nr   
Implements)r:   r   r   r;   rQ   r   )r   r   implrS   s       r   test_ctor_w_implements_in_basesz0DeclarationTests.test_ctor_w_implements_in_bases   sX    ::::::z||}}T""dn--v66666r   c                     |                                  }|                    |           |                     |j                   d S r   )r   r{   rt   rw   rR   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s=    }}T$-(((((r   c                 Z    |                                  }|                     ||           d S r   )r   r^   rR   s     r   test___contains__w_selfz(DeclarationTests.test___contains__w_self   s+    }}t$$$$$r   c                 x    t          d          }|                                 }|                     ||           d S r   )r   r   r^   r   s      r   "test___contains__w_unrelated_ifacez3DeclarationTests.test___contains__w_unrelated_iface   s8    f%%}}t$$$$$r   c                 z    t          d          }|                     |          }|                     ||           d S r   )r   r   assertInr   s      r   !test___contains__w_base_interfacez2DeclarationTests.test___contains__w_base_interface   s:    f%%}}T""dD!!!!!r   c                     t          d          }|                     |          }|                     t          |          |g           d S r   r   r   r;   rQ   r   s      r   test___iter___single_basez*DeclarationTests.test___iter___single_base   sD    f%%}}T""ddV,,,,,r   c                     t          d          }t          d          }|                     ||          }|                     t          |          ||g           d S Nr	   r   r   r   r	   r   rS   s       r   test___iter___multiple_basesz-DeclarationTests.test___iter___multiple_bases   sU    f%%f%%}}T4((ddD\22222r   c                     t          d          }t          d|f          }|                     |          }|                     t          |          |g           d S r   r   r   s       r   test___iter___inheritancez*DeclarationTests.test___iter___inheritance   sU    f%%ftg..}}T""ddV,,,,,r   c                     t          d          }t          d          }|                     |||f          }|                     t          |          ||g           d S r   r   r   s       r   'test___iter___w_nested_sequence_overlapz8DeclarationTests.test___iter___w_nested_sequence_overlap   sY    f%%f%%}}TD$<00ddD\22222r   c                     ddl m} t          d          }|                     |          }|                     t          |                                          ||g           d S )Nr   rW   r	   rY   rX   r   r   r;   rQ   rZ   )r   rX   r	   rS   s       r   test_flattened_single_basez+DeclarationTests.test_flattened_single_base   se    666666f%%}}T""dnn..//$	1BCCCCCr   c                     ddl m} t          d          }t          d          }|                     ||          }|                     t          |                                          |||g           d S Nr   rW   r	   r   r   r   rX   r	   r   rS   s        r   test_flattened_multiple_basesz.DeclarationTests.test_flattened_multiple_bases   sv    666666f%%f%%}}T4((dnn..//$i1HIIIIIr   c                     ddl m} t          d          }t          d|f          }|                     |          }|                     t          |                                          |||g           d S r   r   r   s        r   test_flattened_inheritancez+DeclarationTests.test_flattened_inheritance   sx    666666f%%ftg..}}T""dnn..//$i1HIIIIIr   c                     ddl m} t          d          }t          d          }|                     |||f          }|                     t          |                                          |||g           d S r   r   r   s        r   (test_flattened_w_nested_sequence_overlapz9DeclarationTests.test_flattened_w_nested_sequence_overlap   s|    666666f%%f%%
 }}TD$<00dnn..//$i1HIIIIIr   c                    t          d          }t          d          }|                     |          }||z
  }|                     ||                                            |                     t          |          |g           d S r   r   r   assertIsInstancer   r;   rQ   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                     t          d          }|                     |          }||z
  }|                     t          |          g            d S r   r   )r   r	   r   r   s       r   test___sub___related_interfacez/DeclarationTests.test___sub___related_interface  sK    f%%t$$eb)))))r   c                     t          d          }t          d|f          }|                     |          }||z
  }|                     t          |          g            d S r   r   r   s        r   -test___sub___related_interface_by_inheritancez>DeclarationTests.test___sub___related_interface_by_inheritance  s\    f%%ftg..t$$eb)))))r   c                    t          d          }t          d          }|                     |          }||z   }|                     ||                                            |                     t          |          ||g           d S r   r   r   s        r    test___add___unrelated_interfacez1DeclarationTests.test___add___unrelated_interface  s~    f%%f%%t$$eT%9%9%;%;<<<etTl33333r   c                    t          d          }t          d          }t          d          }|                     ||          }|                     ||          }||z   }|                     t          |          |||g           d S )Nr	   r   IBazr   )r   r	   r   r   r   otherr   s          r   test___add___related_interfacez/DeclarationTests.test___add___related_interface   s    f%%f%%f%%tT**dD))etT4&899999r   c                    ddl m} ddl m} ddlm} t          d          }t          d|f          } ||j        j        d          5  |                     |          }||z   }d d d            n# 1 swxY w Y   | 	                    |j
        |||f           | 	                    |j        ||f           | 	                    t          |          ||g           d S )Nr   rW   ro	C3SettingIBaseIDerivedT)zope.interfacerX   r   zope.interface.tests.test_ror   r   C3
STRICT_IROr   r;   rn   r   rQ   )r   rX   r   r   r   r   baser   s           r   "test___add___overlapping_interfacez3DeclarationTests.test___add___overlapping_interface)  sC    	-,,,,,%%%%%%::::::w''!*uh77Yru'.. 	$ 	$==''D8OE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	5)(DEEE8U*;<<<ex&788888s   	A00A47A4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            n# 1 swxY w Y   | 	                    |	j
        |	|||f           | 	                    |	j        ||f           | 	                    t          |	          ||g           d S )Nr   rW   implementedByimplementerr   r   c                       e Zd ZdS )PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr   r   r   r   r   r   I  rF   r   r   c                       e Zd ZdS )SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr   r   r   r   r   r   L  rF   r   r   c                       e Zd ZdS )ODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr   r   r   r   Baser   O  r8   r   r   T)r   rX   r   r   r   r   r   r   r   r;   rk   r   rQ   )
r   rX   r   r   r   r   r   r   r   r   s
             r   0test___add___overlapping_interface_implementedByzADeclarationTests.test___add___overlapping_interface_implementedBy>  s   
 	-,,,,,000000......%%%%%%::::::	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	 	 	 
		 Yru'.. 	3 	3!M$''(2E	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	%(KLLL8U*;<<<ex&788888s   /B

BBN)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   r   r   r   r   r   r~   r~      s         3 3 33 3 37 7 7
7 7 7) ) )
% % %% % %
" " "
- - -
3 3 3- - -3 3 3D D DJ J JJ J J
J 
J 
J. . .* * ** * *4 4 4: : :9 9 9*9 9 9 9 9r   r~   c                   P    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S )TestImmutableDeclarationc                     ddl m} |S )Nr   )_ImmutableDeclaration)r:   r   )r   r   s     r   r   z(TestImmutableDeclaration._getTargetClass]  s    EEEEEE$$r   c                     ddl m} |S )Nr   )_empty)r:   r   )r   r   s     r   rO   z"TestImmutableDeclaration._getEmptya  s    666666r   c                     dd l }|                    |                    |                                                     }|                     ||                                            d S )Nr   )pickleloadsdumpsrO   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_picklee  sV    fll4>>+;+;<<==fdnn../////r   c                     |                       |                                             |                                            d S r   )r   r   rO   r   s    r   test_singletonz'TestImmutableDeclaration.test_singletonj  sF    "D  ""$$NN	
 	
 	
 	
 	
r   c                 `    |                      |                                 j        d           d S )Nr   )r;   rO   r   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__p  s+    ))3R88888r   c                 
   |                                  }d|_        |                     |                                  j        d           |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nr   )   )rO   r   r;   assertRaisesr)   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__s  s      ))3R888y)) 	# 	#"EO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   #A88A<?A<c                     |                                  }|j        }|                     i |           d|d<   |                     i |j                   d S )N   r   )rO   
dependentsr;   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependents{  sW      T"""QU-.....r   c                 T    |                                                      d            d S r   )rO   r{   r   s    r   test_changedz%TestImmutableDeclaration.test_changed  s&      &&&&&r   c                 j   |                      |                                                     |                      |                      |                                                     | d                     |                      |                                                     | d                     d S )NTra   F)rv   rO   rd   r   s    r   test_extends_always_falsez2TestImmutableDeclaration.test_extends_always_false  s    ))11$77888))11$t1DDEEE))11$u1EEFFFFFr   c                     |                      |                                                     d                     |                     |                                                     dd          d           d S )Nname*   )rt   rO   ru   r;   r   s    r   test_get_always_defaultz0TestImmutableDeclaration.test_get_always_default  sd    $..**..v66777))--fb992>>>>>r   c                    |                                  }|                     |j        i            d|j        d<   |                     |j        i            |                     |                    d                     i x}|_        d|d<   |                     |j        i            |                     |                    d                     d S )Nr  rq   )rO   r;   rw   rt   ru   )r   rS   attrss      r   test_v_attrsz%TestImmutableDeclaration.test_v_attrs  s    ~~+++ "f+++$((6**+++ ""f+++$((6**+++++r   N)r   r   r   r   rO   r   r   r   r   r   r   r   r  r  r   r   r   r   r   [  s        % % %  0 0 0

 
 
9 9 9# # #/ / /' ' 'G G G
? ? ?, , , , ,r   r   c                   J    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S )TestImplementsc                     ddl m} |S r   )r:   r   )r   r   s     r   r   zTestImplements._getTargetClass      ::::::r   c                 6     |                                  |i |S r   r   r   s      r   r   zTestImplements._makeOne  r   r   c                 >    ddl m}  G d d          } ||          S )Nr   r   c                       e Zd ZdS )+TestImplements._makeOneToCompare.<locals>.ANr   r   r   r   Ar    rF   r   r  r:   r   )r   r   r  s      r   _makeOneToComparez TestImplements._makeOneToCompare  sN    ======	 	 	 	 	 	 	 	 }Qr   c                     |                                  }|                     |j        d            |                     |j        d           |                     |j        d           |                     t          |j                  g            d S )Nr   ?)r   r;   inheritdeclaredr   rQ   r   r   r   s     r   r   z!TestImplements.test_ctor_no_bases  s}    }}t,,,+++,,,dn--r22222r   c                     |                                  }d|_        |                     t          |          d           d S )NTestingzclassImplements(Testing))r   r   r;   reprr  s     r   test___repr__zTestImplements.test___repr__  s9    }}!d%?@@@@@r   c                     ddl m} |                                 }|                     |                                |df           d S )Nr   r   r   )r:   r   r   r;   
__reduce__)r   r   r   s      r   test___reduce__zTestImplements.test___reduce__  sL    ======}}**]G,DEEEEEr   c                    ddl m}  G d d          } G d d          }t          d          }|                      ||           ||                     |                     t	           ||                    t	           ||                               |                      ||          d            |                     d  ||                     |                      ||           ||                     |                      ||          |           |                      ||           ||                     |                      ||          |           | 	                     ||          |           d S )Nr   r   c                       e Zd ZdS )#TestImplements.test_sort.<locals>.ANr   r   r   r   r  r    rF   r   r  c                       e Zd ZdS )#TestImplements.test_sort.<locals>.BNr   r   r   r   Br!    rF   r   r"  r	   )
r:   r   r   r;   hash
assertLessassertGreaterassertLessEqualassertGreaterEqualassertNotEqual)r   r   r  r"  r	   s        r   	test_sortzTestImplements.test_sort  s   ======	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 f%%q))==+;+;<<<mmA..//mmA6F6F1G1GHHHa(($///M!	
 	
 	
 	a((--*:*:;;;==++T222]]1--}}Q/?/?@@@a 0 0$777MM!,,d33333r   c                 .   ddl m}  G d d          } G d d          } G d d          } ||          } ||          } ||          }|                     ||           |                     ||           |                     ||           |                     ||           |                     ||           |                     ||           |                     ||           |                     ||           |                     ||           d S )	Nr   r   c                   &    e Zd Zd Zd Zd Zd ZdS )1TestImplements.test_proxy_equality.<locals>.Proxyc                     || _         d S r   _wrapped)r   wrappeds     r   __init__z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__  s     'r   c                     t                      r   r   r   r   s     r   __getattr__z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__      )+++r   c                     | j         |k    S r   r.  r   r   s     r   __eq__z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__      }--r   c                     | j         |k    S r   r.  r7  s     r   __ne__z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__  r9  r   N)r   r   r   r1  r4  r8  r;  r   r   r   Proxyr,    sP        ( ( (, , ,. . .. . . . .r   r<  c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.ANr   r   r   r   r  r>    rF   r   r  c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.BNr   r   r   r   r"  r@    rF   r   r"  )r:   r   r;   r(  )r   r   r<  r  r"  implementedByAimplementedByBproxys           r   test_proxy_equalityz"TestImplements.test_proxy_equality  s   ======	. 	. 	. 	. 	. 	. 	. 	.	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 'q))&q))n%% 		
 	
 	
 	NN;;;NN;;;////////////E>222NE22222r   c                 p   |                                  }|                     |j                   |                     d|j                   d|_        |                     d|j                   |                    d            |                     |j                   |                     d|j                   d S )N_super_cacher  )r   rt   rF  r^   __dict__r   r{   r  s     r    test_changed_deletes_super_cachez/TestImplements.test_changed_deletes_super_cache  s    }}$+,,,777ndm444T$+,,,77777r   c                 ,   |                                  }|                     |j                   |                     d|j                   |                    d            |                     |j                   |                     d|j                   d S )NrF  )r   rt   rF  r^   rG  r{   r  s     r   %test_changed_does_not_add_super_cachez4TestImplements.test_changed_does_not_add_super_cache  s    }}$+,,,777T$+,,,77777r   N)r   r   r   r   r   r  r   r  r  r)  rD  rH  rJ  r   r   r   r  r    s          3 3 3     3 3 3A A A
F F F
4 4 40*3 *3 *3X
8 
8 
88 8 8 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:   rN  )r   rN  s     r   r   z*Test_implementedByFallback._getTargetClass  s    EEEEEE$$r   c                 6     |                                  |i |S r   r   r   s      r   _callFUTz#Test_implementedByFallback._callFUT$  r   r   c                      G d d          } |            }d |_         |                     t          |                     |                    g            d S )Nc                       e Zd ZdZdS )]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foor   Nr   r   r   	__slots__r   r   r   r   rS  (          ,IIIr   r   )r   r;   rQ   rP  r   r   r5   s      r   5test_dictless_wo_existing_Implements_wo_registrationszPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations'  sm    	- 	- 	- 	- 	- 	- 	- 	-cee"dmmC0011266666r   c                 v     G d d          } |            }|                      t          | j        |           d S )Nc                   8    e Zd Zd Zd Z eee          Zd ZdS )hTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                     t                      r   r   r   s    r   	_get_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_impl1  r5  r   c                     t           r   )r)   )r   vals     r   	_set_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_impl4  s    r   c                     t                      r   r   r   s    r   r   zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__9  s    )+++r   N)r   r   r   r^  ra  propertyr   r   r   r   r   r   r\  0  sT        , , ,      'hy)<<O, , , , ,r   r   r   r)   rP  rX  s      r   @test_dictless_wo_existing_Implements_cant_assign___implemented__z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.  sW    	, 	, 	, 	, 	, 	, 	, 	, cee)T]C88888r   c                    ddl m}  G d d          } |            }d |_        t                      }t	          |d          5 }|||<   |                     |                     |          |           d d d            d S # 1 swxY w Y   d S )Nr   declarationsc                       e Zd ZdZdS )\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.FoorT  NrU  r   r   r   r   rj  C  rW  r   r   #BuiltinImplementationSpecifications)r   rh  r   rz   _MonkeyDictr   rP  )r   rh  r   r5   regspecss         r   4test_dictless_wo_existing_Implements_w_registrationszOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations@  s    //////	- 	- 	- 	- 	- 	- 	- 	- cee"hh>@ @ 	3CHE#JMM$--,,c222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   /A??BBc                     ddl m}  |            } G d d          } |            }||_        |                     |                     |          |           d S )Nr   r   c                       e Zd ZdZdS )KTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorT  NrU  r   r   r   r   rr  R  rW  r   r   )r:   r   r   r   rP  )r   r   r   r   r5   s        r   #test_dictless_w_existing_Implementsz>Test_implementedByFallback.test_dictless_w_existing_ImplementsN  s    ::::::z||	- 	- 	- 	- 	- 	- 	- 	- cee"dmmC(($/////r   c                      G d d          } |            }t          d          }|f|_        |                     t          |                     |                    |g           d S )Nc                       e Zd ZdZdS )OTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.FoorT  NrU  r   r   r   r   rv  [  rW  r   r   r	   )r   r   r;   rQ   rP  )r   r   r5   r	   s       r   'test_dictless_w_existing_not_ImplementszBTest_implementedByFallback.test_dictless_w_existing_not_ImplementsY  s    	- 	- 	- 	- 	- 	- 	- 	- ceef%%#gdmmC0011D6:::::r   c                     ddl m}  |             G fdd          }|                     |                     |                     d S )Nr   r   c                       e Zd Z ZdS )JTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   s   r   r   rz  g          "OOOr   r   r:   r   r   rP  r   r   r   r   s      @r   "test_w_existing_attr_as_Implementsz=Test_implementedByFallback.test_w_existing_attr_as_Implementsc  z    ::::::z||	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	dmmC(($/////r   c                    ddl m} ddlm} t	          |d          5 }|                     t          |                     t                              g            |                     t          |                     t                              g            |                     t          |                     t                              g            t          t          t          fD ]L}||         }| 
                    ||           |                     t          |          d|j        d           M	 d d d            d S # 1 swxY w Y   d S )Nr   rg  r   rk  classImplements())r   rh  r:   r   rl  r;   rQ   rP  tupledictr   r  r   )r   rh  r   rn  typspecs         r   test_builtins_added_to_cachez7Test_implementedByFallback.test_builtins_added_to_cachel  s   //////::::::>@ @ 
	4CHT$--"6"677<<<T$--"5"566;;;T$--"5"566;;;tT* 4 4Sz%%dJ777  d$'LLL"34 4 4 44
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4s   DD>>EEc                    ddl m} t                      t                      t                      }}}t          |d          5 }||t          <   ||t
          <   ||t          <   |                     |                     t                    |           |                     |                     t
                    |           |                     |                     t                    |           d d d            d S # 1 swxY w Y   d S )Nr   rg  rk  )	r   rh  rz   rl  r  rQ   r  r   rP  )r   rh  t_specl_specd_specrn  s         r   test_builtins_w_existing_cachez9Test_implementedByFallback.test_builtins_w_existing_cache{  s!   //////!'688VXX>@ @ 	7CH!E%L E$K E$KMM$--..777MM$----v666MM$----v666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   B)C77C;>C;c                      G d d          }|                      t          |                     |                    g            d S )Nc                       e Zd ZdS )ITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr   r   r   r   r   r    rF   r   r   r;   rQ   rP  r   r   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertions  \    	 	 	 	 	 	 	 	 	dmmC0011266666r   c                      G d d          }|                      t          |                     |                    g            d S )Nc                       e Zd ZdS ):Test_implementedByFallback.test_no_assertions.<locals>.FooNr   r   r   r   r   r    rF   r   r   r  r  s     r   test_no_assertionsz-Test_implementedByFallback.test_no_assertions  r  r   c                 v     G d d          } |            }|                      t          | j        |           d S )Nc                       e Zd ZdZdS )HTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNr   r   r   r   r   r    s        "OOOr   r   rd  rX  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factory  sW    	# 	# 	# 	# 	# 	# 	# 	# cee)T]C88888r   c                 x   ddl m} ddlm}  |            }d|_        |                     |          }|                     |j        d           |                     |j        |           |                     |j	        |           |                     |j
        |           |                     d|j                   d S )Nr   )objectSpecificationDescriptor)r   r5   z*zope.interface.tests.test_declarations.foo__provides__)r:   r  &zope.interface.tests.test_declarationsr   r   rP  r;   r   r  r   __providedBy__r^   rG  )r   r  r   r5   r  s        r   test_w_None_no_bases_w_factoryz9Test_implementedByFallback.test_w_None_no_bases_w_factory  s    MMMMMMDDDDDDikk}}S!!E	G 	G 	GdlC(((c)4000 =	
 	
 	
 	66666r   c                    ddl m} ddlm} |                     |          }|                     |j        d           |                     |j        |           |                     |j	        |           | 
                    |j        |           | 
                    |j        |           |                     |j        |j                   d S )Nr   ClassProvides)r   z9zope.interface.tests.test_declarations.FooImplementedNone)r:   r  r  r   rP  r;   r   r   r  r   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    ======MMMMMM}}/00MG	I 	I 	I 	dl$6777(8$???-}	
 	
 	
 	+]	
 	
 	
 	+-?-N	
 	
 	
 	
 	
r   c                     ddl m}  |             G fdd          }|                     |                     |                     d S )Nr   r   c                       e Zd Z ZdS )BTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNr   r{  s   r   r   r    r|  r   r   r}  r~  s      @r   test_w_existing_Implementsz5Test_implementedByFallback.test_w_existing_Implements  r  r   c                    ddl m} ddlm}  G d d|          } G d d|          } ||           G d d	                      } ||           G d
 d|                      }|                     t          |                     |                    ||g           t          ||          }|                     t          |                     |                    |g           d S )Nr   rW   r   c                       e Zd ZdS )STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )RTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )UTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   Derivedr    r8   r   r  r   rX   r:   r   r;   rQ   rP  super	r   rX   r   r   r   r   r  sup	__class__s	           r   )test_super_when_base_implements_interfacezDTest_implementedByFallback.test_super_when_base_implements_interface  sm   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	 	 	 
		 
X			 	 	 	 	d 	 	 
		 	dmmG4455%7HIIIGW%%dmmC001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||                      }|                     t          |                     |                    ||g           t          ||          }	|                     t          |                     |	                    |g           d S )Nr   rW   r   c                       e Zd ZdS )[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )ZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr   r   r   r   Child1r    rF   r   r  c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr   r   r   r   Child2r    rF   r   r  c                       e Zd ZdS )]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r  r    r8   r   r  r  )r   rX   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455%7HIIIGW%%dmmC001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          f           |                     t          |                     |                    ||g           t          ||          }	|                     |	          }
|                     t          |
          |g           | 
                    |
j                   d S )Nr   rW   r   c                       e Zd ZdS )]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr   r   r   r   r  r    rF   r   r  c                       e Zd ZdS )^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr   r   r   r   r  r    r8   r   r  c                       e Zd ZdS )_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr   r   r   r   r  r    r8   r   r  )r   rX   r:   r   r;   __mro__rz   rQ   rP  r  rt   _dependents)r   rX   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 	 	 
		 	OgvvtVD	
 	
 	
 	dmmG4455%7HII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|                      }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )Nr   rW   r   c                       e Zd ZdS )YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   r  #  rF   r   r   c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   r  &  rF   r   r   c                       e Zd ZdS )XTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   r  )  rF   r   r   c                       e Zd ZdS )[Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r  r  ,  r8   r   r  r  r  s	           r   /test_super_when_base_doesnt_implement_interfacezJTest_implementedByFallback.test_super_when_base_doesnt_implement_interface  sQ   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 		 	 	 	 	 	 	 	 
X			 	 	 	 	d 	 	 
		 	dmmG4455zBBBGW%%dmmC0011266666r   c                    ddl m} ddlm}  G d d|          } G d d|          } ||           G d d	                      }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )
Nr   rW   r   c                       e Zd ZdS )HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   r  9  rF   r   r   c                       e Zd ZdS )KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   r  <  rF   r   r   c                       e Zd ZdS )JTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r  r  ?  r8   r   r  r  )r   rX   r   r   r   r  r  r  s          r   test_super_when_base_is_objectz9Test_implementedByFallback.test_super_when_base_is_object5  s'   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
X			 	 	 	 	 	 	 
		 	dmmG4455zBBBGW%%dmmC001126666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	          |
|          }|                     t          |                     |                    |||||g           |                     t          |                     |                    |||g           |                     t          |                     |                    ||g           |                     t          |                     |                    |g           d S )Nr   rW   r   c                       e Zd ZdS )RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   r  L  rF   r   r   c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   IM1r  O  rF   r   r  c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   IM2r  R  rF   r   r  c                       e Zd ZdS )UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   r  U  rF   r   r   c                       e Zd ZdS )WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   
IUnrelatedr  X  rF   r   r  c                       e Zd ZdS )QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r  [  r8   r   r   c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   M1r  _  r8   r   r   c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   M2r  c  r8   r   r  c                       e Zd ZdS )TTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r  r  g  r8   r   r  r   rX   r:   r   r  r;   rQ   rP  r   rX   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_inheritanceH  s   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	) 	 	 		 	 	 	 	) 	 	 		 	 	 	 	u 	 	 		 	 	 	 	 	 	 	 
U			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
Xz	*	*	 	 	 	 	b" 	 	 
+	*	 7G$$B  B  dmmA..//"JUC@	B 	B 	BdmmB//00uc*	, 	, 	,dmmC0011u	' 	' 	'dmmC0011	" 	" 	" 	" 	"r   )r   r   r   r   _getFallbackClassrP  rY  re  ro  rs  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r  s   @r   rL  rL    s       % % %
 (3 3 37 7 79 9 9$3 3 3	0 	0 	0; ; ;0 0 04 4 4
7 
7 
77 7 77 7 79 9 97 7 7 
 
 
(0 0 0< < < < <,< < < < <8+ + + + +B7 7 7 7 7,7 7 7 7 7&/" /" /" /" /" /" /" /" /"r   rL  c                       e Zd Zd ZdS )Test_implementedByc                     ddl m} |S )Nr   r   r  )r   r   s     r   r   z"Test_implementedBy._getTargetClass~      ======r   Nr   r   r   r   r   r   r   r  r  z  s#            r   r  c                   2    e Zd ZdZd Zde dz   dfdZd ZdS )_ImplementsTestMixinTc                     t           r   r   )r   clsifaces      r   rP  z_ImplementsTestMixin._callFUT  s    !!r   Nz.Foo	not givenc                 :   ddl m} t          d          }|                     ||          }|                     ||           |j        }||                     ||           |                     |j        |           |dk    r|n|}|                     |j        |           |                     |j        |           | j	        rV| 
                    |j        |           | 
                    |j        |           |                     |j        |j                   ||fS )Nr   r  r	   r  )r:   r  r   rP  r   r   r;   r   r  FUT_SETS_PROVIDED_BYr   r  r  )	r   r   	orig_spec	spec_namer  r  r	   returnedr  s	            r   _check_implementerz'_ImplementsTestMixin._check_implementer  s/    	>=====f%%==d++h$$$" MM$	***"	$ 	$ 	$ K//##WdlG,,,c)4000$ 	C!!#"4mDDD!!#"2MBBBS-s/ABBBDyr   c                 J     G d d          }|                      |           d S )Nc                       e Zd ZdS ),_ImplementsTestMixin.test_class.<locals>.FooNr   r   r   r   r   r#    rF   r   r   )r   r  s     r   r=   z_ImplementsTestMixin.test_class  sF    	 	 	 	 	 	 	 	 	$$$$$r   )r   r   r   r  rP  r   r=   r   r   r   r  r    s\        " " "
 &*%-%6#.   4% % % % %r   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )Test_classImplementsOnlyFc                 *    ddl m}  |||           |S )Nr   )classImplementsOnly)r:   r'  )r   r  r  r'  s       r   rP  z!Test_classImplementsOnly._callFUT  s,    CCCCCCC'''
r   c                 r   ddl m} t          d          }t          d          } ||          |f_         G fdd          }|_        |                     ||           |                     |j                   |                     j        d            |                     j        |f           d S )Nr   r   r	   r   c                       e Zd Z ZdS )@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNr   r{  s   r   r   r*    r|  r   r   )	r:   r   r   r  r  rP  r   r   r;   r   r   r	   r   r   r   s        @r   r  z3Test_classImplementsOnly.test_w_existing_Implements  s    ::::::f%%f%%z$	# 	# 	# 	# 	# 	# 	# 	# 	# 	# c4   c)4000t,,,00000r   c                     ddl m} t          d          } ||           G fdd          }|                     |dd            d S )Nr   r   r   c                       e Zd Z ZdS )0Test_classImplementsOnly.test_class.<locals>.FooNr   )old_specs   r   r   r.    s        &OOOr   r   r  r  )r:   r   r   r   )r   r   r   r   r/  s       @r   r=   z#Test_classImplementsOnly.test_class  s    ::::::f%%:d##	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	XsDAAAAAr   c                     |                      t          dt          fi           d           \  }} G d d|          }|                     ||           |                     |                    |                     d S )Nr   r0  c                       e Zd ZdS )RTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr   r   r   r   Childr3    rF   r   r4  )r   typerz   rP  rc   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233333r   N)r   r   r   r  rP  r  r=   r6  r   r   r   r%  r%    sY           
1 1 1"B B B
4 
4 
4 
4 
4r   r%  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Test_classImplementsc                 T    ddl m}  |||          }|                     |           |S )Nr   classImplements)r:   r;  rt   )r   r  r  r;  results        r   rP  zTest_classImplements._callFUT  sE    ?????? 
 
 	&!!!
r   c                    |                      |          \  }} G d d|          }|                     ||          }|                     d|j                   |                     d|j                   |                     d|j                   |j        }|                     |j        d           |                     |j        |           | 	                    |
                     |                                 d S )Nc                       e Zd ZdS )ATest_classImplements.__check_implementer_redundant.<locals>.ChildNr   r   r   r   r4  r?    rF   r   r4  r   r  r  r   )r   rP  r   rG  r^   r   r;   r  r  rc   
providedBy)r   r   r   r4  r  r  s         r   __check_implementer_redundantz2Test_classImplements.__check_implementer_redundant  s    --d33e	 	 	 	 	D 	 	 	 ==..'):;;;)8+<===nh&7888$+++u---((1122222r   c                 J     G d d          }|                      |           d S )Nc                       e Zd ZdS )UTest_classImplements.test_redundant_implementer_empty_class_declarations.<locals>.FooNr   r   r   r   r   rD    rF   r   r   )2_Test_classImplements__check_implementer_redundantr  s     r   3test_redundant_implementer_empty_class_declarationszHTest_classImplements.test_redundant_implementer_empty_class_declarations  sF    	 	 	 	 	 	 	 	 	**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  |                     ||           | 	                    t           ||                    |g            G d	 d
|          }|                     ||           | 	                    t           ||                    |g           d d d            d S # 1 swxY w Y   d S )Nr   rW   r   r   r   c                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr   r   r   r   r   rI    rF   r   r   Fc                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr   r   r   r   BazrK            r   rL  )r   rX   r   r   r   r   r   r   rP  r;   rQ   )r   rX   r   r   r   r   rL  s          r   $test_redundant_implementer_Interfacez9Test_classImplements.test_redundant_implementer_Interface   s   ,,,,,,000000%%%%%%::::::	 	 	 	 	 	 	 	 Yru'// 	D 	DMM#y)))T--"4"455	{CCC    c    MM#y)))T--"4"455	{CCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   BCC"%C"c                 
    ||fS r   r   r   applied_firstapplied_seconds      r   _order_for_twoz#Test_classImplements._order_for_two  s    ~..r   c                    ddl m} t          d          }t          d          } ||          |f_         G fdd          }|_        |                     ||           |                     |j                   |                     j        |           |                     j        | 	                    ||                     d S )Nr   r   r	   r   c                       e Zd Z ZdS )<Test_classImplements.test_w_existing_Implements.<locals>.FooNr   r{  s   r   r   rV    r|  r   r   )
r:   r   r   r  r  rP  r   r   r;   rS  r+  s        @r   r  z/Test_classImplements.test_w_existing_Implements  s    ::::::f%%f%%z$	# 	# 	# 	# 	# 	# 	# 	# 	# 	# c4   c)4000s+++,,T488	: 	: 	: 	: 	:r   c                   	 ddl m} t          d          }t          d          }t          d|f          }|                    d|          	|f	_         G 	fdd          } G 	fd	d
          }|                    d|          |f_         G fdd||          }|_        |                     ||           |                     |j                   | 	                    j        |           | 	                    j        | 
                    ||                     | 	                    j        | 
                    ||          	fz              d S )Nr   r   IRootISecondRootIExtendsRootRootc                       e Zd Z ZdS )FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nr   	impl_roots   r   Root1r]  1          'OOOr   r`  c                       e Zd Z ZdS )FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nr   r^  s   r   Root2rc  4  ra  r   rd  ExtendsRoot1c                       e Zd Z ZdS )LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNr   )impl_extends_roots   r   ExtendsRootrg  :  s        /OOOr   ri  )r:   r   r   r4   r  r  rP  r   r   r;   rS  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_bases(  s   ::::::w''$]33%nuh??$$VU33	#X		( 	( 	( 	( 	( 	( 	( 	( 	( 	(	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ',,^\JJ&2_"	0 	0 	0 	0 	0 	0 	0% 	0 	0 	0 %0!k;///k13DEEE*2K@@@*3,,\;HH	J 	J 	J'k::i\I	
 	
 	
 	
 	
r   N)
r   r   r   rP  rE  rF  rN  rS  r  rj  r   r   r   r8  r8    s          3 3 3&0 0 0D D D&/ / /: : :$ 
  
  
  
  
r   r8  c                       e Zd Zd Zd ZdS )Test_classImplementsFirstc                 T    ddl m}  |||          }|                     |           |S )Nr   )classImplementsFirst)r:   rn  rt   )r   r  r  rn  r<  s        r   rP  z"Test_classImplementsFirst._callFUTM  sF    DDDDDD%%
 
 	&!!!
r   c                 
    ||fS r   r   rP  s      r   rS  z(Test_classImplementsFirst._order_for_twoU  s    ..r   N)r   r   r   rP  rS  r   r   r   rl  rl  K  s2          / / / / /r   rl  c                       e Zd Zd Zd ZdS )Test__implements_advicec                     ddl m}  ||i |S )Nr   )_implements_advice)r:   rs  )r   r   r   rs  s       r   rP  z Test__implements_advice._callFUT[  *    BBBBBB!!4.2...r   c                 H   ddl m} ddl m t          d           G fdd          }|                     |           |                     d|j                   |                     |j        |           | 	                    t          |j                  g           d S )Nr   r   r:  r	   c                       e Zd Z ffZdS )@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r   __implements_advice_data__)r	   r;  s   r   r   rw  d  s        +/'?)C&&&r   r   rx  )r:   r   r;  r   rP  r^   rG  r   r   r;   rQ   )r   r   r   r	   r;  s      @@r   test_no_existing_implementsz3Test__implements_advice.test_no_existing_implements_  s    ::::::??????f%%	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	c5s|DDD	
 	
 	
 	$%%v	
 	
 	
 	
 	
r   N)r   r   r   rP  ry  r   r   r   rq  rq  Y  s2        / / /
 
 
 
 
r   rq  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_implementerc                     ddl m} |S )Nr   r   )r:   r   )r   r   s     r   r   z Test_implementer._getTargetClasss  r   r   c                 6     |                                  |i |S r   r   r   s      r   r   zTest_implementer._makeOnew  r   r   c                 ,     | j         | } ||          S r   r   )r   r  ifaces	decorators       r   rP  zTest_implementer._callFUTz  s    !DM6*	y~~r   c                     t          d          }|                     |          }|                     t          |t	                                 d S r   )r   r   r   r)   rz   )r   r	   r  s      r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attr~  sB    f%%MM$''	)Y99999r   c                 ^   t          d          }ddlm}  |            }|                     |          } ||          }|                     ||           |j        }|                     |j        d           |                     |j	                   |                     |j        |           d S )Nr	   r   )r   z(zope.interface.tests.test_declarations.?)
r   r  r   r   r   r   r;   r   rt   r  )r   r	   r   r5   r  r  r  s          r   test_nonclass_can_assign_attrz.Test_implementer.test_nonclass_can_assign_attr  s    f%%>>>>>>ceeMM$''	9S>>h$$$"ME	
 	
 	
 	$,(((c)400000r   c                 x   dd l }t          d          }t          |                                          }t	          d          D ]%} G d d          }|                     ||           &|                                 t          |                                          }d}|                     |||z              d S )Nr   r	   il  c                       e Zd ZdS )HTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr   r   r   r   	TestClassr    rM  r   r  )gcr   lenget_objectsrangerP  collectr&  )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CCCCCr   N)	r   r   r   r   r   rP  r  r  r  r   r   r   r{  r{  q  ss          3 3 3  : : :
1 1 1D D D D Dr   r{  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_implementer_onlyc                     ddl m} |S )Nr   )implementer_only)r:   r  )r   r  s     r   r   z%Test_implementer_only._getTargetClass  s    @@@@@@r   c                 6     |                                  |i |S r   r   r   s      r   r   zTest_implementer_only._makeOne  r   r   c                 B    |                      |          } ||          S r   r  )r   r  r  r  s       r   rP  zTest_implementer_only._callFUT  s!    MM%((	y~~r   c                     t          d          }|                     |          }d }|                     t          ||           d S )Nr	   c                      t                      r   r   r   r   r   	_functionz6Test_implementer_only.test_function.<locals>._function      %'''r   )r   r   r   
ValueError)r   r	   r  r  s       r   rB   z#Test_implementer_only.test_function  sO    f%%MM$''		( 	( 	( 	*i;;;;;r   c                     t          d          }|                     |          } G d d          }|                     t          ||j                   d S )Nr	   c                       e Zd Zd ZdS ).Test_implementer_only.test_method.<locals>.Barc                     t                      r   r   r   s    r   _methodz6Test_implementer_only.test_method.<locals>.Bar._method  r5  r   N)r   r   r   r  r   r   r   Barr    s#        , , , , ,r   r  )r   r   r   r  r  )r   r	   r  r  s       r   test_methodz!Test_implementer_only.test_method  sj    f%%MM$''		, 	, 	, 	, 	, 	, 	, 	, 	*i=====r   N)r   r   r   r   r   rP  rB   r  r   r   r   r  r    s_             3 3 3  < < <> > > > >r   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ProvidesClassTestsc                     ddl m} |S Nr   ProvidesClassr:   r  r   r  s     r   r   z"ProvidesClassTests._getTargetClass  r  r   c                 6     |                                  |i |S r   r   r   s      r   r   zProvidesClassTests._makeOne  r   r   c                     t          d          } G d d          }|                     ||          }|                     t          |          |g           d S )Nr	   c                       e Zd ZdS )?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr   r   r   r   r   r    rF   r   r   r   r   r	   r   r  s       r   test_simple_class_one_interfacez2ProvidesClassTests.test_simple_class_one_interface  sp    f%%	 	 	 	 	 	 	 	 }}S$''ddV,,,,,r   c                     ddl m} t          d          } G d d          }|                     ||          }|                                \  }}|                     ||           |                     |||f           d S )Nr   Providesr	   c                       e Zd ZdS )/ProvidesClassTests.test___reduce__.<locals>.FooNr   r   r   r   r   r    rF   r   r   )r:   r  r   r   r  r   r;   )r   r  r	   r   r  klassr   s          r   r  z"ProvidesClassTests.test___reduce__  s    888888f%%	 	 	 	 	 	 	 	 }}S$''oo''teX&&&T{+++++r   c                     t          d          } G d d          }|                     ||          }||_        |                     |j        |           d S )Nr	   c                       e Zd ZdS )2ProvidesClassTests.test___get___class.<locals>.FooNr   r   r   r   r   r    rF   r   r   r   r   r  r   r  s       r   test___get___classz%ProvidesClassTests.test___get___class  sq    f%%	 	 	 	 	 	 	 	 }}S$''c&-----r   c                     t          d          } G d d          |                     |          }|_        fd}|                     t          |           d S )Nr	   c                       e Zd ZdS )5ProvidesClassTests.test___get___instance.<locals>.FooNr   r   r   r   r   r    rF   r   r   c                  &                 } | j         S r   )r  )r5   r   s    r   _testz7ProvidesClassTests.test___get___instance.<locals>._test  s    #%%C##r   )r   r   r  r   AttributeError)r   r	   r  r  r   s       @r   test___get___instancez(ProvidesClassTests.test___get___instance  s    f%%	 	 	 	 	 	 	 	 }}S$''	$ 	$ 	$ 	$ 	$ 	.%00000r   N)	r   r   r   r   r   r  r  r  r  r   r   r   r  r    sn          3 3 3- - -
, 
, 
,. . .1 1 1 1 1r   r  c                   $     e Zd Z fdZd Z xZS )ProvidesClassStrictTestsc                 j    t                                                       G fdd          }|S )Nc                       e Zd Z fdZdS )@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                 4                         | |d          S NT)	base_mrosrb   _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  r   )r   r  r  r  s     @r   r   z(ProvidesClassStrictTests._getTargetClass  sU    //11	 	 	 	 	 	 	] 	 	 	 r   c           	         ddl m} ddl m} ddl m}  G d d|          } ||           G d d                      }|                     ||          }|                     |j        | ||          | |t                    |f           d S )	Nr   rW   r   r   c                       e Zd ZdS )MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )LProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr   r   r   r   r   r     r8   r   r   )r   rX   r   r   r   r;   rk   rz   )r   rX   r   r   r   r   r  s          r   %test_overlapping_interfaces_correctedz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected  s    	-,,,,,000000......	 	 	 	 	I 	 	 	 
U			 	 	 	 	 	 	 
		 }}T5))M$M&!!(
 	 	 	 	 	r   r   r   r   r   r  r  r  s   @r   r  r    sG        	 	 	 	 	      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S )TestProvidesClassReprc                     ddl m} |S r  r  r  s     r   r   z%TestProvidesClassRepr._getTargetClass0  r  r   c                 6     |                                  |i |S r   r   r   s      r   r   zTestProvidesClassRepr._makeOne4  r   r   c                 J   t          d          }|j        dk    sJ |j        t          k    sJ t          |          dt           dk    sJ t          d          }|                     t          |           ||          }|                     t          |          d           d S )Nr	   z<InterfaceClass z.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))r   r   r   r  r   r5  r;   )r   r	   r   insts       r   test__repr__z"TestProvidesClassRepr.test__repr__7  s    f%%}&&&&(****Dzz@@@@@@@@f%%}}T$ZZt44JJA	
 	
 	
 	
 	
r   c                 f    ddl m} |j        }|                     t	          |          d           d S )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_useE  sN     	/.....%NN	
 	
 	
 	
 	
r   c                     dd l }ddlm} |j        }t	          |j        dz             D ]J}|                     |j                  5  |                    ||           d d d            n# 1 swxY w Y   Kd S )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_pickleQ  s    ......%62Q677 	. 	.E""6#788 . .Xu---. . . . . . . . . . . . . . .	. 	.s   A((A,	/A,	c                 l   dd l }ddlm} ddlm} ddlm} ddlm} ddlm} |j	        }|`	| 
                    t          |d|            |||           |j	        }|                     t          |          d            |||           |j	        }|                     t          |          d	           dd
lm}	 t          |	d          rJ  ||	||           | 
                    t           |	d           |                     |	j	        |           |                     t          |          d           d S )Nr   alsoProvidesdirectlyProvidesr  )r   )r	   r  zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar))test_declarationszfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))sysr:   r  r  r  r  r  r   r	   r  
addCleanupsetattrr;   r  r  hasattrdelattrr   )
r   r  r  r  r  r   r	   orig_providesr  	my_modules
             r   #test__repr__directlyProvides_modulez9TestProvidesClassRepr.test__repr__directlyProvides_module[  s   


<<<<<<@@@@@@......????????????*FFF%%%%NNO	
 	
 	

 	UD!!!%NN	
 	
 	
 	HGGGGG9n55555D$///N;;;i,h777NN	
 	
 	
 	
 	
r   c                     ddl m} t          d          }|                     ||          }|xj        dz  c_        |xj        dz  c_        |                     t          |          d           d S )Nr   )
ModuleTyper	   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))r:   r  r   r   _v_module_namesr;   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JJG	
 	
 	
 	
 	
r   c                     t          dd          }t          dd          }t          d          }|                     t          |           |||          }|                     t	          |          d           d S )Nr	   mod1r   mod2r   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)r   r   r5  r;   r  r   r	   IFoo2r   r  s        r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_names  s~    f888v&999f%%}}T$ZZtU;;JJL	
 	
 	
 	
 	
r   c                     ddl m} ddl m}  G d d|          } G d d          } |t          |                     }|                     |||          }|                     t          |          d           d S )	Nr   rW   r   c                       e Zd ZdZdS )KTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooDoes nothingNr   r   r   __doc__r   r   r   r	   r	            NNNr   r	   c                       e Zd ZdZdS )JTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr
  Nr  r   r   r   r  r    r  r   r  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r   rX   r   r5  r   r;   r  )r   rX   r   r	   r  r   r  s          r   'test__repr__implementedBy_in_interfacesz=TestProvidesClassRepr.test__repr__implementedBy_in_interfaces  s    ,,,,,,000000	 	 	 	 	9 	 	 		 	 	 	 	 	 	 	 }T$ZZ((}}S$--JJ6	
 	
 	
 	
 	
r   c                     |                      t          |                     }|                     t          |          d           d S )Nz'directlyProvides(TestProvidesClassRepr)r   r5  r;   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfaces  sG    }}T$ZZ((JJ5	
 	
 	
 	
 	
r   c                       fd G fdd          }                       |                      }                     t          |          d           d S )Nc                  2                          d           d S )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 Zd ZdS );TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   c                     dS )Nz<Object>r   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__  s    !zr   N)r   r   r   r   __str__r  )r  s   r   Objectr    s.        I(G" " " " "r   r  zdirectlyProvides(<Object>))r   r;   r  )r   r  r  r  s   `  @r   test__repr__non_classz+TestProvidesClassRepr.test__repr__non_class  s    	- 	- 	- 	- 	-	" 	" 	" 	" 	" 	" 	" 	" 	" 	" }}VVXX&&JJ(	
 	
 	
 	
 	
r   c                     ddl m} ddl m} t          d          } ||           G d d                      } | |                      }|                     t          |          d           d S )Nr   r   r@  r	   c                       e Zd ZdS )DTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr   r   r   r   r   r"    r8   r   r   classImplements(Foo, IFoo))r:   r   r@  r   r;   r  )r   r   r@  r	   r   r  s         r   !test__repr__providedBy_from_classz7TestProvidesClassRepr.test__repr__providedBy_from_class  s    ;;;;;;::::::f%%	T			 	 	 	 	 	 	 
		 z##%%  JJ(	
 	
 	
 	
 	
r   c                 *   ddl m} ddl m} ddl m} t	          d          }t	          d          } ||           G d d                      } |            } |||            ||          }|                     t          |          d	           d S )
Nr   r  r   r   r	   r   c                       e Zd ZdS )FTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr   r   r   r   r   r'    r8   r   r   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r:   r  r   r@  r   r;   r  )	r   r  r   r@  r	   r   r   r5   r  s	            r   #test__repr__providedBy_alsoProvidesz9TestProvidesClassRepr.test__repr__providedBy_alsoProvides  s    <<<<<<;;;;;;::::::f%%f%%	T			 	 	 	 	 	 	 
		 ceeS$z#JJE	
 	
 	
 	
 	
r   N)r   r   r   r   r   r  r  r  r  r  r  r  r  r  r$  r(  r   r   r   r  r  .  s          3 3 3
 
 


 

 

. . .,
 ,
 ,
\

 

 

	
 	
 	

 
 
(
 
 

 
 
$
 
 

 
 
 
 
r   r  c                        e Zd Zd Zd Zd ZdS )Test_Providesc                     ddl m}  ||i |S )Nr   r  )r:   r  )r   r   r   r  s       r   rP  zTest_Provides._callFUT  s)    888888x$$$$r   c                 P   ddl m} t          d          }i } G d d          }t          ||          5  |                     ||          }d d d            n# 1 swxY w Y   |                     t          |          |g           |                     |||f         |           d S )Nr   rg  r	   c                       e Zd ZdS ).Test_Provides.test_no_cached_spec.<locals>.FooNr   r   r   r   r   r.    rF   r   r   InstanceDeclarations)r   rh  r   _MonkeyrP  r;   rQ   r   )r   rh  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A Ac                    ddl m} t          d          }t                      } G d d          }||f|i}t	          ||          5  |                     ||          }d d d            n# 1 swxY w Y   |                     ||           d S )Nr   rg  r	   c                       e Zd ZdS )-Test_Provides.test_w_cached_spec.<locals>.FooNr   r   r   r   r   r6  	  rF   r   r   r/  )r   rh  r   rz   r1  rP  r   )r   rh  r	   priorr   r2  r  s          r   test_w_cached_specz Test_Provides.test_w_cached_spec  s    //////f%%	 	 	 	 	 	 	 	 te$\>>> 	, 	,==d++D	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,dE"""""s   A++A/2A/N)r   r   r   rP  r3  r8  r   r   r   r*  r*    sA        % % %0 0 0# # # # #r   r*  c                   &    e Zd Zd Zd Zd Zd ZdS )Test_directlyProvidesc                     ddl m}  ||i |S )Nr   r  )r:   r  )r   r   r   r  s       r   rP  zTest_directlyProvides._callFUT  *    @@@@@@,,,,r   c                    ddl m} t          d          } G d d          } |            }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r	   c                       e Zd ZdS )7Test_directlyProvides.test_w_normal_object.<locals>.FooNr   r   r   r   r   r?    rF   r   r   r:   r  r   rP  r   r  r;   rQ   r   r  r	   r   objs        r   test_w_normal_objectz*Test_directlyProvides.test_w_normal_object      ======f%%	 	 	 	 	 	 	 	 ceec4   m	
 	
 	
 	!""TF	
 	
 	
 	
 	
r   c                     ddl m} t          d          } G d d          }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r	   c                       e Zd ZdS )/Test_directlyProvides.test_w_class.<locals>.FooNr   r   r   r   r   rG  ,  rF   r   r   )r:   r  r   rP  r   r  r;   rQ   r   r  r	   r   s       r   test_w_classz"Test_directlyProvides.test_w_class(  s    ======f%%	 	 	 	 	 	 	 	 	c4   m	
 	
 	
 	!""TF	
 	
 	
 	
 	
r   c                     ddl m} t          d          }i  G fdd          } |            }|                     ||           |                     d         |           |                     t          d                   |g           d S )Nr   r  r	   c                        e Zd Zd Z fdZdS ):Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 0    |dk    rd S t          |          Nr  r   r3  s     r   __getattribute__zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__=  s     ;&&4)$///r   c                     ||<   d S r   r   )r   r   valuethe_dicts      r   __setattr__zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__C  s    !&r   Nr   r   r   rO  rS  rR  s   r   r   rL  <  s=        0 0 0' ' ' ' ' ' 'r   r   r  )r:   r  r   rP  r   r;   rQ   )r   r  r	   r   rB  rR  s        @r   test_w_classless_objectz-Test_directlyProvides.test_w_classless_object7  s    ======f%%	' 	' 	' 	' 	' 	' 	' 	' 	' 	' ceec4   h~6FFFh~677$@@@@@r   N)r   r   r   rP  rC  rI  rV  r   r   r   r:  r:    sU        - - -
 
 
 
 
 
A A A A Ar   r:  c                        e Zd Zd Zd Zd ZdS )Test_alsoProvidesc                     ddl m}  ||i |S )Nr   r  )r:   r  )r   r   r   r  s       r   rP  zTest_alsoProvides._callFUTN  s)    <<<<<<|T(R(((r   c                    ddl m} t          d          } G d d          } |            }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r	   c                       e Zd ZdS )8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   r\  V  rF   r   r   r@  rA  s        r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_providesR  rD  r   c                 V   ddl m} ddl m} t          d          }t          d          } G d d          } |            } |||           |                     ||           |                     |j        |           |                     t          |j                  ||g           d S )Nr   r  r  r	   r   c                       e Zd ZdS )7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr   r   r   r   r   r`  h  rF   r   r   )	r:   r  r  r   rP  r   r  r;   rQ   )r   r  r  r	   r   r   rB  s          r   test_w_existing_providesz*Test_alsoProvides.test_w_existing_providesb  s    ======@@@@@@f%%f%%	 	 	 	 	 	 	 	 ceed###c4   m	
 	
 	
 	!""T4L	
 	
 	
 	
 	
r   N)r   r   r   rP  r]  ra  r   r   r   rX  rX  L  sA        ) ) )
 
 
 
 
 
 
 
r   rX  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_noLongerProvidesc                     ddl m}  ||i |S )Nr   )noLongerProvides)r:   re  )r   r   r   re  s       r   rP  zTest_noLongerProvides._callFUTx  r<  r   c                     t          d          } G d d          } |            }|                     ||           |                     t          |j                  g            d S )Nr	   c                       e Zd ZdS )<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr   r   r   r   r   rh    rF   r   r   )r   rP  r;   rQ   r  )r   r	   r   rB  s       r   r]  z/Test_noLongerProvides.test_wo_existing_provides|  s    f%%	 	 	 	 	 	 	 	 ceec4   !""B	
 	
 	
 	
 	
r   c                     ddl m} t          d          } G d d          } |            } |||           |                     ||           |                     t          |j                  g            d S )Nr   r  r	   c                       e Zd ZdS )?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr   r   r   r   r   rk    rF   r   r   r:   r  r   rP  r;   rQ   r  )r   r  r	   r   rB  s        r   test_w_existing_provides_hitz2Test_noLongerProvides.test_w_existing_provides_hit  s    @@@@@@f%%	 	 	 	 	 	 	 	 ceed###c4   !""B	
 	
 	
 	
 	
r   c                    ddl m} t          d          }t          d          } G d d          } |            } |||           |                     ||           |                     t          |j                  |g           d S )Nr   r  r	   r   c                       e Zd ZdS )@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr   r   r   r   r   rp    rF   r   r   rl  )r   r  r	   r   r   rB  s         r   test_w_existing_provides_missz3Test_noLongerProvides.test_w_existing_provides_miss  s    @@@@@@f%%f%%	 	 	 	 	 	 	 	 ceed###c4   !""TF	
 	
 	
 	
 	
r   c                     ddl m} t          d          } ||           G d d                      } |            }|                     t          | j        ||           d S )Nr   r   r	   c                       e Zd ZdS )DTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr   r   r   r   r   rt    r8   r   r   )r:   r   r   r   r  rP  )r   r   r	   r   rB  s        r   !test_w_iface_implemented_by_classz7Test_noLongerProvides.test_w_iface_implemented_by_class  s    ;;;;;;f%%	T			 	 	 	 	 	 	 
		 cee*dmS$?????r   N)r   r   r   rP  r]  rm  rq  ru  r   r   r   rc  rc  v  sd        - - -

 

 


 
 

 
 
	@ 	@ 	@ 	@ 	@r   rc  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )ClassProvidesBaseFallbackTestsc                     ddl m} |S Nr   )ClassProvidesBaseFallbackr:   rz  r   rz  s     r   r   z.ClassProvidesBaseFallbackTests._getTargetClass      IIIIII((r   c                 Z     G d d|                                            } |||          S )Nc                       e Zd Zd ZdS )8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 "    || _         || _        d S r   )_cls_implements)r   kis      r   r1  zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__  s    	#$   r   N)r   r   r   r1  r   r   r   r  r    s#        % % % % %r   r  r   )r   r  
implementsr  s       r   r   z'ClassProvidesBaseFallbackTests._makeOne  sL    	% 	% 	% 	% 	%d**,, 	% 	% 	%
 wuj)))r   c                     t          d          } G d d          }|                     ||          x}|_        |                     |j        |           d S )Nr	   c                       e Zd ZdS )GClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr   r   r   r   r   r    rF   r   r   r  )r   r	   r   cpbps       r   test_w_same_class_via_classz:ClassProvidesBaseFallbackTests.test_w_same_class_via_class  sq    f%%	 	 	 	 	 	 	 	 #'--T":"::sc&-----r   c                     t          d          } G d d          } |            }|                     ||          |_        |                     |j        |           d S )Nr	   c                       e Zd ZdS )JClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr   r   r   r   r   r    rF   r   r   r  )r   r	   r   r5   s       r   test_w_same_class_via_instancez=ClassProvidesBaseFallbackTests.test_w_same_class_via_instance  sw    f%%	 	 	 	 	 	 	 	 cee==d33c&-----r   c                 ,   t          d          } G d d          } G d d|          } |            }|                     ||          |_        |                     t          t
          |d           |                     t          t
          |d           d S )Nr	   c                       e Zd ZdS )BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr   r   r   r   r   r    rF   r   r   c                       e Zd ZdS )BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr   r   r   r   r  r    rF   r   r  r  )r   r   r  r   r  getattr)r   r	   r   r  bars        r   test_w_different_classz5ClassProvidesBaseFallbackTests.test_w_different_class  s    f%%	 	 	 	 	 	 	 		 	 	 	 	# 	 	 	 cee==d33.'3GGG.'3GGGGGr   N)r   r   r   r   r   r  r  r  r   r   r   rw  rw    sd        ) ) )
	* 	* 	*. . .. . .H H H H Hr   rw  c                       e Zd Zd Zd ZdS )ClassProvidesBaseTestsc                     ddl m} |S )Nr   )ClassProvidesBase)r:   r  )r   r  s     r   r   z&ClassProvidesBaseTests._getTargetClass  s    AAAAAA  r   c                     ddl m} |S ry  r{  r|  s     r   r  z(ClassProvidesBaseTests._getFallbackClass  r}  r   N)r   r   r   r   r  r   r   r   r  r    s2        ! ! !) ) ) ) )r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ClassProvidesTestsc                     ddl m} |S Nr   r  r:   r  r   r  s     r   r   z"ClassProvidesTests._getTargetClass  r  r   c                 6     |                                  |i |S r   r   r   s      r   r   zClassProvidesTests._makeOne  r   r   c                 x   ddl m} t          d          }t          d          } ||           G d d                      }|                     |t	          |          |          x}|_        |                     |j        |           |                     t           |            j                  |g           d S )Nr   r   r	   r   c                       e Zd ZdS )7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr   r   r   r   r   r    r8   r   r   )	r:   r   r   r   r5  r  r   r;   rQ   r   r   r	   r   r   cps         r   test_w_simple_metaclassz*ClassProvidesTests.test_w_simple_metaclass  s    ;;;;;;f%%f%%	T			 	 	 	 	 	 	 
		 !%c499d C CCSc&+++ccee011D6:::::r   c                 n   ddl m} t          d          }t          d          } ||           G d d                      }|                     |t	          |          |          x}|_        |                     |                                t	          |          |t	          |          |ff           d S )Nr   r   r	   r   c                       e Zd ZdS )/ClassProvidesTests.test___reduce__.<locals>.FooNr   r   r   r   r   r    r8   r   r   )r:   r   r   r   r5  r  r;   r  r  s         r   r  z"ClassProvidesTests.test___reduce__  s    ;;;;;;f%%f%%	T			 	 	 	 	 	 	 
		 !%c499d C CCSr((S$s))T$:;	= 	= 	= 	= 	=r   N)r   r   r   r   r   r  r  r   r   r   r  r    sP          3 3 3; ; ;= = = = =r   r  c                   $     e Zd Z fdZd Z xZS )ClassProvidesStrictTestsc                 j    t                                                       G fdd          }|S )Nc                       e Zd Z fdZdS )EClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                 4                         | |d          S r  r  )r   r  r  s     r   r  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_ro!  r  r   Nr  r  s   r   StrictClassProvidesr     r  r   r  r  )r   r  r  r  s     @r   r   z(ClassProvidesStrictTests._getTargetClass  sU    //11	 	 	 	 	 	 	- 	 	 	 #"r   c           
      n   ddl m} ddl m} ddl m}  G d d|          } ||           G d dt                                } |d	t
          fi           }|                     |||          }|                     |j        | ||          | |t                     |t
                    |f           d S )
Nr   rW   r   r   c                       e Zd ZdS )MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr   r   r   r   r   r  /  rF   r   r   c                       e Zd ZdS )QClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr   r   r   r   	metaclassr  2  r8   r   r  r  )	r   rX   r   r   r5  rz   r   r;   rk   )r   rX   r   r   r   r  r  r  s           r   r  z>ClassProvidesStrictTests.test_overlapping_interfaces_corrected(  s5    	-,,,,,000000......	 	 	 	 	I 	 	 	 
U			 	 	 	 	 	 	 
		 iI
 
 }}S)U33M)$$M$M&!!(
 	 	 	 	 	r   r  r  s   @r   r  r    sG        	# 	# 	# 	# 	#      r   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestClassProvidesReprc                     ddl m} |S r  r  r  s     r   r   z%TestClassProvidesRepr._getTargetClassI  r  r   c                 6     |                                  |i |S r   r   r   s      r   r   zTestClassProvidesRepr._makeOneM  r   r   c                     |                      t          |           t                    }|                     t          |          d           d S )Nz'directlyProvides(TestClassProvidesRepr)r  r  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__emptyP  sI    }}T$ZZ..JJ5	
 	
 	
 	
 	
r   c                     ddl m}  G d d|          }|                     t          |           t          |          }|                     t          |          d           d S )Nr   rW   c                       e Zd ZdZdS )=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor
  Nr  r   r   r   r	   r  Z  r  r   r	   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rX   r   r5  r;   r  )r   rX   r	   r  s       r   test__repr__providing_onez/TestClassProvidesRepr.test__repr__providing_oneW  s    ,,,,,,	 	 	 	 	9 	 	 	 }}T$ZZt44JJ;	
 	
 	
 	
 	
r   c                    t          dd          }t          dd          }t          d          }|                     t          |           t          |||          }|                     t	          |          d           d S )Nr	   r   r  r  r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  s        r   r  z1TestClassProvidesRepr.test__repr__duplicate_namesc  s    f888v&999f%%}}T$ZZtT5AAJJL	
 	
 	
 	
 	
r   c                     ddl m} ddl m} t          d          } ||           G d d                      } ||          }|                     t          |          d           d S )Nr   r   r   r	   c                       e Zd ZdS )<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr   r   r   r   r   r  s  r8   r   r   r#  )r:   r   r   r   r;   r  )r   r   r   r	   r   r  s         r   test__repr__implementedByz/TestClassProvidesRepr.test__repr__implementedByn  s    ======;;;;;;f%%	T			 	 	 	 	 	 	 
		 }S!!JJ(	
 	
 	
 	
 	
r   c                 (   ddl m}  G d d          } | |                      }|                     t          |          dt           d            |            }d|_         ||          }|                     t          |          d           d S )Nr   r   c                       e Zd Zd ZdS )RTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                     | S r   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}  s    ======	 	 	 	 	 	 	 	 }XXZZ((JJ,x,,,	
 	
 	

 HJJ
}QJJ'	
 	
 	
 	
 	
r   N)
r   r   r   r   r   r  r  r  r  r  r   r   r   r  r  G  s}          3 3 3
 
 


 

 

	
 	
 	

 
 

 
 
 
 
r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_directlyProvidedByc                     ddl m}  ||i |S )Nr   )directlyProvidedBy)r:   r  )r   r   r   r  s       r   rP  z Test_directlyProvidedBy._callFUT  rt  r   c                      G d d          } |            }|                      t          |                     |                    g            d S )Nc                       e Zd ZdS )NTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr   r   r   r   r   r    rF   r   r   r  rX  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance  sg    	 	 	 	 	 	 	 	 ceedmmC0011266666r   c                     ddl m} t          d          } ||           G d d                      } |            }|                     t	          |                     |                    g            d S )Nr   r   r	   c                       e Zd ZdS )RTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr   r   r   r   r   r    r8   r   r   )r:   r   r   r;   rQ   rP  )r   r   r	   r   r5   s        r   -test_w_declarations_in_class_but_not_instancezETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance  s    ;;;;;;f%%	T			 	 	 	 	 	 	 
		 ceedmmC0011266666r   c                     ddl m} t          d          } G d d          } |            } |||           |                     t	          |                     |                    |g           d S )Nr   r  r	   c                       e Zd ZdS )RTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr   r   r   r   r   r    rF   r   r   )r:   r  r   r;   rQ   rP  )r   r  r	   r   r5   s        r   -test_w_declarations_in_instance_but_not_classzETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class  s    @@@@@@f%%	 	 	 	 	 	 	 	 ceed###dmmC0011D6:::::r   c                 0   ddl m} ddl m} t          d          }t          d          } ||           G d d                      } |            } |||           |                     t          |                     |                    |g           d S )Nr   r  r   r	   r   c                       e Zd ZdS )NTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr   r   r   r   r   r    r8   r   r   )r:   r  r   r   r;   rQ   rP  )r   r  r   r	   r   r   r5   s          r   )test_w_declarations_in_instance_and_classzATest_directlyProvidedBy.test_w_declarations_in_instance_and_class  s    @@@@@@;;;;;;f%%f%%	T			 	 	 	 	 	 	 
		 ceed###dmmC0011D6:::::r   N)r   r   r   rP  r  r  r  r  r   r   r   r  r    s_        / / /7 7 7	7 	7 	7	; 	; 	;; ; ; ; ;r   r  c                        e Zd Zd Zd Zd ZdS )Test_providerc                     ddl m} |S )Nr   )provider)r:   r  )r   r  s     r   r   zTest_provider._getTargetClass  s    888888r   c                 6     |                                  |i |S r   r   r   s      r   r   zTest_provider._makeOne  r   r   c                    ddl m} t          d          }|                     |           G d d                      }|                     |j        |           |                     t          |j                  |g           d S )Nr   r  r	   c                       e Zd ZdS )'Test_provider.test_w_class.<locals>.FooNr   r   r   r   r   r    r8   r   r   )r:   r  r   r   r   r  r;   rQ   rH  s       r   rI  zTest_provider.test_w_class  s    ======f%%	t			 	 	 	 	 	 	 
		 	m	
 	
 	
 	!""TF	
 	
 	
 	
 	
r   N)r   r   r   r   r   rI  r   r   r   r  r    sA          3 3 3
 
 
 
 
r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )Test_moduleProvidesc                     ddl m} t          d          }d||d}i }d                    ddg          }t	          |||           |d	         }|                     t          |           d S )
Nr   moduleProvidesr	   zope.interface.tests.foor   r  r	   
z
def foo():    moduleProvides(IFoo)r5   )r:   r  r   joinr'   r   r)   )r   r  r	   r+   r,   CODEr5   s          r   test_called_from_functionz-Test_moduleProvides.test_called_from_function  s    >>>>>>f%%7#14A Ayy&
   	T5$5k)S)))))r   c                     ddl m} t          d          }d||d}i }d                    ddg          }|                     t
                    5  t          |||           d d d            d S # 1 swxY w Y   d S )	Nr   r  r	   r  r  r  zclass Foo(object):r  r:   r  r   r  r   r)   r'   )r   r  r	   r+   r,   r  s         r   test_called_from_classz*Test_moduleProvides.test_called_from_class  s    >>>>>>f%%7#14A Ayy &
   y)) 	$ 	$ud###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A..A25A2c                     ddl m} t          d          }d||d}d                    dg          }t	          ||           |d         }|                     t          |          |g           d S )	Nr   r  r	   r  r  r  moduleProvides(IFoo)r  )r:   r  r   r  r'   r;   rQ   )r   r  r	   r+   r  r  s         r   "test_called_once_from_module_scopez6Test_moduleProvides.test_called_once_from_module_scope  s    >>>>>>f%%7#14A Ayy"
   	T5^$ddV,,,,,r   c                     ddl m} t          d          }d||d}d                    ddg          }|                     t
                    5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   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_scope  s    >>>>>>f%%7#14A A yy""
   y)) 	 	u	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A++A/2A/N)r   r   r   r  r  r  r  r   r   r   r  r    sP        * * *$ $ $
- 
- 
-    r   r  c                   Z    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S )#Test_getObjectSpecificationFallbackc                     ddl m} |S )Nr   )getObjectSpecificationFallback)r:   r  )r   r  s     r   r  z5Test_getObjectSpecificationFallback._getFallbackClass  s    NNNNNN--r   c                 6     |                                  |i |S r   r   r   s      r   rP  z,Test_getObjectSpecificationFallback._callFUT"  r   r   c                     i  G fdd          } |            }|                      |          }|                     t          |          g            d S )Nc                        e Zd Z fdZd ZdS )TTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                 z    |dk    rt          |          	 |         S # t          $ r t          |          w xY wrN  )r  KeyError)r   r   rR  s     r   rO  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__)  sT    ;&&(.../#D>) / / /(.../s     :c                     t                      r   r   )r   r   rQ  s      r   rS  z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__2  r5  r   NrT  rU  s   r   r   r  (  s=        / / / / /, , , , ,r   r   rP  r;   rQ   )r   r   r5   r  rR  s       @r   #test_wo_existing_provides_classlesszGTest_getObjectSpecificationFallback.test_wo_existing_provides_classless%  sz    	, 	, 	, 	, 	, 	, 	, 	, 	, 	, cee}}S!!dR(((((r   c                     ddl m} t          d          }d } |||           |                     |          }|                     ||j                   d S )Nr   r  r	   c                      t                      r   r   r   r   r   r5   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo=  r  r   )r:   r  r   rP  r   r  )r   r  r	   r5   r  s        r   test_existing_provides_is_speczBTest_getObjectSpecificationFallback.test_existing_provides_is_spec9  ss    @@@@@@f%%	( 	( 	( 	d###}}S!!dC,-----r   c                     d }t                      |_        |                     |          }|                     t	          |          g            d S )Nc                      t                      r   r   r   r   r   r5   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.fooF  r  r   )rz   r  rP  r;   rQ   )r   r5   r  s      r   "test_existing_provides_is_not_speczFTest_getObjectSpecificationFallback.test_existing_provides_is_not_specD  sR    	( 	( 	( "88}}S!!dR(((((r   c                     ddl m} t          d          } G d d          } |            } |||           |                     |          }|                     t          |          |g           d S )Nr   r  r	   c                       e Zd ZdS )GTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr   r   r   r   r   r  Q  rF   r   r   )r:   r  r   rP  r;   rQ   )r   r  r	   r   r5   r  s         r   test_existing_providesz:Test_getObjectSpecificationFallback.test_existing_providesM  s    @@@@@@f%%	 	 	 	 	 	 	 	 ceed###}}S!!ddV,,,,,r   c                     ddl m} t          d          } ||           G d d                      } |            }|                     |          }|                     t          |          |g           d S )Nr   r   r	   c                       e Zd ZdS )WTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr   r   r   r   r   r  ]  r8   r   r   )r:   r   r   rP  r;   rQ   r   r   r	   r   r5   r  s         r   &test_wo_provides_on_class_w_implementszJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implementsY  s    ;;;;;;f%%	T			 	 	 	 	 	 	 
		 cee}}S!!ddV,,,,,r   c                      G d d          } |            }|                      |          }|                     t          |          g            d S )Nc                       e Zd ZdS )XTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r  g  rF   r   r   r  r   r   r5   r  s       r   'test_wo_provides_on_class_wo_implementszKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implementse  j    	 	 	 	 	 	 	 	 cee}}S!!dR(((((r   c                 >    t          j        | | j        d           d S )Nr  expected_missingr   test_raisesrP  r   s    r   ,test_catches_only_AttributeError_on_provideszPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_providesn  s/    $$-.	
 	
 	
 	
 	
 	
r   c                 @    t          j        | | j        dd            d S )Nr  )r$  r  r%  r   s    r   )test_catches_only_AttributeError_on_classzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_classs  s4    $M(		
 	
 	
 	
 	
 	
r   c                 Z     G d d          }|                       |                       d S )Nc                   $    e Zd Z ee          ZdS )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;;LLLr   r   )rP  r  s     r   ;test_raises_AttrError_w_provides_fails_type_check_AttrErrorz_Test_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_AttrError{  sJ    	< 	< 	< 	< 	< 	< 	< 	< 	cceer   c                 
    G d d          }|                      t                    5 }|                      |                       d d d            n# 1 swxY w Y   |                     d|j        j        d                    d S )Nc                   $    e Zd Z ee          ZdS )oTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr  r   r   r   r   r0    s        ++L99LLLr   r   r  r   )r   r1  rP  r;   	exceptionr   )r   r   excs      r   >test_raises_AttrError_w_provides_fails_type_check_RuntimeErrorzbTest_getObjectSpecificationFallback.test_raises_AttrError_w_provides_fails_type_check_RuntimeError  s    	: 	: 	: 	: 	: 	: 	: 	: |,, 	!MM##%%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	cm&8&;<<<<<s   AAAN)r   r   r   r  r   rP  r  r  r  r  r  r   r'  r)  r-  r4  r   r   r   r  r    s        . . .
 (O3 3 3) ) )(	. 	. 	.) ) )
- 
- 
-
- 
- 
-) ) )
 
 


 
 
  	= 	= 	= 	= 	=r   r  c                       e Zd Zd ZdS )Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r:   r8  )r   r8  s     r   r   z+Test_getObjectSpecification._getTargetClass  s    FFFFFF%%r   Nr  r   r   r   r6  r6    s#        & & & & &r   r6  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BBBBB!!r   c                 6     |                                  |i |S r   r   r   s      r   rP  z Test_providedByFallback._callFUT  r   r   c                      G d d          } |            }|                      |          }|                     t          |          g            d S )Nc                       e Zd ZdS )NTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr   r   r   r   r   r@    rF   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} t          d          } G d d          } |            } |||          |_        |                     |          }|                     t          |          |g           d S )Nr   r  r	   c                       e Zd ZdS )ATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr   r   r   r   r   rD    rF   r   r   )r:   r  r   r  rP  r;   rQ   )r   r  r	   r   r5   r  s         r   test_w_providedBy_valid_specz4Test_providedByFallback.test_w_providedBy_valid_spec  s    888888f%%	 	 	 	 	 	 	 	 cee%Xc400}}S!!ddV,,,,,r   c                      G d d          } |            }t                      |_        |                     |          }|                     t	          |          g            d S )Nc                       e Zd ZdS )CTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr   r   r   r   r   rH    rF   r   r   )rz   r  rP  r;   rQ   r  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec  sv    	 	 	 	 	 	 	 	 cee#XX}}S!!dR(((((r   c                    ddl m} t          d          } ||           G d d                      } |            }t                      |_        |                     |          }|                     t          |          |g           d S )Nr   r   r	   c                       e Zd ZdS )VTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr   r   r   r   r   rL    r8   r   r   )r:   r   r   rz   r  rP  r;   rQ   r  s         r   1test_w_providedBy_invalid_spec_class_w_implementszITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements  s    ;;;;;;f%%	T			 	 	 	 	 	 	 
		 cee#XX}}S!!ddV,,,,,r   c                      G d d          } |            }t                      |_        t                      x}|_        |                     |          }|                     ||           d S )Nc                       e Zd ZdS )cTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr   r   r   r   r   rP    rF   r   r   rz   r  r  rP  r   r   r   r5   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  s    	 	 	 	 	 	 	 	 cee#XX&,hh.3#}}S!!dH%%%%%r   c                      G d d          } |            }t                      |_        t                      x}|_        t                      |_        |                     |          }|                     ||           d S )Nc                       e Zd ZdS )eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr   r   r   r   r   rW    rF   r   r   rQ  rR  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  s    	 	 	 	 	 	 	 	 cee#XX&,hh.3#!88}}S!!dH%%%%%r   c                 L   ddl m} t          d          } ||           G d d                      } |            }t                      |_        t                      x|_        |_        |                     |          }|                     t          |          |g           d S )Nr   r   r	   c                       e Zd ZdS )eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr   r   r   r   r   r[    r8   r   r   )	r:   r   r   rz   r  r  rP  r;   rQ   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  s    ;;;;;;f%%	T			 	 	 	 	 	 	 
		 cee#XX.4hh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|                      } |            }|                     t          |                     |                    ||g           t          ||          }|                     |          }	|                     |	j	                   |                     t          |	          |g           d S )Nr   rW   r   c                       e Zd ZdS )PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr   r   r   r   r   r_    rF   r   r   c                       e Zd ZdS )STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr   r   r   r   r   ra    rF   r   r   c                       e Zd ZdS )OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr   r   r   r   r   rc  	  r8   r   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr   r   r   r   r  re  	  r8   r   r  
r   rX   r:   r   r;   rQ   rP  r  rt   r  )r   rX   r   r   r   r   r  derivedr  r  r  s             r   r  zATest_providedByFallback.test_super_when_base_implements_interface  s   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	 	 	 
		 
X			 	 	 	 	d 	 	 
		 '))dmmG4455%7HII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|                      } |            }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )Nr   rW   r   c                       e Zd ZdS )VTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr   r   r   r   r   rj  	  rF   r   r   c                       e Zd ZdS )YTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr   r   r   r   r   rl  	  rF   r   r   c                       e Zd ZdS )UTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr   r   r   r   r   rn  	  rF   r   r   c                       e Zd ZdS )XTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr   r   r   r   r  rp  	  r8   r   r  r  )
r   rX   r   r   r   r   r  rg  r  r  s
            r   r  zGTest_providedByFallback.test_super_when_base_doesnt_implement_interface	  s\   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 		 	 	 	 	 	 	 	 
X			 	 	 	 	d 	 	 
		 '))dmmG4455zBBBGW%%dmmC0011266666r   c                    ddl m} ddlm}  G d d|          } G d d|          } ||           G d d	                      } |            }|                     t          |                     |                    |g           t          ||          }|                     |          }|                     |j	                   |                     t          |          g            d S )
Nr   rW   r   c                       e Zd ZdS )ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr   r   r   r   r   rs  ,	  rF   r   r   c                       e Zd ZdS )HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr   r   r   r   r   ru  /	  rF   r   r   c                       e Zd ZdS )GTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr   r   r   r   r  rw  2	  r8   r   r  rf  )
r   rX   r   r   r   r  rg  r  r  r  s
            r   r  z6Test_providedByFallback.test_super_when_base_is_object(	  sK   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
X			 	 	 	 	 	 	 
		 '))dmmG4455zBB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|          } |            }|                     t          |                     |                    |g            |||           |                     t          |                     |                    ||g           t          ||          }	|                     |	          }
| 	                    |
j
                   |                     t          |
          |g           d S )Nr   rW   r  r   c                       e Zd ZdS )OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr   r   r   r   r   rz  C	  rF   r   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr   r   r   r   r   r|  F	  rF   r   r   c                       e Zd ZdS )NTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr   r   r   r   r   r~  I	  r8   r   r   c                       e Zd ZdS )QTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr   r   r   r   r  r  M	  rF   r   r  )r   rX   r:   r  r   r;   rQ   rP  r  rt   r  )r   rX   r  r   r   r   r   r  rg  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455w???(+++dmmG4455%7HII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	          |
|          }|                     t          |                     |                    |||||g           |                     t          |                     |                    |||g           |                     t          |                     |                    ||g           |                     t          |                     |                    |g           d S )Nr   rW   r   c                       e Zd ZdS )OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr   r   r   r   r   r  _	  rF   r   r   c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr   r   r   r   r  r  b	  rF   r   r  c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr   r   r   r   r  r  e	  rF   r   r  c                       e Zd ZdS )RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr   r   r   r   r   r  h	  rF   r   r   c                       e Zd ZdS )TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr   r   r   r   r  r  k	  rF   r   r  c                       e Zd ZdS )NTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr   r   r   r   r   r  n	  r8   r   r   c                       e Zd ZdS )LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr   r   r   r   r   r  r	  r8   r   r   c                       e Zd ZdS )LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr   r   r   r   r  r  v	  r8   r   r  c                       e Zd ZdS )QTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr   r   r   r   r  r  z	  r8   r   r  r  r  s                   r   r  z@Test_providedByFallback.test_super_multi_level_multi_inheritance[	  s   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	) 	 	 		 	 	 	 	) 	 	 		 	 	 	 	u 	 	 		 	 	 	 	 	 	 	 
U			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
Xz	*	*	 	 	 	 	b" 	 	 
+	*	 GII7ABllBlldmmA..//"JUC@	B 	B 	BdmmB//00uc*	, 	, 	,dmmC0011u	' 	' 	'dmmC0011	" 	" 	" 	" 	"r   c                 J    t          j        | | j        dt                     d S )Nr  )r$  r  )r   r&  rP  rz   r   s    r   .test_catches_only_AttributeError_on_providedByzFTest_providedByFallback.test_catches_only_AttributeError_on_providedBy	  s2    $T4=6F/5	7 	7 	7 	7 	7 	7r   c                 >    t          j        | | j        d           d S )Nr  r#  r%  r   s    r   r)  zATest_providedByFallback.test_catches_only_AttributeError_on_class	  s1     	$$-+	? 	? 	? 	? 	? 	?r   )r   r   r   r  r   rP  rA  rE  rI  rM  rT  rX  r\  r  r  r  r  r  r  r)  r  r  s   @r   r:  r:    sI       " " "
 (O3 3 3) ) )
- 
- 
-) ) )- - -	& 	& 	&
& 
& 
&- - -- - - - -47 7 7 7 7.( ( ( ( (,- - - - -:/" /" /" /" /"b7 7 7
? ? ? ? ? ? ?r   r:  c                       e Zd Zd ZdS )Test_providedByc                     ddl m} |S )Nr   r   )r:   r@  )r   r@  s     r   r   zTest_providedBy._getTargetClass	  r	  r   Nr  r   r   r   r  r  	  s#            r   r  c                   B    e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	S )
*ObjectSpecificationDescriptorFallbackTestsc                     ddl m} |S )Nr   )%ObjectSpecificationDescriptorFallback)r:   r  )r   r  s     r   r  z<ObjectSpecificationDescriptorFallbackTests._getFallbackClass	  s&    	2 	2 	2 	2 	2 	244r   c                 6     |                                  |i |S r   r   r   s      r   r   z3ObjectSpecificationDescriptorFallbackTests._makeOne	  r   r   c                     ddl m} t          d          } G d d          } |||          |_        |                                 |_        |                     t          |j                  |g           d S )Nr   r  r	   c                       e Zd ZdS )OObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr   r   r   r   r   r  	  rF   r   r   )r:   r  r   r  r   r  r;   rQ   )r   r  r	   r   s       r   test_accessed_via_classzBObjectSpecificationDescriptorFallbackTests.test_accessed_via_class	  s    888888f%%	 	 	 	 	 	 	 	 $8C..!]]__c011D6:::::r   c                 P   ddl m} ddl m} t          d          }t          d          } ||           G d d                      } |||          |_        |                                 |_         |            }|                     t          |j                  |g           d S )Nr   r  r   r	   r   c                       e Zd ZdS )ZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr   r   r   r   r   r  	  r8   r   r   )	r:   r  r   r   r  r   r  r;   rQ   )r   r  r   r	   r   r   r5   s          r   "test_accessed_via_inst_wo_provideszMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides	  s    888888;;;;;;f%%f%%	T			 	 	 	 	 	 	 
		 $8C..!]]__ceec011D6:::::r   c                    ddl m} ddl m} ddl m} t	          d          }t	          d          }t	          d          } ||           G d d	                      } |||          |_        |                                 |_         |            } |||           |                     t          |j                  ||g           d S )
Nr   r  r  r   r	   r   r   c                       e Zd ZdS )YObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr   r   r   r   r   r  	  r8   r   r   )
r:   r  r  r   r   r  r   r  r;   rQ   )	r   r  r  r   r	   r   r   r   r5   s	            r   !test_accessed_via_inst_w_provideszLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides	  s   888888@@@@@@;;;;;;f%%f%%f%%	T			 	 	 	 	 	 	 
		 $8C..!]]__ceed###c011D$<@@@@@r   c                       G d dt                      G  fdd          } |            }                               5  t          |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )vObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr   r   r   r   MyExceptionr  	  rF   r   r  c                   R    e Zd Z                                Ze fd            ZdS )nObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                     r   r   )r   r  s    r   r  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__	  s	    !!r   Nr   r   r   r   r  rc  r  )r  r   s   r   r   r  	  sE        !]]__N" " " " X" " "r   r   r  )	Exceptionr   r  )r   r   r5   r  s   `  @r   6test_arbitrary_exception_accessing_provides_not_caughtzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught	  s    	 	 	 	 	) 	 	 		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" cee{++ 	+ 	+C)***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A##A'*A'c                       G d dt                     } G  fdd          } |            }t          |d          }                     |           d S )Nc                       e Zd ZdS )mObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr   r   r   r   r  r  	  rF   r   r  c                   N    e Zd Z                                 Zed             ZdS )eObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                     t           r   )r  r   s    r   r  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__	  s    $$r   Nr  r   s   r   r   r  	  s;        !]]__N% % X% % %r   r   r  )r  r  assertIsNotNone)r   r  r   r5   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught	  s    	 	 	 	 	) 	 	 		% 	% 	% 	% 	% 	% 	% 	% 	% 	% cee3 011X&&&&&r   c                    ddl m} ddl m}  G d d|          } ||           G d d                      }|                                 |_        t           |            d          }|                     |           d S )	Nr   rW   r   c                       e Zd ZdS )ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr   r   r   r   r	   r  	  rF   r   r	   c                   $    e Zd Zed             ZdS )YObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                     d S r   r   r   s    r   r  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__
  s    tr   N)r   r   r   rc  r  r   r   r   r   r  
  s/           X  r   r   r  )r   rX   r   r   r  r  rt   )r   rX   r   r	   r   r  s         r   !test_None_in__provides__overrideszLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides	  s    ,,,,,,......	 	 	 	 	9 	 	 	 
T			 	 	 	 	 	 	 
		 "]]__3355"233(#####r   N)r   r   r   r  r   r   r  r  r  r  r  r  r   r   r   r  r  	  s        5 5 5 (O3 3 3	; 	; 	;; ; ;A A A$+ + + ' ' ' $ $ $ $ $r   r  c                       e Zd Zd ZdS )"ObjectSpecificationDescriptorTestsc                     ddl m} |S )Nr   )ObjectSpecificationDescriptor)r:   r  )r   r  s     r   r   z2ObjectSpecificationDescriptorTests._getTargetClass
  s    MMMMMM,,r   Nr  r   r   r   r  r  
  s#        - - - - -r   r  c                        e Zd Zd Zd Zd ZdS )r1  c                     | _         fd|D             | _        |                                D ]\  }}t          ||           d S )Nc                 2    i | ]}|t          |          S r   )r  ).0keymodules     r   
<dictcomp>z$_Monkey.__init__.<locals>.<dictcomp>!
  s%    CCC3 4 4CCCr   )r  
to_restoreitemsr  )r   r  r   r  rQ  s    `   r   r1  z_Monkey.__init__
  s_    CCCCCCC((** 	( 	(JCFC''''	( 	(r   c                     | S r   r   r   s    r   	__enter__z_Monkey.__enter__%
  s    r   c                 p    | j                                         D ]\  }}t          | j        ||           d S r   )r  r  r  r  )r   exc_typeexc_valexc_tbr  rQ  s         r   __exit__z_Monkey.__exit__(
  sD    ///11 	- 	-JCDKe,,,,	- 	-r   Nr   r   r   r1  r  r  r   r   r   r1  r1  
  sA        ( ( (  - - - - -r   r1  c                        e Zd Zd Zd Zd ZdS )rl  c                     || _         t          ||          | _        | j                                        | _        | j                                         | j                            |           d S r   )r  r  targetcopyr  clearupdate)r   r  attrnamer   s       r   r1  z_MonkeyDict.__init__0
  s_    fh//+**,,2r   c                     | j         S r   )r  r   s    r   r  z_MonkeyDict.__enter__7
  s
    {r   c                 v    | j                                          | j                             | j                   d S r   )r  r  r  r  )r   r  r  r  s       r   r  z_MonkeyDict.__exit__:
  s4    4?+++++r   Nr  r   r   r   rl  rl  -
  sA            , , , , ,r   rl  )6r  unittestrY   r   r  r   r   r   #zope.interface.tests.test_interfacer   r   r	   r   r   r   r!   TestCaser1   rI   r~   r   r  rL  r  r  r%  r8  rl  rq  r{  r  r  r  r  r*  r:  rX  rc  rw  r  r  r  r  r  r  r  r  r6  r:  r  r  r  r1  rl  r   r   r   <module>r     sL     3 3 3 3 3 3 1 1 1 1 1 1 6 6 6 6 6 6 2 2 2 2 2 2& & & & & & ~f~f	 	 	 	 	 	 	 	       $ $ $ $ $ $ $ $       ( 
  
  
  
  
"  
  
  
F7( 7( 7( 7( 7(H- 7( 7( 7(tw9 w9 w9 w9 w9, w9 w9 w9t@, @, @, @, @,4 @, @, @,Fz8 z8 z8 z8 z86&z8 z8 z8z\" \" \" \" \"!2 \" \" \"~
    3.  &% &% &% &% &% &% &% &%R-4 -4 -4 -4 -43X5F -4 -4 -4`l
 l
 l
 l
 l
/1B l
 l
 l
^/ / / / / 4 / / /
 
 
 
 
h/ 
 
 
0;D ;D ;D ;D ;D+ ;D ;D ;D|> > > > >4 > > >B51 51 51 51 51* 51 51 51p# # # # #1 # # #L@
 @
 @
 @
 @
H- @
 @
 @
F# # # # #H% # # #B7A 7A 7A 7A 7AH- 7A 7A 7At'
 '
 '
 '
 '
) '
 '
 '
T8@ 8@ 8@ 8@ 8@H- 8@ 8@ 8@v1H 1H 1H 1H 1HX%6 1H 1H 1Hh) ) ) ) )") ) )"!= != != != !=* != != !=H* * * * *1 * * *ZK
 K
 K
 K
 K
H- K
 K
 K
\0; 0; 0; 0; 0;h/ 0; 0; 0;f
 
 
 
 
H% 
 
 
25 5 5 5 5(+ 5 5 5pu= u= u= u= u=(*; u= u= u=p& & & & &"E"7& & &{? {? {? {? {?h/ {? {? {?|    -+  j$ j$ j$ j$ j$1B j$ j$ j$Z	- 	- 	- 	- 	-2	- 	- 	-- - - - - - - - , , , , , , , , , ,r   