
    /Jf@                    B   d Z ddlZddlmZ ddlmZ ddlmZ  G d d          Z G d d	ej                  Z	 G d
 dej                  Z
 G d de
          Z G d de
          Z G d deej                  Z G d dej                  Z G d dee          Z G d d          Z G d deej                  Z G d deej                  Z G d de          Z G d dej                  Z G d  d!e          Z G d" d#e          Z G d$ d%ej                  Z G d& d'e          Z G d( d)ej                  Z G d* d+ej                  Z G d, d-ej                  Z G d. d/ej                  Z G d0 d1ej                  Z G d2 d3ej                  Z G d4 d5ee          Z G d6 d7ej                  Z  G d8 d9e           Z! G d: d;ej                  Z" G d< d=ej                  Z# G d> d?ej                  Z$ G d@ dAej                  Z% G dB dCej                  Z& G dD dEe&e          Z' G dF dGej                  Z( G dH dIe(e          Z) G dJ dKej                  Z* G dL dMe*e          Z+ G dN dO          Z, G dP dQ          Z-dS )Rz@Test the new API for making and checking interface declarations
    N)MissingSomeAttrs)OptimizationTestMixin)!NameAndModuleComparisonTestsMixinc                       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)selfcodeglobslocsfails_under_py3kr
   logs          i/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/zope/interface/tests/test_declarations.py_run_generated_codez#_Py3ClassAdvice._run_generated_code   s    	$$D$11 
	S""$$$8T5$''' $ 8II6777	    
	 
	 
	 
	 
	 
	 
	 
	

 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s4   BAB
A3$B2A33BBBN)T)__name__
__module____qualname__r        r   r   r      s-         .2     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>.FooNr   r   r   r   r   r   Foor$   4           Dr   r&   zope.interface.declarationsr!   assertEqual__component_name__)r   r!   r&   s      r   
test_classzNamedTests.test_class1   so    555555	u	 	 	 	 	 	 	 
	 	/77777r   c                 p    ddl m}  |d          d             }|                     |j        d           d S )Nr   r    r"   c                     t                      NNotImplementedError)os    r   doFooz'NamedTests.test_function.<locals>.doFoo=   s    %'''r   r(   )r   r!   r3   s      r   test_functionzNamedTests.test_function:   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   r    c                       e Zd ZdS )%NamedTests.test_instance.<locals>.FooNr%   r   r   r   r&   r7   F           Dr   r&   r"   r(   )r   r!   r&   r"   s       r   test_instancezNamedTests.test_instanceC   s~    555555	 	 	 	 	 	 	 	ceeeS/77777r   N)r   r   r   r,   r4   r9   r   r   r   r   r   /   sA        8 8 8: : :8 8 8 8 8r   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 )EmptyDeclarationTestsc                 "    ddl m}  |            S Nr   )Declarationr)   r>   r   r>   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyR   s     ;;;;;;{}}r   c                 t    |                                  }|                     t          |          g            d S r/   )rA   r*   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___emptyV   s3    ~~dR(((((r   c                     ddl m} |                                 }|                     t	          |                                          |g           d S Nr   	Interface)zope.interface.interfacerJ   rA   r*   rC   	flattenedr   rJ   rE   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_emptyZ   sS    666666~~dnn..//)=====r   c                 f    ddl m} |                                 }|                     ||           d S rH   )rK   rJ   rA   assertNotInrM   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___empty_   s?    666666~~D)))))r   c                     ddl m} |                                 }|                     |                    |                     |                     |                    |d                     d S )Nr   rI   Tstrict)rK   rJ   rA   
assertTrueextendsrM   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_emptyd   si    666666~~Y//000Yt<<=====r   c                     |                                  }t          |                                          }|                     |g            d S r/   )rA   rC   
interfacesr*   )r   rE   ls      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_emptyj   sD    ~~""##Br   c                 t    ddl m} |                                 }|                     |j        ||f           d S rH   )rK   rJ   rA   r*   __sro__rM   s      r   test___sro___z#EmptyDeclarationTests.test___sro___o   sF    666666~~i'9:::::r   c                 r    ddl m} |                                 }|                     |j        |f           d S rH   )rK   rJ   rA   r*   __iro__rM   s      r   test___iro___z#EmptyDeclarationTests.test___iro___t   sC    666666~~	|44444r   c                    |                                  }|                     |                    d                     |                     |                    dd          d           |                     |j                   d S )Nattrabcdef)rA   assertIsNonegetr*   assertFalse_v_attrsrD   s     r   test_getzEmptyDeclarationTests.test_gety   ss    ~~$((6**+++%//777 	'''''r   c                     |                                  }t                      |_        |                    |           |                     |j                   d S r/   )rA   objectri   changedrh   rD   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   sJ    ~~T'''''r   N)r   r   r   rA   rF   rN   rQ   rW   r[   r^   ra   rj   rn   r   r   r   r;   r;   N   s          ) ) )> > >
* * *
> > >     
; ; ;
5 5 5
( ( (( ( ( ( (r   r;   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )DeclarationTestsc                     ddl m} |S r=   r?   r@   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;;;;;;r   c                 6     |                                  |i |S r/   rr   r   argskws      r   _makeOnezDeclarationTests._makeOne   #    %t##%%t2r222r   c                 ~    |                                  }|                     t          |j                  g            d S r/   )ry   r*   rC   	__bases__rD   s     r   test_ctor_no_basesz#DeclarationTests.test_ctor_no_bases   s5    }}dn--r22222r   c                     ddl m}  |d          }|                     |          }|                     t	          |j                  |g           d S Nr   InterfaceClassIFoo)rK   r   ry   r*   rC   r|   r   r   r   rE   s       r   test_ctor_w_interface_in_basesz/DeclarationTests.test_ctor_w_interface_in_bases   s\    ;;;;;;~f%%}}T""dn--v66666r   c                     ddl m}  |            }|                     |          }|                     t	          |j                  |g           d S Nr   
Implements)r)   r   ry   r*   rC   r|   )r   r   implrE   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/   )ry   rm   rf   ri   rD   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s=    }}T$-(((((r   c                 Z    |                                  }|                     ||           d S r/   )ry   rP   rD   s     r   test___contains__w_selfz(DeclarationTests.test___contains__w_self   s+    }}t$$$$$r   c                 |    ddl m}  |d          }|                                 }|                     ||           d S r   )rK   r   ry   rP   r   s       r   "test___contains__w_unrelated_ifacez3DeclarationTests.test___contains__w_unrelated_iface   sL    ;;;;;;~f%%}}t$$$$$r   c                 ~    ddl m}  |d          }|                     |          }|                     ||           d S r   )rK   r   ry   assertInr   s       r   !test___contains__w_base_interfacez2DeclarationTests.test___contains__w_base_interface   sN    ;;;;;;~f%%}}T""dD!!!!!r   c                     ddl m}  |d          }|                     |          }|                     t	          |          |g           d S r   rK   r   ry   r*   rC   r   s       r   test___iter___single_basez*DeclarationTests.test___iter___single_base   sX    ;;;;;;~f%%}}T""ddV,,,,,r   c                     ddl m}  |d          } |d          }|                     ||          }|                     t	          |          ||g           d S Nr   r   r   IBarr   r   r   r   r   rE   s        r   test___iter___multiple_basesz-DeclarationTests.test___iter___multiple_bases   sk    ;;;;;;~f%%~f%%}}T4((ddD\22222r   c                     ddl m}  |d          } |d|f          }|                     |          }|                     t	          |          |g           d S r   r   r   s        r   test___iter___inheritancez*DeclarationTests.test___iter___inheritance   sk    ;;;;;;~f%%~ftg..}}T""ddV,,,,,r   c                     ddl m}  |d          } |d          }|                     |||f          }|                     t	          |          ||g           d S r   r   r   s        r   'test___iter___w_nested_sequence_overlapz8DeclarationTests.test___iter___w_nested_sequence_overlap   so    ;;;;;;~f%%~f%%}}TD$<00ddD\22222r   c                     ddl m} ddl m}  |d          }|                     |          }|                     t          |                                          ||g           d S )Nr   rI   r   r   rK   rJ   r   ry   r*   rC   rL   )r   rJ   r   r   rE   s        r   test_flattened_single_basez+DeclarationTests.test_flattened_single_base   sy    666666;;;;;;~f%%}}T""dnn..//$	1BCCCCCr   c                     ddl m} ddl m}  |d          } |d          }|                     ||          }|                     t          |                                          |||g           d S Nr   rI   r   r   r   r   r   rJ   r   r   r   rE   s         r   test_flattened_multiple_basesz.DeclarationTests.test_flattened_multiple_bases   s    666666;;;;;;~f%%~f%%}}T4((dnn..//$i1HIIIIIr   c                     ddl m} ddl m}  |d          } |d|f          }|                     |          }|                     t          |                                          |||g           d S r   r   r   s         r   test_flattened_inheritancez+DeclarationTests.test_flattened_inheritance   s    666666;;;;;;~f%%~ftg..}}T""dnn..//$i1HIIIIIr   c                     ddl m} ddl m}  |d          } |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                 
   ddl m}  |d          } |d          }|                     |          }||z
  }|                     ||                                            |                     t          |          |g           d S r   rK   r   ry   assertIsInstancerr   r*   rC   r   r   r   r   beforeafters         r    test___sub___unrelated_interfacez1DeclarationTests.test___sub___unrelated_interface   s    ;;;;;;~f%%~f%%t$$eT%9%9%;%;<<<etf-----r   c                     ddl m}  |d          }|                     |          }||z
  }|                     t	          |          g            d S r   r   )r   r   r   r   r   s        r   test___sub___related_interfacez/DeclarationTests.test___sub___related_interface   s_    ;;;;;;~f%%t$$eb)))))r   c                     ddl m}  |d          } |d|f          }|                     |          }||z
  }|                     t	          |          g            d S r   r   r   s         r   -test___sub___related_interface_by_inheritancez>DeclarationTests.test___sub___related_interface_by_inheritance  sr    ;;;;;;~f%%~ftg..t$$eb)))))r   c                    ddl m}  |d          } |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                    ddl m}  |d          } |d          } |d          }|                     ||          }|                     ||          }||z   }|                     t	          |          |||g           d S )Nr   r   r   r   IBazr   )r   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} ddlm}  |d          } |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   rI   ror   	C3SettingIBaseIDerivedT)zope.interfacerJ   r   rK   r   zope.interface.tests.test_ror   C3
STRICT_IROry   r*   r`   r|   rC   )	r   rJ   r   r   r   r   r   baser   s	            r   "test___add___overlapping_interfacez3DeclarationTests.test___add___overlapping_interface   sY    	-,,,,,%%%%%%;;;;;;::::::w''!>*uh77Yru'.. 	$ 	$==''D8OE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	5)(DEEE8U*;<<<ex&788888s   A..A25A2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   rI   implementedByimplementerr   r   c                       e Zd ZdS )PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr%   r   r   r   r   r   A  r8   r   r   c                       e Zd ZdS )SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr%   r   r   r   r   r   D  r8   r   r   c                       e Zd ZdS )ODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr%   r   r   r   Baser   G  r'   r   r   T)r   rJ   r   r   r   r   r   r   r   r*   r]   r|   rC   )
r   rJ   r   r   r   r   r   r   r   r   s
             r   0test___add___overlapping_interface_implementedByzADeclarationTests.test___add___overlapping_interface_implementedBy6  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   rr   ry   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   rp   rp      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   rp   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   rr   z(TestImmutableDeclaration._getTargetClassU  s    EEEEEE$$r   c                     ddl m} |S )Nr   )_empty)r)   r   )r   r   s     r   rA   z"TestImmutableDeclaration._getEmptyY  s    666666r   c                     dd l }|                    |                    |                                                     }|                     ||                                            d S )Nr   )pickleloadsdumpsrA   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_pickle]  sV    fll4>>+;+;<<==fdnn../////r   c                     |                       |                                             |                                            d S r/   )r   rr   rA   r   s    r   test_singletonz'TestImmutableDeclaration.test_singletonb  sF    "D  ""$$NN	
 	
 	
 	
 	
r   c                 `    |                      |                                 j        d           d S )Nr   )r*   rA   r|   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__h  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   )   )rA   r|   r*   assertRaisesr   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__k  s      ))3R888y)) 	# 	#"EO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   #A88A<?A<c                     |                                  }|j        }|                     i |           d|d<   |                     i |j                   d S )N   r   )rA   
dependentsr*   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependentss  sW      T"""QU-.....r   c                 T    |                                                      d            d S r/   )rA   rm   r   s    r   test_changedz%TestImmutableDeclaration.test_changed{  s&      &&&&&r   c                 j   |                      |                                                     |                      |                      |                                                     | d                     |                      |                                                     | d                     d S )NTrS   F)rh   rA   rV   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*   )rf   rA   rg   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   rc   )rA   r*   ri   rf   rg   )r   rE   attrss      r   test_v_attrsz%TestImmutableDeclaration.test_v_attrs  s    ~~+++ "f+++$((6**+++ ""f+++$((6**+++++r   N)r   r   r   rr   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   S  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   rr   zTestImplements._getTargetClass      ::::::r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTestImplements._makeOne  rz   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    r8   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   ?)ry   r*   inheritdeclaredr   rC   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))ry   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   ry   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          }ddlm}  |d          }|                      ||           ||                     |                     t           ||                    t           ||                               |                      ||          d k                |                     d  ||          k               |                      ||           ||          k                |                      ||          |k               |                      ||           ||          k               |                      ||          |k               |                      ||          |k               d S )	Nr   r   c                       e Zd ZdS )#TestImplements.test_sort.<locals>.ANr%   r   r   r   r  r    r8   r   r  c                       e Zd ZdS )#TestImplements.test_sort.<locals>.BNr%   r   r   r   Br    r8   r   r  r   r   )r)   r   rK   r   r*   hashrU   )r   r   r  r  r   r   s         r   	test_sortzTestImplements.test_sort  s   ======	 	 	 	 	 	 	 		 	 	 	 	 	 	 	;;;;;;~f%%q))==+;+;<<<mmA..//mmA6F6F1G1GHHHa((4/000}}Q///000a((==+;+;;<<<a((4/000a((MM!,<,<<===a((D0111a((D011111r   c                 d    G d d          }ddl m}  G d d          } G d d          } ||          } ||          } ||          }|                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k               |                     ||k               d S )	Nc                   &    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/   r0   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   r)  s     r   __ne__z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__  r+  r   N)r   r   r   r#  r&  r*  r-  r   r   r   Proxyr    sP        ( ( (, , ,. . .. . . . .r   r.  r   r   c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.ANr%   r   r   r   r  r0    r8   r   r  c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.BNr%   r   r   r   r  r2    r8   r   r  )r)   r   rU   rh   )r   r.  r   r  r  implementedByAimplementedByBproxys           r   test_proxy_equalityz"TestImplements.test_proxy_equality  s   	. 	. 	. 	. 	. 	. 	. 	. 	>=====	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 'q))&q))n%% 	.8999.8999.8999/000%/000.011150111/000%/00000r   c                 p   |                                  }|                     |j                   |                     d|j                   d|_        |                     d|j                   |                    d            |                     |j                   |                     d|j                   d S )N_super_cacher   )ry   rf   r8  rP   __dict__r   rm   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 )Nr8  )ry   rf   r8  rP   r9  rm   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   rr   ry   r  r}   r  r  r  r6  r:  r<  r   r   r   r   r     s          3 3 3     3 3 3A A A
F F F
2 2 2&&1 &1 &1P
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)   r@  )r   r@  s     r   rr   z*Test_implementedByFallback._getTargetClass  s    EEEEEE$$r   c                 6     |                                  |i |S r/   ru   rv   s      r   _callFUTz#Test_implementedByFallback._callFUT  rz   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__implemented__Nr   r   r   	__slots__r   r   r   r&   rE            ,IIIr   r&   )rG  r*   rC   rB  r   r&   r"   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/   r0   r   s    r   	_get_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_impl  r'  r   c                     t           r/   )r   )r   vals     r   	_set_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_impl   s    r   c                     t                      r/   r0   r   s    r   __call__zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__#  s    )+++r   N)r   r   r   rQ  rT  propertyrG  rV  r   r   r   r&   rO    sR        , , ,     &hy)<<O, , , , ,r   r&   r   r   rB  rK  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 }|||<   |                     |                     |          |u            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>.FoorF  NrH  r   r   r   r&   r^  +  rJ  r   r&   #BuiltinImplementationSpecifications)r   r\  rG  rl   _MonkeyDictrU   rB  )r   r\  r&   r"   regspecss         r   4test_dictless_wo_existing_Implements_w_registrationszOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations)  s    //////	- 	- 	- 	- 	- 	- 	- 	-cee"hh>@ @ 	7CHE#JOODMM#..#5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   0B  BBc                     ddl m}  |            } G d d          } |            }||_        |                     |                     |          |u            d S )Nr   r   c                       e Zd ZdZdS )KTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorF  NrH  r   r   r   r&   rf  8  rJ  r   r&   )r)   r   rG  rU   rB  )r   r   r   r&   r"   s        r   #test_dictless_w_existing_Implementsz>Test_implementedByFallback.test_dictless_w_existing_Implements5  s    ::::::z||	- 	- 	- 	- 	- 	- 	- 	-cee"c**d233333r   c                     ddl m}  G d d          } |            } |d          }|f|_        |                     t	          |                     |                    |g           d S )Nr   r   c                       e Zd ZdZdS )OTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.FoorF  NrH  r   r   r   r&   rj  @  rJ  r   r&   r   )rK   r   rG  r*   rC   rB  )r   r   r&   r"   r   s        r   'test_dictless_w_existing_not_ImplementszBTest_implementedByFallback.test_dictless_w_existing_not_Implements>  s    ;;;;;;	- 	- 	- 	- 	- 	- 	- 	-cee~f%%#gdmmC0011D6:::::r   c                     ddl m}  |             G fdd          }|                     |                     |          u            d S )Nr   r   c                       e Zd Z ZdS )JTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   r   rG  r   s   r   r&   rn  J          "OOOr   r&   r)   r   rU   rB  r   r   r&   r   s      @r   "test_w_existing_attr_as_Implementsz=Test_implementedByFallback.test_w_existing_attr_as_ImplementsG  {    ::::::z||	# 	# 	# 	# 	# 	# 	# 	# 	# 	#c**d233333r   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   r[  r   r_  zclassImplements())r   r\  r)   r   r`  r*   rC   rB  tupledictr   r  r   )r   r\  r   rb  typspecs         r   test_builtins_added_to_cachez7Test_implementedByFallback.test_builtins_added_to_cacheN  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                    |u            |                     |                     t
                    |u            |                     |                     t                    |u            d d d            d S # 1 swxY w Y   d S )Nr   r[  r_  )	r   r\  rl   r`  rx  rC   ry  rU   rB  )r   r\  t_specl_specd_specrb  s         r   test_builtins_w_existing_cachez9Test_implementedByFallback.test_builtins_w_existing_cache]  s*   //////!'688VXX>@ @ 	;CH!E%L E$K E$KOODMM%00F:;;;OODMM$//69:::OODMM$//69:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   B,C::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  k  r8   r   r&   r*   rC   rB  r   r&   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertionsi  Z    	 	 	 	 	 	 	 	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  q  r8   r   r&   r  r  s     r   test_no_assertionsz-Test_implementedByFallback.test_no_assertionso  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>.FooNro  r   r   r   r&   r  v          "OOOr   r&   rX  rK  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factoryu  sU    	# 	# 	# 	# 	# 	# 	# 	#cee)T]C88888r   c                    ddl m}  G d d          } |            }d|_        |                     |          }|                     |j        d           |                     |j        |           |                     |j        |           |                     |j        |           | 	                    d|j
                   d S )Nr   )objectSpecificationDescriptorc                       e Zd ZdZd ZdS )FTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                     t                      r/   r0   r   s    r   rV  zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__  r'  r   )r   r   r   rG  rV  r   r   r   r&   r  }  s(        "O, , , , ,r   r&   r"   z*zope.interface.tests.test_declarations.foo__provides__)r)   r  r   rB  r*   r   r
  rG  __providedBy__rP   r9  )r   r  r&   r"   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	, 	, 	, 	, 	, 	, 	, 	,
 cee}}S!!E	G 	G 	GdlC(((c)4000c(*GHHH66666r   c                    ddl m}  G d d          }|                     |          }|                     |j        d           |                     |j        |           |                     |j        |           |                     |j	        |           |                     |j
        |           |                     |j
        |j	                   d S )Nr   ClassProvidesc                       e Zd ZdZdS )DTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNro  r   r   r   r&   r    r  r   r&   z*zope.interface.tests.test_declarations.Foo)r)   r  rB  r*   r   r   r
  rG  r   r  r  )r   r  r&   r{  s       r   test_w_None_no_bases_w_classz7Test_implementedByFallback.test_w_None_no_bases_w_class  s    ======	# 	# 	# 	# 	# 	# 	# 	#}}S!!E	G 	G 	GdlC(((c)4000c0-@@@c.>>>)3+=>>>>>r   c                     ddl m}  |             G fdd          }|                     |                     |          u            d S )Nr   r   c                       e Zd Z ZdS )BTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNro  rp  s   r   r&   r    rq  r   r&   rr  rs  s      @r   test_w_existing_Implementsz5Test_implementedByFallback.test_w_existing_Implements  ru  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   rI   r   c                       e Zd ZdS )STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )RTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   r    r'   r   r   c                       e Zd ZdS )UTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   Derivedr    r'   r   r  r   rJ   r)   r   r*   rC   rB  super	r   rJ   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   rI   r   c                       e Zd ZdS )[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr%   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>.IDerivedNr%   r   r   r   r   r    r8   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    r'   r   r   c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr%   r   r   r   Child1r    r8   r   r  c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr%   r   r   r   Child2r    r8   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    r'   r   r  r  )r   rJ   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   rI   r   c                       e Zd ZdS )]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr%   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>.IDerivedNr%   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>.BaseNr%   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>.Child1Nr%   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>.Child2Nr%   r   r   r   r  r    r'   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    r'   r   r  )r   rJ   r)   r   r*   __mro__rl   rC   rB  r  rf   _dependents)r   rJ   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 	 	 
		 	7FFD&*QRRR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   rI   r   c                       e Zd ZdS )YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   r    r8   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    r8   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    r8   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    r'   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   rI   r   c                       e Zd ZdS )HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )JTest_implementedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r  r    r'   r   r  r  )r   rJ   r   r   r   r  r  r  s          r   test_super_when_base_is_objectz9Test_implementedByFallback.test_super_when_base_is_object  s'   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
X			 	 	 	 	 	 	 
		 	dmmG4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   rI   r   c                       e Zd ZdS )RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   IM1r  !  r8   r   r  c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   IM2r  $  r8   r   r  c                       e Zd ZdS )UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   r  '  r8   r   r   c                       e Zd ZdS )WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   
IUnrelatedr  *  r8   r   r  c                       e Zd ZdS )QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r  -  r'   r   r   c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   M1r  1  r'   r   r  c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   M2r  5  r'   r   r  c                       e Zd ZdS )TTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r  r  9  r'   r   r  r   rJ   r)   r   r  r*   rC   rB  r   rJ   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_inheritance  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   rr   _getFallbackClassrB  rL  rY  rc  rg  rk  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r  s   @r   r>  r>  	  s       % % %
 (3 3 37 7 79 9 9
7 
7 
74 4 4; ; ;4 4 44 4 4
; 
; 
;7 7 77 7 79 9 97 7 7"? ? ?4 4 4< < < < <,< < < < <8+ + + + +@7 7 7 7 7,7 7 7 7 7$/" /" /" /" /" /" /" /" /"r   r>  c                       e Zd Zd ZdS )Test_implementedByc                     ddl m} |S )Nr   r   r  )r   r   s     r   rr   z"Test_implementedBy._getTargetClassP      ======r   Nr   r   r   rr   r   r   r   r
  r
  L  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/   r0   )r   clsifaces      r   rB  z_ImplementsTestMixin._callFUTX  s    !!r   Nz.Foo	not givenc                 >   ddl m} ddlm}  |d          }|                     ||          }|                     ||           |j        }	||                     |	|           |                     |	j        |           |dk    r|n|}|                     |	j	        |           |                     |j        |	           | j
        rV|                     |j        |           |                     |j        |           |                     |j        |j                   ||fS )Nr   r  r   r   r  )r)   r  rK   r   rB  r   rG  r*   r   r
  FUT_SETS_PROVIDED_BYr   r  r  )
r   r&   	orig_spec	spec_namer
  r  r   r   returnedr{  s
             r   _check_implementerz'_ImplementsTestMixin._check_implementer\  sC    	>=====;;;;;;~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  x  r8   r   r&   )r  r  s     r   r,   z_ImplementsTestMixin.test_classw  sD    	 	 	 	 	 	 	 	$$$$$r   )r   r   r   r  rB  r  r,   r   r   r   r  r  U  s\        " " "
 &*%-%6#.   6% % % % %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   rB  z!Test_classImplementsOnly._callFUT  s,    CCCCCCC'''
r   c                 p   ddl m} ddlm}  |d          } |d          } ||          |f_         G fdd          }|_        |                     ||           |                     |j        u            | 	                    j        d            | 	                    j        |f           d S )Nr   r   r   r   r   c                       e Zd Z ZdS )@Test_classImplementsOnly.test_w_existing_Implements.<locals>.FooNro  rp  s   r   r&   r#    rq  r   r&   )
r)   r   rK   r   r  r
  rB  rU   rG  r*   r   r   r   r   r   r&   r   s         @r   r  z3Test_classImplementsOnly.test_w_existing_Implements  s    ::::::;;;;;;~f%%~f%%z$	# 	# 	# 	# 	# 	# 	# 	# 	# 	#c4   +t3444t,,,00000r   c                     ddl m} ddlm}  |d          } ||           G fdd          }|                     |dd            d S )	Nr   r   r   r   c                       e Zd Z ZdS )0Test_classImplementsOnly.test_class.<locals>.FooNro  )old_specs   r   r&   r'    s        &OOOr   r&   r	  r
  )r)   r   rK   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&   r)  c                       e Zd ZdS )RTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr%   r   r   r   Childr,    r8   r   r-  )r  typerl   rB  rU   r   )r   r   r   r-  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  rB  r  r,   r/  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)   r4  rf   )r   r  r  r4  results        r   rB  zTest_classImplements._callFUT  s>    ?????? e,,&!!!
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   r-  r8    r8   r   r-  rG  r  r  r   )r  rB  r   r9  rP   rG  r*   r  r
  rU   
providedBy)r   r   r   r-  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&   r=    r8   r   r&   )2_Test_classImplements__check_implementer_redundantr  s     r   3test_redundant_implementer_empty_class_declarationszHTest_classImplements.test_redundant_implementer_empty_class_declarations  sD    	 	 	 	 	 	 	 	**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   rI   r   r   r   c                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr%   r   r   r   r&   rB    r8   r   r&   Fc                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr%   r   r   r   BazrD            r   rE  )r   rJ   r   r   r   r   r   r   rB  r*   rC   )r   rJ   r   r   r   r&   rE  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} ddlm}  |d          } |d          } ||          |f_         G fdd          }|_        |                     ||           |                     |j                   | 	                    j        |           | 	                    j        | 
                    ||                     d S )Nr   r   r   r   r   c                       e Zd Z ZdS )<Test_classImplements.test_w_existing_Implements.<locals>.FooNro  rp  s   r   r&   rO    rq  r   r&   )r)   r   rK   r   r  r
  rB  r   rG  r*   rL  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} ddlm}  |d          } |d          } |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   r   IRootISecondRootIExtendsRootRootc                       e Zd Z ZdS )FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nro  	impl_roots   r   Root1rV            'OOOr   rY  c                       e Zd Z ZdS )FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nro  rW  s   r   Root2r\    rZ  r   r]  ExtendsRoot1c                       e Zd Z ZdS )LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNro  )impl_extends_roots   r   ExtendsRootr`    s        /OOOr   rb  )r)   r   rK   r   r!   r  r
  rB  r   rG  r*   rL  r|   )r   r   r   rQ  rR  rS  rY  r]  rb  ra  rX  s            @@r   "test_w_existing_Implements_w_basesz7Test_classImplements.test_w_existing_Implements_w_bases  s   ::::::;;;;;;w''$n]33%~nuh??$$VU33	#X		( 	( 	( 	( 	( 	( 	( 	( 	( 	(	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ',,^\JJ&2_"	0 	0 	0 	0 	0 	0 	0% 	0 	0 	0$/!k;///k13DEEE*2K@@@*3,,\;HH	J 	J 	J*4,,\;GG9,V	X 	X 	X 	X 	Xr   N)
r   r   r   rB  r>  r?  rG  rL  r  rc  r   r   r   r1  r1    s          3 3 3&0 0 0
D D D&/ / /: : :"X X X X Xr   r1  c                       e Zd Zd Zd ZdS )Test_classImplementsFirstc                 T    ddl m}  |||          }|                     |           |S )Nr   )classImplementsFirst)r)   rg  rf   )r   r  r  rg  r5  s        r   rB  z"Test_classImplementsFirst._callFUT  s?    DDDDDD%%c511&!!!
r   c                 
    ||fS r/   r   rI  s      r   rL  z(Test_classImplementsFirst._order_for_two  s    ..r   N)r   r   r   rB  rL  r   r   r   re  re    s2          / / / / /r   re  c                       e Zd Zd Zd ZdS )Test__implements_advicec                     ddl m}  ||i |S )Nr   )_implements_advice)r)   rl  )r   rw   rx   rl  s       r   rB  z Test__implements_advice._callFUT   *    BBBBBB!!4.2...r   c                 L   ddl m} ddl m ddlm}  |d           G fdd          }|                     |           |                     d|j                   |                     |j	        |           | 
                    t          |j	                  g           d S )	Nr   r   r3  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   r4  s   r   r&   rp  )  s        +/'?)C&&&r   r&   rq  )r)   r   r4  rK   r   rB  rP   r9  r   rG  r*   rC   )r   r   r   r&   r   r4  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c1:>>>c122TF;;;;;r   N)r   r   r   rB  rr  r   r   r   rj  rj    s2        / / /
< 
< 
< 
< 
<r   rj  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   rr   z Test_implementer._getTargetClass3  rs   r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTest_implementer._makeOne7  rz   r   c                 ,     | j         | } ||          S r/   ry   )r   r  ifaces	decorators       r   rB  zTest_implementer._callFUT:  s    !DM6*	y~~r   c                     ddl m}  |d          }|                     |          }|                     t          |t                                 d S r   )rK   r   ry   r   r   rl   )r   r   r   rz  s       r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attr>  sV    ;;;;;;~f%%MM$''	)Y99999r   c                 r   ddl m}  |d          } G d d          } |            }|                     |          } ||          }|                     ||u            |j        }|                     |j        d           |                     |j                   | 	                    |j        |           d S )Nr   r   r   c                       e Zd ZdS );Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr%   r   r   r   r&   r  G  r8   r   r&   z(zope.interface.tests.test_declarations.?)
rK   r   ry   rU   rG  r*   r   rf   r
  r   )r   r   r   r&   r"   rz  r  r{  s           r   test_nonclass_can_assign_attrz.Test_implementer.test_nonclass_can_assign_attrD  s    ;;;;;;~f%%	 	 	 	 	 	 	 	ceeMM$''	9S>>C((("(RSSS$,(((c)400000r   c                 |   dd l }ddlm}  |d          }t          |                                          }t          d          D ]%} G d d          }|                     ||           &|                                 t          |                                          }d}|                     |||z              d S )Nr   r   r   il  c                       e Zd ZdS )HTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr%   r   r   r   	TestClassr  `  rF  r   r  )	gcrK   r   lenget_objectsrangerB  collectassertLessEqual)	r   r  r   r   begin_count_r  	end_countfudge_factors	            r   $test_does_not_leak_on_unique_classesz5Test_implementer.test_does_not_leak_on_unique_classesR  s     				;;;;;;~f%%"..**++t 	+ 	+A        MM)T****


(())	 Yl(BCCCCCr   N)	r   r   r   rr   ry   rB  r|  r  r  r   r   r   rt  rt  1  ss          3 3 3  : : :1 1 1D D D D Dr   rt  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   rr   z%Test_implementer_only._getTargetClasst  s    @@@@@@r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTest_implementer_only._makeOnex  rz   r   c                 B    |                      |          } ||          S r/   rx  )r   r  r  rz  s       r   rB  zTest_implementer_only._callFUT{  s!    MM%((	y~~r   c                     ddl m}  |d          }|                     |          }d }|                     t          ||           d S )Nr   r   r   c                      t                      r/   r0   r   r   r   	_functionz6Test_implementer_only.test_function.<locals>._function      %'''r   )rK   r   ry   r   
ValueError)r   r   r   rz  r  s        r   r4   z#Test_implementer_only.test_function  sa    ;;;;;;~f%%MM$''		( 	( 	(*i;;;;;r   c                     ddl m}  |d          }|                     |          } G d d          }|                     t          ||j                   d S )Nr   r   r   c                       e Zd Zd ZdS ).Test_implementer_only.test_method.<locals>.Barc                     t                      r/   r0   r   s    r   _methodz6Test_implementer_only.test_method.<locals>.Bar._method  r'  r   N)r   r   r   r  r   r   r   Barr    s#        , , , , ,r   r  )rK   r   ry   r   r  r  )r   r   r   rz  r  s        r   test_methodz!Test_implementer_only.test_method  s~    ;;;;;;~f%%MM$''		, 	, 	, 	, 	, 	, 	, 	, 	*i=====r   N)r   r   r   rr   ry   rB  r4   r  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   rr   z"ProvidesClassTests._getTargetClass  r  r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zProvidesClassTests._makeOne  rz   r   c                     ddl m}  |d          } G d d          }|                     ||          }|                     t	          |          |g           d S )Nr   r   r   c                       e Zd ZdS )?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   r   r   r   r   r&   r{  s        r   test_simple_class_one_interfacez2ProvidesClassTests.test_simple_class_one_interface  s    ;;;;;;~f%%	 	 	 	 	 	 	 	}}S$''ddV,,,,,r   c                    ddl m} ddlm}  |d          } G d d          }|                     ||          }|                                \  }}|                     ||           |                     |||f           d S )Nr   Providesr   r   c                       e Zd ZdS )/ProvidesClassTests.test___reduce__.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   )r)   r  rK   r   ry   r  r   r*   )r   r  r   r   r&   r{  klassrw   s           r   r  z"ProvidesClassTests.test___reduce__  s    888888;;;;;;~f%%	 	 	 	 	 	 	 	}}S$''oo''teX&&&T{+++++r   c                     ddl m}  |d          } G d d          }|                     ||          }||_        |                     |j        |           d S )Nr   r   r   c                       e Zd ZdS )2ProvidesClassTests.test___get___class.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   rK   r   ry   r  r   r  s        r   test___get___classz%ProvidesClassTests.test___get___class  s    ;;;;;;~f%%	 	 	 	 	 	 	 	}}S$''c&-----r   c                     ddl m}  |d          } G d d          |                     |          }|_        fd}|                     t
          |           d S )Nr   r   r   c                       e Zd ZdS )5ProvidesClassTests.test___get___instance.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   c                  &                 } | j         S r/   )r  )r"   r&   s    r   _testz7ProvidesClassTests.test___get___instance.<locals>._test  s    #%%C##r   )rK   r   ry   r  r   AttributeError)r   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   rr   ry   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_mrosrT   _do_calculate_ro)r   r  r  s     r   r  zQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_ro      $55diX\5]]]r   Nr   r   r   r  r  s   r   StrictProvidesr    5        ^ ^ ^ ^ ^ ^ ^r   r  r  rr   )r   r  r  r  s     @r   rr   z(ProvidesClassStrictTests._getTargetClass  s_    //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   rI   r   r   c                       e Zd ZdS )MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )LProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr%   r   r   r   r   r    r'   r   r   )r   rJ   r   r   ry   r*   r]   rl   )r   rJ   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   rr   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   rr   z%TestProvidesClassRepr._getTargetClass  r  r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTestProvidesClassRepr._makeOne  rz   r   c                 d   ddl m}  |d          }|j        dk    sJ |j        t          k    sJ t	          |          d                    t                    k    sJ  |d          }|                     t          |           ||          }|                     t	          |          d           d S )Nr   r   r   z<InterfaceClass {}.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))	rK   r   r   r   r  formatry   r.  r*   )r   r   r   r   insts        r   test__repr__z"TestProvidesClassRepr.test__repr__  s    ;;;;;;~f%%}&&&&(****Dzz7>>xHHHHHH~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_use   sL     	/.....%NNW	
 	
 	
 	
 	
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_pickle
  s    ......%62Q677 	. 	.E""6#788 . .Xu---. . . . . . . . . . . . . . .	. 	.s   A((A,	/A,	c                    dd l }ddlm} ddlm} ddlm} ddlm}  |d          } |d          }|j        }|`| 	                    t          |d|            |||           |j        }	|                     t          |	          d	            |||           |j        }	|                     t          |	          d
           |j        t                   }
t          |
d          rJ  ||
||           | 	                    t           |
d           |                     |
j        |	           |                     t          |	          d           d S )Nr   alsoProvidesdirectlyProvidesr   r  r   r   r  zAdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo)zGdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IFoo, IBar)zfdirectlyProvides(('zope.interface.tests.dummy', 'zope.interface.tests.test_declarations'), IFoo, IBar))sysr)   r  r  rK   r   r  r  r  
addCleanupsetattrr*   r  modulesr   hasattrdelattrr   )r   r  r  r  r   r  r   r   orig_providesr  	my_modules              r   #test__repr__directlyProvides_modulez9TestProvidesClassRepr.test__repr__directlyProvides_module  s   


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

 	UD!!!%NNU	
 	
 	
 K)	9n55555D$///N;;;i,h777NN	
 	
 	
 	
 	
r   c                     ddl m} ddlm}  |d          }|                     ||          }|xj        dz  c_        |xj        dz  c_        |                     t          |          d           d S )Nr   )
ModuleTyper   r   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))r)   r  rK   r   ry   _v_module_namesr*   r  )r   r  r   r   r  s        r   )test__repr__module_provides_cached_sharedz?TestProvidesClassRepr.test__repr__module_provides_cached_sharedB  s    ::::::;;;;;;~f%%}}Z.. 00 33JJG	
 	
 	
 	
 	
r   c                     ddl m}  |dd          } |dd          } |d          }|                     t          |           |||          }|                     t          |          d           d S )	Nr   r   r   mod1r   mod2r   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)rK   r   ry   r.  r*   r  r   r   r   IFoo2r   r  s         r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_namesO  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   rI   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  a  r  r   r  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r   rJ   r   r.  ry   r*   r  )r   rJ   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Q	
 	
 	
 	
 	
r   c                     |                      t          |                     }|                     t          |          d           d S )Nz'directlyProvides(TestProvidesClassRepr)ry   r.  r*   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfacesl  sG    }}T$ZZ((JJ5	
 	
 	
 	
 	
r   c                       G  fdd          }                       |                      }                     t          |          d           d S )Nc                   $    e Zd ZdZ fdZd ZdS );TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr   c                 .                         d          S )NzShould not call str)r   )r  r   s    r   <lambda>zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.<lambda>v  s    		*? @ @ r   c                     dS )Nz<Object>r   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__x  s    !zr   N)r   r   r   r|   __str__r  r   s   r   Objectr  t  s7        I@@@@G" " " " "r   r  zdirectlyProvides(<Object>))ry   r*   r  )r   r  r  s   `  r   test__repr__non_classz+TestProvidesClassRepr.test__repr__non_classs  s|    	" 	" 	" 	" 	" 	" 	" 	" 	" 	" }}VVXX&&JJ(	
 	
 	
 	
 	
r   c                     ddl m} ddl m} ddlm}  |d          } ||           G d d                      } | |                      }|                     t          |          d           d S )	Nr   r   r9  r   r   c                       e Zd ZdS )DTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr%   r   r   r   r&   r     r'   r   r&   classImplements(Foo, IFoo))r)   r   r9  rK   r   r*   r  )r   r   r9  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} ddlm}  |d          } |d          } ||           G d d	                      } |            } |||            ||          }	|                     t          |	          d
           d S )Nr   r  r   r  r   r   r   c                       e Zd ZdS )FTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr%   r   r   r   r&   r%    r'   r   r&   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r)   r  r   r9  rK   r   r*   r  )
r   r  r   r9  r   r   r   r&   r"   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   rr   ry   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   rw   rx   r  s       r   rB  zTest_Provides._callFUT  s)    888888x$$$$r   c                 V   ddl m} ddlm}  |d          }i } G d d          }t	          ||          5  |                     ||          }d d d            n# 1 swxY w Y   |                     t          |          |g           |                     |||f         |u            d S )Nr   r[  r   r   c                       e Zd ZdS ).Test_Provides.test_no_cached_spec.<locals>.FooNr%   r   r   r   r&   r,    r8   r   r&   InstanceDeclarations)	r   r\  rK   r   _MonkeyrB  r*   rC   rU   )r   r\  r   r   cacher&   r{  s          r   test_no_cached_specz!Test_Provides.test_no_cached_spec  s!   //////;;;;;;~f%%	 	 	 	 	 	 	 	\>>> 	, 	,==d++D	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,ddV,,,sDk*d233333s   AA"Ac                 "   ddl m} ddlm}  |d          }t	                      } G d d          }||f|i}t          ||          5  |                     ||          }d d d            n# 1 swxY w Y   |                     ||u            d S )Nr   r[  r   r   c                       e Zd ZdS )-Test_Provides.test_w_cached_spec.<locals>.FooNr%   r   r   r   r&   r4    r8   r   r&   r-  )r   r\  rK   r   rl   r/  rB  rU   )r   r\  r   r   priorr&   r0  r{  s           r   test_w_cached_specz Test_Provides.test_w_cached_spec  s   //////;;;;;;~f%%	 	 	 	 	 	 	 	te$\>>> 	, 	,==d++D	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,&&&&&s   
A--A14A1N)r   r   r   rB  r1  r6  r   r   r   r(  r(    sA        % % %
4 
4 
4
' 
' 
' 
' 
'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   rw   rx   r  s       r   rB  zTest_directlyProvides._callFUT  *    @@@@@@,,,,r   c                    ddl m} ddlm}  |d          } G d d          } |            }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r   r   c                       e Zd ZdS )7Test_directlyProvides.test_w_normal_object.<locals>.FooNr%   r   r   r   r&   r=    r8   r   r&   	r)   r  rK   r   rB  r   r  r*   rC   r   r  r   r   r&   objs         r   test_w_normal_objectz*Test_directlyProvides.test_w_normal_object      ======;;;;;;~f%%	 	 	 	 	 	 	 	ceec4   c.>>>c.//$88888r   c                    ddl m} ddlm}  |d          } G d d          }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r   r   c                       e Zd ZdS )/Test_directlyProvides.test_w_class.<locals>.FooNr%   r   r   r   r&   rE    r8   r   r&   )	r)   r  rK   r   rB  r   r  r*   rC   r   r  r   r   r&   s        r   test_w_classz"Test_directlyProvides.test_w_class  s    ======;;;;;;~f%%	 	 	 	 	 	 	 	c4   c.>>>c.//$88888r   c                 $   ddl m} ddlm}  |d          }i  G fdd          } |            }|                     ||           |                     d         |           |                     t          d                   |g           d S )Nr   r  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  r0   r%  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__  s    !&r   Nr   r   r   rM  rQ  rP  s   r   r&   rJ    s=        0 0 0
' ' ' ' ' ' 'r   r&   r  )r)   r  rK   r   rB  r   r*   rC   )r   r  r   r   r&   r@  rP  s         @r   test_w_classless_objectz-Test_directlyProvides.test_w_classless_object  s    ======;;;;;;~f%%	' 	' 	' 	' 	' 	' 	' 	' 	' 	' ceec4   h~6FFFh~677$@@@@@r   N)r   r   r   rB  rA  rG  rT  r   r   r   r8  r8    sU        - - -	9 	9 	99 9 9A A A A Ar   r8  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   rw   rx   r  s       r   rB  zTest_alsoProvides._callFUT  s)    <<<<<<|T(R(((r   c                    ddl m} ddlm}  |d          } G d d          } |            }|                     ||           |                     |j        |           |                     t          |j                  |g           d S )Nr   r  r   r   c                       e Zd ZdS )8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r&   rZ    r8   r   r&   r>  r?  s         r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_provides  rB  r   c                 R   ddl m} ddl m} ddlm}  |d          } |d          } G d d          } |            } |||           |                     ||           |                     |j        |           |                     t          |j                  ||g           d S )	Nr   r  r  r   r   r   c                       e Zd ZdS )7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr%   r   r   r   r&   r^    r8   r   r&   )
r)   r  r  rK   r   rB  r   r  r*   rC   )r   r  r  r   r   r   r&   r@  s           r   test_w_existing_providesz*Test_alsoProvides.test_w_existing_provides  s    ======@@@@@@;;;;;;~f%%~f%%	 	 	 	 	 	 	 	ceed###c4   c.>>>c.//$>>>>>r   N)r   r   r   rB  r[  r_  r   r   r   rV  rV    sA        ) ) )	9 	9 	9? ? ? ? ?r   rV  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)   rc  )r   rw   rx   rc  s       r   rB  zTest_noLongerProvides._callFUT  r:  r   c                     ddl m}  |d          } G d d          } |            }|                     ||           |                     t	          |j                  g            d S )Nr   r   r   c                       e Zd ZdS )<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r&   rf    r8   r   r&   )rK   r   rB  r*   rC   r  )r   r   r   r&   r@  s        r   r[  z/Test_noLongerProvides.test_wo_existing_provides  s    ;;;;;;~f%%	 	 	 	 	 	 	 	ceec4   c.//44444r   c                     ddl m} ddlm}  |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_hit.<locals>.FooNr%   r   r   r   r&   ri  '  r8   r   r&   r)   r  rK   r   rB  r*   rC   r  )r   r  r   r   r&   r@  s         r   test_w_existing_provides_hitz2Test_noLongerProvides.test_w_existing_provides_hit#  s    @@@@@@;;;;;;~f%%	 	 	 	 	 	 	 	ceed###c4   c.//44444r   c                    ddl m} ddlm}  |d          } |d          } G d d          } |            } |||           |                     ||           |                     t          |j                  |g           d S )Nr   r  r   r   r   c                       e Zd ZdS )@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr%   r   r   r   r&   rn  3  r8   r   r&   rj  )r   r  r   r   r   r&   r@  s          r   test_w_existing_provides_missz3Test_noLongerProvides.test_w_existing_provides_miss.  s    @@@@@@;;;;;;~f%%~f%%	 	 	 	 	 	 	 	ceed###c4   c.//$88888r   c                     ddl m} ddlm}  |d          } ||           G d d                      } |            }|                     t
          | j        ||           d S )Nr   r   r   r   c                       e Zd ZdS )DTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr%   r   r   r   r&   rr  >  r'   r   r&   )r)   r   rK   r   r   r  rB  )r   r   r   r   r&   r@  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   rB  r[  rk  ro  rs  r   r   r   ra  ra    sd        - - -5 5 5	5 	5 	5
9 
9 
9@ @ @ @ @r   ra  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)   rx  r   rx  s     r   rr   z.ClassProvidesBaseFallbackTests._getTargetClassG      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   r#  zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__P  s    	#$   r   N)r   r   r   r#  r   r   r   r  r~  O  s#        % % % % %r   r  ru   )r   r  
implementsr  s       r   ry   z'ClassProvidesBaseFallbackTests._makeOneL  sL    	% 	% 	% 	% 	%d**,, 	% 	% 	% wuj)))r   c                     ddl m}  |d          } G d d          }|                     ||          x}|_        |                     |j        |u            d S )Nr   r   r   c                       e Zd ZdS )GClassProvidesBaseFallbackTests.test_w_same_class_via_class.<locals>.FooNr%   r   r   r   r&   r  X  r8   r   r&   )rK   r   ry   r  rU   )r   r   r   r&   cpbps        r   test_w_same_class_via_classz:ClassProvidesBaseFallbackTests.test_w_same_class_via_classU  s    ;;;;;;~f%%	 	 	 	 	 	 	 	"&--T":"::s(D011111r   c                     ddl m}  |d          } G d d          } |            }|                     ||          |_        |                     |j        |           d S )Nr   r   r   c                       e Zd ZdS )JClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr%   r   r   r   r&   r  `  r8   r   r&   r  )r   r   r   r&   r"   s        r   test_w_same_class_via_instancez=ClassProvidesBaseFallbackTests.test_w_same_class_via_instance]  s    ;;;;;;~f%%	 	 	 	 	 	 	 	cee==d33c&-----r   c                 0   ddl m}  |d          } G d d          } G d d|          } |            }|                     ||          |_        |                     t
          t          |d           |                     t
          t          |d           d S )	Nr   r   r   c                       e Zd ZdS )BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr%   r   r   r   r&   r  i  r8   r   r&   c                       e Zd ZdS )BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr%   r   r   r   r  r  k  r8   r   r  r  )rK   r   ry   r  r   r  getattr)r   r   r   r&   r  bars         r   test_w_different_classz5ClassProvidesBaseFallbackTests.test_w_different_classf  s    ;;;;;;~f%%	 	 	 	 	 	 	 		 	 	 	 	# 	 	 	cee==d33.'3GGG.'3GGGGGr   N)r   r   r   rr   ry   r  r  r  r   r   r   ru  ru  E  sd        ) ) )
* * *2 2 2. . .
H 
H 
H 
H 
Hr   ru  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   rr   z&ClassProvidesBaseTests._getTargetClassw  s    AAAAAA  r   c                     ddl m} |S rw  ry  rz  s     r   r  z(ClassProvidesBaseTests._getFallbackClass{  r{  r   N)r   r   r   rr   r  r   r   r   r  r  s  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   rr   z"ClassProvidesTests._getTargetClass  r  r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zClassProvidesTests._makeOne  rz   r   c                 v   ddl m} ddlm}  |d          } |d          } ||           G d d                      }|                     |t          |          |          x}|_        |                     |j        |u            |                     t           |            j                  |g           d S )Nr   r   r   r   r   c                       e Zd ZdS )7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   )
r)   r   rK   r   ry   r.  r  rU   r*   rC   r   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(B.///ccee011D6:::::r   c                 j   ddl m} ddlm}  |d          } |d          } ||           G d d                      }|                     |t          |          |          x}|_        |                     |                                t          |          |t          |          |ff           d S )Nr   r   r   r   r   c                       e Zd ZdS )/ClassProvidesTests.test___reduce__.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   )	r)   r   rK   r   ry   r.  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   rr   ry   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   rr   z(ClassProvidesStrictTests._getTargetClass  s_    //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   rI   r   r   c                       e Zd ZdS )MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )QClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr%   r   r   r   	metaclassr    r'   r   r  r  )	r   rJ   r   r   r.  rl   ry   r*   r]   )r   rJ   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   rr   z%TestClassProvidesRepr._getTargetClass  r  r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTestClassProvidesRepr._makeOne  rz   r   c                     |                      t          |           t                    }|                     t          |          d           d S )Nz'directlyProvides(TestClassProvidesRepr)r  r  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__empty  sI    }}T$ZZ..JJ5	
 	
 	
 	
 	
r   c                     ddl m}  G d d|          }|                     t          |           t          |          }|                     t          |          d           d S )Nr   rI   c                       e Zd ZdZdS )=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr	  r   r   r   r   r    r  r   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rJ   ry   r.  r*   r  )r   rJ   r   r  s       r   test__repr__providing_onez/TestClassProvidesRepr.test__repr__providing_one  s    ,,,,,,	 	 	 	 	9 	 	 	 }}T$ZZt44JJ;	
 	
 	
 	
 	
r   c                     ddl m}  |dd          } |dd          } |d          }|                     t          |           t          |||          }|                     t          |          d           d S )	Nr   r   r   r  r  r   r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  s         r   r  z1TestClassProvidesRepr.test__repr__duplicate_names  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} ddlm}  |d          } ||           G d d                      } ||          }|                     t          |          d           d S )	Nr   r   r   r   r   c                       e Zd ZdS )<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   r!  )r)   r   r   rK   r   r*   r  )r   r   r   r   r   r&   r  s          r   test__repr__implementedByz/TestClassProvidesRepr.test__repr__implementedBy  s    ======;;;;;;;;;;;;~f%%	T			 	 	 	 	 	 	 
		 }S!!JJ(	
 	
 	
 	
 	
r   c                 F   ddl m}  G d d          } | |                      }|                     t          |          d                    t
                                |            }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   rV  z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__	  s    r   N)r   r   r   rV  r   r   r   Callabler    s#            r   r  zclassImplements({}.?)zclassImplements(Callable))r)   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#**844	
 	
 	

 HJJ
}QJJ'	
 	
 	
 	
 	
r   N)
r   r   r   rr   ry   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 Zd ZdS )Test_directlyProvidedByc                     ddl m}  ||i |S )Nr   )directlyProvidedBy)r)   r  )r   rw   rx   r  s       r   rB  z Test_directlyProvidedBy._callFUT  rm  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  "  r8   r   r&   r  rK  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance!  se    	 	 	 	 	 	 	 	ceedmmC0011266666r   c                     ddl m} ddlm}  |d          } ||           G d d                      } |            }|                     t          |                     |                    g            d S )Nr   r   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  +  r'   r   r&   )r)   r   rK   r   r*   rC   rB  )r   r   r   r   r&   r"   s         r   -test_w_declarations_in_class_but_not_instancezETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance'  s    ;;;;;;;;;;;;~f%%	T			 	 	 	 	 	 	 
		ceedmmC0011266666r   c                     ddl m} ddlm}  |d          } G d d          } |            } |||           |                     t          |                     |                    |g           d S )Nr   r  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  5  r8   r   r&   )r)   r  rK   r   r*   rC   rB  )r   r  r   r   r&   r"   s         r   -test_w_declarations_in_instance_but_not_classzETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class1  s    @@@@@@;;;;;;~f%%	 	 	 	 	 	 	 	ceed###dmmC0011D6:::::r   c                 ,   ddl m} ddl m} ddlm}  |d          } |d          } ||           G d d                      } |            } |||           |                     t          |                     |                    |g           d S )	Nr   r  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  A  r'   r   r&   )r)   r  r   rK   r   r*   rC   rB  )r   r  r   r   r   r   r&   r"   s           r   )test_w_declarations_in_instance_and_classzATest_directlyProvidedBy.test_w_declarations_in_instance_and_class;  s    @@@@@@;;;;;;;;;;;;~f%%~f%%	T			 	 	 	 	 	 	 
		ceed###dmmC0011D6:::::r   N)r   r   r   rB  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   rr   zTest_provider._getTargetClassK  s    888888r   c                 6     |                                  |i |S r/   ru   rv   s      r   ry   zTest_provider._makeOneO  rz   r   c                    ddl m} ddlm}  |d          }|                     |           G d d                      }|                     |j        |           |                     t          |j                  |g           d S )Nr   r  r   r   c                       e Zd ZdS )'Test_provider.test_w_class.<locals>.FooNr%   r   r   r   r&   r  V  r'   r   r&   )	r)   r  rK   r   ry   r   r  r*   rC   rF  s        r   rG  zTest_provider.test_w_classR  s    ======;;;;;;~f%%	t			 	 	 	 	 	 	 
		c.>>>c.//$88888r   N)r   r   r   rr   ry   rG  r   r   r   r  r  I  sA          3 3 39 9 9 9 9r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )Test_moduleProvidesc                     ddl m} ddlm}  |d          }d||d}i }d                    dd	g          }t          |||           |d
         }|                     t          |           d S )Nr   moduleProvidesr   r   zope.interface.tests.foor   r  r   
z
def foo():    moduleProvides(IFoo)r"   )r)   r  rK   r   joinr   r   r   )r   r  r   r   r   r   CODEr"   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} ddlm}  |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  r  zclass Foo(object):r  r)   r  rK   r   r  r   r   r   )r   r  r   r   r   r   r  s          r   test_called_from_classz*Test_moduleProvides.test_called_from_classo  s    >>>>>>;;;;;;~f%%7#14A Ayy &   y)) 	$ 	$ud###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A00A47A4c                     ddl m} ddlm}  |d          }d||d}d                    dg          }t          ||           |d	         }|                     t          |          |g           d S )
Nr   r  r   r   r  r  r  moduleProvides(IFoo)r  )r)   r  rK   r   r  r   r*   rC   )r   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} ddlm}  |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   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--A14A1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/   ru   rv   s      r   rB  z,Test_getObjectSpecificationFallback._callFUT  rz   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rL  )r  KeyError)r   r   rP  s     r   rM  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__  sT    ;&&(.../#D>) / / /(.../s     :c                     t                      r/   r0   )r   r   rO  s      r   rQ  z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__  r'  r   NrR  rS  s   r   r&   r    s=        / / / / /, , , , ,r   r&   rB  r*   rC   )r   r&   r"   r{  rP  s       @r   #test_wo_existing_provides_classlesszGTest_getObjectSpecificationFallback.test_wo_existing_provides_classless  sz    
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, cee}}S!!dR(((((r   c                     ddl m} ddlm}  |d          }d } |||           |                     |          }|                     ||j                   d S )Nr   r  r   r   c                      t                      r/   r0   r   r   r   r"   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo  r  r   )r)   r  rK   r   rB  r   r  )r   r  r   r   r"   r{  s         r   test_existing_provides_is_speczBTest_getObjectSpecificationFallback.test_existing_provides_is_spec  s    @@@@@@;;;;;;~f%%	( 	( 	(d###}}S!!dC,-----r   c                     d }t                      |_        |                     |          }|                     t	          |          g            d S )Nc                      t                      r/   r0   r   r   r   r"   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo  r  r   )rl   r  rB  r*   rC   )r   r"   r{  s      r   "test_existing_provides_is_not_speczFTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec  sP    	( 	( 	(!88}}S!!dR(((((r   c                     ddl m} ddlm}  |d          } G d d          } |            } |||           |                     |          }|                     t          |          |g           d S )Nr   r  r   r   c                       e Zd ZdS )GTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   )r)   r  rK   r   rB  r*   rC   )r   r  r   r   r&   r"   r{  s          r   test_existing_providesz:Test_getObjectSpecificationFallback.test_existing_provides  s    @@@@@@;;;;;;~f%%	 	 	 	 	 	 	 	ceed###}}S!!ddV,,,,,r   c                     ddl m} ddlm}  |d          } ||           G d d                      } |            }|                     |          }|                     t          |          |g           d S )Nr   r   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    r'   r   r&   )r)   r   rK   r   rB  r*   rC   r   r   r   r   r&   r"   r{  s          r   &test_wo_provides_on_class_w_implementszJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements  s    ;;;;;;;;;;;;~f%%	T			 	 	 	 	 	 	 
		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    r8   r   r&   r	  r   r&   r"   r{  s       r   'test_wo_provides_on_class_wo_implementszKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements  h    	 	 	 	 	 	 	 	cee}}S!!dR(((((r   c                 >    t          j        | | j        d           d S )Nr  expected_missingr   test_raisesrB  r   s    r   ,test_catches_only_AttributeError_on_provideszPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_provides  s"    $T4=>ZZZZZZr   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_class  s1    $T4=;26	8 	8 	8 	8 	8 	8r   c                 Z     G d d          }|                       |                       d S )Nc                   $    e Zd Z ee          ZdS )yTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeError.<locals>.FooN)r   r   r   r   r  r  r   r   r   r&   r*    s        ++N;;LLLr   r&   )rB  r  s     r   Htest_raises_AttributeError_when_provides_fails_type_check_AttributeErrorzlTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeError  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 )wTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr  r   r   r   r&   r.    s        ++L99LLLr   r&   r  r   )r   r/  rB  r*   	exceptionrw   )r   r&   excs      r   Ftest_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorzjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError  s    	: 	: 	: 	: 	: 	: 	: 	: |,, 	!MM##%%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	cm&8&;<<<<<s   AAAN)r   r   r   r  rr   rB  r
  r  r  r  r  r  r%  r'  r+  r2  r   r   r   r  r    s        . . .
 (O3 3 3) ) )". . .) ) )	- 	- 	-	- 	- 	-) ) )[ [ [8 8 8  	= 	= 	= 	= 	=r   r  c                       e Zd Zd ZdS )Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r)   r6  )r   r6  s     r   rr   z+Test_getObjectSpecification._getTargetClass  s    FFFFFF%%r   Nr  r   r   r   r4  r4    s#        & & & & &r   r4  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/   ru   rv   s      r   rB  z Test_providedByFallback._callFUT  rz   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>    r8   r   r&   r	  r  s       r   )test_wo_providedBy_on_class_wo_implementszATest_providedByFallback.test_wo_providedBy_on_class_wo_implements  r  r   c                     ddl m} ddlm}  |d          } G d d          } |            } |||          |_        |                     |          }|                     t          |          |g           d S )Nr   r  r   r   c                       e Zd ZdS )ATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr%   r   r   r   r&   rB  !  r8   r   r&   )r)   r  rK   r   r  rB  r*   rC   )r   r  r   r   r&   r"   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&   rF  )  r8   r   r&   )rl   r  rB  r*   rC   r  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec(  st    	 	 	 	 	 	 	 	cee#XX}}S!!dR(((((r   c                    ddl m} ddlm}  |d          } ||           G d d                      } |            }t	                      |_        |                     |          }|                     t          |          |g           d S )Nr   r   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&   rJ  4  r'   r   r&   )	r)   r   rK   r   rl   r  rB  r*   rC   r  s          r   1test_w_providedBy_invalid_spec_class_w_implementszITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements0  s    ;;;;;;;;;;;;~f%%	T			 	 	 	 	 	 	 
		cee#XX}}S!!ddV,,,,,r   c                      G d d          } |            }t                      |_        t                      x}|_        |                     |          }|                     ||u            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&   rN  =  r8   r   r&   rl   r  r  rB  rU   r   r&   r"   expectedr{  s        r   >test_w_providedBy_invalid_spec_w_provides_no_provides_on_classzVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class<  s    	 	 	 	 	 	 	 	cee#XX&,hh.3#}}S!!()))))r   c                     G d d          } |            }t                      |_        t                      x}|_        t                      |_        |                     |          }|                     ||u            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&   rU  F  r8   r   r&   rO  rP  s        r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classE  s    	 	 	 	 	 	 	 	cee#XX&,hh.3#!88}}S!!()))))r   c                 P   ddl m} ddlm}  |d          } ||           G d d                      } |            }t	                      |_        t	                      x|_        |_        |                     |          }|                     t          |          |g           d S )Nr   r   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&   rY  S  r'   r   r&   )
r)   r   rK   r   rl   r  r  rB  r*   rC   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_classO  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   rI   r   c                       e Zd ZdS )PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r]  `  r8   r   r   c                       e Zd ZdS )STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   r_  c  r8   r   r   c                       e Zd ZdS )OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   ra  f  r'   r   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   r  rc  j  r'   r   r  
r   rJ   r)   r   r*   rC   rB  r  rf   r  )r   rJ   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   rI   r   c                       e Zd ZdS )VTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   rh  z  r8   r   r   c                       e Zd ZdS )YTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   rj  }  r8   r   r   c                       e Zd ZdS )UTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   rl    r8   r   r   c                       e Zd ZdS )XTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr%   r   r   r   r  rn    r'   r   r  r  )
r   rJ   r   r   r   r   r  re  r  r  s
            r   r  zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacev  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   rI   r   c                       e Zd ZdS )ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   rq    r8   r   r   c                       e Zd ZdS )HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   rs    r8   r   r   c                       e Zd ZdS )GTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r  ru    r'   r   r  rd  )
r   rJ   r   r   r   r  re  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   rI   r  r   c                       e Zd ZdS )OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr%   r   r   r   r   rx    r8   r   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr%   r   r   r   r   rz    r8   r   r   c                       e Zd ZdS )NTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr%   r   r   r   r   r|    r'   r   r   c                       e Zd ZdS )QTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr%   r   r   r   r  r~    r8   r   r  )r   rJ   r)   r  r   r*   rC   rB  r  rf   r  )r   rJ   r  r   r   r   r   r  re  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   rI   r   c                       e Zd ZdS )OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   r  r    r8   r   r  c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   r  r    r8   r   r  c                       e Zd ZdS )RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd ZdS )TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   r  r    r8   r   r  c                       e Zd ZdS )NTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r    r'   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'   r   r  c                       e Zd ZdS )LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   r  r    r'   r   r  c                       e Zd ZdS )QTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r  r    r'   r   r  r  r   s                   r   r  z@Test_providedByFallback.test_super_multi_level_multi_inheritance  s   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	) 	 	 		 	 	 	 	) 	 	 		 	 	 	 	u 	 	 		 	 	 	 	 	 	 	 
U			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
S			 	 	 	 	 	 	 
		 
Xz	*	*	 	 	 	 	b" 	 	 
+	*	 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$  rB  rl   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  rr   rB  r?  rC  rG  rK  rR  rV  rZ  r  r  r  r  r  r  r'  r  r  s   @r   r8  r8  
  sI       " " "
 (O3 3 3) ) )	- 	- 	-) ) )
- 
- 
-* * ** * *- - -- - - - -47 7 7 7 7.( ( ( ( (,- - - - -:/" /" /" /" /"b7 7 7
? ? ? ? ? ? ?r   r8  c                       e Zd Zd ZdS )Test_providedByc                     ddl m} |S )Nr   r  )r)   r9  )r   r9  s     r   rr   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/   ru   rv   s      r   ry   z3ObjectSpecificationDescriptorFallbackTests._makeOne	  rz   r   c                     ddl m} ddlm}  |d          } G d d          } |||          |_        |                                 |_        |                     t          |j                  |g           d S )Nr   r  r   r   c                       e Zd ZdS )OObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr%   r   r   r   r&   r  	  r8   r   r&   )	r)   r  rK   r   r  ry   r  r*   rC   )r   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                 L   ddl m} ddl m} ddlm}  |d          } |d          } ||           G d d                      } |||          |_        |                                 |_         |            }|                     t          |j                  |g           d S )	Nr   r  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  $	  r'   r   r&   )
r)   r  r   rK   r   r  ry   r  r*   rC   )r   r  r   r   r   r   r&   r"   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} ddlm}  |d          } |d          } |d          } ||           G d	 d
                      } |||          |_        |                                 |_         |            }	 ||	|           | 	                    t          |	j                  ||g           d S )Nr   r  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  4	  r'   r   r&   )r)   r  r  r   rK   r   r  ry   r  r*   rC   )
r   r  r  r   r   r   r   r   r&   r"   s
             r   !test_accessed_via_inst_w_provideszLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides,	  s!   8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  ?	  r8   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__E	  s	    !!r   Nr   r   r   ry   r  rW  r  )r  r   s   r   r&   r  B	  sE        !]]__N" " " " X" " "r   r&   r  )	Exceptionr   r  )r   r&   r"   r  s   `  @r   6test_arbitrary_exception_accessing_provides_not_caughtzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught=	  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  O	  r8   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__U	  s    $$r   Nr  r   s   r   r&   r  R	  s;        !]]__N% % X% % %r   r&   r  )r  r  assertIsNotNone)r   r  r&   r"   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtM	  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   rI   r   c                       e Zd ZdS )ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr%   r   r   r   r   r  a	  r8   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__g	  s    tr   N)r   r   r   rW  r  r   r   r   r&   r  d	  s/           X  r   r&   r  )r   rJ   r   ry   r  r  rf   )r   rJ   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  rr   ry   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   rr   z2ObjectSpecificationDescriptorTests._getTargetClassu	  s    MMMMMM,,r   Nr  r   r   r   r  r  p	  s#        
- - - - -r   r  c                        e Zd Zd Zd Zd ZdS )r/  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  rx   r  rO  s    `   r   r#  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  rO  s         r   __exit__z_Monkey.__exit__	  sD    ///11 	- 	-JCDKe,,,,	- 	-r   Nr   r   r   r#  r  r  r   r   r   r/  r/  }	  sA        ( ( (  - - - - -r   r/  c                        e Zd Zd Zd Zd ZdS )r`  c                     || _         t          ||          | _        | j                                        | _        | j                                         | j                            |           d S r/   )r  r  targetcopyr  clearupdate)r   r  attrnamerx   s       r   r#  z_MonkeyDict.__init__	  s_    fh//+**,,2r   c                     | j         S r/   )r  r   s    r   r  z_MonkeyDict.__enter__	  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   r`  r`  	  sA            , , , , ,r   r`  ).r
  unittestr  r   r   #zope.interface.tests.test_interfacer   r   TestCaser   r;   rp   r   r   r>  r
  r  r  r1  re  rj  rt  r  r  r  r  r(  r8  rV  ra  ru  r  r  r  r  r  r  r  r  r4  r8  r  r  r  r/  r`  r   r   r   <module>r     s     1 1 1 1 1 1 6 6 6 6 6 6& & & & & &       (8 8 8 8 8" 8 8 8>7( 7( 7( 7( 7(H- 7( 7( 7(tH9 H9 H9 H9 H9, H9 H9 H9V@, @, @, @, @,4 @, @, @,Fp8 p8 p8 p8 p86&p8 p8 p8f@" @" @" @" @"!2 @" @" @"F
    3.  %% %% %% %% %% %% %% %%N-4 -4 -4 -4 -43X5F -4 -4 -4`cX cX cX cX cX/1B cX cX cXL	/ 	/ 	/ 	/ 	/ 4 	/ 	/ 	/< < < < <h/ < < <&=D =D =D =D =D+ =D =D =DB> > > > >4 > > >D/1 /1 /1 /1 /1* /1 /1 /1d    1   D{
 {
 {
 {
 {
H- {
 {
 {
~' ' ' ' 'H% ' ' '>+A +A +A +A +AH- +A +A +A\? ? ? ? ?) ? ? ?@.@ .@ .@ .@ .@H- .@ .@ .@b+H +H +H +H +HX%6 +H +H +H\) ) ) ) )2;) ) )= = = = =* = = =D& & & & &1 & & &RL
 L
 L
 L
 L
H- L
 L
 L
^+; +; +; +; +;h/ +; +; +;\9 9 9 9 9H% 9 9 9(9 9 9 9 9(+ 9 9 9xe= e= e= e= e=(*; e= e= e=P& & & & &"E"7& & &p? p? p? p? p?h/ p? p? p?h    -+  g$ g$ g$ g$ g$1B g$ g$ g$R- - - - -2- - -- - - - - - - - , , , , , , , , , ,r   