
    Ng: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
      Z4y)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y)_Py3ClassAdvicec                 ^   dd l }|j                  d      5 }|j                          t        s2t	        |||       | j                  t        |      d       	 d d d        y	 t	        |||       |r| j                  d       	 	 d d d        y # t        $ r Y d d d        yw xY w# 1 sw Y   y xY w)Nr   TrecordDidn't raise TypeErrorF)	warningscatch_warningsresetwarningsr   execassertEquallenfail	TypeError)selfcodeglobslocsfails_under_py3kr   logs          a/var/www/djangounited/venv/lib/python3.12/site-packages/zope/interface/tests/test_declarations.py_run_generated_codez#_Py3ClassAdvice._run_generated_code   s     	$$D$1 	S""$T5$'  S1-	 	8T5$' $II67	 	  	 		 	s0   A B#!B.B#	B B#B  B##B,N)T)__name__
__module____qualname__r        r   r	   r	      s     .2r"   r	   c                       e Zd Zd Zd Zd Zy)
NamedTestsc                 |    ddl m}  |d       G d dt                     }| j                  |j                  d       y )Nr   namedfooc                       e Zd Zy)"NamedTests.test_class.<locals>.FooNr   r   r    r!   r"   r   Foor*   8       r"   r,   zope.interface.declarationsr'   objectr   __component_name__)r   r'   r,   s      r   
test_classzNamedTests.test_class5   s:    5	v	& 	 
	 	//8r"   c                 d    ddl m}  |d      d        }| j                  |j                  d       y )Nr   r&   r(   c                     t               NNotImplementedError)os    r   doFooz'NamedTests.test_function.<locals>.doFooA   s    %''r"   )r/   r'   r   r1   )r   r'   r9   s      r   test_functionzNamedTests.test_function>   s3    5	v	( 
	( 	116:r"   c                     ddl m}  G d dt              } |       }  |d      |       | j                  |j                  d       y )Nr   r&   c                       e Zd Zy)%NamedTests.test_instance.<locals>.FooNr+   r!   r"   r   r,   r=   J       r"   r,   r(   r.   )r   r'   r,   r(   s       r   test_instancezNamedTests.test_instanceG   s<    5	& 	efc//8r"   N)r   r   r    r2   r:   r?   r!   r"   r   r$   r$   3   s    9;9r"   r$   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)EmptyDeclarationTestsc                     ddl m}  |       S Nr   )Declarationr/   rD   r   rD   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyV   s    ;}r"   c                 Z    | j                         }| j                  t        |      g        y r5   )rG   r   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___emptyZ   s"    ~~dR(r"   c                     ddl m} | j                         }| j                  t	        |j                               |g       y Nr   	Interface)zope.interface.interfacerP   rG   r   rI   	flattenedr   rP   rK   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_empty^   s/    6~~dnn./)=r"   c                 T    ddl m} | j                         }| j                  ||       y rN   )rQ   rP   rG   assertNotInrS   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___emptyc   s!    6~~D)r"   c                     ddl m} | j                         }| j                  |j	                  |             | j                  |j	                  |d             y )Nr   rO   Tstrict)rQ   rP   rG   
assertTrueextendsrS   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_emptyh   s?    6~~Y/0Yt<=r"   c                 z    | j                         }t        |j                               }| j                  |g        y r5   )rG   rI   
interfacesr   )r   rK   ls      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_emptyn   s/    ~~"#Br"   c                 l    ddl m} | j                         }| j                  |j                  ||f       y rN   )rQ   rP   rG   r   __sro__rS   s      r   test___sro___z#EmptyDeclarationTests.test___sro___s   s*    6~~i'9:r"   c                 j    ddl m} | j                         }| j                  |j                  |f       y rN   )rQ   rP   rG   r   __iro__rS   s      r   test___iro___z#EmptyDeclarationTests.test___iro___x   s'    6~~	|4r"   c                     | j                         }| j                  |j                  d             | j                  |j                  dd      d       | j	                  |j
                         y )Nattrabcdef)rG   assertIsNonegetr   assertFalse_v_attrsrJ   s     r   test_getzEmptyDeclarationTests.test_get}   sT    ~~$((6*+%/7 	'r"   c                     | j                         }t               |_        |j                  |       | j	                  |j                         y r5   )rG   r0   ro   changedrn   rJ   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   s5    ~~T'r"   N)r   r   r    rG   rL   rT   rW   r]   ra   rd   rg   rp   rs   r!   r"   r   rA   rA   R   s4    )>
*
> 
;
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y)DeclarationTestsc                     ddl m} |S rC   rE   rF   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;r"   c                 .     | j                         |i |S r5   rw   r   argskws      r   _makeOnezDeclarationTests._makeOne       %t##%t2r22r"   c                 n    | j                         }| j                  t        |j                        g        y r5   )r~   r   rI   	__bases__rJ   s     r   test_ctor_no_basesz#DeclarationTests.test_ctor_no_bases   s&    }}dnn-r2r"   c                     ddl m}  |d      }| j                  |      }| j                  t	        |j
                        |g       y Nr   InterfaceClassIFoo)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   s8    ;f%}}T"dnn-v6r"   c                     ddl m}  |       }| j                  |      }| j                  t	        |j
                        |g       y 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   s5    :|}}T"dnn-v6r"   c                 |    | j                         }|j                  |       | j                  |j                         y r5   )r~   rr   rl   ro   rJ   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s+    }}T$--(r"   c                 H    | j                         }| j                  ||       y r5   )r~   rV   rJ   s     r   test___contains__w_selfz(DeclarationTests.test___contains__w_self   s    }}t$r"   c                 d    ddl m}  |d      }| j                         }| j                  ||       y r   )rQ   r   r~   rV   r   s       r   "test___contains__w_unrelated_ifacez3DeclarationTests.test___contains__w_unrelated_iface   s*    ;f%}}t$r"   c                 f    ddl m}  |d      }| j                  |      }| j                  ||       y r   )rQ   r   r~   assertInr   s       r   !test___contains__w_base_interfacez2DeclarationTests.test___contains__w_base_interface   s+    ;f%}}T"dD!r"   c                 z    ddl m}  |d      }| j                  |      }| j                  t	        |      |g       y r   rQ   r   r~   r   rI   r   s       r   test___iter___single_basez*DeclarationTests.test___iter___single_base   s3    ;f%}}T"ddV,r"   c                     ddl m}  |d      } |d      }| j                  ||      }| j                  t	        |      ||g       y Nr   r   r   IBarr   r   r   r   r   rK   s        r   test___iter___multiple_basesz-DeclarationTests.test___iter___multiple_bases   sA    ;f%f%}}T4(ddD\2r"   c                     ddl m}  |d      } |d|f      }| j                  |      }| j                  t	        |      |g       y r   r   r   s        r   test___iter___inheritancez*DeclarationTests.test___iter___inheritance   sA    ;f%ftg.}}T"ddV,r"   c                     ddl m}  |d      } |d      }| j                  |||f      }| j                  t	        |      ||g       y r   r   r   s        r   'test___iter___w_nested_sequence_overlapz8DeclarationTests.test___iter___w_nested_sequence_overlap   sE    ;f%f%}}TD$<0ddD\2r"   c                     ddl m} ddl m}  |d      }| j                  |      }| j	                  t        |j                               ||g       y )Nr   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   sA    6;f%}}T"dnn./$	1BCr"   c                     ddl m} ddl m}  |d      } |d      }| j                  ||      }| j	                  t        |j                               |||g       y Nr   rO   r   r   r   r   r   rP   r   r   r   rK   s         r   test_flattened_multiple_basesz.DeclarationTests.test_flattened_multiple_bases   sO    6;f%f%}}T4(dnn./$i1HIr"   c                     ddl m} ddl m}  |d      } |d|f      }| j                  |      }| j	                  t        |j                               |||g       y r   r   r   s         r   test_flattened_inheritancez+DeclarationTests.test_flattened_inheritance   sQ    6;f%ftg.}}T"dnn./$i1HIr"   c                     ddl m} ddl m}  |d      } |d      }| j                  |||f      }| j	                  t        |j                               |||g       y r   r   r   s         r   (test_flattened_w_nested_sequence_overlapz9DeclarationTests.test_flattened_w_nested_sequence_overlap   sU    6;f%f%
 }}TD$<0dnn./$i1HIr"   c                     ddl m}  |d      } |d      }| j                  |      }||z
  }| j                  || j	                                | j                  t        |      |g       y r   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      }| j                  |      }||z
  }| j                  t	        |      g        y r   r   )r   r   r   r   r   s        r   test___sub___related_interfacez/DeclarationTests.test___sub___related_interface  s:    ;f%t$eb)r"   c                     ddl m}  |d      } |d|f      }| j                  |      }||z
  }| j                  t	        |      g        y r   r   r   s         r   -test___sub___related_interface_by_inheritancez>DeclarationTests.test___sub___related_interface_by_inheritance	  sH    ;f%ftg.t$eb)r"   c                     ddl m}  |d      } |d      }| j                  |      }||z   }| j                  || j	                                | j                  t        |      ||g       y r   r   r   s         r    test___add___unrelated_interfacez1DeclarationTests.test___add___unrelated_interface  sa    ;f%f%t$eT%9%9%;<etTl3r"   c                     ddl m}  |d      } |d      } |d      }| j                  ||      }| j                  ||      }||z   }| j                  t	        |      |||g       y )Nr   r   r   r   IBazr   )r   r   r   r   r   r   otherr   s           r   test___add___related_interfacez/DeclarationTests.test___add___related_interface  sg    ;f%f%f%tT*dD)etT4&89r"   c                    ddl m} ddlm} ddlm} ddl m}  |d      } |d|f      } ||j                  j                  d      5  | j                  |      }||z   }d d d        | j                  j                  |||f       | j                  |j                  ||f       | j                  t        |      ||g       y # 1 sw Y   dxY w)	Nr   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$  s     	-;:%w'!*uh7ruu''. 	$=='D8OE	$ 	5)(DE8U*;<ex&78	$ 	$s   CCc                    ddl m} ddl m} ddl m} ddlm} ddl m}  G d d|      } G d	 d
|      } ||       G d dt                     } ||j                  j                  d      5   ||      |z   }	d d d        | j                  	j                  |	|||f       | j                  |	j                  ||f       | j                  t        |	      ||g       y # 1 sw Y   exY w)Nr   rO   implementedByimplementerr   r   c                       e Zd Zy)PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr+   r!   r"   r   r   r   E  r>   r"   r   c                       e Zd Zy)SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr+   r!   r"   r   r   r   H  r>   r"   r   c                       e Zd Zy)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.:%	I 		u 	 
U		6 	 
	 ruu''. 	3!$'(2E	3 	%(KL8U*;<ex&78	3 	3s   ,CC%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77)
%%"-3-3DJJJ.**4:9,9r"   ru   c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestImmutableDeclarationc                     ddl m} |S )Nr   )_ImmutableDeclaration)r/   r   )r   r   s     r   rw   z(TestImmutableDeclaration._getTargetClassY  s    E$$r"   c                     ddl m} |S )Nr   )_empty)r/   r   )r   r   s     r   rG   z"TestImmutableDeclaration._getEmpty]  s
    6r"   c                     dd l }|j                  |j                  | j                                     }| j	                  || j                                y )Nr   )pickleloadsdumpsrG   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_picklea  s8    fll4>>+;<=fdnn./r"   c                 j    | j                   | j                                | j                                y r5   )r   rw   rG   r   s    r   test_singletonz'TestImmutableDeclaration.test_singletonf  s)    "D  "$NN	
r"   c                 X    | j                  | j                         j                  d       y )Nr!   )r   rG   r   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__l  s    )33R8r"   c                     | j                         }d|_        | j                  | j                         j                  d       | j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)Nr!   )   )rG   r   r   assertRaisesr   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__o  s\     )33R8y) 	#"EO	# 	# 	#s   A((A1c                     | j                         }|j                  }| j                  i |       d|d<   | j                  i |j                         y )N   r   )rG   
dependentsr   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependentsw  sH     T"QU--.r"   c                 B    | j                         j                  d        y r5   )rG   rr   r   s    r   test_changedz%TestImmutableDeclaration.test_changed  s      &r"   c                     | j                  | j                         j                  |              | j                  | j                         j                  | d             | j                  | j                         j                  | d             y )NTrY   F)rn   rG   r\   r   s    r   test_extends_always_falsez2TestImmutableDeclaration.test_extends_always_false  sl    )11$78)11$t1DE)11$u1EFr"   c                     | j                  | j                         j                  d             | j                  | j                         j                  dd      d       y )Nname*   )rl   rG   rm   r   r   s    r   test_get_always_defaultz0TestImmutableDeclaration.test_get_always_default  sF    $..*..v67)--fb92>r"   c                    | j                         }| j                  |j                  i        d|j                  d<   | j                  |j                  i        | j                  |j	                  d             i x}|_        d|d<   | j                  |j                  i        | j                  |j	                  d             y )Nr   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

9#/'G
?,r"   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestImplementsc                     ddl m} |S r   )r/   r   )r   r   s     r   rw   zTestImplements._getTargetClass      :r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTestImplements._makeOne  r   r"   c                 <    ddl m}  G d dt              } ||      S )Nr   r   c                       e Zd Zy)+TestImplements._makeOneToCompare.<locals>.ANr+   r!   r"   r   Ar	    r>   r"   r
  )r/   r   r0   )r   r   r
  s      r   _makeOneToComparez TestImplements._makeOneToCompare  s    =	 	 Qr"   c                    | j                         }| j                  |j                  d        | j                  |j                  d       | j                  |j                  d       | j                  t        |j                        g        y )Nr!   ?)r~   r   inheritdeclaredr   rI   r   r   r   s     r   r   z!TestImplements.test_ctor_no_bases  sb    }}t,+,dnn-r2r"   c                 h    | j                         }d|_        | j                  t        |      d       y )NTestingzclassImplements(Testing))r~   r   r   reprr  s     r   test___repr__zTestImplements.test___repr__  s)    }}!d%?@r"   c                 t    ddl m} | j                         }| j                  |j	                         |df       y )Nr   r   r5   )r/   r   r~   r   
__reduce__)r   r   r   s      r   test___reduce__zTestImplements.test___reduce__  s,    =}}*]G,DEr"   c                    ddl m}  G d dt              } G d dt              }ddlm}  |d      }| j                   ||       ||             | j                  t         ||            t         ||                   | j                   ||      d k         | j                  d  ||      kD         | j                   ||       ||      k         | j                   ||      |kD         | j                   ||       ||      k         | j                   ||      |k\         | j                   ||      |k7         y )	Nr   r   c                       e Zd Zy)#TestImplements.test_sort.<locals>.ANr+   r!   r"   r   r
  r    r>   r"   r
  c                       e Zd Zy)#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)=+;<mA./mA6F1GHa(4/0}Q//0a(=+;;<a(4/0a(M!,<<=a(D01a(D01r"   c                     G d dt               }ddlm}  G d dt               } G d dt               } ||      } ||      } ||      }| j                  ||k(         | j                  ||k7         | j                  ||k7         | j                  ||k(         | j                  ||k(         | j	                  ||k7         | j	                  ||k7         | j                  ||k7         | j                  ||k7         y )	Nc                   $    e Zd Zd Zd Zd Zd Zy)1TestImplements.test_proxy_equality.<locals>.Proxyc                     || _         y 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                   |k7  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"    s    (,..r"   r2  r   r   c                       e Zd Zy)-TestImplements.test_proxy_equality.<locals>.ANr+   r!   r"   r   r
  r4    r>   r"   r
  c                       e Zd Zy)-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.89.89/0%/0.01501/0%/0r"   c                 h   | j                         }| j                  |j                         | j                  d|j                         d|_        | j                  d|j                         |j                  d        | j                  |j                         | j                  d|j                         y )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ndmm4T$++,7r"   c                 "   | j                         }| j                  |j                         | j                  d|j                         |j                  d        | j                  |j                         | j                  d|j                         y )Nr<  )r~   rl   r<  rV   r=  rr   r  s     r   %test_changed_does_not_add_super_cachez4TestImplements.test_changed_does_not_add_super_cache  si    }}$++,7T$++,7r"   N)r   r   r    rw   r~   r  r   r  r  r  r:  r>  r@  r!   r"   r   r  r    s7    3 3A
F
2&&1P
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$$r"   c                 .     | j                         |i |S r5   rz   r{   s      r   _callFUTz#Test_implementedByFallback._callFUT  r   r"   c                      G d dt               } |       }d |_        | j                  t        | j	                  |            g        y )Nc                       e Zd ZdZy)]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foo__implemented__Nr   r   r    	__slots__r!   r"   r   r,   rI        ,Ir"   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  s;    	-& 	-e"dmmC0126r"   c                 r     G d dt               } |       }| j                  t        | j                  |       y )Nc                   0    e Zd Zd Zd Z eee      Zd Zy)hTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                     t               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  !  s    , &y)<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__   s-    	,& 	, e)T]]C8r"   c                     ddl m}  G d dt              } |       }d |_        t               }t	        |d      5 }|||<   | j                  | j                  |      |u        d d d        y # 1 sw Y   y xY w)Nr   declarationsc                       e Zd ZdZy)\Test_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations.<locals>.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-  sp    /	-& 	-e"h>@ 	7CHE#JOODMM#.#56	7 	7 	7s   (A++A4c                     ddl m}  |       } G d dt              } |       }||_        | j	                  | j                  |      |u        y )Nr   r   c                       e Zd ZdZy)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  sA    :|	-& 	-e"c*d23r"   c                     ddl m}  G d dt              } |       } |d      }|f|_        | j	                  t        | j                  |            |g       y )Nr   r   c                       e Zd ZdZy)OTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.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  sL    ;	-& 	-ef%#gdmmC01D6:r"   c                     ddl m}  |        G fddt              }| j                  | j	                  |      u        y )Nr   r   c                       e Zd ZW  Zy)JTest_implementedByFallback.test_w_existing_attr_as_Implements.<locals>.FooNr   r   r    rK  r   s   r   r,   rr  N      "Or"   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  3    :|	#& 	#c*d23r"   c                     ddl m} ddlm} t	        |d      5 }| j                  t        | j                  t                    g        | j                  t        | j                  t                    g        | j                  t        | j                  t                    g        t        t        t        fD ]B  }||   }| j                  ||       | j                  t        |      d|j                  d       D 	 d d d        y # 1 sw Y   y xY w)Nr   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7<T$--"56;T$--"56;tT* 4Sz%%dJ7  d$'LL"344
	4 
	4 
	4s   C!DDc                    ddl m} t               t               t               }}}t        |d      5 }||t        <   ||t
        <   ||t        <   | j                  | j                  t              |u        | j                  | j                  t
              |u        | j                  | j                  t              |u        d d d        y # 1 sw Y   y xY w)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    /!'68VX>@ 	;CH!E%L E$K E$KOODMM%0F:;OODMM$/69:OODMM$/69:	; 	; 	;s   BCCc                 l     G d d      }| j                  t        | j                  |            g        y )Nc                       e Zd Zy)ITest_implementedByFallback.test_oldstyle_class_no_assertions.<locals>.FooNr+   r!   r"   r   r,   r  o  r>   r"   r,   )r   rI   rF  r   r,   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertionsm  s*    	 	dmmC0126r"   c                 v     G d dt               }| j                  t        | j                  |            g        y )Nc                       e Zd Zy):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126r"   c                 r     G d dt               } |       }| j                  t        | j                  |       y )Nc                       e Zd ZdZy)HTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNrs  r!   r"   r   r,   r  z      "Or"   r,   r\  rO  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factoryy  s+    	#& 	#e)T]]C8r"   c                    ddl m}  G d dt              } |       }d|_        | j	                  |      }| j                  |j                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  d|j                         y )Nr   )objectSpecificationDescriptorc                       e Zd ZdZd Zy)FTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                     t               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	,& 	,
 e}}S!E	GdllC(c))40c((*GH6r"   c                    ddl m}  G d dt              }| j                  |      }| j	                  |j
                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j	                  |j                  |j                         y )Nr   ClassProvidesc                       e Zd ZdZy)DTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.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dllC(c))40c00-@c..>))3+=+=>r"   c                     ddl m}  |        G fddt              }| j                  | j	                  |      u        y )Nr   r   c                       e Zd ZW  Zy)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                 p   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	t                     } ||       G d
 d|             }| j                  t        | j                  |            ||g       t        ||      }| j                  t        | j                  |            |g       y )Nr   rO   r   c                       e Zd Zy)STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)RTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr+   r!   r"   r   r   r    r-   r"   r   c                       e Zd Zy)UTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr+   r!   r"   r   Derivedr    r-   r"   r  	r   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  s    ,;	I 		u 	 
U		6 	 
	 
X		d 	 
	 	dmmG45%7HIGW%dmmC01E7;r"   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	t                     } G d
 d|      } G d d|      } ||       G d d||             }| j                  t        | j                  |            ||g       t        ||      }	| j                  t        | j                  |	            |g       y )Nr   rO   r   c                       e Zd Zy)[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)ZTest_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.BaseNr+   r!   r"   r   r   r    r-   r"   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child1Nr+   r!   r"   r   Child1r    r>   r"   r  c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr+   r!   r"   r   Child2r    r>   r"   r  c                       e Zd Zy)]Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.DerivedNr+   r!   r"   r   r  r    r-   r"   r  r  )r   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5%7HIGW%dmmC01E7;r"   c                 "   ddl m} ddlm}  G d d|      } G d d|      } G d d	t              } G d
 d|      } ||       G d d|             } ||       G d d||             }| j                  |j                  ||||t        f       | j                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j                  t        |
      |g       | j                  |
j                         y )Nr   rO   r   c                       e Zd Zy)]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr+   r!   r"   r   r  r    r>   r"   r  c                       e Zd Zy)^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child2Nr+   r!   r"   r   r  r    r-   r"   r  c                       e Zd Zy)_Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.DerivedNr+   r!   r"   r   r  r    r-   r"   r  )r   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dmmG45%7HIGW%mmC cUG,#//*r"   c                 V   ddl m} ddlm}  G d d|      } G d d|      } G d d	t              } ||       G d
 d|             }| j                  t        | j                  |            |g       t        ||      }| j                  t        | j                  |            g        y )Nr   rO   r   c                       e Zd Zy)YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)XTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr+   r!   r"   r   r   r     r>   r"   r   c                       e Zd Zy)[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  s    ,;	I 		u 		6 	 
X		d 	 
	 	dmmG45zBGW%dmmC0126r"   c                 @   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	t                     }| j                  t        | j                  |            |g       t        ||      }| j                  t        | j                  |            g        y )
Nr   rO   r   c                       e Zd Zy)HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr+   r!   r"   r   r   r    r>   r"   r   c                       e Zd Zy)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5zBGW%dmmC0126r"   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d dt                     } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             }|}t        ||      }t        |	|      }t        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   r   rO   c                       e Zd Zy)RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr+   r!   r"   r   r   r  "  r>   r"   r   c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr+   r!   r"   r   IM1r  %  r>   r"   r  c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr+   r!   r"   r   IM2r  (  r>   r"   r  c                       e Zd Zy)UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr+   r!   r"   r   r   r  +  r>   r"   r   c                       e Zd Zy)WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr+   r!   r"   r   
IUnrelatedr  .  r>   r"   r  c                       e Zd Zy)QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr+   r!   r"   r   r   r  1  r-   r"   r   c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr+   r!   r"   r   M1r  5  r-   r"   r  c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr+   r!   r"   r   M2r  9  r-   r"   r   c                       e Zd Zy)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dmmB/0uc*	,dmmC01u	'dmmC0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79
74;44
;7797"?4<,<8+@7,7$/" /"r"   rB  c                       e Zd Zd Zy)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                   6    e Zd ZdZd Zde dz   dfdZd Zd Zy)	_ImplementsTestMixinTc                     t         r5   r6   )r   clsifaces      r   rF  z_ImplementsTestMixin._callFUT\  s    !!r"   Nz.Foo	not givenc                 H   ddl m} ddlm}  |d      }| j	                  ||      }| j                  ||       |j                  }	|| j                  |	|       | j                  |	j                  |       |dk(  r|n|}| j                  |	j                  |       | j                  |j                  |	       | j                  r^| j                  |j                  |       | j                  |j                  |       | j                  |j                  |j                         ||fS )Nr   r  r   r   r  )r/   r  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`  s     	>;f%==d+h$"" MM$	*"	$ K/#WdllG,c))40$$!!#"4"4mD!!#"2"2MBS--s/A/ABDyr"   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy)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{  s    	 	$r"   c                 D     G d dt               }| j                  |       y )Nc                       e Zd Zy)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  s    	& 	$r"   )r   r   r    r  rF  r  r!  r%  r!   r"   r   r  r  Y  s,    "
 &*%-%6#.6%%r"   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Test_classImplementsOnlyFc                 $    ddl m}  |||       |S )Nr   )classImplementsOnly)r/   r)  )r   r  r  r)  s       r   rF  z!Test_classImplementsOnly._callFUT  s    CC'
r"   c                 ^   ddl m} ddlm}  |d      } |d      } ||      |f_         G fddt
              }|_        | j                  ||       | j                  |j                  u        | j                  j                  d        | j                  j                  |f       y )Nr   r   r   r   r   c                       e Zd ZW  Zy)@Test_classImplementsOnly.test_w_existing_Implements.<locals>.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%$	#& 	#c4 ++t34t,0r"   c                     ddl m} ddlm}  |d      } ||       G fdd      }| j	                  |dd        y )	Nr   r   r   r   c                       e Zd ZW  Zy)9Test_classImplementsOnly.test_oldstyle_class.<locals>.FooNrs  old_specs   r   r,   r0        &Or"   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Ar"   c                     ddl m} ddlm}  |d      } ||       G fddt              }| j                  |dd        y )	Nr   r   r   r   c                       e Zd ZW  Zy)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Ar"   c                     | j                  t        dt        fi       d       \  }} G d d|      }| j                  ||       | j	                  |j                  |             y )Nr,   r4  c                       e Zd Zy)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3r"   N)	r   r   r    r  rF  r  r!  r%  r>  r!   r"   r   r'  r'    s#     
1 BB
4r"   r'  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
Test_classImplementsc                 F    ddl m}  |||      }| j                  |       |S )Nr   classImplements)r/   rC  rl   )r   r  r  rC  results        r   rF  zTest_classImplements._callFUT  s$    ? e,&!
r"   c                    | j                  |      \  }} G d d|      }| j                  ||      }| j                  d|j                         | j	                  d|j                         | j                  d|j                         |j
                  }| j                  |j                  d       | j                  |j                  |       | j                  |j                   |                    y )Nc                       e Zd Zy)ATest_classImplements.__check_implementer_redundant.<locals>.ChildNr+   r!   r"   r   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e	D 	 ==.'):):;)8+<+<=nh&7&78$$+u-((12r"   c                 F    | j                  t        dt        fi              y )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Fr"   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy)^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  s    	 	**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  | j                  ||       | j                  t         ||            |g        G d	 d
|      }| j                  ||       | j                  t         ||            |g       d d d        y # 1 sw Y   y xY w)Nr   rO   r   r   r   c                       e Zd Zy)FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr+   r!   r"   r   r,   rS    r>   r"   r,   Fc                       e Zd Zy)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%:	& 	 ruu''/ 	DMM#y)T-"45	{Cc  MM#y)T-"45	{C	D 	D 	Ds   A4CCc                 
    ||fS r5   r!   r   applied_firstapplied_seconds      r   _order_for_twoz#Test_classImplements._order_for_two  s    ~..r"   c                 z   ddl m} ddlm}  |d      } |d      } ||      |f_         G fddt
              }|_        | j                  ||       | j                  |j                         | j                  j                  |       | j                  j                  | j                  ||             y )Nr   r   r   r   r   c                       e Zd ZW  Zy)<Test_classImplements.test_w_existing_Implements.<locals>.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%$	#& 	#c4 c))40s+,,T48	:r"   c                 v  	
 ddl m} ddlm}  |d      } |d      } |d|f      }|j	                  d|      
|f
_         G 
fdd	t              } G 
fd
dt              }|j	                  d|      	|f	_         G 	fdd||      }|	_        | j                  ||       | j                  |j                  	       | j                  	j                  |       | j                  	j
                  | j                  ||             | j                  	j                  | j                  ||      
fz          y )Nr   r   r   IRootISecondRootIExtendsRootRootc                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nrs  	impl_roots   r   Root1rg        'Or"   rj  c                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nrs  rh  s   r   Root2rm    rk  r"   rn  ExtendsRoot1c                       e Zd ZW  Zy)LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNrs  )impl_extends_roots   r   ExtendsRootrq    s    /Or"   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'$]3%nuh?$$VU3	#X		(F 	(	(F 	( ',,^\J&2_"	0% 	0$/!k;/k113DE*22K@*33,,\;H	J*44,,\;G9,V	Xr"   N)r   r   r    rF  rK  rL  rP  rX  r]  r  rt  r!   r"   r   r@  r@    s-    3&G0D&/:"Xr"   r@  c                       e Zd Zd Zd Zy)Test_classImplementsFirstc                 F    ddl m}  |||      }| j                  |       |S )Nr   )classImplementsFirst)r/   rx  rl   )r   r  r  rx  rD  s        r   rF  z"Test_classImplementsFirst._callFUT,  s$    D%c5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  *  s    /r"   rv  c                       e Zd Zd Zd Zy)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!4.2..r"   c                 >   ddl m ddl m} ddlm}  |d       G fddt
              }| j                  |       | j                  d|j                         | j                  |j                  |       | j                  t        |j                        g       y )	Nr   rB  r   r   r   c                       e Zd ZW  fW fZy)@Test__implements_advice.test_no_existing_implements.<locals>.FooN)r   r   r    __implements_advice_data__)r   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<  sx    ?:;f%	D& 	Dc5s||Dc11:>c112TF;r"   N)r   r   r    rF  r  r!   r"   r   r{  r{  6  s    /
<r"   r{  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_implementerc                     ddl m} |S )Nr   r   )r/   r   )r   r   s     r   rw   z Test_implementer._getTargetClassK  rx   r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTest_implementer._makeOneO  r   r"   c                 0     | j                   | } ||      S r5   r~   )r   r  ifaces	decorators       r   rF  zTest_implementer._callFUTR  s    !DMM6*	~r"   c                     ddl m}  |d      }| j                  |      }| j                  t        |t                      y r   )rQ   r   r~   r   r   r0   )r   r   r   r  s       r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attrV  s1    ;f%MM$'	)Y9r"   c                 b   ddl m}  |d      } G d dt              } |       }| j                  |      } ||      }| j	                  ||u        |j
                  }| j                  |j                  d       | j                  |j                         | j                  |j
                  |       y )Nr   r   r   c                       e Zd Zy);Test_implementer.test_nonclass_can_assign_attr.<locals>.FooNr+   r!   r"   r   r,   r  _  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%	& 	eMM$'	S>C(""(RS$,,(c))40r"   c                 <   dd l }ddlm}  |d      }t        |j	                               }t        d      D ]#  } G d dt              }| j                  ||       % |j                          t        |j	                               }d}| j                  |||z          y )Nr   r   r   il  c                       e Zd Zy)HTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr+   r!   r"   r   	TestClassr  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Cr"   N)	r   r   r    rw   r~   rF  r  r  r  r!   r"   r   r  r  I  s!    3:1Dr"   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_implementer_onlyc                     ddl m} |S )Nr   )implementer_only)r/   r  )r   r  s     r   rw   z%Test_implementer_only._getTargetClass  s    @r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTest_implementer_only._makeOne  r   r"   c                 4    | j                  |      } ||      S r5   r  )r   r  r  r  s       r   rF  zTest_implementer_only._callFUT  s    MM%(	~r"   c                 v    ddl m}  |d      }| j                  |      }d }| j                  t        ||       y )Nr   r   r   c                      t               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  s4    ;f%MM$'		(*i;r"   c                     ddl m}  |d      }| j                  |      } G d d      }| j                  t        ||j
                         y )Nr   r   r   c                       e Zd Zd Zy).Test_implementer_only.test_method.<locals>.Barc                     t               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<>r"   r  c                       e Zd Zd Zd Zy)Test_implementsOnlyc                    dd l }ddlm} ddlm}  |d      }||d}i }dj                  dg      }|j                  d	      5 }|j                          	 t        |||       t        r| j                  d
       |d   }	|	j                  }
| j                  t        |
      |g       | j                  t        |      d       d d d        y # t        $ r | j!                  t        d       Y *w xY w# 1 sw Y   y xY w)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 	.S""$
.T5$' II675k**  ddV4  S1-	. 	.  =);<=		. 	.s1   C0C#AC0C-*C0,C--C00C9c                    ddl m} ddl m} ddlm}  |d      } |d      }||||d}i }dj                  g d	      }| j                  |||      r.|d
   }	|	j                  }
| j                  t        |
      |g       y y )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u+C&&DT$Z$0 7r"   N)r   r   r    r  r  r!   r"   r   r  r    s    .61r"   r  c                       e Zd Zd Zd Zd Zy)Test_implementsc                 l   dd l }ddlm} ddlm}  |d      }||d}i }dj                  ddg      }| j                  |||d	      rb|d
   }|j                  d      5 }	|j                          | j                  t        |       | j                  t        |	      d       d d d        y y # 1 sw Y   y xY w)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yy"  ##D%u=u+C(((5 .&&(!!)S1  S1-. . >. .s   AB**B3c                    dd l }ddlm} ddlm}  |d      } |d      }|||d}i }dj                  g d      }|j                  d	
      5 }	|j                          	 t        |||       | j                  d       d d d        y # t        $ r$ t        s| j                  t        |	      d       Y 5w xY w# 1 sw Y   y xY w)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yy  
 $$D$1 	4S""$4T5$'
 		23	4 	4  2$$SXq12		4 	40   B7 B-B7*B41B73B44B77C c                     ddl m} ddlm}  |d      }||d}i }dj	                  ddg      }| j                  |||      r.|d	   }|j                  }| j                  t        |      |g       y y )
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yy "  ##D%6u+C&&DT$Z$0 7r"   Nr   r   r    r  r  r  r!   r"   r   r  r    s    .$4.1r"   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ProvidesClassTestsc                     ddl m} |S Nr   ProvidesClassr/   r  r   r  s     r   rw   z"ProvidesClassTests._getTargetClass  r  r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zProvidesClassTests._makeOne!  r   r"   c                     ddl m}  |d      } G d dt              }| j                  ||      }| j	                  t        |      |g       y )Nr   r   r   c                       e Zd Zy)?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr+   r!   r"   r   r,   r  '  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$  sA    ;f%	& 	}}S$'ddV,r"   c                     ddl m} ddlm}  |d      } G d dt              }| j                  ||      }|j                         \  }}| j                  ||       | j                  |||f       y )Nr   Providesr   r   c                       e Zd Zy)/ProvidesClassTests.test___reduce__.<locals>.FooNr+   r!   r"   r   r,   r  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;f%	& 	}}S$'oo'teX&T{+r"   c                     ddl m}  |d      } G d dt              }| j                  ||      }||_        | j                  |j                  |       y )Nr   r   r   c                       e Zd Zy)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  sG    ;f%	& 	}}S$'c&&-r"   c                     ddl m}  |d      } G d dt              | j                  |      }|_        fd}| j                  t        |       y )Nr   r   r   c                       e Zd Zy)5ProvidesClassTests.test___get___instance.<locals>.FooNr+   r!   r"   r   r,   r  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@  sK    ;f%	& 	}}S$'	$ 	.%0r"   N)	r   r   r    rw   r~   r  r  r  r  r!   r"   r   r  r    s     3-	,.
1r"   r  c                   $     e Zd Z fdZd Z xZS )ProvidesClassStrictTestsc                 H    t         t        |           G fdd      }|S )Nc                       e Zd Z fdZy)@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                 ,    j                  | |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  	    ^r"   r  )r  r  rw   )r   r  r  r  s     @r   rw   z(ProvidesClassStrictTests._getTargetClassP  s)    6MO	^] 	^ r"   c           	          ddl m} ddl m} ddl m}  G d d|      } ||       G d dt                     }| j                  ||      }| j                  |j                  | ||      | |t              |f       y )	Nr   r   rO   r   c                       e Zd Zy)MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr+   r!   r"   r   r   r  ^  r>   r"   r   c                       e Zd Zy)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,.	I 	 
U		6 	 
	 }}T5)$&!(
 	r"   r   r   r    rw   r   r  r  s   @r   r  r  M  s    r"   r  c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)TestProvidesClassReprc                     ddl m} |S r  r  r  s     r   rw   z%TestProvidesClassRepr._getTargetClassq  r  r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTestProvidesClassRepr._makeOneu  r   r"   c                    ddl m}  |d      }|j                  dk(  sJ |j                  t        k(  sJ t	        |      dt        dk(  sJ  |d      }| j                  t        |       ||      }| j                  t	        |      d       y )Nr   r   r   z<InterfaceClass z.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))rQ   r   r   r   r  r~   r=  r   )r   r   r   r   insts        r   test__repr__z"TestProvidesClassRepr.test__repr__x  s    ;f%}}&&&(***Dz8EEEEf%}}T$Zt4JA	
r"   c                 ^    ddl m} |j                  }| j                  t	        |      d       y )Nr   dummyzIdirectlyProvides(sys.modules['zope.interface.tests.dummy'], IDummyModule))zope.interface.testsr  r  r   r  )r   r  providess      r   'test__repr__module_provides_typical_usez=TestProvidesClassRepr.test__repr__module_provides_typical_use  s*     	/%%NW	
r"   c                     dd l }ddlm} |j                  }t	        |j
                  dz         D ]8  }| j                  |j                        5  |j                  ||       d d d        : y # 1 sw Y   ExY w)Nr   r
  r   )	r   r  r  r  r  HIGHEST_PROTOCOLr   PicklingErrorr   )r   r   r  r  protos        r   test__repr__module_after_picklez5TestProvidesClassRepr.test__repr__module_after_pickle  sn    .%%622Q67 	.E""6#7#78 .Xu-. .	.. .s   A++A4	c                 Z   dd l }ddlm} ddlm} ddlm} ddlm}  |d      } |d      }|j                  }|`| j                  t        |d|        |||       |j                  }	| j                  t        |	      d	        |||       |j                  }	| j                  t        |	      d
       |j                  t           }
t        |
d      rJ  ||
||       | j                  t         |
d       | j#                  |
j                  |	       | j                  t        |	      d       y )Nr   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%%%NO	

 	UD!%%NU	
 KK)	9n555D$/N;i,,h7N	
r"   c                     ddl m} ddlm}  |d      }| j	                  ||      }|xj
                  dz  c_        |xj
                  dz  c_        | j                  t        |      d       y )Nr   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JG	
r"   c                     ddl m}  |dd      } |dd      } |d      }| j                  t        |       |||      }| j	                  t        |      d       y )	Nr   r   r   mod1r   mod2r   z>directlyProvides(TestProvidesClassRepr, IFoo, IBaz, mod2.IFoo)rQ   r   r~   r=  r   r  r   r   r   IFoo2r   r  s         r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_names  sW    ;f8v&9f%}}T$ZtU;JL	
r"   c                     ddl m} ddl m}  G d d|      } G d dt              } |t	        |             }| j                  |||      }| j                  t        |      d       y )	Nr   rO   r   c                       e Zd ZdZy)KTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooDoes nothingNr   r   r    __doc__r!   r"   r   r   r0        r"   r   c                       e Zd ZdZy)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  sZ    ,0	9 		& 	 T$Z(}}S$-JQ	
r"   c                 n    | j                  t        |             }| j                  t        |      d       y )Nz'directlyProvides(TestProvidesClassRepr)r~   r=  r   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfaces  s,    }}T$Z(J5	
r"   c                       G  fddt               } j                   |             } j                  t        |      d       y )Nc                   "    e Zd ZdZ fdZd Zy);TestProvidesClassRepr.test__repr__non_class.<locals>.Objectr!   c                 &    j                  d      S )NzShould not call str)r   )r  r   s    r   <lambda>zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.<lambda>  s    		*? @ r"   c                      y)Nz<Object>r!   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__  s    !r"   N)r   r   r    r   __str__rB  r   s   r   Objectr>    s    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  s9    	"V 	" }}VX&J(	
r"   c                     ddl m} ddl m} ddlm}  |d      } ||       G d dt
                     } | |             }| j                  t        |      d       y )	Nr   r   rH  r   r   c                       e Zd Zy)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  sY    ;:;f%	T		& 	 
	 #% J(	
r"   c                     ddl m} ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d	t                     } |       } |||        ||      }	| j                  t        |	      d
       y )Nr   r   rG  r  r   r   r   c                       e Zd Zy)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  st    ;:<;f%f%	T		& 	 
	 eS$#J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  sD    3

.+
Z



"


 
r"   r  c                       e Zd Zd Zd Zd Zy)Test_Providesc                     ddl m}  ||i |S )Nr   r  )r/   r  )r   r|   r}   r  s       r   rF  zTest_Provides._callFUT.  s    8$$$r"   c                    ddl m} ddlm}  |d      }i } G d dt              }t        ||      5  | j                  ||      }d d d        | j                  t              |g       | j                  |||f   |u        y # 1 sw Y   >xY w)Nr   r_  r   r   c                       e Zd Zy).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	, 	,s   BBc                     ddl m} ddlm}  |d      }t	               } G d dt              }||f|i}t        ||      5  | j                  ||      }d d d        | j                  |u        y # 1 sw Y   xY w)Nr   r_  r   r   c                       e Zd Zy)-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>  sr    /;f%	& 	te$\> 	,==d+D	,&	, 	,s   A00A9N)r   r   r    rF  rZ  r_  r!   r"   r   rQ  rQ  ,  s    %
4
'r"   rQ  c                   4    e Zd Zd Zd Zd Zed        Zd Zy)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                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)7Test_directlyProvides.test_w_normal_object.<locals>.FooNr+   r!   r"   r   r,   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    =;f%	& 	ec4 c..>c../$8r"   c                     ddl m} ddlm}  |d      } G d dt              }| j                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)/Test_directlyProvides.test_w_class.<locals>.FooNr+   r!   r"   r   r,   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../$8r"   c                     ddl m}  |d      } G d dt               G fddt              } |       }| j	                  t
        | j                  ||       y )Nr   r   r   c                       e Zd Zd Zy)NTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.MetaClassc                 <    |dk(  r| S t         j                  | |      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7r"   N)r   r   r    rv  r!   r"   r   	MetaClassrs  k  s    8r"   rw  c                       e Zd ZW  Zy)HTest_directlyProvides.test_w_non_descriptor_aware_metaclass.<locals>.FooN)r   r   r    __metaclass__)rw  s   r   r,   ry  t  s    %Mr"   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  sI     	<f%	8 	8	&& 	&e)T]]C>r"   c                     ddl m} ddlm}  |d      }i  G fddt              } |       }| j                  ||       | j                  d   |       | j                  t        d         |g       y )Nr   r  r   r   c                       e Zd Zd Z fdZy):Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 $    |dk(  ry t        |      ru  r6   r)  s     r   rv  zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__  s    ;&)$//r"   c                     ||<   y 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
'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  sl    =;f%	'& 	' ec4 h~6Fh~67$@r"   N)	r   r   r    rF  rj  rp  r   r{  r  r!   r"   r   ra  ra  K  s+    -	99 ? ?$Ar"   ra  c                       e Zd Zd Zd Zd Zy)Test_alsoProvidesc                     ddl m}  ||i |S )Nr   r  )r/   r  )r   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                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)8Test_alsoProvides.test_wo_existing_provides.<locals>.FooNr+   r!   r"   r   r,   r    r>   r"   r,   rg  rh  s         r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_provides  rk  r"   c                 0   ddl m} ddl m} ddlm}  |d      } |d      } G d dt
              } |       } |||       | j                  ||       | j                  |j                  |       | j                  t        |j                        ||g       y )	Nr   r  r  r   r   r   c                       e Zd Zy)7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr+   r!   r"   r   r,   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%	& 	ed#c4 c..>c../$>r"   N)r   r   r    rF  r  r  r!   r"   r   r  r    s    )	9?r"   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_noLongerProvidesc                     ddl m}  ||i |S )Nr   )noLongerProvides)r/   r  )r   r|   r}   r  s       r   rF  zTest_noLongerProvides._callFUT  rc  r"   c                     ddl m}  |d      } G d dt              } |       }| j                  ||       | j	                  t        |j                        g        y )Nr   r   r   c                       e Zd Zy)<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr+   r!   r"   r   r,   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  sK    ;f%	& 	ec4 c../4r"   c                     ddl m} ddlm}  |d      } G d dt              } |       } |||       | j                  ||       | j                  t        |j                        g        y )Nr   r  r   r   c                       e Zd Zy)?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr+   r!   r"   r   r,   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  sX    @;f%	& 	ed#c4 c../4r"   c                     ddl m} ddlm}  |d      } |d      } G d dt              } |       } |||       | j                  ||       | j                  t        |j                        |g       y )Nr   r  r   r   r   c                       e Zd Zy)@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr+   r!   r"   r   r,   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  sd    @;f%f%	& 	ed#c4 c../$8r"   c                     ddl m} ddlm}  |d      } ||       G d dt                     } |       }| j                  t        | j                  ||       y )Nr   r   r   r   c                       e Zd Zy)DTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr+   r!   r"   r   r,   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  sO    ;;f%	T		& 	 
	e*dmmS$?r"   N)r   r   r    rF  r  r  r  r  r!   r"   r   r  r    s    -5	5
9@r"   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)ClassProvidesBaseFallbackTestsc                     ddl m} |S Nr   )ClassProvidesBaseFallbackr/   r  r   r  s     r   rw   z.ClassProvidesBaseFallbackTests._getTargetClass      I((r"   c                 F     G d d| j                               } |||      S )Nc                       e Zd Zd Zy)8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                      || _         || _        y 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  s&    	%d**, 	% uj))r"   c                     ddl m}  |d      } G d dt              }| j                  ||      x}|_        | j                  |j                  |u        y )Nr   r   r   c                       e Zd Zy)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  sJ    ;f%	& 	"&--T"::s((D01r"   c                     ddl m}  |d      } G d dt              } |       }| j                  ||      |_        | j                  |j                  |       y )Nr   r   r   c                       e Zd Zy)JClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr+   r!   r"   r   r,   r    r>   r"   r,   r  )r   r   r   r,   r(   s        r   test_w_same_class_via_instancez=ClassProvidesBaseFallbackTests.test_w_same_class_via_instance  sI    ;f%	& 	e==d3c&&-r"   c                     ddl m}  |d      } G d dt              } G d d|      } |       }| j                  ||      |_        | j                  t        t        |d       | j                  t        t        |d       y )	Nr   r   r   c                       e Zd Zy)BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr+   r!   r"   r   r,   r    r>   r"   r,   c                       e Zd Zy)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  si    ;f%	& 		# 	e==d3.'3G.'3Gr"   N)r   r   r    rw   r~   r  r  r  r!   r"   r   r  r    s    )
*2.
Hr"   r  c                       e Zd Zd Zd Zy)ClassProvidesBaseTestsc                     ddl m} |S )Nr   )ClassProvidesBase)r/   r  )r   r  s     r   rw   z&ClassProvidesBaseTests._getTargetClass  s    A  r"   c                     ddl m} |S r  r  r  s     r   r
  z(ClassProvidesBaseTests._getFallbackClass  r  r"   N)r   r   r    rw   r
  r!   r"   r   r  r    s    !)r"   r  c                   $    e Zd Zd Zd Zd Zd Zy)ClassProvidesTestsc                     ddl m} |S Nr   r  r/   r  r   r  s     r   rw   z"ClassProvidesTests._getTargetClass  r  r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zClassProvidesTests._makeOne  r   r"   c                 F   ddl m} ddlm}  |d      } |d      } ||       G d dt                     }| j                  |t        |      |      x}|_        | j                  |j                  |u        | j                  t         |       j                        |g       y )Nr   r   r   r   r   c                       e Zd Zy)7ClassProvidesTests.test_w_simple_metaclass.<locals>.FooNr+   r!   r"   r   r,   r  '  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9d CCS((B./ce001D6:r"   c                 $   ddl m} ddlm}  |d      } |d      } ||       G d dt                     }| j                  |t        |      |      x}|_        | j                  |j                         t        |      |t        |      |ff       y )Nr   r   r   r   r   c                       e Zd Zy)/ClassProvidesTests.test___reduce__.<locals>.FooNr+   r!   r"   r   r,   r  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9d CCSr(S$s)T$:;	=r"   N)r   r   r    rw   r~   r  r  r!   r"   r   r  r    s    3
;
=r"   r  c                   $     e Zd Z fdZd Z xZS )ClassProvidesStrictTestsc                 H    t         t        |           G fdd      }|S )Nc                       e Zd Z fdZy)EClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                 ,    j                  | |d      S r  r  )r   r  r  s     r   r  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_roA  r  r"   Nr  r  s   r   StrictClassProvidesr  @  r  r"   r  )r  r  rw   )r   r  r  r  s     @r   rw   z(ClassProvidesStrictTests._getTargetClass>  s)    6MO	^- 	^ #"r"   c           
      .   ddl m} ddl m} ddl m}  G d d|      } ||       G d dt                     } |d	t
        fi       }| j                  |||      }| j                  |j                  | ||      | |t               |t
              |f       y )
Nr   r   rO   r   c                       e Zd Zy)MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr+   r!   r"   r   r   r  L  r>   r"   r   c                       e Zd Zy)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  s     	1,.	I 	 
U		 	 
	 I
 }}S)U3)$$&!(
 	r"   r  r  s   @r   r  r  ;  s    #r"   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestClassProvidesReprc                     ddl m} |S r  r  r  s     r   rw   z%TestClassProvidesRepr._getTargetClassf  r  r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTestClassProvidesRepr._makeOnej  r   r"   c                 x    | j                  t        |       t              }| j                  t        |      d       y )Nz'directlyProvides(TestClassProvidesRepr)r9  r:  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__emptym  s.    }}T$Z.J5	
r"   c                     ddl m}  G d d|      }| j                  t        |       t        |      }| j	                  t        |      d       y )Nr   rO   c                       e Zd ZdZy)=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  sA    ,	9 	 }}T$Zt4J;	
r"   c                     ddl m}  |dd      } |dd      } |d      }| j                  t        |       t        |||      }| j	                  t        |      d       y )	Nr   r   r   r'  r(  r)  r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r*  r+  s         r   r-  z1TestClassProvidesRepr.test__repr__duplicate_names  sY    ;f8v&9f%}}T$ZtT5AJL	
r"   c                     ddl m} ddl m} ddlm}  |d      } ||       G d dt
                     } ||      }| j                  t        |      d       y )	Nr   r   r   r   r   c                       e Zd Zy)<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr+   r!   r"   r   r,   r    r-   r"   r,   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  sW    ;=;f%	T		& 	 
	 S!J(	
r"   c                     ddl m}  G d dt              } | |             }| j                  t	        |      dt
        d        |       }d|_         ||      }| j                  t	        |      d       y )Nr   r   c                       e Zd Zd Zy)RTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                     | S 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  sl    =	v 	 XZ(J'/1	

 J
QJ'	
r"   N)
r   r   r    rw   r~   r  r  r-  r  r  r!   r"   r   r  r  d  s%    3
	



 
r"   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Test_directlyProvidedByc                     ddl m}  ||i |S )Nr   )directlyProvidedBy)r/   r  )r   r|   r}   r  s       r   rF  z Test_directlyProvidedBy._callFUT  r~  r"   c                      G d dt               } |       }| j                  t        | j                  |            g        y )Nc                       e Zd Zy)NTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr+   r!   r"   r   r,   r    r>   r"   r,   r  rO  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance  s3    	& 	edmmC0126r"   c                     ddl m} ddlm}  |d      } ||       G d dt                     } |       }| j                  t        | j                  |            g        y )Nr   r   r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr+   r!   r"   r   r,   r	    r-   r"   r,   )r/   r   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  sU    ;;f%	T		& 	 
	edmmC0126r"   c                     ddl m} ddlm}  |d      } G d dt              } |       } |||       | j                  t        | j                  |            |g       y )Nr   r  r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr+   r!   r"   r   r,   r    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  sO    @;f%	& 	ed#dmmC01D6:r"   c                     ddl m} ddl m} ddlm}  |d      } |d      } ||       G d dt
                     } |       } |||       | j                  t        | j                  |            |g       y )	Nr   r  r   r   r   r   c                       e Zd Zy)NTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr+   r!   r"   r   r,   r    r-   r"   r,   )	r/   r  r   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  sn    @;;f%f%	T		& 	 
	ed#dmmC01D6:r"   N)r   r   r    rF  r  r
  r  r  r!   r"   r   r   r     s    /77;;r"   r   c                       e Zd Zd Zd Zd Zy)Test_classProvidesc                 h   dd l }ddlm} ddlm}  |d      }||d}i }dj                  ddg      }t        |||       |d	   }|j                  d
      5 }	|j                          | j                  t        |       t        s| j                  t        |	      d       d d d        y # 1 sw Y   y xY w)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  s    =;f%"/>yy%  	T5$5k$$D$1 	.S""$i-  S1-		. 	. 	.s   AB((B1c                    dd l }ddlm} ddlm}  |d      } |d      }|||d}i }dj                  g d      }|j                  d	
      5 }	|j                          	 t        |||       | j                  d       d d d        y # t        $ r$ t        s| j                  t        |	      d       Y 5w xY w# 1 sw Y   y xY w)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yy  
 $$D$1 	4S""$4T5$'
 		23	4 	4  2$$SXq12		4 	4r  c                     ddl m} ddlm}  |d      }||d}i }dj	                  ddg      }| j                  |||      r.|d	   }|j                  }| j                  t        |      |g       y y )
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u+C%%DT$Z$0 7r"   Nr  r!   r"   r   r  r    s    .&4.1r"   r  c                       e Zd Zd Zd Zd Zy)Test_providerc                     ddl m} |S )Nr   )provider)r/   r  )r   r  s     r   rw   zTest_provider._getTargetClass!  s
    8r"   c                 .     | j                         |i |S r5   rz   r{   s      r   r~   zTest_provider._makeOne%  r   r"   c                     ddl m} ddlm}  |d      }| j	                  |       G d dt
                     }| j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)'Test_provider.test_w_class.<locals>.FooNr+   r!   r"   r   r,   r#  ,  r-   r"   r,   )
r/   r  rQ   r   r~   r0   r   r  r   rI   ro  s        r   rp  zTest_provider.test_w_class(  sg    =;f%	t		& 	 
	c..>c../$8r"   N)r   r   r    rw   r~   rp  r!   r"   r   r  r    s    39r"   r  c                   $    e Zd Zd Zd Zd Zd Zy)Test_moduleProvidesc                     ddl m} ddlm}  |d      }d||d}i }dj	                  dd	g      }t        |||       |d
   }| j                  t        |       y )Nr   moduleProvidesr   r   zope.interface.tests.foor   r(  r   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  sg    >;f%7#14Ayy&  	T5$5k)S)r"   c                     ddl m} ddlm}  |d      }d||d}i }dj	                  dd	g      }| j                  t              5  t        |||       d d d        y # 1 sw Y   y xY w)
Nr   r'  r   r   r)  r*  r  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  sq    >;f%7#14Ayy &  y) 	$ud#	$ 	$ 	$s   AA%c                     ddl m} ddlm}  |d      }d||d}dj	                  dg      }t        ||       |d	   }| j                  t        |      |g       y )
Nr   r'  r   r   r)  r*  r  moduleProvides(IFoo)r  )r/   r(  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  sd    >;f%7#14Ayy"  	T5^$ddV,r"   c                     ddl m} ddlm}  |d      }d||d}dj	                  ddg      }| j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)	Nr   r'  r   r   r)  r*  r  r0  r-  )r   r(  r   r   r   r  s         r   #test_called_twice_from_module_scopez7Test_moduleProvides.test_called_twice_from_module_scope`  sl    >;f%7#14A yy""  y) 	u	 	 	s   AA"N)r   r   r    r  r.  r1  r3  r!   r"   r   r%  r%  3  s    *$-r"   r%  c                   X    e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)#Test_getObjectSpecificationFallbackc                     ddl m} |S )Nr   )getObjectSpecificationFallback)r/   r7  )r   r7  s     r   r
  z5Test_getObjectSpecificationFallback._getFallbackClassq  s    N--r"   c                 .     | j                         |i |S r5   rz   r{   s      r   rF  z,Test_getObjectSpecificationFallback._callFUTx  r   r"   c                     i  G fddt               } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Z fdZd Zy)TTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                 `    |dk(  rt        |      	 |   S # t        $ r t        |      w xY wru  )r  KeyError)r   r   r  s     r   rv  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__~  s?    ;&(../#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?    
	,& 
	, e}}S!dR(r"   c                     ddl m} ddlm}  |d      }d } |||       | j	                  |      }| j                  ||j                         y )Nr   r  r   r   c                      t               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  sC    @;f%	(d#}}S!dC,,-r"   c                     d }t               |_        | j                  |      }| j                  t	        |      g        y )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  s3    	(!8}}S!dR(r"   c                     ddl m} ddlm}  |d      } G d dt              } |       } |||       | j                  |      }| j                  t        |      |g       y )Nr   r  r   r   c                       e Zd Zy)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  sS    @;f%	& 	ed#}}S!ddV,r"   c                     ddl m} ddlm}  |d      } ||       G d dt                     } |       }| j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)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		& 	 
	e}}S!ddV,r"   c                      G d dt               } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)XTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr+   r!   r"   r   r,   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  7    	& 	e}}S!dR(r"   c                 H    t        j                  | | j                  d       y )Nr  expected_missingr   test_raisesrF  r   s    r   ,test_catches_only_AttributeError_on_provideszPTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_provides  s    $$T4==>Zr"   c                 J    t        j                  | | j                  dd        y )Nr  )rX  r  rY  r   s    r   )test_catches_only_AttributeError_on_classzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_class  s    $$T4==;26	8r"   c                 N     G d dt               }| j                   |              y )Nc                       e Zd Z ee      Zy)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;Lr"   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  s    	<& 	< 	cer"   c                 .    G d dt               }t        r^| j                  t              5 }| j	                   |              d d d        | j                  dj                  j                  d          y | j	                   |              y # 1 sw Y   JxY w)Nc                       e Zd Z ee      Zy)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9Lr"   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  sw    	:& 	: ""<0 %Cce$% [#--*<*<Q*?@ MM#% % %s   BBN)r   r   r    r
  rw   rF  r@  rC  rF  rJ  rO  rT  r[  r]  ra  rh  r!   r"   r   r5  r5  o  sF    .
 (O3)".)	-	-)[8!r"   r5  c                       e Zd Zd Zy)Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r/   rl  )r   rl  s     r   rw   z+Test_getObjectSpecification._getTargetClass  s    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!!r"   c                 .     | j                         |i |S r5   rz   r{   s      r   rF  z Test_providedByFallback._callFUT  r   r"   c                      G d dt               } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)NTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr+   r!   r"   r   r,   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              } |       } |||      |_        | j                  |      }| j                  t        |      |g       y )Nr   r  r   r   c                       e Zd Zy)ATest_providedByFallback.test_w_providedBy_valid_spec.<locals>.FooNr+   r!   r"   r   r,   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  sX    8;f%	& 	e%c40}}S!ddV,r"   c                      G d dt               } |       }t               |_        | j                  |      }| j                  t	        |      g        y )Nc                       e Zd Zy)CTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr+   r!   r"   r   r,   r|  	  r>   r"   r,   )r0   r  rF  r   rI   rS  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec	  sA    	& 	e#X}}S!dR(r"   c                     ddl m} ddlm}  |d      } ||       G d dt                     } |       }t	               |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)VTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr+   r!   r"   r   r,   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
	  se    ;;f%	T		& 	 
	e#X}}S!ddV,r"   c                      G d dt               } |       }t               |_        t               x}|_        | j                  |      }| j	                  ||u        y )Nc                       e Zd Zy)cTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class.<locals>.FooNr+   r!   r"   r   r,   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	  sM    	& 	e#X&,h.3#}}S!()r"   c                      G d dt               } |       }t               |_        t               x}|_        t               |_        | j                  |      }| j	                  ||u        y )Nc                       e Zd Zy)eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class.<locals>.FooNr+   r!   r"   r   r,   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	  sW    	& 	e#X&,h.3#!8}}S!()r"   c                    ddl m} ddlm}  |d      } ||       G d dt                     } |       }t	               |_        t	               x|_        |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr+   r!   r"   r   r,   r  -	  r-   r"   r,   )
r/   r   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)	  sw    ;;f%	T		& 	 
	e#X.4h63+}}S!ddV,r"   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	t                     } ||       G d
 d|             } |       }| j                  t        | j                  |            ||g       t        ||      }| j                  |      }	| j                  |	j                         | j                  t        |	      |g       y )Nr   rO   r   c                       e Zd Zy)PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr+   r!   r"   r   r   r  :	  r>   r"   r   c                       e Zd Zy)STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr+   r!   r"   r   r   r  =	  r>   r"   r   c                       e Zd Zy)OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr+   r!   r"   r   r   r  @	  r-   r"   r   c                       e Zd Zy)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5%7HIGW%mmC #//*cUG,r"   c                 d   ddl m} ddlm}  G d d|      } G d d|      } G d d	t              } ||       G d
 d|             } |       }| j                  t        | j                  |            |g       t        ||      }| j                  t        | j                  |            g        y )Nr   rO   r   c                       e Zd Zy)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y)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y)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y)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5zBGW%dmmC0126r"   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	t                     } |       }| j                  t        | j                  |            |g       t        ||      }| j                  |      }| j                  |j                         | j                  t        |      g        y )
Nr   rO   r   c                       e Zd Zy)ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr+   r!   r"   r   r   r  k	  r>   r"   r   c                       e Zd Zy)HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr+   r!   r"   r   r   r  n	  r>   r"   r   c                       e Zd Zy)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	  s    ,;	I 		u 	 
X		f 	 
	 )dmmG45zBGW%mmC #//*cB'r"   c                    ddl m} ddlm} ddlm}  G d d|      } G d d|      } ||       G d	 d
t
                     } G d d|      } |       }| j                  t        | j                  |            |g        |||       | j                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j                  |
j                         | j                  t        |
      |g       y )Nr   rO   r   r  c                       e Zd Zy)OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd Zy)RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd Zy)NTest_providedByFallback.test_super_when_object_directly_provides.<locals>.BaseNr+   r!   r"   r   r   r  	  r-   r"   r   c                       e Zd Zy)QTest_providedByFallback.test_super_when_object_directly_provides.<locals>.DerivedNr+   r!   r"   r   r  r  	  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5w?(+dmmG45%7HIGW%mmC #//*cUG,r"   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d dt                     } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             } |       }t        ||      }t        |	|      }t        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   r   rO   c                       e Zd Zy)OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr+   r!   r"   r   r  r  	  r>   r"   r  c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr+   r!   r"   r   r  r  	  r>   r"   r  c                       e Zd Zy)RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr+   r!   r"   r   r   r  	  r>   r"   r   c                       e Zd Zy)TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr+   r!   r"   r   r  r  	  r>   r"   r  c                       e Zd Zy)NTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr+   r!   r"   r   r   r  	  r-   r"   r   c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr+   r!   r"   r   r  r  	  r-   r"   r  c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr+   r!   r"   r   r   r  	  r-   r"   r   c                       e Zd Zy)QTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr+   r!   r"   r   r  r  	  r-   r"   r  r  r  s                   r   r	  z@Test_providedByFallback.test_super_multi_level_multi_inheritance	  s   ;,	I 		) 		) 		u 		 	 
U		6 	 
	 
S		 	 
	 
S		 	 
	 
Xz	*	b" 	 
+	 I7ABlBldmmA./"JUC@	BdmmB/0uc*	,dmmC01u	'dmmC01	"r"   c                 R    t        j                  | | j                  dt               y )Nr  )rX  r  )r   rZ  rF  r0   r   s    r   .test_catches_only_AttributeError_on_providedByzFTest_providedByFallback.test_catches_only_AttributeError_on_providedBy	  s    $$T4==6F/5	7r"   c                 t    t         t        u}t        j                  | | j                  |rd       y d       y )Nr  r  rW  )strbytesr   rZ  rF  )r   PY3s     r   r]  zATest_providedByFallback.test_catches_only_AttributeError_on_class	  s3     $$T4==EHk	`N^	`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    s\    "
 (O3)	-)
-**--47.(,-:/"b7
`r"   rn  c                       e Zd Zd Zy)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                   @    e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zy	)
*ObjectSpecificationDescriptorFallbackTestsc                     ddl m} |S )Nr   )%ObjectSpecificationDescriptorFallback)r/   r  )r   r  s     r   r
  z<ObjectSpecificationDescriptorFallbackTests._getFallbackClass	  s    	944r"   c                 .     | j                         |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              } |||      |_        | j                         |_        | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)OObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr+   r!   r"   r   r,   r  	  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	  sX    8;f%	& 	#C.!]]_c001D6:r"   c                    ddl m} ddl m} ddlm}  |d      } |d      } ||       G d dt
                     } |||      |_        | j                         |_         |       }| j                  t        |j                        |g       y )	Nr   r   r  r   r   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr+   r!   r"   r   r,   r  	  r-   r"   r,   )r/   r   r  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;f%f%	T		& 	 
	#C.!]]_ec001D6:r"   c                 L   ddl m} ddl m} ddl m} ddlm}  |d      } |d      } |d      } ||       G d	 d
t                     } |||      |_        | j                         |_	         |       }	 ||	|       | j                  t        |	j                        ||g       y )Nr   r  r   r  r   r   r   r   c                       e Zd Zy)YObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr+   r!   r"   r   r,   r  
  r-   r"   r,   )r/   r  r   r  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;f%f%f%	T		& 	 
	#C.!]]_ed#c001D$<@r"   c                       G d dt                G  fddt              } |       } j                        5  t        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)vObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr+   r!   r"   r   MyExceptionr  
  r>   r"   r  c                   D    e Zd ZW j                         Ze fd       Zy)nObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Fooc                     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  
  s     !]]_N" "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
  sR    	) 		"& 	" e{+ 	+C)*	+ 	+ 	+s   AAc                       G d dt               } G  fddt              } |       }t        |d      } j                  |       y )Nc                       e Zd Zy)mObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr+   r!   r"   r   r  r  *
  r>   r"   r  c                   @    e Zd ZW  j                         Zed        Zy)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% %r"   r,   r  )r  r0   r  assertIsNotNone)r   r  r,   r(   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught(
  s?    	) 		%& 	% e3 01X&r"   c                     ddl m} ddl m}  G d d|      } ||       G d dt                     }| j	                         |_        t         |       d      }| j                  |       y )	Nr   rO   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr+   r!   r"   r   r   r  <
  r>   r"   r   c                       e Zd Zed        Zy)YObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                      y r5   r!   r   s    r   r  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__B
  s    r"   N)r   r   r    r[  r  r!   r"   r   r,   r  ?
  s      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
  sa    ,.	9 	 
T		& 	 
	 "]]_35"23(#r"   N)r   r   r    r
  rw   r~   r  r  r  r  r  r  r!   r"   r   r  r  	  s2    5 (O3;;A"+ ' $r"   r  c                       e Zd Zd Zy)"ObjectSpecificationDescriptorTestsc                     ddl m} |S )Nr   )ObjectSpecificationDescriptor)r/   r   )r   r   s     r   rw   z2ObjectSpecificationDescriptorTests._getTargetClassP
  s    M,,r"   Nr  r!   r"   r   r  r  K
  s    
-r"   r  c                       e Zd Zd Zd Zd Zy)rX  c                     || _         |D ci c]  }|t        ||       c}| _        |j                         D ]  \  }}t	        |||        y c c}w r5   )moduler  
to_restoreitemsr  )r   r  r}   keyr  s        r   r'  z_Monkey.__init__Z
  sR    @BC3 44C((* 	(JCFC'	( Ds   Ac                     | S r5   r!   r   s    r   	__enter__z_Monkey.__enter__`
  s    r"   c                 v    | j                   j                         D ]  \  }}t        | j                  ||        y r5   )r  r  r  r  )r   exc_typeexc_valexc_tbr  r  s         r   __exit__z_Monkey.__exit__c
  s2    ////1 	-JCDKKe,	-r"   Nr   r   r    r'  r  r  r!   r"   r   rX  rX  X
  s    (-r"   rX  c                       e Zd Zd Zd Zd Zy)rd  c                     || _         t        ||      | _        | j                  j                         | _        | j                  j                          | j                  j                  |       y r5   )r  r  targetcopyr  clearupdate)r   r  attrnamer}   s       r   r'  z_MonkeyDict.__init__j
  sM    fh/++**,2r"   c                     | j                   S r5   )r  r   s    r   r  z_MonkeyDict.__enter__q
  s    {{r"   c                     | j                   j                          | j                   j                  | j                         y r5   )r  r  r  r  )r   r
  r  r  s       r   r  z_MonkeyDict.__exit__t
  s(    4??+r"   Nr  r!   r"   r   rd  rd  h
  s    ,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     s    3 * 6 1 Q
f 09"" 9>7(H-- 7(tH9, H9V@,4 @,Fp86&&p8f@"!2!2 @"F
3.+%6 +%Z743X5F5F 74tgX/1B1B gXT	/ 4 	/<h// <&<D+ <D@>4 >D21(++_ 21j81h'' 81v/1** /1d1 Dy
H-- y
z'H%% '>>AH-- >AB?)) ?@.@H-- .@b+HX%6%6 +H\)2;)=** =D&1 &RK
H-- K
\+;h// +;\:1**O :1~9H%% 9(9(++ 9xi!(*;*; i!X&"E"7&q`h// q`j-+g$1B1B g$R-2--f - ,& ,r"   