
    c:e                       d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	  G d d	e
          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e
          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        e          Z G d( d)ej        e          Z G d* d+ej                  Z G d, d-e          Z G d. d/ej                  Z G d0 d1ej                  Z  G d2 d3ej                  Z! G d4 d5ej                  Z" G d6 d7ej                  Z# G d8 d9ej                  Z$ G d: d;ee$          Z% G d< d=ej                  Z& G d> d?e&          Z' G d@ dAej                  Z( G dB dCej                  Z) G dD dEej        e          Z* G dF dGej                  Z+ G dH dIej                  Z, G dJ dKej                  Z- G dL dMe-e          Z. G dN dOej                  Z/ G dP dQe/e          Z0 G dR dSej                  Z1 G dT dUe1e          Z2 G dV dWe
          Z3 G dX dYe
          Z4dS )Zz@Test the new API for making and checking interface declarations
    N)_skip_under_py3k)PYTHON3)OptimizationTestMixin)MissingSomeAttrs)!NameAndModuleComparisonTestsMixinc                       e Zd Z	 ddZdS )_Py3ClassAdviceTc                    dd l }|                    d          5 }|                                 t          sBt	          |||           |                     t          |          d           	 d d d            dS 	 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recordDidn't raise TypeErrorF)	warningscatch_warningsresetwarningsr   execassertEquallenfail	TypeError)selfcodeglobslocsfails_under_py3kr   logs          Flib/python3.11/site-packages/zope/interface/tests/test_declarations.py_run_generated_codez#_Py3ClassAdvice._run_generated_code   sz    	$$D$11 	S""$$$ T5$'''  S1---	 	 	 	 	 	 	 	8T5$''' $ 8II6777	    	 	 	 	 	 	 	 	
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   AC:B#C#
B<-C;B<<CCC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t                                }|                     |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*   8           Dr"   r,   zope.interface.declarationsr'   objectr   __component_name__)r   r'   r,   s      r   
test_classzNamedTests.test_class5   sq    555555	v	 	 	 	 	& 	 	 
	 	/88888r"   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>.doFooA   s    %'''r"   )r/   r'   r   r1   )r   r'   r9   s      r   test_functionzNamedTests.test_function>   sV    555555	v	( 	( 
	( 	16:::::r"   c                     ddl m}  G d dt                    } |            }  |d          |           |                     |j        d           d S )Nr   r&   c                       e Zd ZdS )%NamedTests.test_instance.<locals>.FooNr+   r!   r"   r   r,   r=   J           Dr"   r,   r(   r.   )r   r'   r,   r(   s       r   test_instancezNamedTests.test_instanceG   s    555555	 	 	 	 	& 	 	 	ceefc/88888r"   N)r   r   r    r2   r:   r?   r!   r"   r   r$   r$   3   sA        9 9 9; ; ;9 9 9 9 9r"   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/   rD   r   rD   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyV   s     ;;;;;;{}}r"   c                 t    |                                  }|                     t          |          g            d S r5   )rG   r   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___emptyZ   s3    ~~dR(((((r"   c                     ddl m} |                                 }|                     t	          |                                          |g           d S Nr   	Interface)zope.interface.interfacerP   rG   r   rI   	flattenedr   rP   rK   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_empty^   sS    666666~~dnn..//)=====r"   c                 f    ddl m} |                                 }|                     ||           d S rN   )rQ   rP   rG   assertNotInrS   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___emptyc   s?    666666~~D)))))r"   c                     ddl m} |                                 }|                     |                    |                     |                     |                    |d                     d S )Nr   rO   Tstrict)rQ   rP   rG   
assertTrueextendsrS   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_emptyh   si    666666~~Y//000Yt<<=====r"   c                     |                                  }t          |                                          }|                     |g            d S r5   )rG   rI   
interfacesr   )r   rK   ls      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_emptyn   sD    ~~""##Br"   c                 t    ddl m} |                                 }|                     |j        ||f           d S rN   )rQ   rP   rG   r   __sro__rS   s      r   test___sro___z#EmptyDeclarationTests.test___sro___s   sF    666666~~i'9:::::r"   c                 r    ddl m} |                                 }|                     |j        |f           d S rN   )rQ   rP   rG   r   __iro__rS   s      r   test___iro___z#EmptyDeclarationTests.test___iro___x   sC    666666~~	|44444r"   c                    |                                  }|                     |                    d                     |                     |                    dd          d           |                     |j                   d S )Nattrabcdef)rG   assertIsNonegetr   assertFalse_v_attrsrJ   s     r   test_getzEmptyDeclarationTests.test_get}   ss    ~~$((6**+++%//777 	'''''r"   c                     |                                  }t                      |_        |                    |           |                     |j                   d S r5   )rG   r0   ro   changedrn   rJ   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   sJ    ~~T'''''r"   N)r   r   r    rG   rL   rT   rW   r]   ra   rd   rg   rp   rs   r!   r"   r   rA   rA   R   s          ) ) )> > >
* * *
> > >     
; ; ;
5 5 5
( ( (( ( ( ( (r"   rA   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 rC   rE   rF   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;;;;;;r"   c                 6     |                                  |i |S r5   rw   r   argskws      r   _makeOnezDeclarationTests._makeOne   #    %t##%%t2r222r"   c                 ~    |                                  }|                     t          |j                  g            d S r5   )r~   r   rI   	__bases__rJ   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)rQ   r   r~   r   rI   r   r   r   r   rK   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   r~   r   rI   r   )r   r   implrK   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 r5   )r~   rr   rl   ro   rJ   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s=    }}T$-(((((r"   c                 Z    |                                  }|                     ||           d S r5   )r~   rV   rJ   s     r   test___contains__w_selfz(DeclarationTests.test___contains__w_self   s+    }}t$$$$$r"   c                 |    ddl m}  |d          }|                                 }|                     ||           d S r   )rQ   r   r~   rV   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   )rQ   r   r~   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   rQ   r   r~   r   rI   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   rK   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   rO   r   r   rQ   rP   r   r~   r   rI   rR   )r   rP   r   r   rK   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   rO   r   r   r   r   r   rP   r   r   r   rK   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   rQ   r   r~   assertIsInstancerw   r   rI   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   rO   r   	C3SettingroIBaseIDerivedT)zope.interfacerP   rQ   r   zope.interface.tests.test_ror   r   C3
STRICT_IROr~   r   rf   r   rI   )	r   rP   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t                                } ||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   rO   implementedByimplementerr   r   c                       e Zd ZdS )PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr+   r!   r"   r   r   r   E  r>   r"   r   c                       e Zd ZdS )SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr+   r!   r"   r   r   r   H  r>   r"   r   c                       e Zd ZdS )ODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr+   r!   r"   r   Baser   K  r-   r"   r   T)r   rP   r   r   r   r   r   r0   r   r   r   rc   r   rI   )
r   rP   r   r   r   r   r   r   r   r   s
             r   0test___add___overlapping_interface_implementedByzADeclarationTests.test___add___overlapping_interface_implementedBy:  s   
 	-,,,,,000000......::::::%%%%%%	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	6 	 	 
		 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   5BBBN)r   r   r    rw   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r   ru   ru      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"   ru   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   rw   z(TestImmutableDeclaration._getTargetClassY  s    EEEEEE$$r"   c                     ddl m} |S )Nr   )_empty)r/   r   )r   r   s     r   rG   z"TestImmutableDeclaration._getEmpty]  s    666666r"   c                     dd l }|                    |                    |                                                     }|                     ||                                            d S )Nr   )pickleloadsdumpsrG   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_picklea  sV    fll4>>+;+;<<==fdnn../////r"   c                     |                       |                                             |                                            d S r5   )r   rw   rG   r   s    r   test_singletonz'TestImmutableDeclaration.test_singletonf  sF    "D  ""$$NN	
 	
 	
 	
 	
r"   c                 `    |                      |                                 j        d           d S )Nr!   )r   rG   r   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__l  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!   )   )rG   r   r   assertRaisesr   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__o  s      ))3R888y)) 	# 	#"EO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   #A88A<?A<c                     |                                  }|j        }|                     i |           d|d<   |                     i |j                   d S )N   r   )rG   
dependentsr   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependentsw  sW      T"""QU-.....r"   c                 T    |                                                      d            d S r5   )rG   rr   r   s    r   test_changedz%TestImmutableDeclaration.test_changed  s&      &&&&&r"   c                 j   |                      |                                                     |                      |                      |                                                     | d                     |                      |                                                     | d                     d S )NTrY   F)rn   rG   r\   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*   )rl   rG   rm   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   ri   )rG   r   ro   rl   rm   )r   rK   attrss      r   test_v_attrsz%TestImmutableDeclaration.test_v_attrs  s    ~~+++ "f+++$((6**+++ ""f+++$((6**+++++r"   N)r   r   r    rw   rG   r   r   r   r   r   r   r   r   r  r!   r"   r   r   r   W  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   rw   zTestImplements._getTargetClass      ::::::r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTestImplements._makeOne  r   r"   c                 J    ddl m}  G d dt                    } ||          S )Nr   r   c                       e Zd ZdS )+TestImplements._makeOneToCompare.<locals>.ANr+   r!   r"   r   Ar	    r>   r"   r
  )r/   r   r0   )r   r   r
  s      r   _makeOneToComparez TestImplements._makeOneToCompare  sP    ======	 	 	 	 	 	 	 	 }Qr"   c                     |                                  }|                     |j        d            |                     |j        d           |                     |j        d           |                     t          |j                  g            d S )Nr!   ?)r~   r   inheritdeclaredr   rI   r   r   r   s     r   r   z!TestImplements.test_ctor_no_bases  s}    }}t,,,+++,,,dn--r22222r"   c                     |                                  }d|_        |                     t          |          d           d S )NTestingzclassImplements(Testing))r~   r   r   reprr  s     r   test___repr__zTestImplements.test___repr__  s9    }}!d%?@@@@@r"   c                     ddl m} |                                 }|                     |                                |df           d S )Nr   r   r5   )r/   r   r~   r   
__reduce__)r   r   r   s      r   test___reduce__zTestImplements.test___reduce__  sL    ======}}**]G,DEEEEEr"   c                 T   ddl m}  G d dt                    } G d dt                    }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    r>   r"   r
  c                       e Zd ZdS )#TestImplements.test_sort.<locals>.BNr+   r!   r"   r   Br    r>   r"   r  r   r   )r/   r   r0   rQ   r   r   hashr[   )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                     G d dt                     }ddlm}  G d dt                     } G d dt                     } ||          } ||          } ||          }|                     ||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 r5   _wrapped)r   wrappeds     r   __init__z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__  s     'r"   c                     t                      r5   r6   r   r   s     r   __getattr__z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__      )+++r"   c                     | j         |k    S r5   r$  r   r   s     r   __eq__z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__      }--r"   c                     | j         |k    S r5   r$  r-  s     r   __ne__z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__  r/  r"   N)r   r   r    r'  r*  r.  r1  r!   r"   r   Proxyr"    sP        ( ( (, , ,. . .. . . . .r"   r2  r   r   c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.ANr+   r!   r"   r   r
  r4    r>   r"   r
  c                       e Zd ZdS )-TestImplements.test_proxy_equality.<locals>.BNr+   r!   r"   r   r  r6    r>   r"   r  )r0   r/   r   r[   rn   )r   r2  r   r
  r  implementedByAimplementedByBproxys           r   test_proxy_equalityz"TestImplements.test_proxy_equality  s   	. 	. 	. 	. 	.F 	. 	. 	. 	>=====	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 '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   )r~   rl   r<  rV   __dict__r   rr   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 )Nr<  )r~   rl   r<  rV   r=  rr   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    rw   r~   r  r   r  r  r  r:  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/   rD  )r   rD  s     r   rw   z*Test_implementedByFallback._getTargetClass  s    EEEEEE$$r"   c                 6     |                                  |i |S r5   rz   r{   s      r   _callFUTz#Test_implementedByFallback._callFUT  r   r"   c                      G d dt                     } |            }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,   rI            ,IIIr"   r,   )r0   rK  r   rI   rF  r   r,   r(   s      r   5test_dictless_wo_existing_Implements_wo_registrationszPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations  so    	- 	- 	- 	- 	-& 	- 	- 	-cee"dmmC0011266666r"   c                      G d dt                     } |            }|                     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                      r5   r6   r   s    r   	_get_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_impl"  r+  r"   c                     t           r5   )r   )r   vals     r   	_set_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_impl$  s    r"   c                     t                      r5   r6   r   s    r   __call__zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__'  s    )+++r"   N)r   r   r    rU  rX  propertyrK  rZ  r!   r"   r   r,   rS  !  sR        , , ,     &hy)<<O, , , , ,r"   r,   r0   r   r   rF  rO  s      r   @test_dictless_wo_existing_Implements_cant_assign___implemented__z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__   sY    	, 	, 	, 	, 	,& 	, 	, 	, cee)T]C88888r"   c                 &   ddl m}  G d dt                    } |            }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>.FoorJ  NrL  r!   r"   r   r,   rb  /  rN  r"   r,   #BuiltinImplementationSpecifications)r   r`  r0   rK  _MonkeyDictr[   rF  )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t                    } |            }||_        |                     |                     |          |u            d S )Nr   r   c                       e Zd ZdZdS )KTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorJ  NrL  r!   r"   r   r,   rj  <  rN  r"   r,   )r/   r   r0   rK  r[   rF  )r   r   r   r,   r(   s        r   #test_dictless_w_existing_Implementsz>Test_implementedByFallback.test_dictless_w_existing_Implements9  s    ::::::z||	- 	- 	- 	- 	-& 	- 	- 	-cee"c**d233333r"   c                     ddl m}  G d dt                    } |            } |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>.FoorJ  NrL  r!   r"   r   r,   rn  D  rN  r"   r,   r   )rQ   r   r0   rK  r   rI   rF  )r   r   r,   r(   r   s        r   'test_dictless_w_existing_not_ImplementszBTest_implementedByFallback.test_dictless_w_existing_not_ImplementsB  s    ;;;;;;	- 	- 	- 	- 	-& 	- 	- 	-cee~f%%#gdmmC0011D6:::::r"   c                     ddl m}  |             G fddt                    }|                     |                     |          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    rK  r   s   r   r,   rr  N          "OOOr"   r,   r/   r   r0   r[   rF  r   r   r,   r   s      @r   "test_w_existing_attr_as_Implementsz=Test_implementedByFallback.test_w_existing_attr_as_ImplementsK  }    ::::::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   rc  classImplements())r   r`  r/   r   rd  r   rI   rF  tupledictr   r  r   )r   r`  r   rf  typspecs         r   test_builtins_added_to_cachez7Test_implementedByFallback.test_builtins_added_to_cacheR  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_  rc  )	r   r`  r0   rd  r}  rI   r~  r[   rF  )r   r`  t_specl_specd_specrf  s         r   test_builtins_w_existing_cachez9Test_implementedByFallback.test_builtins_w_existing_cachea  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  o  r>   r"   r,   )r   rI   rF  r   r,   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertionsm  sZ    	 	 	 	 	 	 	 	dmmC0011266666r"   c                      G d dt                     }|                     t          |                     |                    g            d S )Nc                       e Zd ZdS ):Test_implementedByFallback.test_no_assertions.<locals>.FooNr+   r!   r"   r   r,   r  u  r>   r"   r,   r0   r   rI   rF  r  s     r   test_no_assertionsz-Test_implementedByFallback.test_no_assertionss  s\    	 	 	 	 	& 	 	 	dmmC0011266666r"   c                      G d dt                     } |            }|                     t          | j        |           d S )Nc                       e Zd ZdZdS )HTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNrs  r!   r"   r   r,   r  z          "OOOr"   r,   r\  rO  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factoryy  sW    	# 	# 	# 	# 	#& 	# 	# 	#cee)T]C88888r"   c                    ddl m}  G d dt                    } |            }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                      r5   r6   r   s    r   rZ  zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__  r+  r"   )r   r   r    rK  rZ  r!   r"   r   r,   r    s(        "O, , , , ,r"   r,   r(   z*zope.interface.tests.test_declarations.foo__provides__)r/   r  r0   r   rF  r   r   r  rK  __providedBy__rV   r=  )r   r  r,   r(   r  s        r   test_w_None_no_bases_w_factoryz9Test_implementedByFallback.test_w_None_no_bases_w_factory  s    M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t                    }|                     |          }|                     |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>.FooNrs  r!   r"   r   r,   r    r  r"   r,   z*zope.interface.tests.test_declarations.Foo)r/   r  r0   rF  r   r   r   r  rK  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t                    }|                     |                     |          u            d S )Nr   r   c                       e Zd Z ZdS )BTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNrs  rt  s   r   r,   r    ru  r"   r,   rv  rw  s      @r   test_w_existing_Implementsz5Test_implementedByFallback.test_w_existing_Implements  ry  r"   c                    ddl m} ddlm}  G d d|          } G d d|          } ||           G d d	t                                } ||           G d
 d|                      }|                     t          |                     |                    ||g           t          ||          }|                     t          |                     |                    |g           d S )Nr   rO   r   c                       e Zd ZdS )STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd ZdS )VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   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   rP   r/   r   r0   r   rI   rF  super	r   rP   r   r   r   r   r  sup	__class__s	           r   )test_super_when_base_implements_interfacezDTest_implementedByFallback.test_super_when_base_implements_interface  so   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	6 	 	 
		 
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	t                                } G d
 d|          } G d d|          } ||           G d d||                      }|                     t          |                     |                    ||g           t          ||          }	|                     t          |                     |	                    |g           d S )Nr   rO   r   c                       e Zd ZdS )[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr+   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>.IDerivedNr+   r!   r"   r   r   r    r>   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    r>   r"   r  c                       e Zd ZdS )\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr+   r!   r"   r   Child2r    r>   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   rP   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			 	 	 	 	6 	 	 
			 	 	 	 	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	t                    } G d
 d|          } ||           G d d|                      } ||           G d d||                      }|                     |j        ||||t          f           |                     t          |                     |                    ||g           t          ||          }	|                     |	          }
|                     t          |
          |g           | 
                    |
j                   d S )Nr   rO   r   c                       e Zd ZdS )]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr+   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>.IDerivedNr+   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>.BaseNr+   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>.Child1Nr+   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>.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   rP   r/   r   r0   r   __mro__rI   rF  r  rl   _dependents)r   rP   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 	 	 		 	 	 	 	6 	 	 		 	 	 	 	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	t                    } ||           G d
 d|                      }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )Nr   rO   r   c                       e Zd ZdS )YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr+   r!   r"   r   r   r    r>   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    r>   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     r>   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  sS   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 		 	 	 	 	6 	 	 	 
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                                }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )
Nr   rO   r   c                       e Zd ZdS )HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd ZdS )KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   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   rP   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			 	 	 	 	f 	 	 
		 	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t                                } ||           G d d|                      }	 ||           G d d|                      }
 |||           G d d|	|
                      }|}t          ||          }t          |	|          }t          |
|          }|                     t          |                     |                    |||||g           |                     t          |                     |                    |||g           |                     t          |                     |                    ||g           |                     t          |                     |                    |g           d S )Nr   r   rO   c                       e Zd ZdS )RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr+   r!   r"   r   r   r  "  r>   r"   r   c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr+   r!   r"   r   IM1r  %  r>   r"   r  c                       e Zd ZdS )PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr+   r!   r"   r   IM2r  (  r>   r"   r  c                       e Zd ZdS )UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr+   r!   r"   r   r   r  +  r>   r"   r   c                       e Zd ZdS )WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr+   r!   r"   r   
IUnrelatedr  .  r>   r"   r  c                       e Zd ZdS )QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr+   r!   r"   r   r   r  1  r-   r"   r   c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr+   r!   r"   r   M1r  5  r-   r"   r  c                       e Zd ZdS )OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr+   r!   r"   r   M2r  9  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  =  r-   r"   r  	r/   r   r   rP   r0   r  r   rI   rF  r   r   rP   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			 	 	 	 	6 	 	 
		 
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    rw   _getFallbackClassrF  rP  r]  rg  rk  ro  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  __classcell__r  s   @r   rB  rB    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"   rB  c                       e Zd Zd ZdS )Test_implementedByc                     ddl m} |S )Nr   r   )r/   r   )r   r   s     r   rw   z"Test_implementedBy._getTargetClassT      ======r"   Nr   r   r    rw   r!   r"   r   r  r  P  s#            r"   r  c                   8    e Zd ZdZd Zde dz   dfdZd Zd ZdS )	_ImplementsTestMixinTc                     t           r5   r6   )r   clsifaces      r   rF  z_ImplementsTestMixin._callFUT\  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  rQ   r   rF  r   rK  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`  sE    	>=====;;;;;;~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 )5_ImplementsTestMixin.test_oldstyle_class.<locals>.FooNr+   r!   r"   r   r,   r   }  r>   r"   r,   )r  r  s     r   test_oldstyle_classz(_ImplementsTestMixin.test_oldstyle_class{  sD    	 	 	 	 	 	 	 	$$$$$r"   c                 V     G d dt                     }|                     |           d S )Nc                       e Zd ZdS )5_ImplementsTestMixin.test_newstyle_class.<locals>.FooNr+   r!   r"   r   r,   r$    r>   r"   r,   )r0   r  r  s     r   test_newstyle_classz(_ImplementsTestMixin.test_newstyle_class  sF    	 	 	 	 	& 	 	 	$$$$$r"   )r   r   r    r  rF  r  r!  r%  r!   r"   r   r  r  Y  sk        " " "
 &*%-%6#.   6% % %% % % % %r"   r  c                   0    e Zd 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   rF  z!Test_classImplementsOnly._callFUT  s,    CCCCCCC'''
r"   c                 |   ddl m} ddlm}  |d          } |d          } ||          |f_         G fddt
                    }|_        |                     ||           |                     |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>.FooNrs  rt  s   r   r,   r,    ru  r"   r,   )r/   r   rQ   r   r  r0   r  rF  r[   rK  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 )9Test_classImplementsOnly.test_oldstyle_class.<locals>.FooNrs  old_specs   r   r,   r0            &OOOr"   r,   r  r  )r/   r   rQ   r   r  r   r   r   r   r,   r2  s        @r   r!  z,Test_classImplementsOnly.test_oldstyle_class  s    ::::::;;;;;;~f%%:d##	' 	' 	' 	' 	' 	' 	' 	' 	' 	'XsDAAAAAr"   c                     ddl m} ddlm}  |d          } ||           G fddt                    }|                     |dd            d S )	Nr   r   r   r   c                       e Zd Z ZdS )9Test_classImplementsOnly.test_newstyle_class.<locals>.FooNrs  r1  s   r   r,   r8    r3  r"   r,   r  r4  )r/   r   rQ   r   r0   r  r5  s        @r   r%  z,Test_classImplementsOnly.test_newstyle_class  s    ::::::;;;;;;~f%%:d##	' 	' 	' 	' 	' 	' 	'& 	' 	' 	'XsDAAAAAr"   c                     |                      t          dt          fi           d           \  }} G d d|          }|                     ||           |                     |                    |                     d S )Nr,   r4  c                       e Zd ZdS )RTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr+   r!   r"   r   Childr;    r>   r"   r<  )r  typer0   rF  r[   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  rF  r  r!  r%  r>  r!   r"   r   r'  r'    sk           
1 1 1 B B BB B B
4 
4 
4 
4 
4r"   r'  c                   >    e Zd 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/   rC  rl   )r   r  r  rC  results        r   rF  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<  rG    r>   r"   r<  rK  r  r  r!   )r  rF  r   r=  rV   rK  r   r  r  r[   
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                 Z    |                      t          dt          fi                      d S )Nr,   )2_Test_classImplements__check_implementer_redundantr=  r0   r   s    r   <test_redundant_implementer_empty_class_declarations_newstylezQTest_classImplements.test_redundant_implementer_empty_class_declarations_newstyle  s*    **4y"+E+EFFFFFr"   c                 J     G d d          }|                      |           d S )Nc                       e Zd ZdS )^Test_classImplements.test_redundant_implementer_empty_class_declarations_oldstyle.<locals>.FooNr+   r!   r"   r   r,   rO    r>   r"   r,   )rK  r  s     r   <test_redundant_implementer_empty_class_declarations_oldstylezQTest_classImplements.test_redundant_implementer_empty_class_declarations_oldstyle  sD    	 	 	 	 	 	 	 	**3/////r"   c                    ddl m} ddl m} ddl m} ddlm}  G d dt                    } ||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   rO   r   r   r   c                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr+   r!   r"   r   r,   rS    r>   r"   r,   Fc                       e Zd ZdS )FTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr+   r!   r"   r   BazrU            r"   rV  )r   rP   r   r   r   r   r0   r   r   rF  r   rI   )r   rP   r   r   r   r,   rV  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 r5   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t
                    }|_        |                     ||           |                     |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>.FooNrs  rt  s   r   r,   r`    ru  r"   r,   )r/   r   rQ   r   r  r0   r  rF  r   rK  r   r]  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	t                    } G 
fd
dt                    }|                    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>.Root1Nrs  	impl_roots   r   Root1rg            'OOOr"   rj  c                       e Zd Z ZdS )FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nrs  rh  s   r   Root2rm    rk  r"   rn  ExtendsRoot1c                       e Zd Z ZdS )LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNrs  )impl_extends_roots   r   ExtendsRootrq    s        /OOOr"   rs  )r/   r   rQ   r   r'   r  r0   r  rF  r   rK  r   r]  r   )r   r   r   rb  rc  rd  rj  rn  rs  rr  ri  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		( 	( 	( 	( 	( 	( 	(F 	( 	( 	(	( 	( 	( 	( 	( 	( 	(F 	( 	( 	( ',,^\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    rF  rK  rL  rP  rX  r]  r  rt  r!   r"   r   r@  r@    s          3 3 3&G G G0 0 0D D D&/ / /: : :"X X X X Xr"   r@  c                       e Zd Zd Zd ZdS )Test_classImplementsFirstc                 T    ddl m}  |||          }|                     |           |S )Nr   )classImplementsFirst)r/   rx  rl   )r   r  r  rx  rD  s        r   rF  z"Test_classImplementsFirst._callFUT,  s?    DDDDDD%%c511&!!!
r"   c                 
    ||fS r5   r!   rZ  s      r   r]  z(Test_classImplementsFirst._order_for_two2  s    ..r"   N)r   r   r    rF  r]  r!   r"   r   rv  rv  *  s2          / / / / /r"   rv  c                       e Zd Zd Zd ZdS )Test__implements_advicec                     ddl m}  ||i |S )Nr   )_implements_advice)r/   r}  )r   r|   r}   r}  s       r   rF  z Test__implements_advice._callFUT8  *    BBBBBB!!4.2...r"   c                 X   ddl m ddl m} ddlm}  |d           G fddt
                    }|                     |           |                     d|j                   | 	                    |j
        |           |                     t          |j
                  g           d S )	Nr   rB  r   r   r   c                       e Zd Z ffZdS )@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r    __implements_advice_data__)r   rC  s   r   r,   r  A  s        +/'?)C&&&r"   r,   r  )r/   rC  r   rQ   r   r0   rF  rV   r=  r   rK  r   rI   )r   r   r   r,   r   rC  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    rF  r  r!   r"   r   r{  r{  6  s2        / / /
< 
< 
< 
< 
<r"   r{  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   rw   z Test_implementer._getTargetClassK  rx   r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTest_implementer._makeOneO  r   r"   c                 ,     | j         | } ||          S r5   r~   )r   r  ifaces	decorators       r   rF  zTest_implementer._callFUTR  s    !DM6*	y~~r"   c                     ddl m}  |d          }|                     |          }|                     t          |t                                 d S r   )rQ   r   r~   r   r   r0   )r   r   r   r  s       r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attrV  sV    ;;;;;;~f%%MM$''	)Y99999r"   c                 ~   ddl m}  |d          } G d dt                    } |            }|                     |          } ||          }|                     ||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  _  r>   r"   r,   z(zope.interface.tests.test_declarations.?)rQ   r   r0   r~   r[   rK  r   r   rl   r  r   )r   r   r   r,   r(   r  r  r  s           r   test_nonclass_can_assign_attrz.Test_implementer.test_nonclass_can_assign_attr\  s    ;;;;;;~f%%	 	 	 	 	& 	 	 	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                    }|                     ||           ,|                                 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  w  rW  r"   r  )
gcrQ   r   r   get_objectsranger0   rF  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_classesj  s     				;;;;;;~f%%"..**++t 	+ 	+A    F    MM)T****


(())	 Yl(BCCCCCr"   N)	r   r   r    rw   r~   rF  r  r  r  r!   r"   r   r  r  I  ss          3 3 3  : : :1 1 1D D D D Dr"   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_implementer_onlyc                     ddl m} |S )Nr   )implementer_only)r/   r  )r   r  s     r   rw   z%Test_implementer_only._getTargetClass  s    @@@@@@r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTest_implementer_only._makeOne  r   r"   c                 B    |                      |          } ||          S r5   r  )r   r  r  r  s       r   rF  zTest_implementer_only._callFUT  s!    MM%((	y~~r"   c                     ddl m}  |d          }|                     |          }d }|                     t          ||           d S )Nr   r   r   c                      t                      r5   r6   r!   r"   r   	_functionz6Test_implementer_only.test_function.<locals>._function      %'''r"   )rQ   r   r~   r   
ValueError)r   r   r   r  r  s        r   r:   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                      r5   r6   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  )rQ   r   r~   r   r  r  )r   r   r   r  r  s        r   test_methodz!Test_implementer_only.test_method  s~    ;;;;;;~f%%MM$''		, 	, 	, 	, 	, 	, 	, 	, 	*i=====r"   N)r   r   r    rw   r~   rF  r:   r  r!   r"   r   r  r    s_             3 3 3  < < <> > > > >r"   r  c                       e Zd Zd Zd ZdS )Test_implementsOnlyc                 \   dd l }ddlm} ddlm}  |d          }||d}i }d                    dg          }|                    d	          5 }|                                 	 t          |||           t          r| 
                    d
           |d         }	|	j        }
|                     t          |
          |g           |                     t          |          d           n+# t          $ r |                     t          d           Y nw xY wd d d            d S # 1 swxY w Y   d S )Nr   implementsOnlyr   r   )r  r   
z*class Foo(object):    implementsOnly(IFoo)Tr   r   r,   zMust be Python 3)r   r/   r  rQ   r   joinr   r   r   r   r   rK  r   rI   r   r   r[   )r   r   r  r   r   r   r   CODEr   r,   r  s              r   test_simplezTest_implementsOnly.test_simple  s   >>>>>>;;;;;;~f%%#1  yy'   $$D$11 	.S""$$$
.T5$'''  8II67775k*  ddV444  S1----  = = =);<<<<<=		. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s7   D!%C)6A3D!)%DD!DD!!D%(D%c                 .   ddl m} ddl m} ddlm}  |d          } |d          }||||d}i }d                    g d	          }|                     |||          r5|d
         }	|	j        }
|                     t          |
          |g           d S d S )Nr   
implementsr  r   r   r   )r  r  r   r   r  )class Foo(object):    implements(IFoo)z'class Bar(Foo):    implementsOnly(IBar)r  )
r/   r  r  rQ   r   r  r   rK  r   rI   )r   r  r  r   r   r   r   r   r  r  r  s              r   #test_called_once_from_class_w_basesz7Test_implementsOnly.test_called_once_from_class_w_bases  s    ::::::>>>>>>;;;;;;~f%%~f%%)#1 
 yy      ##D%66 	1u+C&DT$ZZ$00000	1 	1r"   N)r   r   r    r  r  r!   r"   r   r  r    s2        . . .61 1 1 1 1r"   r  c                        e Zd Zd Zd Zd ZdS )Test_implementsc                    dd l }ddlm} ddlm}  |d          }||d}i }d                    ddg          }|                     |||d	          r|d
         }|                    d          5 }	|                                 | 	                    t          |           |                     t          |	          d           d d d            d S # 1 swxY w Y   d S d S )Nr   r  r   r   r  r   r  
def foo():r  Fr(   Tr   )r   r/   r  rQ   r   r  r   r   r   r   r   r   r   )
r   r   r  r   r   r   r   r  r(   r   s
             r   test_called_from_functionz)Test_implements.test_called_from_function  s[   ::::::;;;;;;~f%%)488yy"   ##D%u== 	.u+C(((55 .&&(((!!)S111  S1---. . . . . . . . . . . . . . . . . .	. 	.s   0ACCCc                    dd l }ddlm} ddlm}  |d          } |d          }|||d}i }d                    g d          }|                    d	
          5 }	|                                 	 t          |||           | 	                    d           n:# t          $ r- t          s#|                     t          |	          d           Y nw xY w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  z    implements(IBar)Tr   r   )r   r/   r  rQ   r   r  r   r   r   r   r   r   r   r   )
r   r   r  r   r   r   r   r   r  r   s
             r   test_called_twice_from_classz,Test_implements.test_called_twice_from_class  s   ::::::;;;;;;~f%%~f%%)4FFyy     
 $$D$11 	4S""$$$4T5$'''
 		23333	  2 2 2 2$$SXXq1112		4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	46   C 2BC 4CC CC  C$'C$c                    ddl m} ddlm}  |d          }||d}i }d                    ddg          }|                     |||          r5|d	         }|j        }|                     t          |          |g           d S d S )
Nr   r  r   r   r  r  r  r  r,   )	r/   r  rQ   r   r  r   rK  r   rI   )	r   r  r   r   r   r   r  r,   r  s	            r   test_called_once_from_classz+Test_implements.test_called_once_from_class  s    ::::::;;;;;;~f%%)488yy "   ##D%66 	1u+C&DT$ZZ$00000	1 	1r"   Nr   r   r    r  r  r  r!   r"   r   r  r    sA        . . .$4 4 4.1 1 1 1 1r"   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   rw   z"ProvidesClassTests._getTargetClass  r  r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zProvidesClassTests._makeOne!  r   r"   c                     ddl m}  |d          } G d dt                    }|                     ||          }|                     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  '  r>   r"   r,   )rQ   r   r0   r~   r   rI   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t                    }|                     ||          }|                                \  }}|                     ||           |                     |||f           d S )Nr   Providesr   r   c                       e Zd ZdS )/ProvidesClassTests.test___reduce__.<locals>.FooNr+   r!   r"   r   r,   r  0  r>   r"   r,   )	r/   r  rQ   r   r0   r~   r  r   r   )r   r  r   r   r,   r  klassr|   s           r   r  z"ProvidesClassTests.test___reduce__,  s    888888;;;;;;~f%%	 	 	 	 	& 	 	 	}}S$''oo''teX&&&T{+++++r"   c                     ddl m}  |d          } G d dt                    }|                     ||          }||_        |                     |j        |           d S )Nr   r   r   c                       e Zd ZdS )2ProvidesClassTests.test___get___class.<locals>.FooNr+   r!   r"   r   r,   r  :  r>   r"   r,   rQ   r   r0   r~   r  r   r  s        r   test___get___classz%ProvidesClassTests.test___get___class7  s    ;;;;;;~f%%	 	 	 	 	& 	 	 	}}S$''c&-----r"   c                     ddl m}  |d          } G d dt                    |                     |          }|_        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  C  r>   r"   r,   c                  &                 } | j         S r5   )r  )r(   r,   s    r   _testz7ProvidesClassTests.test___get___instance.<locals>._testG  s    #%%C##r"   )rQ   r   r0   r~   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    rw   r~   r  r  r  r  r!   r"   r   r  r    sn          3 3 3- - -	, 	, 	,. . .
1 
1 
1 
1 
1r"   r  c                   $     e Zd Z fdZd Z xZS )ProvidesClassStrictTestsc                 x    t          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_mrosrZ   _do_calculate_ro)r   r  r  s     r   r  zQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_roS      $55diX\5]]]r"   Nr   r   r    r  r  s   r   StrictProvidesr  R  5        ^ ^ ^ ^ ^ ^ ^r"   r  )r  r  rw   )r   r  r  r  s     @r   rw   z(ProvidesClassStrictTests._getTargetClassP  sf    6==MMOO	^ 	^ 	^ 	^ 	^ 	^ 	^] 	^ 	^ 	^ r"   c           	      (   ddl m} ddl m} ddl m}  G d d|          } ||           G d dt                                }|                     ||          }|                     |j        | ||          | |t                    |f           d S )	Nr   r   rO   r   c                       e Zd ZdS )MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr+   r!   r"   r   r   r  ^  r>   r"   r   c                       e Zd ZdS )LProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr+   r!   r"   r   r   r  a  r-   r"   r   )r   r   rP   r   r0   r~   r   rc   )r   r   rP   r   r   r   r  s          r   %test_overlapping_interfaces_correctedz>ProvidesClassStrictTests.test_overlapping_interfaces_correctedW  s    	100000,,,,,,......	 	 	 	 	I 	 	 	 
U			 	 	 	 	6 	 	 
		 }}T5))M$M&!!(
 	 	 	 	 	r"   r   r   r    rw   r   r  r  s   @r   r  r  M  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   rw   z%TestProvidesClassRepr._getTargetClassq  r  r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTestProvidesClassRepr._makeOneu  r   r"   c                 F   ddl m}  |d          }|j        dk    sJ |j        t          k    sJ t	          |          dt          dk    sJ  |d          }|                     t          |           ||          }|                     t	          |          d           d S )Nr   r   r   z<InterfaceClass z.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))rQ   r   r   r   r  r~   r=  r   )r   r   r   r   insts        r   test__repr__z"TestProvidesClassRepr.test__repr__x  s    ;;;;;;~f%%}&&&&(****Dzzz888EEEEE~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   r
  directlyProvidesalsoProvidesr   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/   r  r  rQ   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   r   )
ModuleTyper   )zsome.module)zanother.modulez9directlyProvides(('some.module', 'another.module'), IFoo))rQ   r   r/   r#  r~   _v_module_namesr   r  )r   r   r#  r   r  s        r   )test__repr__module_provides_cached_sharedz?TestProvidesClassRepr.test__repr__module_provides_cached_shared  s    ;;;;;;::::::~f%%}}Z.. 00 33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)rQ   r   r~   r=  r   r  r   r   r   IFoo2r   r  s         r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_names  s    ;;;;;;~f888v&999~f%%}}T$ZZtU;;JJL	
 	
 	
 	
 	
r"   c                    ddl m} ddl m}  G d d|          } G d dt                    } |t	          |                     }|                     |||          }|                     t          |          d           d S )	Nr   rO   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   r0            NNNr"   r   c                       e Zd ZdZdS )JTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr1  Nr2  r!   r"   r   r  r6    r4  r"   r  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r   rP   r   r0   r=  r~   r   r  )r   rP   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)r~   r=  r   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfaces  sG    }}T$ZZ((JJ5	
 	
 	
 	
 	
r"   c                       G  fddt                     }                      |                      }                     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>  s    		*? @ @ r"   c                     dS )Nz<Object>r!   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__  s    !zr"   N)r   r   r    r   __str__rB  r   s   r   Objectr>    s7        I@@@@G" " " " "r"   rD  zdirectlyProvides(<Object>))r0   r~   r   r  )r   rD  r  s   `  r   test__repr__non_classz+TestProvidesClassRepr.test__repr__non_class  s~    	" 	" 	" 	" 	" 	" 	"V 	" 	" 	" }}VVXX&&JJ(	
 	
 	
 	
 	
r"   c                     ddl m} ddl m} ddlm}  |d          } ||           G d dt
                                } | |                      }|                     t          |          d           d S )	Nr   r   rH  r   r   c                       e Zd ZdS )DTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr+   r!   r"   r   r,   rI    r-   r"   r,   classImplements(Foo, IFoo))r/   r   rH  rQ   r   r0   r   r  )r   r   rH  r   r   r,   r  s          r   !test__repr__providedBy_from_classz7TestProvidesClassRepr.test__repr__providedBy_from_class  s    ;;;;;;::::::;;;;;;~f%%	T			 	 	 	 	& 	 	 
		 z##%%  JJ(	
 	
 	
 	
 	
r"   c                 2   ddl m} ddl m} ddl m} ddlm}  |d          } |d          } ||           G d d	t                                } |            } |||            ||          }	|                     t          |	          d
           d S )Nr   r   rG  r  r   r   r   c                       e Zd ZdS )FTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr+   r!   r"   r   r,   rN    r-   r"   r,   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))	r/   r   rH  r  rQ   r   r0   r   r  )
r   r   rH  r  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    rw   r~   r  r  r  r!  r%  r-  r7  r;  rE  rK  rO  r!   r"   r   r  r  o  s          3 3 3
 
 

 
 
. . .+
 +
 +
Z
 
 


 

 


 
 
"
 
 

 
 

 
 
 
 
 
 
 
r"   r  c                        e Zd Zd Zd Zd ZdS )Test_Providesc                     ddl m}  ||i |S )Nr   r  )r/   r  )r   r|   r}   r  s       r   rF  zTest_Provides._callFUT.  s)    888888x$$$$r"   c                 b   ddl m} ddlm}  |d          }i } G d dt                    }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,   rU  7  r>   r"   r,   InstanceDeclarations)
r   r`  rQ   r   r0   _MonkeyrF  r   rI   r[   )r   r`  r   r   cacher,   r  s          r   test_no_cached_specz!Test_Provides.test_no_cached_spec2  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t                    }||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,   r]  C  r>   r"   r,   rV  )r   r`  rQ   r   r0   rX  rF  r[   )r   r`  r   r   priorr,   rY  r  s           r   test_w_cached_specz Test_Provides.test_w_cached_spec>  s   //////;;;;;;~f%%	 	 	 	 	& 	 	 	te$\>>> 	, 	,==d++D	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,&&&&&s   A33A7:A7N)r   r   r    rF  rZ  r_  r!   r"   r   rQ  rQ  ,  sA        % % %
4 
4 
4
' 
' 
' 
' 
'r"   rQ  c                   <    e Zd Zd Zd Zd Zed             Zd ZdS )Test_directlyProvidesc                     ddl m}  ||i |S )Nr   r  )r/   r  )r   r|   r}   r  s       r   rF  zTest_directlyProvides._callFUTM  *    @@@@@@,,,,r"   c                 "   ddl m} ddlm}  |d          } G d dt                    } |            }|                     ||           |                     |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,   rf  U  r>   r"   r,   
r/   r  rQ   r   r0   rF  r   r  r   rI   r   r  r   r   r,   objs         r   test_w_normal_objectz*Test_directlyProvides.test_w_normal_objectQ      ======;;;;;;~f%%	 	 	 	 	& 	 	 	ceec4   c.>>>c.//$88888r"   c                    ddl m} ddlm}  |d          } G d dt                    }|                     ||           |                     |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,   rn  `  r>   r"   r,   )
r/   r  rQ   r   r0   rF  r   r  r   rI   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          } G d dt                     G fddt                    } |            }|                     t
          | j        ||           d S )Nr   r   r   c                       e Zd Zd ZdS )NTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClassc                 H    |dk    r| S t                               | |          S Nr  )r=  __getattribute__)r  r   s     r   rv  z_Test_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClass.__getattribute__l  s,    ;& J ,,S$777r"   N)r   r   r    rv  r!   r"   r   	MetaClassrs  k  s#        8 8 8 8 8r"   rw  c                       e Zd Z ZdS )HTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.FooN)r   r   r    __metaclass__)rw  s   r   r,   ry  t  s        %MMMr"   r,   )rQ   r   r=  r0   r   r   rF  )r   r   r   r,   ri  rw  s        @r   %test_w_non_descriptor_aware_metaclassz;Test_directlyProvides.test_w_non_descriptor_aware_metaclassf  s     	<;;;;;~f%%	8 	8 	8 	8 	8 	8 	8 	8	& 	& 	& 	& 	& 	& 	&& 	& 	& 	&cee)T]C>>>>>r"   c                 0   ddl m} ddlm}  |d          }i  G fddt                    } |            }|                     ||           |                     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          |          ru  r6   r)  s     r   rv  zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__  s"    ;&  4)$///r"   c                     ||<   d S r5   r!   )r   r   valuethe_dicts      r   __setattr__zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__  s    !&r"   Nr   r   r    rv  r  r  s   r   r,   r~  ~  s=        0 0 0
' ' ' ' ' ' 'r"   r,   r  )	r/   r  rQ   r   r0   rF  r   r   rI   )r   r  r   r   r,   ri  r  s         @r   test_w_classless_objectz-Test_directlyProvides.test_w_classless_objecty  s    ======;;;;;;~f%%	' 	' 	' 	' 	' 	' 	'& 	' 	' 	' ceec4   h~6FFFh~677$@@@@@r"   N)	r   r   r    rF  rj  rp  r   r{  r  r!   r"   r   ra  ra  K  sq        - - -	9 	9 	99 9 9 ? ? ?$A A A A Ar"   ra  c                        e Zd Zd Zd Zd ZdS )Test_alsoProvidesc                     ddl m}  ||i |S )Nr   r  )r/   r  )r   r|   r}   r  s       r   rF  zTest_alsoProvides._callFUT  s)    <<<<<<|T(R(((r"   c                 "   ddl m} ddlm}  |d          } G d dt                    } |            }|                     ||           |                     |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,   r    r>   r"   r,   rg  rh  s         r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_provides  rk  r"   c                 ^   ddl m} ddl m} ddlm}  |d          } |d          } G d dt
                    } |            } |||           |                     ||           |                     |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    r>   r"   r,   )r/   r  r  rQ   r   r0   rF  r   r  r   rI   )r   r  r  r   r   r   r,   ri  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    rF  r  r  r!   r"   r   r  r    sA        ) ) )	9 	9 	9? ? ? ? ?r"   r  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/   r  )r   r|   r}   r  s       r   rF  zTest_noLongerProvides._callFUT  rc  r"   c                     ddl m}  |d          } G d dt                    } |            }|                     ||           |                     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,   r    r>   r"   r,   )rQ   r   r0   rF  r   rI   r  )r   r   r   r,   ri  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                    } |            } |||           |                     ||           |                     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,   r    r>   r"   r,   	r/   r  rQ   r   r0   rF  r   rI   r  )r   r  r   r   r,   ri  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                    } |            } |||           |                     ||           |                     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,   r    r>   r"   r,   r  )r   r  r   r   r   r,   ri  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                                } |            }|                     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,   r    r-   r"   r,   )r/   r   rQ   r   r0   r   r  rF  )r   r   r   r   r,   ri  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    rF  r  r  r  r  r!   r"   r   r  r    sd        - - -5 5 5	5 	5 	5
9 
9 
9@ @ @ @ @r"   r  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/   r  r   r  s     r   rw   z.ClassProvidesBaseFallbackTests._getTargetClass      IIIIII((r"   c                 Z     G d d|                                            } |||          S )Nc                       e Zd Zd ZdS )8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                 "    || _         || _        d S r5   )_cls_implements)r   kis      r   r'  zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__  s    	#$   r"   N)r   r   r    r'  r!   r"   r   r  r    s#        % % % % %r"   r  rz   )r   r  r  r  s       r   r~   z'ClassProvidesBaseFallbackTests._makeOne  sL    	% 	% 	% 	% 	%d**,, 	% 	% 	% wuj)))r"   c                     ddl m}  |d          } G d dt                    }|                     ||          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    r>   r"   r,   )rQ   r   r0   r~   r  r[   )r   r   r   r,   cpbps        r   test_w_same_class_via_classz:ClassProvidesBaseFallbackTests.test_w_same_class_via_class  s    ;;;;;;~f%%	 	 	 	 	& 	 	 	"&--T":"::s(D011111r"   c                     ddl m}  |d          } G d dt                    } |            }|                     ||          |_        |                     |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    r>   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                 <   ddl m}  |d          } G d dt                    } 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    r>   r"   r,   c                       e Zd ZdS )BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr+   r!   r"   r   r  r    r>   r"   r  r  )rQ   r   r0   r~   r  r   r  getattr)r   r   r   r,   r  bars         r   test_w_different_classz5ClassProvidesBaseFallbackTests.test_w_different_class  s    ;;;;;;~f%%	 	 	 	 	& 	 	 		 	 	 	 	# 	 	 	cee==d33.'3GGG.'3GGGGGr"   N)r   r   r    rw   r~   r  r  r  r!   r"   r   r  r    sd        ) ) )
* * *2 2 2. . .
H 
H 
H 
H 
Hr"   r  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   rw   z&ClassProvidesBaseTests._getTargetClass  s    AAAAAA  r"   c                     ddl m} |S r  r  r  s     r   r
  z(ClassProvidesBaseTests._getFallbackClass  r  r"   N)r   r   r    rw   r
  r!   r"   r   r  r    s2        ! ! !) ) ) ) )r"   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ClassProvidesTestsc                     ddl m} |S Nr   r  r/   r  r   r  s     r   rw   z"ClassProvidesTests._getTargetClass  r  r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zClassProvidesTests._makeOne  r   r"   c                    ddl m} ddlm}  |d          } |d          } ||           G d dt                                }|                     |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   rQ   r   r0   r~   r=  r  r[   r   rI   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                 v   ddl m} ddlm}  |d          } |d          } ||           G d dt                                }|                     |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  3  r-   r"   r,   )
r/   r   rQ   r   r0   r~   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    rw   r~   r  r  r!   r"   r   r  r    sP          3 3 3
; 
; 
;
= 
= 
= 
= 
=r"   r  c                   $     e Zd Z fdZd Z xZS )ClassProvidesStrictTestsc                 x    t          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_roA  r  r"   Nr  r  s   r   StrictClassProvidesr  @  r  r"   r  )r  r  rw   )r   r  r  r  s     @r   rw   z(ClassProvidesStrictTests._getTargetClass>  sf    6==MMOO	^ 	^ 	^ 	^ 	^ 	^ 	^- 	^ 	^ 	^ #"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   r   rO   r   c                       e Zd ZdS )MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr+   r!   r"   r   r   r  L  r>   r"   r   c                       e Zd ZdS )QClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr+   r!   r"   r   	metaclassr  O  r-   r"   r  r  )	r   r   rP   r   r=  r0   r~   r   rc   )r   r   rP   r   r   r  r  r  s           r   r   z>ClassProvidesStrictTests.test_overlapping_interfaces_correctedE  s5    	1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   rw   z%TestClassProvidesRepr._getTargetClassf  r  r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTestClassProvidesRepr._makeOnej  r   r"   c                     |                      t          |           t                    }|                     t          |          d           d S )Nz'directlyProvides(TestClassProvidesRepr)r9  r:  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__emptym  sI    }}T$ZZ..JJ5	
 	
 	
 	
 	
r"   c                     ddl m}  G d d|          }|                     t          |           t          |          }|                     t          |          d           d S )Nr   rO   c                       e Zd ZdZdS )=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor1  Nr2  r!   r"   r   r   r  v  r4  r"   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rP   r~   r=  r   r  )r   rP   r   r  s       r   test__repr__providing_onez/TestClassProvidesRepr.test__repr__providing_onet  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
                                } ||          }|                     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,   rJ  )r/   r   r   rQ   r   r0   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                 4   ddl m}  G d dt                    } | |                      }|                     t	          |          dt
          d            |            }d|_         ||          }|                     t	          |          d           d S )Nr   r   c                       e Zd Zd ZdS )RTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                     | S r5   r!   r   s    r   rZ  z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__  s    r"   N)r   r   r    rZ  r!   r"   r   Callabler    s#            r"   r  r{  z.?)zclassImplements(Callable))r/   r   r0   r   r  r   )r   r   r  r  cs        r   *test__repr__implementedBy_generic_callablez@TestClassProvidesRepr.test__repr__implementedBy_generic_callable  s    ======	 	 	 	 	v 	 	 	 }XXZZ((JJJ'/xx1	
 	
 	

 HJJ
}QJJ'	
 	
 	
 	
 	
r"   N)
r   r   r    rw   r~   r  r  r-  r  r  r!   r"   r   r  r  d  s}          3 3 3
 
 
	
 	
 	


 

 


 
 
 
 
 
 
 
r"   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_directlyProvidedByc                     ddl m}  ||i |S )Nr   )directlyProvidedBy)r/   r  )r   r|   r}   r  s       r   rF  z Test_directlyProvidedBy._callFUT  r~  r"   c                      G d dt                     } |            }|                     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    r>   r"   r,   r  rO  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance  sg    	 	 	 	 	& 	 	 	ceedmmC0011266666r"   c                     ddl m} ddlm}  |d          } ||           G d dt                                } |            }|                     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   rQ   r   r0   r   rI   rF  )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                    } |            } |||           |                     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    r>   r"   r,   )r/   r  rQ   r   r0   r   rI   rF  )r   r  r   r   r,   r(   s         r   -test_w_declarations_in_instance_but_not_classzETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class  s    @@@@@@;;;;;;~f%%	 	 	 	 	& 	 	 	ceed###dmmC0011D6:::::r"   c                 8   ddl m} ddl m} ddlm}  |d          } |d          } ||           G d dt
                                } |            } |||           |                     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    r-   r"   r,   )	r/   r  r   rQ   r   r0   r   rI   rF  )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    rF  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_classProvidesc                    dd l }ddlm} ddlm}  |d          }||d}i }d                    ddg          }t          |||           |d	         }|                    d
          5 }	|                                 | 	                    t          |           t          s#|                     t          |	          d           d d d            d S # 1 swxY w Y   d S )Nr   classProvidesr   r   r  r   r  r      classProvides(IFoo)r(   Tr   )r   r/   r  rQ   r   r  r   r   r   r   r   r   r   r   )
r   r   r  r   r   r   r   r  r(   r   s
             r   r  z,Test_classProvides.test_called_from_function  sO   ======;;;;;;~f%%"/>>yy%   	T5$5k$$D$11 	.S""$$$i--- .  S1---		. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   )ACCCc                    dd l }ddlm} ddlm}  |d          } |d          }|||d}i }d                    g d          }|                    d	
          5 }	|                                 	 t          |||           | 	                    d           n:# t          $ r- t          s#|                     t          |	          d           Y nw xY w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  z    classProvides(IBar)Tr   r   )r   r/   r  rQ   r   r  r   r   r   r   r   r   r   r   )
r   r   r  r   r   r   r   r   r  r   s
             r   r  z/Test_classProvides.test_called_twice_from_class  s   ======;;;;;;~f%%~f%%"/tLLyy     
 $$D$11 	4S""$$$4T5$'''
 		23333	  2 2 2 2$$SXXq1112		4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r  c                    ddl m} ddlm}  |d          }||d}i }d                    ddg          }|                     |||          r5|d	         }|j        }|                     t          |          |g           d S d S )
Nr   r  r   r   r  r  r  r  r,   )	r/   r  rQ   r   r  r   r  r   rI   )	r   r  r   r   r   r   r  r,   r  s	            r   r  z.Test_classProvides.test_called_once_from_class  s    ======;;;;;;~f%%"/>>yy %   ##D%66 	1u+C%DT$ZZ$00000	1 	1r"   Nr  r!   r"   r   r  r    sA        . . .&4 4 4.1 1 1 1 1r"   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   rw   zTest_provider._getTargetClass!  s    888888r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   zTest_provider._makeOne%  r   r"   c                    ddl m} ddlm}  |d          }|                     |           G d dt
                                }|                     |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#  ,  r-   r"   r,   )
r/   r  rQ   r   r~   r0   r   r  r   rI   ro  s        r   rp  zTest_provider.test_w_class(  s    ======;;;;;;~f%%	t			 	 	 	 	& 	 	 
		c.>>>c.//$88888r"   N)r   r   r    rw   r~   rp  r!   r"   r   r  r    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   r  r      moduleProvides(IFoo)r(   )r/   r(  rQ   r   r  r   r   r   )r   r(  r   r   r   r   r  r(   s           r   r  z-Test_moduleProvides.test_called_from_function6  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  r  r+  r/   r(  rQ   r   r  r   r   r   )r   r(  r   r   r   r   r  s          r   test_called_from_classz*Test_moduleProvides.test_called_from_classE  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(  rQ   r   r  r   r   rI   )r   r(  r   r   r   r  r  s          r   "test_called_once_from_module_scopez6Test_moduleProvides.test_called_once_from_module_scopeS  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  r0  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.  r1  r3  r!   r"   r   r%  r%  3  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/   r7  )r   r7  s     r   r
  z5Test_getObjectSpecificationFallback._getFallbackClassq  s    NNNNNN--r"   c                 6     |                                  |i |S r5   rz   r{   s      r   rF  z,Test_getObjectSpecificationFallback._callFUTx  r   r"   c                     i  G fddt                     } |            }|                     |          }|                     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ru  )r  KeyError)r   r   r  s     r   rv  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__~  sV    ;& /(.../#D>) / / /(.../s     :c                     t                      r5   r6   )r   r   r  s      r   r  z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__  r+  r"   Nr  r  s   r   r,   r;  }  s=        / / / / /, , , , ,r"   r,   r0   rF  r   rI   )r   r,   r(   r  r  s       @r   #test_wo_existing_provides_classlesszGTest_getObjectSpecificationFallback.test_wo_existing_provides_classless{  s|    
	, 
	, 
	, 
	, 
	, 
	, 
	,& 
	, 
	, 
	, 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                      r5   r6   r!   r"   r   r(   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo  r  r"   )r/   r  rQ   r   rF  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                      r5   r6   r!   r"   r   r(   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo  r  r"   )r0   r  rF  r   rI   )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                    } |            } |||           |                     |          }|                     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,   rI    r>   r"   r,   )r/   r  rQ   r   r0   rF  r   rI   )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                                } |            }|                     |          }|                     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,   rM    r-   r"   r,   )r/   r   rQ   r   r0   rF  r   rI   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                     } |            }|                     |          }|                     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,   rR    r>   r"   r,   r?  r   r,   r(   r  s       r   'test_wo_provides_on_class_wo_implementszKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements  j    	 	 	 	 	& 	 	 	cee}}S!!dR(((((r"   c                 >    t          j        | | j        d           d S )Nr  expected_missingr   test_raisesrF  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  )rX  r  rY  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                 f     G d dt                     }|                      |                       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,   )r0   rF  r  s     r   Htest_raises_AttributeError_when_provides_fails_type_check_AttributeErrorzlTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_AttributeError  sL    	< 	< 	< 	< 	<& 	< 	< 	< 	cceer"   c                 b    G d dt                     }t          rw|                     t                    5 }|                      |                       d d d            n# 1 swxY w Y   |                     d|j        j        d                    d S |                      |                       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,   rd    s        ++L99LLLr"   r,   r  r   )r0   r   r   re  rF  r   	exceptionr|   )r   r,   excs      r   Ftest_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorzjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError  s    	: 	: 	: 	: 	:& 	: 	: 	:  	!""<00 %Cccee$$$% % % % % % % % % % % % % % % [#-*<Q*?@@@@@ MM##%%     s   AA#&A#N)r   r   r    r
  rw   rF  r@  rC  rF  rJ  rO  rT  r[  r]  ra  rh  r!   r"   r   r5  r5  o  s        . . .
 (O3 3 3) ) )". . .) ) )	- 	- 	-	- 	- 	-) ) )[ [ [8 8 8  ! ! ! ! !r"   r5  c                       e Zd Zd ZdS )Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r/   rl  )r   rl  s     r   rw   z+Test_getObjectSpecification._getTargetClass  s    FFFFFF%%r"   Nr  r!   r"   r   rj  rj    s#        & & & & &r"   rj  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/   rp  )r   rp  s     r   r
  z)Test_providedByFallback._getFallbackClass  s    BBBBBB!!r"   c                 6     |                                  |i |S r5   rz   r{   s      r   rF  z Test_providedByFallback._callFUT  r   r"   c                      G d dt                     } |            }|                     |          }|                     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,   rt    r>   r"   r,   r?  rS  s       r   )test_wo_providedBy_on_class_wo_implementszATest_providedByFallback.test_wo_providedBy_on_class_wo_implements  rU  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 )ATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr+   r!   r"   r   r,   rx    r>   r"   r,   )	r/   r  rQ   r   r0   r  rF  r   rI   )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                      |_        |                     |          }|                     t	          |          g            d S )Nc                       e Zd ZdS )CTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr+   r!   r"   r   r,   r|  	  r>   r"   r,   )r0   r  rF  r   rI   rS  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec	  sv    	 	 	 	 	& 	 	 	cee#XX}}S!!dR(((((r"   c                 (   ddl m} ddlm}  |d          } ||           G d dt                                } |            }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,   r  	  r-   r"   r,   )	r/   r   rQ   r   r0   r  rF  r   rI   rN  s          r   1test_w_providedBy_invalid_spec_class_w_implementszITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements
	  s    ;;;;;;;;;;;;~f%%	T			 	 	 	 	& 	 	 
		cee#XX}}S!!ddV,,,,,r"   c                      G d dt                     } |            }t                      |_        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,   r  	  r>   r"   r,   r0   r  r  rF  r[   r   r,   r(   expectedr  s        r   >test_w_providedBy_invalid_spec_w_provides_no_provides_on_classzVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class	  s    	 	 	 	 	& 	 	 	cee#XX&,hh.3#}}S!!()))))r"   c                     G d dt                     } |            }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,   r   	  r>   r"   r,   r  r  s        r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class	  s    	 	 	 	 	& 	 	 	cee#XX&,hh.3#!88}}S!!()))))r"   c                 \   ddl m} ddlm}  |d          } ||           G d dt                                } |            }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,   r  -	  r-   r"   r,   )
r/   r   rQ   r   r0   r  r  rF  r   rI   rN  s          r   @test_w_providedBy_invalid_spec_w_provides_same_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class)	  s    ;;;;;;;;;;;;~f%%	T			 	 	 	 	& 	 	 
		cee#XX.4hh63+}}S!!ddV,,,,,r"   c                 (   ddl m} ddlm}  G d d|          } G d d|          } ||           G d d	t                                } ||           G d
 d|                      } |            }|                     t          |                     |                    ||g           t          ||          }|                     |          }	| 	                    |	j
                   |                     t          |	          |g           d S )Nr   rO   r   c                       e Zd ZdS )PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr+   r!   r"   r   r   r  :	  r>   r"   r   c                       e Zd ZdS )STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr+   r!   r"   r   r   r  =	  r>   r"   r   c                       e Zd ZdS )OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr+   r!   r"   r   r   r  @	  r-   r"   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr+   r!   r"   r   r  r  D	  r-   r"   r  r   rP   r/   r   r0   r   rI   rF  r  rl   r  )r   rP   r   r   r   r   r  derivedr  r  r  s             r   r  zATest_providedByFallback.test_super_when_base_implements_interface6	  s   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	6 	 	 
		 
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	t                    } ||           G d
 d|                      } |            }|                     t          |                     |                    |g           t          ||          }|                     t          |                     |                    g            d S )Nr   rO   r   c                       e Zd ZdS )VTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr+   r!   r"   r   r   r  T	  r>   r"   r   c                       e Zd ZdS )YTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr+   r!   r"   r   r   r  W	  r>   r"   r   c                       e Zd ZdS )UTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr+   r!   r"   r   r   r  Z	  r>   r"   r   c                       e Zd ZdS )XTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr+   r!   r"   r   r  r  ]	  r-   r"   r  r  )
r   rP   r   r   r   r   r  r  r  r  s
            r   r  zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfaceP	  s^   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 		 	 	 	 	6 	 	 	 
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                                } |            }|                     t          |                     |                    |g           t          ||          }|                     |          }| 	                    |j
                   |                     t          |          g            d S )
Nr   rO   r   c                       e Zd ZdS )ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr+   r!   r"   r   r   r  k	  r>   r"   r   c                       e Zd ZdS )HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr+   r!   r"   r   r   r  n	  r>   r"   r   c                       e Zd ZdS )GTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr+   r!   r"   r   r  r  q	  r-   r"   r  r  )
r   rP   r   r   r   r  r  r  r  r  s
            r   r  z6Test_providedByFallback.test_super_when_base_is_objectg	  sM   ,,,,,,;;;;;;	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
X			 	 	 	 	f 	 	 
		 '))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
t
                                } G d d|          } |            }|                     t          |                     |                    |g            |||           |                     t          |                     |                    ||g           t          ||          }	|                     |	          }
| 
                    |
j                   |                     t          |
          |g           d S )Nr   rO   r   r  c                       e Zd ZdS )OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd ZdS )RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr+   r!   r"   r   r   r  	  r>   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  	  r>   r"   r  )r   rP   r/   r   r  r0   r   rI   rF  r  rl   r  )r   rP   r   r  r   r   r   r  r  r  r  r  s              r   (test_super_when_object_directly_providesz@Test_providedByFallback.test_super_when_object_directly_provides}	  s   ,,,,,,;;;;;;@@@@@@	 	 	 	 	I 	 	 		 	 	 	 	u 	 	 	 
U			 	 	 	 	6 	 	 
			 	 	 	 	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t                                } ||           G d d|                      }	 ||           G d d|                      }
 |||           G d d|	|
                      } |            }t          ||          }t          |	|          }t          |
|          }|                     t          |                     |                    |||||g           |                     t          |                     |                    |||g           |                     t          |                     |                    ||g           |                     t          |                     |                    |g           d S )Nr   r   rO   c                       e Zd ZdS )OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr+   r!   r"   r   r  r  	  r>   r"   r  c                       e Zd ZdS )MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr+   r!   r"   r   r  r  	  r>   r"   r  c                       e Zd ZdS )RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd ZdS )TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr+   r!   r"   r   r  r  	  r>   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			 	 	 	 	6 	 	 
		 
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  )rX  r  )r   rZ  rF  r0   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                 b    t           t          u}t          j        | | j        |rdnd           d S )Nr  r  rW  )strbytesr   rZ  rF  )r   PY3s     r   r]  zATest_providedByFallback.test_catches_only_AttributeError_on_class	  sK     $T4=EH6^kkN^	` 	` 	` 	` 	` 	`r"   )r   r   r    r
  rw   rF  ru  ry  r}  r  r  r  r  r  r  r  r  r	  r  r]  r  r  s   @r   rn  rn    sP       " " "
 (O3 3 3) ) )	- 	- 	-) ) )
- 
- 
-* * ** * *- - -- - - - -47 7 7 7 7.( ( ( ( (,- - - - -:/" /" /" /" /"b7 7 7
` ` ` ` ` ` `r"   rn  c                       e Zd Zd ZdS )Test_providedByc                     ddl m} |S )Nr   rG  )r/   rH  )r   rH  s     r   rw   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&    	9 	9 	9 	9 	9 	944r"   c                 6     |                                  |i |S r5   rz   r{   s      r   r~   z3ObjectSpecificationDescriptorFallbackTests._makeOne	  r   r"   c                     ddl m} ddlm}  |d          } G d dt                    } |||          |_        |                                 |_        |                     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  	  r>   r"   r,   )
r/   r  rQ   r   r0   r  r~   r  r   rI   )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                 X   ddl m} ddl m} ddlm}  |d          } |d          } ||           G d dt
                                } |||          |_        |                                 |_         |            }| 	                    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  rQ   r   r0   r  r~   r  r   rI   )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                                } |||          |_        |                                 |_	         |            }	 ||	|           | 
                    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  
  r-   r"   r,   )r/   r  r   r  rQ   r   r0   r  r~   r  r   rI   )
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t                    } |            }                               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  
  r>   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                     r5   r!   )r   r  s    r   r  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__ 
  s	    !!r"   Nr   r   r    r~   r  r[  r  )r  r   s   r   r,   r  
  sE        !]]__N" " " " X" " "r"   r,   r  )	Exceptionr0   r   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-0A-c                       G d dt                     } G  fddt                    } |            }t          |d          }                     |           d S )Nc                       e Zd ZdS )mObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr+   r!   r"   r   r  r  *
  r>   r"   r  c                   N    e Zd Z                                 Zed             ZdS )eObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                     t           r5   )r  r   s    r   r  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__0
  s    $$r"   Nr  r   s   r   r,   r  -
  s;        !]]__N% % X% % %r"   r,   r  )r  r0   r  assertIsNotNone)r   r  r,   r(   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught(
  s    	 	 	 	 	) 	 	 		% 	% 	% 	% 	% 	% 	%& 	% 	% 	% cee3 011X&&&&&r"   c                    ddl m} ddl m}  G d d|          } ||           G d dt                                }|                                 |_        t           |            d          }|                     |           d S )	Nr   rO   r   c                       e Zd ZdS )ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr+   r!   r"   r   r   r  <
  r>   r"   r   c                   $    e Zd Zed             ZdS )YObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                     d S r5   r!   r   s    r   r  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__B
  s    tr"   N)r   r   r    r[  r  r!   r"   r   r,   r  ?
  s/           X  r"   r,   r  )r   rP   r   r0   r~   r  r  rl   )r   rP   r   r   r,   r  s         r   !test_None_in__provides__overrideszLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides8
  s    ,,,,,,......	 	 	 	 	9 	 	 	 
T			 	 	 	 	& 	 	 
		 "]]__3355"233(#####r"   N)r   r   r    r
  rw   r~   r  r  r  r  r  r  r!   r"   r   r  r  	  s        5 5 5 (O3 3 3; ; ;; ; ;A A A"+ + + ' ' ' $ $ $ $ $r"   r  c                       e Zd Zd ZdS )"ObjectSpecificationDescriptorTestsc                     ddl m} |S )Nr   )ObjectSpecificationDescriptor)r/   r   )r   r   s     r   rw   z2ObjectSpecificationDescriptorTests._getTargetClassP
  s    MMMMMM,,r"   Nr  r!   r"   r   r  r  K
  s#        
- - - - -r"   r  c                        e Zd Zd Zd Zd ZdS )rX  c                     | _         fd|D             | _        |                                D ]\  }}t          ||           d S )Nc                 2    i | ]}|t          |          S r!   )r  ).0keymodules     r   
<dictcomp>z$_Monkey.__init__.<locals>.<dictcomp>\
  s%    CCC3 4 4CCCr"   )r  
to_restoreitemsr  )r   r  r}   r  r  s    `   r   r'  z_Monkey.__init__Z
  s_    CCCCCCC((** 	( 	(JCFC''''	( 	(r"   c                     | S r5   r!   r   s    r   	__enter__z_Monkey.__enter__`
  s    r"   c                 p    | j                                         D ]\  }}t          | j        ||           d S r5   )r  r	  r  r  )r   exc_typeexc_valexc_tbr  r  s         r   __exit__z_Monkey.__exit__c
  sD    ///11 	- 	-JCDKe,,,,	- 	-r"   Nr   r   r    r'  r  r  r!   r"   r   rX  rX  X
  sA        ( ( (  - - - - -r"   rX  c                        e Zd Zd Zd Zd ZdS )rd  c                     || _         t          ||          | _        | j                                        | _        | j                                         | j                            |           d S r5   )r  r  targetcopyr  clearupdate)r   r  attrnamer}   s       r   r'  z_MonkeyDict.__init__j
  s_    fh//+**,,2r"   c                     | j         S r5   )r  r   s    r   r  z_MonkeyDict.__enter__q
  s
    {r"   c                 v    | j                                          | j                             | j                   d S r5   )r  r  r  r  )r   r  r  r  s       r   r  z_MonkeyDict.__exit__t
  s4    4?+++++r"   Nr  r!   r"   r   rd  rd  h
  sA            , , , , ,r"   rd  )5r3  unittestzope.interface._compatr   r   r  r   r   #zope.interface.tests.test_interfacer   r0   r	   TestCaser$   rA   ru   r   r  rB  r  r  r'  r@  rv  r{  r  r  r  r  r  r  r  rQ  ra  r  r  r  r  r  r  r  r   r  r  r%  r5  rj  rn  r  r  r  rX  rd  r!   r"   r   <module>r     sH     3 3 3 3 3 3 * * * * * * 6 6 6 6 6 6 1 1 1 1 1 1 Q Q Q Q Q Q
    f   09 9 9 9 9" 9 9 9>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.  +% +% +% +% +%6 +% +% +%Z74 74 74 74 743X5F 74 74 74tgX gX gX gX gX/1B gX gX gXT	/ 	/ 	/ 	/ 	/ 4 	/ 	/ 	/< < < < <h/ < < <&<D <D <D <D <D+ <D <D <D@> > > > >4 > > >D21 21 21 21 21(+_ 21 21 21j81 81 81 81 81h' 81 81 81v/1 /1 /1 /1 /1* /1 /1 /1d    1   Dy
 y
 y
 y
 y
H- y
 y
 y
z' ' ' ' 'H% ' ' '>>A >A >A >A >AH- >A >A >AB? ? ? ? ?) ? ? ?@.@ .@ .@ .@ .@H- .@ .@ .@b+H +H +H +H +HX%6 +H +H +H\) ) ) ) )2;) ) )= = = = =* = = =D& & & & &1 & & &RK
 K
 K
 K
 K
H- K
 K
 K
\+; +; +; +; +;h/ +; +; +;\:1 :1 :1 :1 :1*O :1 :1 :1~9 9 9 9 9H% 9 9 9(9 9 9 9 9(+ 9 9 9xi! i! i! i! i!(*; i! i! i!X& & & & &"E"7& & &q` q` q` q` q`h/ q` q` q`j    -+  g$ g$ g$ g$ g$1B g$ g$ g$R- - - - -2- - -- - - - -f - - - , , , , ,& , , , , ,r"   