
    e@                    8   d Z ddlZddlmZ ddlmZ ddlmZ  G d d      Z G d d	ej                        Z	 G d
 dej                        Z
 G d de
      Z G d de
      Z G d deej                        Z G d dej                        Z G d dee      Z G d d      Z G d deej                        Z G d deej                        Z G d de      Z G d dej                        Z G d  d!e      Z G d" d#e      Z G d$ d%ej                        Z G d& d'e      Z G d( d)ej                        Z G d* d+ej                        Z G d, d-ej                        Z G d. d/ej                        Z G d0 d1ej                        Z G d2 d3ej                        Z G d4 d5ee      Z G d6 d7ej                        Z  G d8 d9e       Z! G d: d;ej                        Z" G d< d=ej                        Z# G d> d?ej                        Z$ G d@ dAej                        Z% G dB dCej                        Z& G dD dEe&e      Z' G dF dGej                        Z( G dH dIe(e      Z) G dJ dKej                        Z* G dL dMe*e      Z+ G dN dO      Z, G dP dQ      Z-y)Rz@Test the new API for making and checking interface declarations
    N)OptimizationTestMixin)MissingSomeAttrs)!NameAndModuleComparisonTestsMixinc                       e Zd Z	 ddZy)_Py3ClassAdvicec                     dd l }|j                  d      5 }|j                          	 t        |||       |r| j	                  d       	 	 d d d        y # t
        $ r Y d d d        yw xY w# 1 sw Y   y xY w)Nr   T)recordzDidn't raise TypeErrorF)warningscatch_warningsresetwarningsexecfail	TypeError)selfcodeglobslocsfails_under_py3kr
   logs          H/usr/lib/python3/dist-packages/zope/interface/tests/test_declarations.py_run_generated_codez#_Py3ClassAdvice._run_generated_code   s     	$$D$1 
	S""$8T5$' $II67
	 
	
  
	 
	

	 
	s-   A+AA+	A(A+'A((A++A4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                 r    ddl m}  |d       G d d             }| j                  |j                  d       y )Nr   namedfooc                       e Zd Zy)"NamedTests.test_class.<locals>.FooNr   r   r   r   r   r   Foor$   2       r   r&   zope.interface.declarationsr!   assertEqual__component_name__)r   r!   r&   s      r   
test_classzNamedTests.test_class/   s8    5	u	 	 
	 	//7r   c                 d    ddl m}  |d      d        }| j                  |j                  d       y )Nr   r    r"   c                     t               NNotImplementedError)os    r   doFooz'NamedTests.test_function.<locals>.doFoo;   s    %''r   r(   )r   r!   r3   s      r   test_functionzNamedTests.test_function8   s3    5	u	( 
	( 	1159r   c                     ddl m}  G d d      } |       }  |d      |       | j                  |j                  d       y )Nr   r    c                       e Zd Zy)%NamedTests.test_instance.<locals>.FooNr%   r   r   r   r&   r7   D       r   r&   r"   r(   )r   r!   r&   r"   s       r   test_instancezNamedTests.test_instanceA   s:    5	 	eeS//7r   N)r   r   r   r,   r4   r9   r   r   r   r   r   -   s    8:8r   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)EmptyDeclarationTestsc                     ddl m}  |       S Nr   )Declarationr)   r>   r   r>   s     r   	_getEmptyzEmptyDeclarationTests._getEmptyP   s    ;}r   c                 Z    | j                         }| j                  t        |      g        y r/   )rA   r*   listr   decls     r   test___iter___emptyz)EmptyDeclarationTests.test___iter___emptyT   s"    ~~dR(r   c                     ddl m} | j                         }| j                  t	        |j                               |g       y Nr   	Interface)zope.interface.interfacerJ   rA   r*   rC   	flattenedr   rJ   rE   s      r   test_flattened_emptyz*EmptyDeclarationTests.test_flattened_emptyX   s/    6~~dnn./)=r   c                 T    ddl m} | j                         }| j                  ||       y rH   )rK   rJ   rA   assertNotInrM   s      r   test___contains___emptyz-EmptyDeclarationTests.test___contains___empty]   s!    6~~D)r   c                     ddl m} | j                         }| j                  |j	                  |             | j                  |j	                  |d             y )Nr   rI   Tstrict)rK   rJ   rA   
assertTrueextendsrM   s      r   test_extends_emptyz(EmptyDeclarationTests.test_extends_emptyb   s?    6~~Y/0Yt<=r   c                 z    | j                         }t        |j                               }| j                  |g        y r/   )rA   rC   
interfacesr*   )r   rE   ls      r   test_interfaces_emptyz+EmptyDeclarationTests.test_interfaces_emptyh   s/    ~~"#Br   c                 l    ddl m} | j                         }| j                  |j                  ||f       y rH   )rK   rJ   rA   r*   __sro__rM   s      r   test___sro___z#EmptyDeclarationTests.test___sro___m   s*    6~~i'9:r   c                 j    ddl m} | j                         }| j                  |j                  |f       y rH   )rK   rJ   rA   r*   __iro__rM   s      r   test___iro___z#EmptyDeclarationTests.test___iro___r   s'    6~~	|4r   c                     | j                         }| j                  |j                  d             | j                  |j                  dd      d       | j	                  |j
                         y )Nattrabcdef)rA   assertIsNonegetr*   assertFalse_v_attrsrD   s     r   test_getzEmptyDeclarationTests.test_getw   sT    ~~$((6*+%/7 	'r   c                     | j                         }t               |_        |j                  |       | j	                  |j                         y r/   )rA   objectri   changedrh   rD   s     r    test_changed_w_existing__v_attrsz6EmptyDeclarationTests.test_changed_w_existing__v_attrs   s5    ~~T'r   N)r   r   r   rA   rF   rN   rQ   rW   r[   r^   ra   rj   rn   r   r   r   r;   r;   L   s4    )>
*
> 
;
5
((r   r;   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)DeclarationTestsc                     ddl m} |S r=   r?   r@   s     r   _getTargetClassz DeclarationTests._getTargetClass       ;r   c                 .     | j                         |i |S r/   rr   r   argskws      r   _makeOnezDeclarationTests._makeOne       %t##%t2r22r   c                 n    | j                         }| j                  t        |j                        g        y r/   )ry   r*   rC   	__bases__rD   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)rK   r   ry   r*   rC   r|   r   r   r   rE   s       r   test_ctor_w_interface_in_basesz/DeclarationTests.test_ctor_w_interface_in_bases   s8    ;f%}}T"dnn-v6r   c                     ddl m}  |       }| j                  |      }| j                  t	        |j
                        |g       y Nr   
Implements)r)   r   ry   r*   rC   r|   )r   r   implrE   s       r   test_ctor_w_implements_in_basesz0DeclarationTests.test_ctor_w_implements_in_bases   s5    :|}}T"dnn-v6r   c                 |    | j                         }|j                  |       | j                  |j                         y r/   )ry   rm   rf   ri   rD   s     r   !test_changed_wo_existing__v_attrsz2DeclarationTests.test_changed_wo_existing__v_attrs   s+    }}T$--(r   c                 H    | j                         }| j                  ||       y r/   )ry   rP   rD   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   )rK   r   ry   rP   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   )rK   r   ry   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   rK   r   ry   r*   rC   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   rE   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   rI   r   r   rK   rJ   r   ry   r*   rC   rL   )r   rJ   r   r   rE   s        r   test_flattened_single_basez+DeclarationTests.test_flattened_single_base   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   rI   r   r   r   r   r   rJ   r   r   r   rE   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   rK   r   ry   assertIsInstancerr   r*   rC   r   r   r   r   beforeafters         r    test___sub___unrelated_interfacez1DeclarationTests.test___sub___unrelated_interface   s_    ;f%f%t$eT%9%9%;<etf-r   c                     ddl m}  |d      }| 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   rI   r   	C3SettingroIBaseIDerivedT)zope.interfacerJ   rK   r   zope.interface.tests.test_ror   r   C3
STRICT_IROry   r*   r`   r|   rC   )	r   rJ   r   r   r   r   r   baser   s	            r   "test___add___overlapping_interfacez3DeclarationTests.test___add___overlapping_interface  s     	-;:%w'!*uh7ruu''. 	$=='D8OE	$ 	5)(DE8U*;<ex&78	$ 	$s   CCc                    ddl m} ddl m} ddl m} ddlm} ddl m}  G d d|      } G d	 d
|      } ||       G d d             } ||j                  j                  d      5   ||      |z   }	d d d        | j                  	j                  |	|||f       | j                  |	j                  ||f       | j                  t        |	      ||g       y # 1 sw Y   exY w)Nr   rI   implementedByimplementerr   r   c                       e Zd Zy)PDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IBaseNr%   r   r   r   r   r   ?  r8   r   r   c                       e Zd Zy)SDeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.IDerivedNr%   r   r   r   r   r   B  r8   r   r   c                       e Zd Zy)ODeclarationTests.test___add___overlapping_interface_implementedBy.<locals>.BaseNr%   r   r   r   Baser   E  r'   r   r   T)r   rJ   r   r   r   r   r   r   r   r*   r]   r|   rC   )
r   rJ   r   r   r   r   r   r   r   r   s
             r   0test___add___overlapping_interface_implementedByzADeclarationTests.test___add___overlapping_interface_implementedBy4  s    
 	-0.:%	I 		u 	 
U		 	 
	 ruu''. 	3!$'(2E	3 	%(KL8U*;<ex&78	3 	3s   'CC N)r   r   r   rr   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   rp      s~    3377)
%%"-3-3DJJJ.**4:9,9r   rp   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   rr   z(TestImmutableDeclaration._getTargetClassS  s    E$$r   c                     ddl m} |S )Nr   )_empty)r)   r   )r   r   s     r   rA   z"TestImmutableDeclaration._getEmptyW  s
    6r   c                     dd l }|j                  |j                  | j                                     }| j	                  || j                                y )Nr   )pickleloadsdumpsrA   assertIs)r   r   copieds      r   test_picklez$TestImmutableDeclaration.test_pickle[  s8    fll4>>+;<=fdnn./r   c                 j    | j                   | j                                | j                                y r/   )r   rr   rA   r   s    r   test_singletonz'TestImmutableDeclaration.test_singleton`  s)    "D  "$NN	
r   c                 X    | j                  | j                         j                  d       y )Nr   )r*   rA   r|   r   s    r   test__bases__z&TestImmutableDeclaration.test__bases__f  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   )   )rA   r|   r*   assertRaisesr   )r   emptys     r   test_change__bases__z-TestImmutableDeclaration.test_change__bases__i  s\     )33R8y) 	#"EO	# 	# 	#s   A((A1c                     | j                         }|j                  }| j                  i |       d|d<   | j                  i |j                         y )N   r   )rA   
dependentsr*   )r   r   depss      r   test_dependentsz(TestImmutableDeclaration.test_dependentsq  sH     T"QU--.r   c                 B    | j                         j                  d        y r/   )rA   rm   r   s    r   test_changedz%TestImmutableDeclaration.test_changedy  s      &r   c                     | j                  | j                         j                  |              | j                  | j                         j                  | d             | j                  | j                         j                  | d             y )NTrS   F)rh   rA   rV   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*   )rf   rA   rg   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   rc   )rA   r*   ri   rf   rg   )r   rE   attrss      r   test_v_attrsz%TestImmutableDeclaration.test_v_attrs  s    ~~+ "f+$((6*+ ""f+$((6*+r   N)r   r   r   rr   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Q  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   rr   zTestImplements._getTargetClass      :r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTestImplements._makeOne  rz   r   c                 2    ddl m}  G d d      } ||      S )Nr   r   c                       e Zd Zy)+TestImplements._makeOneToCompare.<locals>.ANr%   r   r   r   Ar    r8   r   r  r)   r   )r   r   r  s      r   _makeOneToComparez TestImplements._makeOneToCompare  s    =	 	 Qr   c                    | j                         }| j                  |j                  d        | j                  |j                  d       | j                  |j                  d       | j                  t        |j                        g        y )Nr   ?)ry   r*   inheritdeclaredr   rC   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))ry   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   r/   )r)   r   ry   r*   
__reduce__)r   r   r   s      r   test___reduce__zTestImplements.test___reduce__  s,    =}}*]G,DEr   c                 t   ddl m}  G d d      } G d d      }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    r8   r   r  c                       e Zd Zy)#TestImplements.test_sort.<locals>.BNr%   r   r   r   Br    r8   r   r  r   r   )r)   r   rK   r   r*   hashrU   )r   r   r  r  r   r   s         r   	test_sortzTestImplements.test_sort  s   =	 		 	;f%q)=+;<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      }ddl m}  G d d      } G d d      } ||      } ||      } ||      }| 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 r/   _wrapped)r   wrappeds     r   __init__z:TestImplements.test_proxy_equality.<locals>.Proxy.__init__  s	     'r   c                     t               r/   r0   r   r   s     r   __getattr__z=TestImplements.test_proxy_equality.<locals>.Proxy.__getattr__      )++r   c                      | j                   |k(  S r/   r   r   r   s     r   __eq__z8TestImplements.test_proxy_equality.<locals>.Proxy.__eq__      }}--r   c                      | j                   |k7  S r/   r   r)  s     r   __ne__z8TestImplements.test_proxy_equality.<locals>.Proxy.__ne__  r+  r   N)r   r   r   r#  r&  r*  r-  r   r   r   Proxyr    s    (,..r   r.  r   r   c                       e Zd Zy)-TestImplements.test_proxy_equality.<locals>.ANr%   r   r   r   r  r0    r8   r   r  c                       e Zd Zy)-TestImplements.test_proxy_equality.<locals>.BNr%   r   r   r   r  r2    r8   r   r  )r)   r   rU   rh   )r   r.  r   r  r  implementedByAimplementedByBproxys           r   test_proxy_equalityz"TestImplements.test_proxy_equality  s    	. 	. 	>	 		 	 'q)&q)n% 	.89.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   )ry   rf   r8  rP   __dict__r   rm   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 )Nr8  )ry   rf   r8  rP   r9  rm   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   rr   ry   r  r}   r  r  r  r6  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)   r@  )r   r@  s     r   rr   z*Test_implementedByFallback._getTargetClass	  s    E$$r   c                 .     | j                         |i |S r/   ru   rv   s      r   _callFUTz#Test_implementedByFallback._callFUT  rz   r   c                      G d d      } |       }d |_         | j                  t        | j                  |            g        y )Nc                       e Zd ZdZy)]Test_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations.<locals>.Foo__implemented__Nr   r   r   	__slots__r   r   r   r&   rE        ,Ir   r&   )rG  r*   rC   rB  r   r&   r"   s      r   5test_dictless_wo_existing_Implements_wo_registrationszPTest_implementedByFallback.test_dictless_wo_existing_Implements_wo_registrations  s9    	- 	-e"dmmC0126r   c                 h     G d d      } |       }| j                  t        | j                  |       y )Nc                   0    e Zd Zd Zd Z eee      Zd Zy)hTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Fooc                     t               r/   r0   r   s    r   	_get_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._get_impl  r'  r   c                     t         r/   )r   )r   vals     r   	_set_implzrTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo._set_impl  s    r   c                     t               r/   r0   r   s    r   __call__zqTest_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__.<locals>.Foo.__call__!  s    )++r   N)r   r   r   rQ  rT  propertyrG  rV  r   r   r   r&   rO    s    , &y)<O,r   r&   r   r   rB  rK  s      r   @test_dictless_wo_existing_Implements_cant_assign___implemented__z[Test_implementedByFallback.test_dictless_wo_existing_Implements_cant_assign___implemented__  s+    	, 	, e)T]]C8r   c                     ddl m}  G d d      } |       }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>.FoorF  NrH  r   r   r   r&   r^  )  rJ  r   r&   #BuiltinImplementationSpecifications)r   r\  rG  rl   _MonkeyDictrU   rB  )r   r\  r&   r"   regspecss         r   4test_dictless_wo_existing_Implements_w_registrationszOTest_implementedByFallback.test_dictless_wo_existing_Implements_w_registrations'  sn    /	- 	-e"h>@ 	7CHE#JOODMM#.#56	7 	7 	7s   (A&&A/c                     ddl m}  |       } G d d      } |       }||_        | j                  | j	                  |      |u        y )Nr   r   c                       e Zd ZdZy)KTest_implementedByFallback.test_dictless_w_existing_Implements.<locals>.FoorF  NrH  r   r   r   r&   rf  6  rJ  r   r&   )r)   r   rG  rU   rB  )r   r   r   r&   r"   s        r   #test_dictless_w_existing_Implementsz>Test_implementedByFallback.test_dictless_w_existing_Implements3  s?    :|	- 	-e"c*d23r   c                     ddl m}  G d d      } |       } |d      }|f|_        | j                  t	        | j                  |            |g       y )Nr   r   c                       e Zd ZdZy)OTest_implementedByFallback.test_dictless_w_existing_not_Implements.<locals>.FoorF  NrH  r   r   r   r&   rj  >  rJ  r   r&   r   )rK   r   rG  r*   rC   rB  )r   r   r&   r"   r   s        r   'test_dictless_w_existing_not_ImplementszBTest_implementedByFallback.test_dictless_w_existing_not_Implements<  sJ    ;	- 	-ef%#gdmmC01D6:r   c                 |    ddl m}  |        G fdd      }| 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   rG  r   s   r   r&   rn  H      "Or   r&   r)   r   rU   rB  r   r   r&   r   s      @r   "test_w_existing_attr_as_Implementsz=Test_implementedByFallback.test_w_existing_attr_as_ImplementsE  1    :|	# 	#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   r_  zclassImplements())r   r\  r)   r   r`  r*   rC   rB  tupledictr   r  r   )r   r\  r   rb  typspecs         r   test_builtins_added_to_cachez7Test_implementedByFallback.test_builtins_added_to_cacheL  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[  r_  )	r   r\  rl   r`  rx  rC   ry  rU   rB  )r   r\  t_specl_specd_specrb  s         r   test_builtins_w_existing_cachez9Test_implementedByFallback.test_builtins_w_existing_cache[  s    /!'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  i  r8   r   r&   r*   rC   rB  r   r&   s     r   !test_oldstyle_class_no_assertionsz<Test_implementedByFallback.test_oldstyle_class_no_assertionsg  *    	 	dmmC0126r   c                 l     G d d      }| j                  t        | j                  |            g        y )Nc                       e Zd Zy):Test_implementedByFallback.test_no_assertions.<locals>.FooNr%   r   r   r   r&   r  o  r8   r   r&   r  r  s     r   test_no_assertionsz-Test_implementedByFallback.test_no_assertionsm  r  r   c                 h     G d d      } |       }| j                  t        | j                  |       y )Nc                       e Zd ZdZy)HTest_implementedByFallback.test_w_None_no_bases_not_factory.<locals>.FooNro  r   r   r   r&   r  t      "Or   r&   rX  rK  s      r    test_w_None_no_bases_not_factoryz;Test_implementedByFallback.test_w_None_no_bases_not_factorys  s)    	# 	#e)T]]C8r   c                 z   ddl m}  G d d      } |       }d|_        | j                  |      }| j	                  |j                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  d|j                         y )Nr   )objectSpecificationDescriptorc                       e Zd ZdZd Zy)FTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.FooNc                     t               r/   r0   r   s    r   rV  zOTest_implementedByFallback.test_w_None_no_bases_w_factory.<locals>.Foo.__call__}  r'  r   )r   r   r   rG  rV  r   r   r   r&   r  {  s    "O,r   r&   r"   z*zope.interface.tests.test_declarations.foo__provides__)r)   r  r   rB  r*   r   r
  rG  __providedBy__rP   r9  )r   r  r&   r"   r{  s        r   test_w_None_no_bases_w_factoryz9Test_implementedByFallback.test_w_None_no_bases_w_factoryy  s    M	, 	,
 e}}S!E	GdllC(c))40c((*GH6r   c                    ddl m}  G d d      }| j                  |      }| j                  |j                  d       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |j                         y )Nr   ClassProvidesc                       e Zd ZdZy)DTest_implementedByFallback.test_w_None_no_bases_w_class.<locals>.FooNro  r   r   r   r&   r    r  r   r&   z*zope.interface.tests.test_declarations.Foo)r)   r  rB  r*   r   r   r
  rG  r   r  r  )r   r  r&   r{  s       r   test_w_None_no_bases_w_classz7Test_implementedByFallback.test_w_None_no_bases_w_class  s    =	# 	#}}S!E	GdllC(c))40c00-@c..>))3+=+=>r   c                 |    ddl m}  |        G fdd      }| j                  | j                  |      u        y )Nr   r   c                       e Zd ZW  Zy)BTest_implementedByFallback.test_w_existing_Implements.<locals>.FooNro  rp  s   r   r&   r    rq  r   r&   rr  rs  s      @r   test_w_existing_Implementsz5Test_implementedByFallback.test_w_existing_Implements  ru  r   c                 f   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } ||       G d
 d|             }| j	                  t        | j                  |            ||g       t        ||      }| j	                  t        | j                  |            |g       y )Nr   rI   r   c                       e Zd Zy)STest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)VTest_implementedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   r    r8   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   rJ   r)   r   r*   rC   rB  super	r   rJ   r   r   r   r   r  sup	__class__s	           r   )test_super_when_base_implements_interfacezDTest_implementedByFallback.test_super_when_base_implements_interface  s    ,;	I 		u 	 
U		 	 
	 
X		d 	 
	 	dmmG45%7HIGW%dmmC01E7;r   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } G d
 d|      } G d d|      } ||       G d d||             }| j	                  t        | j                  |            ||g       t        ||      }	| j	                  t        | j                  |	            |g       y )Nr   rI   r   c                       e Zd Zy)[Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.IDerivedNr%   r   r   r   r   r    r8   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    r8   r   r  c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_implements_interface_diamond.<locals>.Child2Nr%   r   r   r   Child2r    r8   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   rJ   r   r   r   r   r  r  r  r  r  s             r   1test_super_when_base_implements_interface_diamondzLTest_implementedByFallback.test_super_when_base_implements_interface_diamond  s    ,;	I 		u 	 
U		 	 
		T 		T 	 
X		ff 	 
	 	dmmG45%7HIGW%dmmC01E7;r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	      } G d
 d|      } ||       G d d|             } ||       G d d||             }| j	                  |j
                  ||||t        f       | j	                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j	                  t        |
      |g       | j                  |
j                         y )Nr   rI   r   c                       e Zd Zy)]Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)`Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.BaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)^Test_implementedByFallback.test_super_when_parent_implements_interface_diamond.<locals>.Child1Nr%   r   r   r   r  r    r8   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   rJ   r)   r   r*   __mro__rl   rC   rB  r  rf   _dependents)r   rJ   r   r   r   r   r  r  r  r  futr  s              r   3test_super_when_parent_implements_interface_diamondzNTest_implementedByFallback.test_super_when_parent_implements_interface_diamond  s    ,;	I 		u 		 		T 	 
U		T 	 
	 
X		ff 	 
	 	7FFD&*QRdmmG45%7HIGW%mmC cUG,#//*r   c                 L   ddl m} ddlm}  G d d|      } G d d|      } G d d	      } ||       G d
 d|             }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )Nr   rI   r   c                       e Zd Zy)YTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)\Test_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)XTest_implementedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   r    r8   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 		 	 
X		d 	 
	 	dmmG45zBGW%dmmC0126r   c                 6   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )
Nr   rI   r   c                       e Zd Zy)HTest_implementedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   r  
  r8   r   r   c                       e Zd Zy)KTest_implementedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   r    r8   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   rJ   r   r   r   r  r  r  s          r   test_super_when_base_is_objectz9Test_implementedByFallback.test_super_when_base_is_object  s    ,;	I 		u 	 
X		 	 
	 	dmmG45zBGW%dmmC0126r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d d             } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             }|}t	        ||      }t	        |	|      }t	        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   r   rI   c                       e Zd Zy)RTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   IM1r    r8   r   r  c                       e Zd Zy)PTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   IM2r  "  r8   r   r  c                       e Zd Zy)UTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   r  %  r8   r   r   c                       e Zd Zy)WTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   
IUnrelatedr  (  r8   r   r  c                       e Zd Zy)QTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r  +  r'   r   r   c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   M1r  /  r'   r   r  c                       e Zd Zy)OTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   M2r  3  r'   r   r  c                       e Zd Zy)TTest_implementedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r  r  7  r'   r   r  r)   r   r   rJ   r  r*   rC   rB  r   r   rJ   r   r  r  r   r  r   r  r  r  dsdsm1sm2r  s                   r   (test_super_multi_level_multi_inheritancezCTest_implementedByFallback.test_super_multi_level_multi_inheritance  s   ;,	I 		) 		) 		u 		 	 
U		 	 
	 
S		 	 
	 
S		 	 
	 
Xz	*	b" 	 
+	 7G$B B dmmA./"JUC@	BdmmB/0uc*	,dmmC01u	'dmmC01	"r   )r   r   r   rr   _getFallbackClassrB  rL  rY  rc  rg  rk  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r  s   @r   r>  r>    s    %
 (379
74;44
;7797"?4<,<8+@7,7$/" /"r   r>  c                       e Zd Zd Zy)Test_implementedByc                     ddl m} |S )Nr   r   r  )r   r   s     r   rr   z"Test_implementedBy._getTargetClassN      =r   Nr   r   r   rr   r   r   r   r
  r
  J  s    r   r
  c                   0    e Zd ZdZd Zde dz   dfdZd Zy)_ImplementsTestMixinTc                     t         r/   r0   )r   clsifaces      r   rB  z_ImplementsTestMixin._callFUTV  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  rK   r   rB  r   rG  r*   r   r
  FUT_SETS_PROVIDED_BYr   r  r  )
r   r&   	orig_spec	spec_namer
  r  r   r   returnedr{  s
             r   _check_implementerz'_ImplementsTestMixin._check_implementerZ  s     	>;f%==d+h$"" MM$	*"	$ K/#WdllG,c))40$$!!#"4"4mD!!#"2"2MBS--s/A/ABDyr   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy),_ImplementsTestMixin.test_class.<locals>.FooNr%   r   r   r   r&   r  v  r8   r   r&   )r  r  s     r   r,   z_ImplementsTestMixin.test_classu  s    	 	$r   )r   r   r   r  rB  r  r,   r   r   r   r  r  S  s'    "
 &*%-%6#.6%r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)Test_classImplementsOnlyFc                 $    ddl m}  |||       |S )Nr   )classImplementsOnly)r)   r   )r   r  r  r   s       r   rB  z!Test_classImplementsOnly._callFUT}  s    CC'
r   c                 T   ddl m} ddlm}  |d      } |d      } ||      |f_         G fdd      }|_        | 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>.FooNro  rp  s   r   r&   r#    rq  r   r&   )
r)   r   rK   r   r  r
  rB  rU   rG  r*   r   r   r   r   r   r&   r   s         @r   r  z3Test_classImplementsOnly.test_w_existing_Implements  s    :;f%f%$	# 	#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)0Test_classImplementsOnly.test_class.<locals>.FooNro  )old_specs   r   r&   r'    s    &Or   r&   r	  r
  )r)   r   rK   r   r  )r   r   r   r   r&   r(  s        @r   r,   z#Test_classImplementsOnly.test_class  s>    :;f%d#	' 	'XsDAr   c                     | j                  t        dt        fi       d       \  }} G d d|      }| j                  ||       | j	                  |j                  |             y )Nr&   r)  c                       e Zd Zy)RTest_classImplementsOnly.test_redundant_with_super_still_implements.<locals>.ChildNr%   r   r   r   Childr,    r8   r   r-  )r  typerl   rB  rU   r   )r   r   r   r-  s       r   *test_redundant_with_super_still_implementszCTest_classImplementsOnly.test_redundant_with_super_still_implements  s_    --	2& . 
e
	D 	 	eU#++E23r   N)r   r   r   r  rB  r  r,   r/  r   r   r   r  r  z  s     
1 B
4r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Test_classImplementsc                 F    ddl m}  |||      }| j                  |       |S )Nr   classImplements)r)   r4  rf   )r   r  r  r4  results        r   rB  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-  r8    r8   r   r-  rG  r  r  r   )r  rB  r   r9  rP   rG  r*   r  r
  rU   
providedBy)r   r   r   r-  r  r{  s         r   __check_implementer_redundantz2Test_classImplements.__check_implementer_redundant  s     --d3e	D 	 ==.'):):;)8+<+<=nh&7&78$$+u-((12r   c                 :     G d d      }| j                  |       y )Nc                       e Zd Zy)UTest_classImplements.test_redundant_implementer_empty_class_declarations.<locals>.FooNr%   r   r   r   r&   r=    r8   r   r&   )2_Test_classImplements__check_implementer_redundantr  s     r   3test_redundant_implementer_empty_class_declarationszHTest_classImplements.test_redundant_implementer_empty_class_declarations  s    	 	**3/r   c                    ddl m} ddl m} ddl m} ddlm}  G d d      } ||j                  j                  d      5  | j                  ||       | j                  t         ||            |g        G d	 d
|      }| j                  ||       | j                  t         ||            |g       d d d        y # 1 sw Y   y xY w)Nr   rI   r   r   r   c                       e Zd Zy)FTest_classImplements.test_redundant_implementer_Interface.<locals>.FooNr%   r   r   r   r&   rB    r8   r   r&   Fc                       e Zd Zy)FTest_classImplements.test_redundant_implementer_Interface.<locals>.BazNr%   r   r   r   BazrD        r   rE  )r   rJ   r   r   r   r   r   r   rB  r*   rC   )r   rJ   r   r   r   r&   rE  s          r   $test_redundant_implementer_Interfacez9Test_classImplements.test_redundant_implementer_Interface  s    ,0%:	 	 ruu''/ 	DMM#y)T-"45	{Cc  MM#y)T-"45	{C	D 	D 	Ds    A4B==Cc                 
    ||fS r/   r   r   applied_firstapplied_seconds      r   _order_for_twoz#Test_classImplements._order_for_two  s    ~..r   c                 p   ddl m} ddlm}  |d      } |d      } ||      |f_         G fdd      }|_        | j                  ||       | j                  |j                         | j                  j
                  |       | j                  j                  | j                  ||             y )Nr   r   r   r   r   c                       e Zd ZW  Zy)<Test_classImplements.test_w_existing_Implements.<locals>.FooNro  rp  s   r   r&   rO    rq  r   r&   )r)   r   rK   r   r  r
  rB  r   rG  r*   rL  r$  s         @r   r  z/Test_classImplements.test_w_existing_Implements  s    :;f%f%$	# 	#c4 c))40s+,,T48	:r   c                 b  	
 ddl m} ddlm}  |d      } |d      } |d|f      }|j	                  d|      
|f
_         G 
fdd	      } G 
fd
d      }|j	                  d|      	|f	_         G 	fdd||      }|	_        | j                  ||       | j                  |j                  	       | j                  	j                  |       | j                  	j
                  | j                  ||             | j                  	j                  | j                  ||      
fz          y )Nr   r   r   IRootISecondRootIExtendsRootRootc                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root1Nro  	impl_roots   r   Root1rV        'Or   rY  c                       e Zd ZW  Zy)FTest_classImplements.test_w_existing_Implements_w_bases.<locals>.Root2Nro  rW  s   r   Root2r\    rZ  r   r]  ExtendsRoot1c                       e Zd ZW  Zy)LTest_classImplements.test_w_existing_Implements_w_bases.<locals>.ExtendsRootNro  )impl_extends_roots   r   ExtendsRootr`    s    /Or   rb  )r)   r   rK   r   r!   r  r
  rB  r   rG  r*   rL  r|   )r   r   r   rQ  rR  rS  rY  r]  rb  ra  rX  s            @@r   "test_w_existing_Implements_w_basesz7Test_classImplements.test_w_existing_Implements_w_bases  s#   :;w'$]3%nuh?$$VU3	#X		( 	(	( 	( ',,^\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   rB  r>  r?  rG  rL  r  rc  r   r   r   r1  r1    s'    3&0
D&/:"Xr   r1  c                       e Zd Zd Zd Zy)Test_classImplementsFirstc                 F    ddl m}  |||      }| j                  |       |S )Nr   )classImplementsFirst)r)   rg  rf   )r   r  r  rg  r5  s        r   rB  z"Test_classImplementsFirst._callFUT  s$    D%c51&!
r   c                 
    ||fS r/   r   rI  s      r   rL  z(Test_classImplementsFirst._order_for_two  s    ..r   N)r   r   r   rB  rL  r   r   r   re  re    s    /r   re  c                       e Zd Zd Zd Zy)Test__implements_advicec                     ddl m}  ||i |S )Nr   )_implements_advice)r)   rl  )r   rw   rx   rl  s       r   rB  z Test__implements_advice._callFUT      B!4.2..r   c                 4   ddl m ddl m} ddlm}  |d       G fdd      }| j                  |       | j                  d|j                         | j                  |j                  |       | j                  t        |j                        g       y )	Nr   r3  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   r4  s   r   r&   rp  '  s    +/'?)C&r   r&   rq  )r)   r4  r   rK   r   rB  rP   r9  r   rG  r*   rC   )r   r   r   r&   r   r4  s       @@r   test_no_existing_implementsz3Test__implements_advice.test_no_existing_implements"  sv    ?:;f%	D 	Dc5s||Dc11:>c112TF;r   N)r   r   r   rB  rr  r   r   r   rj  rj    s    /
<r   rj  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   rr   z Test_implementer._getTargetClass1  rs   r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTest_implementer._makeOne5  rz   r   c                 0     | j                   | } ||      S r/   ry   )r   r  ifaces	decorators       r   rB  zTest_implementer._callFUT8  s    !DMM6*	~r   c                     ddl m}  |d      }| j                  |      }| j                  t        |t                      y r   )rK   r   ry   r   r   rl   )r   r   r   rz  s       r    test_nonclass_cannot_assign_attrz1Test_implementer.test_nonclass_cannot_assign_attr<  s1    ;f%MM$'	)Y9r   c                 X   ddl m}  |d      } G d d      } |       }| 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  E  r8   r   r&   z(zope.interface.tests.test_declarations.?)
rK   r   ry   rU   rG  r*   r   rf   r
  r   )r   r   r   r&   r"   rz  r  r{  s           r   test_nonclass_can_assign_attrz.Test_implementer.test_nonclass_can_assign_attrB  s    ;f%	 	eMM$'	S>C(""(RS$,,(c))40r   c                 2   dd l }ddlm}  |d      }t        |j	                               }t        d      D ]  } G d d      }| j                  ||         |j                          t        |j	                               }d}| j                  |||z          y )Nr   r   r   il  c                       e Zd Zy)HTest_implementer.test_does_not_leak_on_unique_classes.<locals>.TestClassNr%   r   r   r   	TestClassr  ]  rF  r   r  )	gcrK   r   lenget_objectsrangerB  collectassertLessEqual)	r   r  r   r   begin_count_r  	end_countfudge_factors	            r   $test_does_not_leak_on_unique_classesz5Test_implementer.test_does_not_leak_on_unique_classesP  s     	;f%"..*+t 	+A  MM)T*		+ 	

()	 Yl(BCr   N)	r   r   r   rr   ry   rB  r|  r  r  r   r   r   rt  rt  /  s!    3:1Dr   rt  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   rr   z%Test_implementer_only._getTargetClassq  s    @r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTest_implementer_only._makeOneu  rz   r   c                 4    | j                  |      } ||      S r/   rx  )r   r  r  rz  s       r   rB  zTest_implementer_only._callFUTx  s    MM%(	~r   c                 v    ddl m}  |d      }| j                  |      }d }| j                  t        ||       y )Nr   r   r   c                      t               r/   r0   r   r   r   	_functionz6Test_implementer_only.test_function.<locals>._function      %''r   )rK   r   ry   r   
ValueError)r   r   r   rz  r  s        r   r4   z#Test_implementer_only.test_function|  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               r/   r0   r   s    r   _methodz6Test_implementer_only.test_method.<locals>.Bar._method  r'  r   N)r   r   r   r  r   r   r   Barr    s    ,r   r  )rK   r   ry   r   r  r  )r   r   r   rz  r  s        r   test_methodz!Test_implementer_only.test_method  s?    ;f%MM$'		, 	, 	*i=r   N)r   r   r   rr   ry   rB  r4   r  r   r   r   r  r  o  s     3<>r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ProvidesClassTestsc                     ddl m} |S Nr   ProvidesClassr)   r  r   r  s     r   rr   z"ProvidesClassTests._getTargetClass  r  r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zProvidesClassTests._makeOne  rz   r   c                     ddl m}  |d      } G d d      }| j                  ||      }| j                  t	        |      |g       y )Nr   r   r   c                       e Zd Zy)?ProvidesClassTests.test_simple_class_one_interface.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   r   r   r   r   r&   r{  s        r   test_simple_class_one_interfacez2ProvidesClassTests.test_simple_class_one_interface  s?    ;f%	 	}}S$'ddV,r   c                     ddl m} ddlm}  |d      } G d d      }| 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    r8   r   r&   )r)   r  rK   r   ry   r  r   r*   )r   r  r   r   r&   r{  klassrw   s           r   r  z"ProvidesClassTests.test___reduce__  s^    8;f%	 	}}S$'oo'teX&T{+r   c                     ddl m}  |d      } G d d      }| j                  ||      }||_        | j	                  |j                  |       y )Nr   r   r   c                       e Zd Zy)2ProvidesClassTests.test___get___class.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   rK   r   ry   r  r   r  s        r   test___get___classz%ProvidesClassTests.test___get___class  sE    ;f%	 	}}S$'c&&-r   c                     ddl m}  |d      } G d d      | j                  |      }|_        fd}| j	                  t
        |       y )Nr   r   r   c                       e Zd Zy)5ProvidesClassTests.test___get___instance.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   c                  *            } | j                   S r/   )r  )r"   r&   s    r   _testz7ProvidesClassTests.test___get___instance.<locals>._test  s    %C###r   )rK   r   ry   r  r   AttributeError)r   r   r   r{  r  r&   s        @r   test___get___instancez(ProvidesClassTests.test___get___instance  sI    ;f%	 	}}S$'	$ 	.%0r   N)	r   r   r   rr   ry   r  r  r  r  r   r   r   r  r    s     3-	,.
1r   r  c                   $     e Zd Z fdZd Z xZS )ProvidesClassStrictTestsc                 @    t         |           G fdd      }|S )Nc                       e Zd Z fdZy)@ProvidesClassStrictTests._getTargetClass.<locals>.StrictProvidesc                 ,    j                  | |d      S NT)	base_mrosrT   _do_calculate_ro)r   r  r  s     r   r  zQProvidesClassStrictTests._getTargetClass.<locals>.StrictProvides._do_calculate_ro      $55diX\5]]r   Nr   r   r   r  r  s   r   StrictProvidesr    	    ^r   r  r  rr   )r   r  r  r  s     @r   rr   z(ProvidesClassStrictTests._getTargetClass  s&    /1	^] 	^ r   c           	          ddl m} ddl m} ddl m}  G d d|      } ||       G d d             }| j	                  ||      }| j                  |j                  | ||      | |t              |f       y )	Nr   r   rI   r   c                       e Zd Zy)MProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)LProvidesClassStrictTests.test_overlapping_interfaces_corrected.<locals>.BaseNr%   r   r   r   r   r    r'   r   r   )r   r   rJ   r   ry   r*   r]   rl   )r   r   rJ   r   r   r   r{  s          r   %test_overlapping_interfaces_correctedz>ProvidesClassStrictTests.test_overlapping_interfaces_corrected  s{     	1,.	I 	 
U		 	 
	 }}T5)$&!(
 	r   r   r   r   rr   r  r  r  s   @r   r  r    s    r   r  c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)TestProvidesClassReprc                     ddl m} |S r  r  r  s     r   rr   z%TestProvidesClassRepr._getTargetClass  r  r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTestProvidesClassRepr._makeOne  rz   r   c                 0   ddl m}  |d      }|j                  dk(  sJ |j                  t        k(  sJ t	        |      dj                  t              k(  sJ  |d      }| j                  t        |       ||      }| j                  t	        |      d       y )Nr   r   r   z<InterfaceClass {}.IFoo>r   z3directlyProvides(TestProvidesClassRepr, IFoo, IBar))	rK   r   r   r   r  formatry   r.  r*   )r   r   r   r   insts        r   test__repr__z"TestProvidesClassRepr.test__repr__  s    ;f%}}&&&(***Dz7>>xHHHH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  rK   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))rK   r   r)   r  ry   _v_module_namesr*   r  )r   r   r  r   r  s        r   )test__repr__module_provides_cached_sharedz?TestProvidesClassRepr.test__repr__module_provides_cached_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)rK   r   ry   r.  r*   r  r   r   r   IFoo2r   r  s         r   test__repr__duplicate_namesz1TestProvidesClassRepr.test__repr__duplicate_namesJ  sW    ;f8v&9f%}}T$ZtU;JL	
r   c                     ddl m} ddl m}  G d d|      } G d d      } |t        |             }| j	                  |||      }| j                  t        |      d       y )	Nr   rI   r   c                       e Zd ZdZy)KTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.IFooDoes nothingNr   r   r   __doc__r   r   r   r   r  Y      r   r   c                       e Zd ZdZy)JTestProvidesClassRepr.test__repr__implementedBy_in_interfaces.<locals>.Barr  Nr	  r   r   r   r  r  \  r  r   r  zCdirectlyProvides(Bar, IFoo, classImplements(TestProvidesClassRepr)))r   rJ   r   r.  ry   r*   r  )r   rJ   r   r   r  r   r  s          r   'test__repr__implementedBy_in_interfacesz=TestProvidesClassRepr.test__repr__implementedBy_in_interfacesV  sX    ,0	9 		 	 T$Z(}}S$-JQ	
r   c                 n    | j                  t        |             }| j                  t        |      d       y )Nz'directlyProvides(TestProvidesClassRepr)ry   r.  r*   r  r   r  s     r   test__repr__empty_interfacesz2TestProvidesClassRepr.test__repr__empty_interfacesg  s,    }}T$Z(J5	
r   c                       G  fdd      } 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>q  s    		*? @ r   c                      y)Nz<Object>r   r   s    r   __repr__zDTestProvidesClassRepr.test__repr__non_class.<locals>.Object.__repr__s  s    !r   N)r   r   r   r|   __str__r  r   s   r   Objectr  o  s    I@G"r   r  zdirectlyProvides(<Object>))ry   r*   r  )r   r  r  s   `  r   test__repr__non_classz+TestProvidesClassRepr.test__repr__non_classn  s7    	" 	" }}VX&J(	
r   c                     ddl m} ddl m} ddlm}  |d      } ||       G d d             } | |             }| j                  t        |      d       y )	Nr   r   r9  r   r   c                       e Zd Zy)DTestProvidesClassRepr.test__repr__providedBy_from_class.<locals>.FooNr%   r   r   r   r&   r     r'   r   r&   classImplements(Foo, IFoo))r)   r   r9  rK   r   r*   r  )r   r   r9  r   r   r&   r  s          r   !test__repr__providedBy_from_classz7TestProvidesClassRepr.test__repr__providedBy_from_class{  sW    ;:;f%	T		 	 
	 #% J(	
r   c                     ddl m} ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d	             } |       } |||        ||      }	| j                  t        |	      d
       y )Nr   r   r  r  r   r   r   c                       e Zd Zy)FTestProvidesClassRepr.test__repr__providedBy_alsoProvides.<locals>.FooNr%   r   r   r   r&   r%    r'   r   r&   z7directlyProvides(Foo, IBar, classImplements(Foo, IFoo)))r)   r   r9  r  rK   r   r*   r  )
r   r   r9  r  r   r   r   r&   r"   r  s
             r   #test__repr__providedBy_alsoProvidesz9TestProvidesClassRepr.test__repr__providedBy_alsoProvides  sr    ;:<;f%f%	T		 	 
	 eS$#JE	
r   N)r   r   r   rr   ry   r  r  r  r  r  r  r  r  r  r"  r&  r   r   r   r  r    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   rw   rx   r  s       r   rB  zTest_Provides._callFUT  s    8$$$r   c                    ddl m} ddlm}  |d      }i } G d d      }t	        ||      5  | j                  ||      }d d d        | j                  t              |g       | j                  |||f   |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&   r,    r8   r   r&   InstanceDeclarations)	r   r\  rK   r   _MonkeyrB  r*   rC   rU   )r   r\  r   r   cacher&   r{  s          r   test_no_cached_specz!Test_Provides.test_no_cached_spec  s    /;f%	 	\> 	,==d+D	,ddV,sDk*d23	, 	,s   A>>Bc                     ddl m} ddlm}  |d      }t	               } G d d      }||f|i}t        ||      5  | j                  ||      }d d d        | j                  |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&   r4    r8   r   r&   r-  )r   r\  rK   r   rl   r/  rB  rU   )r   r\  r   r   priorr&   r0  r{  s           r   test_w_cached_specz Test_Provides.test_w_cached_spec  sp    /;f%	 	te$\> 	,==d+D	,&	, 	,s   A++A4N)r   r   r   rB  r1  r6  r   r   r   r(  r(    s    %
4
'r   r(  c                   $    e Zd Zd Zd Zd Zd Zy)Test_directlyProvidesc                     ddl m}  ||i |S )Nr   r  )r)   r  )r   rw   rx   r  s       r   rB  zTest_directlyProvides._callFUT      @,,,r   c                     ddl m} ddlm}  |d      } G d d      } |       }| j	                  ||       | 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&   r=    r8   r   r&   	r)   r  rK   r   rB  r   r  r*   rC   r   r  r   r   r&   objs         r   test_w_normal_objectz*Test_directlyProvides.test_w_normal_object  d    =;f%	 	ec4 c..>c../$8r   c                     ddl m} ddlm}  |d      } G d d      }| j	                  ||       | j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)/Test_directlyProvides.test_w_class.<locals>.FooNr%   r   r   r   r&   rE    r8   r   r&   )	r)   r  rK   r   rB  r   r  r*   rC   r   r  r   r   r&   s        r   test_w_classz"Test_directlyProvides.test_w_class  s]    =;f%	 	c4 c..>c../$8r   c                     ddl m} ddlm}  |d      }i  G fdd      } |       }| j	                  ||       | j                  d   |       | j                  t        d         |g       y )Nr   r  r   r   c                       e Zd Zd Z fdZy):Test_directlyProvides.test_w_classless_object.<locals>.Fooc                 $    |dk(  ry t        |      Nr  r0   r%  s     r   __getattribute__zKTest_directlyProvides.test_w_classless_object.<locals>.Foo.__getattribute__  s    ;&)$//r   c                     ||<   y r/   r   )r   r   valuethe_dicts      r   __setattr__zFTest_directlyProvides.test_w_classless_object.<locals>.Foo.__setattr__  s    !&r   Nr   r   r   rM  rQ  rP  s   r   r&   rJ    s    0
'r   r&   r  )r)   r  rK   r   rB  r   r*   rC   )r   r  r   r   r&   r@  rP  s         @r   test_w_classless_objectz-Test_directlyProvides.test_w_classless_object  sj    =;f%	' 	' ec4 h~6Fh~67$@r   N)r   r   r   rB  rA  rG  rT  r   r   r   r8  r8    s    -	99Ar   r8  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   rw   rx   r  s       r   rB  zTest_alsoProvides._callFUT  s    <T(R((r   c                     ddl m} ddlm}  |d      } G d d      } |       }| j	                  ||       | 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&   rZ    r8   r   r&   r>  r?  s         r   test_wo_existing_providesz+Test_alsoProvides.test_wo_existing_provides  rB  r   c                 &   ddl m} ddl m} ddlm}  |d      } |d      } G d d      } |       } |||       | j                  ||       | j                  |j                  |       | j                  t        |j                        ||g       y )	Nr   r  r  r   r   r   c                       e Zd Zy)7Test_alsoProvides.test_w_existing_provides.<locals>.FooNr%   r   r   r   r&   r^    r8   r   r&   )
r)   r  r  rK   r   rB  r   r  r*   rC   )r   r  r  r   r   r   r&   r@  s           r   test_w_existing_providesz*Test_alsoProvides.test_w_existing_provides   s}    @=;f%f%	 	ed#c4 c..>c../$>r   N)r   r   r   rB  r[  r_  r   r   r   rV  rV    s    )	9?r   rV  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)   rc  )r   rw   rx   rc  s       r   rB  zTest_noLongerProvides._callFUT  r:  r   c                     ddl m}  |d      } G d d      } |       }| j                  ||       | j                  t	        |j
                        g        y )Nr   r   r   c                       e Zd Zy)<Test_noLongerProvides.test_wo_existing_provides.<locals>.FooNr%   r   r   r   r&   rf    r8   r   r&   )rK   r   rB  r*   rC   r  )r   r   r   r&   r@  s        r   r[  z/Test_noLongerProvides.test_wo_existing_provides  sI    ;f%	 	ec4 c../4r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  ||       | j                  t        |j                        g        y )Nr   r  r   r   c                       e Zd Zy)?Test_noLongerProvides.test_w_existing_provides_hit.<locals>.FooNr%   r   r   r   r&   ri  "  r8   r   r&   r)   r  rK   r   rB  r*   rC   r  )r   r  r   r   r&   r@  s         r   test_w_existing_provides_hitz2Test_noLongerProvides.test_w_existing_provides_hit  sV    @;f%	 	ed#c4 c../4r   c                     ddl m} ddlm}  |d      } |d      } G d d      } |       } |||       | j	                  ||       | j                  t        |j                        |g       y )Nr   r  r   r   r   c                       e Zd Zy)@Test_noLongerProvides.test_w_existing_provides_miss.<locals>.FooNr%   r   r   r   r&   rn  .  r8   r   r&   rj  )r   r  r   r   r   r&   r@  s          r   test_w_existing_provides_missz3Test_noLongerProvides.test_w_existing_provides_miss)  sb    @;f%f%	 	ed#c4 c../$8r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  t
        | j                  ||       y )Nr   r   r   r   c                       e Zd Zy)DTest_noLongerProvides.test_w_iface_implemented_by_class.<locals>.FooNr%   r   r   r   r&   rr  9  r'   r   r&   )r)   r   rK   r   r   r  rB  )r   r   r   r   r&   r@  s         r   !test_w_iface_implemented_by_classz7Test_noLongerProvides.test_w_iface_implemented_by_class5  sM    ;;f%	T		 	 
	e*dmmS$?r   N)r   r   r   rB  r[  rk  ro  rs  r   r   r   ra  ra    s    -5	5
9@r   ra  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)   rx  r   rx  s     r   rr   z.ClassProvidesBaseFallbackTests._getTargetClassB      I((r   c                 F     G d d| j                               } |||      S )Nc                       e Zd Zd Zy)8ClassProvidesBaseFallbackTests._makeOne.<locals>.Derivedc                      || _         || _        y r/   )_cls_implements)r   kis      r   r#  zAClassProvidesBaseFallbackTests._makeOne.<locals>.Derived.__init__K  s    	#$ r   N)r   r   r   r#  r   r   r   r  r~  J  s    %r   r  ru   )r   r  
implementsr  s       r   ry   z'ClassProvidesBaseFallbackTests._makeOneG  s&    	%d**, 	% uj))r   c                     ddl m}  |d      } G d d      }| 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  S  r8   r   r&   )rK   r   ry   r  rU   )r   r   r   r&   cpbps        r   test_w_same_class_via_classz:ClassProvidesBaseFallbackTests.test_w_same_class_via_classP  sH    ;f%	 	"&--T"::s((D01r   c                     ddl m}  |d      } G d d      } |       }| j                  ||      |_        | j	                  |j                  |       y )Nr   r   r   c                       e Zd Zy)JClassProvidesBaseFallbackTests.test_w_same_class_via_instance.<locals>.FooNr%   r   r   r   r&   r  [  r8   r   r&   r  )r   r   r   r&   r"   s        r   test_w_same_class_via_instancez=ClassProvidesBaseFallbackTests.test_w_same_class_via_instanceX  sG    ;f%	 	e==d3c&&-r   c                     ddl m}  |d      } G d d      } G d d|      } |       }| j                  ||      |_        | j	                  t
        t        |d       | j	                  t
        t        |d       y )	Nr   r   r   c                       e Zd Zy)BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.FooNr%   r   r   r   r&   r  d  r8   r   r&   c                       e Zd Zy)BClassProvidesBaseFallbackTests.test_w_different_class.<locals>.BarNr%   r   r   r   r  r  f  r8   r   r  r  )rK   r   ry   r  r   r  getattr)r   r   r   r&   r  bars         r   test_w_different_classz5ClassProvidesBaseFallbackTests.test_w_different_classa  sg    ;f%	 		# 	e==d3.'3G.'3Gr   N)r   r   r   rr   ry   r  r  r  r   r   r   ru  ru  @  s    )
*2.
Hr   ru  c                       e Zd Zd Zd Zy)ClassProvidesBaseTestsc                     ddl m} |S )Nr   )ClassProvidesBase)r)   r  )r   r  s     r   rr   z&ClassProvidesBaseTests._getTargetClassr  s    A  r   c                     ddl m} |S rw  ry  rz  s     r   r  z(ClassProvidesBaseTests._getFallbackClassv  r{  r   N)r   r   r   rr   r  r   r   r   r  r  n  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   rr   z"ClassProvidesTests._getTargetClass~  r  r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zClassProvidesTests._makeOne  rz   r   c                 <   ddl m} ddlm}  |d      } |d      } ||       G d d             }| 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   rK   r   ry   r.  r  rU   r*   rC   r   r   r   r   r   r&   cps          r   test_w_simple_metaclassz*ClassProvidesTests.test_w_simple_metaclass  s    ;;f%f%	T		 	 
	 $c49d CCS((B./ce001D6:r   c                    ddl m} ddlm}  |d      } |d      } ||       G d d             }| j	                  |t        |      |      x}|_        | j                  |j                         t        |      |t        |      |ff       y )Nr   r   r   r   r   c                       e Zd Zy)/ClassProvidesTests.test___reduce__.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   )	r)   r   rK   r   ry   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   rr   ry   r  r  r   r   r   r  r  |  s    3
;
=r   r  c                   $     e Zd Z fdZd Z xZS )ClassProvidesStrictTestsc                 @    t         |           G fdd      }|S )Nc                       e Zd Z fdZy)EClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvidesc                 ,    j                  | |d      S r  r  )r   r  r  s     r   r  zVClassProvidesStrictTests._getTargetClass.<locals>.StrictClassProvides._do_calculate_ro  r  r   Nr  r  s   r   StrictClassProvidesr    r  r   r  r  )r   r  r  r  s     @r   rr   z(ClassProvidesStrictTests._getTargetClass  s&    /1	^- 	^ #"r   c           
      .   ddl m} ddl m} ddl m}  G d d|      } ||       G d dt                     } |d	t
        fi       }| j                  |||      }| j                  |j                  | ||      | |t               |t
              |f       y )
Nr   r   rI   r   c                       e Zd Zy)MClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)QClassProvidesStrictTests.test_overlapping_interfaces_corrected.<locals>.metaclassNr%   r   r   r   	metaclassr    r'   r   r  r  )	r   r   rJ   r   r.  rl   ry   r*   r]   )r   r   rJ   r   r   r  r  r{  s           r   r  z>ClassProvidesStrictTests.test_overlapping_interfaces_corrected  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   rr   z%TestClassProvidesRepr._getTargetClass  r  r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTestClassProvidesRepr._makeOne  rz   r   c                 x    | j                  t        |       t              }| j                  t        |      d       y )Nz'directlyProvides(TestClassProvidesRepr)r  r  s     r   test__repr__emptyz'TestClassProvidesRepr.test__repr__empty  s.    }}T$Z.J5	
r   c                     ddl m}  G d d|      }| j                  t        |       t        |      }| j	                  t        |      d       y )Nr   rI   c                       e Zd ZdZy)=TestClassProvidesRepr.test__repr__providing_one.<locals>.IFoor  Nr	  r   r   r   r   r    r  r   r   z-directlyProvides(TestClassProvidesRepr, IFoo))r   rJ   ry   r.  r*   r  )r   rJ   r   r  s       r   test__repr__providing_onez/TestClassProvidesRepr.test__repr__providing_one  sA    ,	9 	 }}T$Zt4J;	
r   c                     ddl m}  |dd      } |dd      } |d      }| j                  t        |       t        |||      }| j	                  t        |      d       y )	Nr   r   r   r  r  r   r   z>directlyProvides(TestClassProvidesRepr, IFoo, IBaz, mod2.IFoo)r  r  s         r   r  z1TestClassProvidesRepr.test__repr__duplicate_names  sY    ;f8v&9f%}}T$ZtT5AJL	
r   c                     ddl m} ddl m} ddlm}  |d      } ||       G d d             } ||      }| j                  t        |      d       y )	Nr   r   r   r   r   c                       e Zd Zy)<TestClassProvidesRepr.test__repr__implementedBy.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   r!  )r)   r   r   rK   r   r*   r  )r   r   r   r   r   r&   r  s          r   test__repr__implementedByz/TestClassProvidesRepr.test__repr__implementedBy  sU    ;=;f%	T		 	 
	 S!J(	
r   c                     ddl m}  G d d      } | |             }| j                  t        |      dj	                  t
                      |       }d|_         ||      }| j                  t        |      d       y )Nr   r   c                       e Zd Zd Zy)RTestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callablec                     | S r/   r   r   s    r   rV  z[TestClassProvidesRepr.test__repr__implementedBy_generic_callable.<locals>.Callable.__call__  s    r   N)r   r   r   rV  r   r   r   Callabler    s    r   r  zclassImplements({}.?)zclassImplements(Callable))r)   r   r*   r  r  r   )r   r   r  r  cs        r   *test__repr__implementedBy_generic_callablez@TestClassProvidesRepr.test__repr__implementedBy_generic_callable  sr    =	 	 XZ(J#**84	

 J
QJ'	
r   N)
r   r   r   rr   ry   r  r  r  r  r  r   r   r   r  r    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   rw   rx   r  s       r   rB  z Test_directlyProvidedBy._callFUT  rm  r   c                 z     G d d      } |       }| j                  t        | j                  |            g        y )Nc                       e Zd Zy)NTest_directlyProvidedBy.test_wo_declarations_in_class_or_instance.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   r  rK  s      r   )test_wo_declarations_in_class_or_instancezATest_directlyProvidedBy.test_wo_declarations_in_class_or_instance  s1    	 	edmmC0126r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  t        | j                  |            g        y )Nr   r   r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance.<locals>.FooNr%   r   r   r   r&   r  %  r'   r   r&   )r)   r   rK   r   r*   rC   rB  )r   r   r   r   r&   r"   s         r   -test_w_declarations_in_class_but_not_instancezETest_directlyProvidedBy.test_w_declarations_in_class_but_not_instance!  sS    ;;f%	T		 	 
	edmmC0126r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  t        | j                  |            |g       y )Nr   r  r   r   c                       e Zd Zy)RTest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class.<locals>.FooNr%   r   r   r   r&   r  /  r8   r   r&   )r)   r  rK   r   r*   rC   rB  )r   r  r   r   r&   r"   s         r   -test_w_declarations_in_instance_but_not_classzETest_directlyProvidedBy.test_w_declarations_in_instance_but_not_class+  sM    @;f%	 	ed#dmmC01D6:r   c                     ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d             } |       } |||       | j                  t        | j                  |            |g       y )	Nr   r  r   r   r   r   c                       e Zd Zy)NTest_directlyProvidedBy.test_w_declarations_in_instance_and_class.<locals>.FooNr%   r   r   r   r&   r  ;  r'   r   r&   )r)   r  r   rK   r   r*   rC   rB  )r   r  r   r   r   r   r&   r"   s           r   )test_w_declarations_in_instance_and_classzATest_directlyProvidedBy.test_w_declarations_in_instance_and_class5  sl    @;;f%f%	T		 	 
	ed#dmmC01D6:r   N)r   r   r   rB  r  r  r  r  r   r   r   r  r    s    /77;;r   r  c                       e Zd Zd Zd Zd Zy)Test_providerc                     ddl m} |S )Nr   )provider)r)   r  )r   r  s     r   rr   zTest_provider._getTargetClassE  s
    8r   c                 .     | j                         |i |S r/   ru   rv   s      r   ry   zTest_provider._makeOneI  rz   r   c                     ddl m} ddlm}  |d      }| j	                  |       G d d             }| j                  |j                  |       | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)'Test_provider.test_w_class.<locals>.FooNr%   r   r   r   r&   r  P  r'   r   r&   )	r)   r  rK   r   ry   r   r  r*   rC   rF  s        r   rG  zTest_provider.test_w_classL  se    =;f%	t		 	 
	c..>c../$8r   N)r   r   r   rr   ry   rG  r   r   r   r  r  C  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   
z
def foo():    moduleProvides(IFoo)r"   )r)   r  rK   r   joinr   r   r   )r   r  r   r   r   r   CODEr"   s           r   test_called_from_functionz-Test_moduleProvides.test_called_from_functionZ  sg    >;f%7#14Ayy&  	T5$5k)S)r   c                     ddl m} ddlm}  |d      }d||d}i }dj	                  dd	g      }| j                  t              5  t        |||       d d d        y # 1 sw Y   y xY w)
Nr   r  r   r   r  r  r  zclass Foo(object):r  r)   r  rK   r   r  r   r   r   )r   r  r   r   r   r   r  s          r   test_called_from_classz*Test_moduleProvides.test_called_from_classi  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  rK   r   r  r   r*   rC   )r   r  r   r   r   r  r{  s          r   "test_called_once_from_module_scopez6Test_moduleProvides.test_called_once_from_module_scopew  sd    >;f%7#14Ayy"  	T5^$ddV,r   c                     ddl m} ddlm}  |d      }d||d}dj	                  ddg      }| j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)	Nr   r  r   r   r  r  r  r  r  )r   r  r   r   r   r  s         r   #test_called_twice_from_module_scopez7Test_moduleProvides.test_called_twice_from_module_scope  sl    >;f%7#14A yy""  y) 	u	 	 	s   AA"N)r   r   r   r  r  r  r  r   r   r   r  r  W  s    *$-r   r  c                   X    e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)#Test_getObjectSpecificationFallbackc                     ddl m} |S )Nr   )getObjectSpecificationFallback)r)   r  )r   r  s     r   r  z5Test_getObjectSpecificationFallback._getFallbackClass  s    N--r   c                 .     | j                         |i |S r/   ru   rv   s      r   rB  z,Test_getObjectSpecificationFallback._callFUT  rz   r   c                     i  G fdd      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Z fdZd Zy)TTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Fooc                 `    |dk(  rt        |      	 |   S # t        $ r t        |      w xY wrL  )r  KeyError)r   r   rP  s     r   rM  zeTest_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__getattribute__  s?    ;&(../#D>) /(../s    -c                     t               r/   r0   )r   r   rO  s      r   rQ  z`Test_getObjectSpecificationFallback.test_wo_existing_provides_classless.<locals>.Foo.__setattr__  r'  r   NrR  rS  s   r   r&   r    s    /,r   r&   rB  r*   rC   )r   r&   r"   r{  rP  s       @r   #test_wo_existing_provides_classlesszGTest_getObjectSpecificationFallback.test_wo_existing_provides_classless  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               r/   r0   r   r   r   r"   zOTest_getObjectSpecificationFallback.test_existing_provides_is_spec.<locals>.foo  r  r   )r)   r  rK   r   rB  r   r  )r   r  r   r   r"   r{  s         r   test_existing_provides_is_speczBTest_getObjectSpecificationFallback.test_existing_provides_is_spec  sC    @;f%	(d#}}S!dC,,-r   c                     d }t               |_        | j                  |      }| j                  t	        |      g        y )Nc                      t               r/   r0   r   r   r   r"   zSTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec.<locals>.foo  r  r   )rl   r  rB  r*   rC   )r   r"   r{  s      r   "test_existing_provides_is_not_speczFTest_getObjectSpecificationFallback.test_existing_provides_is_not_spec  s3    	(!8}}S!dR(r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||       | j	                  |      }| j                  t        |      |g       y )Nr   r  r   r   c                       e Zd Zy)GTest_getObjectSpecificationFallback.test_existing_provides.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   )r)   r  rK   r   rB  r*   rC   )r   r  r   r   r&   r"   r{  s          r   test_existing_providesz:Test_getObjectSpecificationFallback.test_existing_provides  sQ    @;f%	 	ed#}}S!ddV,r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }| j	                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)WTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements.<locals>.FooNr%   r   r   r   r&   r    r'   r   r&   )r)   r   rK   r   rB  r*   rC   r   r   r   r   r&   r"   r{  s          r   &test_wo_provides_on_class_w_implementszJTest_getObjectSpecificationFallback.test_wo_provides_on_class_w_implements  sY    ;;f%	T		 	 
	e}}S!ddV,r   c                 ~     G d d      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)XTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements.<locals>.FooNr%   r   r   r   r&   r    r8   r   r&   r	  r   r&   r"   r{  s       r   'test_wo_provides_on_class_wo_implementszKTest_getObjectSpecificationFallback.test_wo_provides_on_class_wo_implements  5    	 	e}}S!dR(r   c                 H    t        j                  | | j                  d       y )Nr  expected_missingr   test_raisesrB  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  )r"  r  r#  r   s    r   )test_catches_only_AttributeError_on_classzMTest_getObjectSpecificationFallback.test_catches_only_AttributeError_on_class  s    $$T4==;26	8r   c                 D     G d d      }| 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&   )rB  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      }| j                  t              5 }| j                   |              d d d        | j                  dj                  j
                  d          y # 1 sw Y   3xY w)Nc                       e Zd Z ee      Zy)wTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError.<locals>.FooN)r   r   r   r   RuntimeErrorr  r   r   r   r&   r.    s    +L9Lr   r&   r  r   )r   r/  rB  r*   	exceptionrw   )r   r&   excs      r   Ftest_raises_AttributeError_when_provides_fails_type_check_RuntimeErrorzjTest_getObjectSpecificationFallback.test_raises_AttributeError_when_provides_fails_type_check_RuntimeError  sb    	: 	: |, 	!MM#% 	! 	cmm&8&8&;<	! 	!s   A))A2N)r   r   r   r  rr   rB  r
  r  r  r  r  r  r%  r'  r+  r2  r   r   r   r  r    sF    .
 (O3)".)	-	-)[8	=r   r  c                       e Zd Zd Zy)Test_getObjectSpecificationc                     ddl m} |S )Nr   )getObjectSpecification)r)   r6  )r   r6  s     r   rr   z+Test_getObjectSpecification._getTargetClass  s    F%%r   Nr  r   r   r   r4  r4    s    &r   r4  c                        e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	 Z fd
Z fdZ fdZ fdZ fdZd Zd Z xZS )Test_providedByFallbackc                     ddl m} |S )Nr   )providedByFallback)r)   r:  )r   r:  s     r   r  z)Test_providedByFallback._getFallbackClass  s    B!!r   c                 .     | j                         |i |S r/   ru   rv   s      r   rB  z Test_providedByFallback._callFUT  rz   r   c                 ~     G d d      } |       }| j                  |      }| j                  t        |      g        y )Nc                       e Zd Zy)NTest_providedByFallback.test_wo_providedBy_on_class_wo_implements.<locals>.FooNr%   r   r   r   r&   r>    r8   r   r&   r	  r  s       r   )test_wo_providedBy_on_class_wo_implementszATest_providedByFallback.test_wo_providedBy_on_class_wo_implements  r  r   c                     ddl m} ddlm}  |d      } G d d      } |       } |||      |_        | 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&   rB    r8   r   r&   )r)   r  rK   r   r  rB  r*   rC   )r   r  r   r   r&   r"   r{  s          r   test_w_providedBy_valid_specz4Test_providedByFallback.test_w_providedBy_valid_spec  sV    8;f%	 	e%c40}}S!ddV,r   c                      G d d      } |       }t               |_        | j                  |      }| j                  t	        |      g        y )Nc                       e Zd Zy)CTest_providedByFallback.test_w_providedBy_invalid_spec.<locals>.FooNr%   r   r   r   r&   rF  #  r8   r   r&   )rl   r  rB  r*   rC   r  s       r   test_w_providedBy_invalid_specz6Test_providedByFallback.test_w_providedBy_invalid_spec"  s?    	 	e#X}}S!dR(r   c                     ddl m} ddlm}  |d      } ||       G d d             } |       }t	               |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)VTest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements.<locals>.FooNr%   r   r   r   r&   rJ  .  r'   r   r&   )	r)   r   rK   r   rl   r  rB  r*   rC   r  s          r   1test_w_providedBy_invalid_spec_class_w_implementszITest_providedByFallback.test_w_providedBy_invalid_spec_class_w_implements*  sc    ;;f%	T		 	 
	e#X}}S!ddV,r   c                      G d d      } |       }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&   rN  7  r8   r   r&   rl   r  r  rB  rU   r   r&   r"   expectedr{  s        r   >test_w_providedBy_invalid_spec_w_provides_no_provides_on_classzVTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_no_provides_on_class6  sK    	 	e#X&,h.3#}}S!()r   c                      G d d      } |       }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&   rU  @  r8   r   r&   rO  rP  s        r   @test_w_providedBy_invalid_spec_w_provides_diff_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class?  sU    	 	e#X&,h.3#!8}}S!()r   c                    ddl m} ddlm}  |d      } ||       G d d             } |       }t	               |_        t	               x|_        |_        | j                  |      }| j                  t        |      |g       y )Nr   r   r   r   c                       e Zd Zy)eTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_class.<locals>.FooNr%   r   r   r   r&   rY  M  r'   r   r&   )
r)   r   rK   r   rl   r  r  rB  r*   rC   r  s          r   @test_w_providedBy_invalid_spec_w_provides_same_provides_on_classzXTest_providedByFallback.test_w_providedBy_invalid_spec_w_provides_same_provides_on_classI  su    ;;f%	T		 	 
	e#X.4h63+}}S!ddV,r   c                    ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } ||       G d
 d|             } |       }| j	                  t        | j                  |            ||g       t        ||      }| j                  |      }	| j                  |	j                         | j	                  t        |	      |g       y )Nr   rI   r   c                       e Zd Zy)PTest_providedByFallback.test_super_when_base_implements_interface.<locals>.IBaseNr%   r   r   r   r   r]  Z  r8   r   r   c                       e Zd Zy)STest_providedByFallback.test_super_when_base_implements_interface.<locals>.IDerivedNr%   r   r   r   r   r_  ]  r8   r   r   c                       e Zd Zy)OTest_providedByFallback.test_super_when_base_implements_interface.<locals>.BaseNr%   r   r   r   r   ra  `  r'   r   r   c                       e Zd Zy)RTest_providedByFallback.test_super_when_base_implements_interface.<locals>.DerivedNr%   r   r   r   r  rc  d  r'   r   r  
r   rJ   r)   r   r*   rC   rB  r  rf   r  )r   rJ   r   r   r   r   r  derivedr  r  r  s             r   r  zATest_providedByFallback.test_super_when_base_implements_interfaceV  s    ,;	I 		u 	 
U		 	 
	 
X		d 	 
	 )dmmG45%7HIGW%mmC #//*cUG,r   c                 Z   ddl m} ddlm}  G d d|      } G d d|      } G d d	      } ||       G d
 d|             } |       }| j	                  t        | j                  |            |g       t        ||      }| j	                  t        | j                  |            g        y )Nr   rI   r   c                       e Zd Zy)VTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IBaseNr%   r   r   r   r   rh  t  r8   r   r   c                       e Zd Zy)YTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.IDerivedNr%   r   r   r   r   rj  w  r8   r   r   c                       e Zd Zy)UTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.BaseNr%   r   r   r   r   rl  z  r8   r   r   c                       e Zd Zy)XTest_providedByFallback.test_super_when_base_doesnt_implement_interface.<locals>.DerivedNr%   r   r   r   r  rn  }  r'   r   r  r  )
r   rJ   r   r   r   r   r  re  r  r  s
            r   r  zGTest_providedByFallback.test_super_when_base_doesnt_implement_interfacep  s    ,;	I 		u 		 	 
X		d 	 
	 )dmmG45zBGW%dmmC0126r   c                 ~   ddl m} ddlm}  G d d|      } G d d|      } ||       G d d	             } |       }| j	                  t        | j                  |            |g       t        ||      }| j                  |      }| j                  |j                         | j	                  t        |      g        y )
Nr   rI   r   c                       e Zd Zy)ETest_providedByFallback.test_super_when_base_is_object.<locals>.IBaseNr%   r   r   r   r   rq    r8   r   r   c                       e Zd Zy)HTest_providedByFallback.test_super_when_base_is_object.<locals>.IDerivedNr%   r   r   r   r   rs    r8   r   r   c                       e Zd Zy)GTest_providedByFallback.test_super_when_base_is_object.<locals>.DerivedNr%   r   r   r   r  ru    r'   r   r  rd  )
r   rJ   r   r   r   r  re  r  r  r  s
            r   r  z6Test_providedByFallback.test_super_when_base_is_object  s    ,;	I 		u 	 
X		 	 
	 )dmmG45zBGW%mmC #//*cB'r   c                    ddl m} ddlm} ddlm}  G d d|      } G d d|      } ||       G d	 d
             } G d d|      } |       }| j                  t        | j                  |            |g        |||       | j                  t        | j                  |            ||g       t        ||      }	| j                  |	      }
| j                  |
j                         | j                  t        |
      |g       y )Nr   rI   r   r  c                       e Zd Zy)OTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IBaseNr%   r   r   r   r   rx    r8   r   r   c                       e Zd Zy)RTest_providedByFallback.test_super_when_object_directly_provides.<locals>.IDerivedNr%   r   r   r   r   rz    r8   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~    r8   r   r  )r   rJ   r)   r   r  r*   rC   rB  r  rf   r  )r   rJ   r   r  r   r   r   r  re  r  r  r  s              r   (test_super_when_object_directly_providesz@Test_providedByFallback.test_super_when_object_directly_provides  s    ,;@	I 		u 	 
U		 	 
		d 	 )dmmG45w?(+dmmG45%7HIGW%mmC #//*cUG,r   c                    ddl m} ddlm}  G d d|      } G d d|      } G d d	|      } G d
 d|      } G d d|      } ||       G d d             } ||       G d d|             }	 ||       G d d|             }
 |||       G d d|	|
             } |       }t	        ||      }t	        |	|      }t	        |
|      }| j                  t        | j                  |            |||||g       | j                  t        | j                  |            |||g       | j                  t        | j                  |            ||g       | j                  t        | j                  |            |g       y )Nr   r   rI   c                       e Zd Zy)OTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IBaseNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM1Nr%   r   r   r   r  r    r8   r   r  c                       e Zd Zy)MTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IM2Nr%   r   r   r   r  r    r8   r   r  c                       e Zd Zy)RTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IDerivedNr%   r   r   r   r   r    r8   r   r   c                       e Zd Zy)TTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.IUnrelatedNr%   r   r   r   r  r    r8   r   r  c                       e Zd Zy)NTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.BaseNr%   r   r   r   r   r    r'   r   r   c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M1Nr%   r   r   r   r  r    r'   r   r  c                       e Zd Zy)LTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.M2Nr%   r   r   r   r  r    r'   r   r  c                       e Zd Zy)QTest_providedByFallback.test_super_multi_level_multi_inheritance.<locals>.DerivedNr%   r   r   r   r  r    r'   r   r  r  r   s                   r   r  z@Test_providedByFallback.test_super_multi_level_multi_inheritance  s   ;,	I 		) 		) 		u 		 	 
U		 	 
	 
S		 	 
	 
S		 	 
	 
Xz	*	b" 	 
+	 I7ABlBldmmA./"JUC@	BdmmB/0uc*	,dmmC01u	'dmmC01	"r   c                 R    t        j                  | | j                  dt               y )Nr  )r"  r  )r   r$  rB  rl   r   s    r   .test_catches_only_AttributeError_on_providedByzFTest_providedByFallback.test_catches_only_AttributeError_on_providedBy  s    $$T4==6F/5	7r   c                 H    t        j                  | | j                  d       y )Nr  r!  r#  r   s    r   r'  zATest_providedByFallback.test_catches_only_AttributeError_on_class  s     	$$$--+	?r   )r   r   r   r  rr   rB  r?  rC  rG  rK  rR  rV  rZ  r  r  r  r  r  r  r'  r  r  s   @r   r8  r8    s[    "
 (O3)	-)
-**--47.(,-:/"b7
?r   r8  c                       e Zd Zd Zy)Test_providedByc                     ddl m} |S )Nr   r  )r)   r9  )r   r9  s     r   rr   zTest_providedBy._getTargetClass  r   r   Nr  r   r   r   r  r    s    r   r  c                   @    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 r/   ru   rv   s      r   ry   z3ObjectSpecificationDescriptorFallbackTests._makeOne	  rz   r   c                     ddl m} ddlm}  |d      } G d d      } |||      |_        | j                         |_        | j                  t        |j                        |g       y )Nr   r  r   r   c                       e Zd Zy)OObjectSpecificationDescriptorFallbackTests.test_accessed_via_class.<locals>.FooNr%   r   r   r   r&   r  	  r8   r   r&   )	r)   r  rK   r   r  ry   r  r*   rC   )r   r  r   r   r&   s        r   test_accessed_via_classzBObjectSpecificationDescriptorFallbackTests.test_accessed_via_class	  sV    8;f%	 	#C.!]]_c001D6:r   c                    ddl m} ddl m} ddlm}  |d      } |d      } ||       G d d             } |||      |_        | j                         |_         |       }| j                  t        |j                        |g       y )	Nr   r   r  r   r   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides.<locals>.FooNr%   r   r   r   r&   r  	  r'   r   r&   )
r)   r   r  rK   r   r  ry   r  r*   rC   )r   r   r  r   r   r   r&   r"   s           r   "test_accessed_via_inst_wo_provideszMObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_wo_provides	  s|    ;8;f%f%	T		 	 
	#C.!]]_ec001D6:r   c                 B   ddl m} ddl m} ddl m} ddlm}  |d      } |d      } |d      } ||       G d	 d
             } |||      |_        | j                         |_         |       }	 ||	|       | j                  t        |	j                        ||g       y )Nr   r  r   r  r   r   r   r   c                       e Zd Zy)YObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides.<locals>.FooNr%   r   r   r   r&   r  .	  r'   r   r&   )r)   r  r   r  rK   r   r  ry   r  r*   rC   )
r   r  r   r  r   r   r   r   r&   r"   s
             r   !test_accessed_via_inst_w_provideszLObjectSpecificationDescriptorFallbackTests.test_accessed_via_inst_w_provides&	  s    @;8;f%f%f%	T		 	 
	#C.!]]_ed#c001D$<@r   c                       G d dt                G  fdd      } |       } j                        5  t        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)vObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.MyExceptionNr%   r   r   r   MyExceptionr  9	  r8   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                     r/   r   )r   r  s    r   r  z{ObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught.<locals>.Foo.__provides__?	  s	    !!r   Nr   r   r   ry   r  rW  r  )r  r   s   r   r&   r  <	  s     !]]_N" "r   r&   r  )	Exceptionr   r  )r   r&   r"   r  s   `  @r   6test_arbitrary_exception_accessing_provides_not_caughtzaObjectSpecificationDescriptorFallbackTests.test_arbitrary_exception_accessing_provides_not_caught7	  sP    	) 		" 	" e{+ 	+C)*	+ 	+ 	+s   AAc                       G d dt               } G  fdd      } |       }t        |d      } j                  |       y )Nc                       e Zd Zy)mObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.MyExceptionNr%   r   r   r   r  r  I	  r8   r   r  c                   @    e Zd ZW  j                         Zed        Zy)eObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Fooc                     t         r/   )r  r   s    r   r  zrObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caught.<locals>.Foo.__provides__O	  s    $$r   Nr  r   s   r   r&   r  L	  s     !]]_N% %r   r&   r  )r  r  assertIsNotNone)r   r  r&   r"   provideds   `    r   -test_AttributeError_accessing_provides_caughtzXObjectSpecificationDescriptorFallbackTests.test_AttributeError_accessing_provides_caughtG	  s=    	) 		% 	% e3 01X&r   c                     ddl m} ddl m}  G d d|      } ||       G d d             }| j                         |_        t         |       d      }| j                  |       y )	Nr   rI   r   c                       e Zd Zy)ZObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.IFooNr%   r   r   r   r   r  [	  r8   r   r   c                       e Zd Zed        Zy)YObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Fooc                      y r/   r   r   s    r   r  zfObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overrides.<locals>.Foo.__provides__a	  s    r   N)r   r   r   rW  r  r   r   r   r&   r  ^	  s      r   r&   r  )r   rJ   r   ry   r  r  rf   )r   rJ   r   r   r&   r  s         r   !test_None_in__provides__overrideszLObjectSpecificationDescriptorFallbackTests.test_None_in__provides__overridesW	  s_    ,.	9 	 
T		 	 
	 "]]_35"23(#r   N)r   r   r   r  rr   ry   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   rr   z2ObjectSpecificationDescriptorTests._getTargetClasso	  s    M,,r   Nr  r   r   r   r  r  j	  s    
-r   r  c                       e Zd Zd Zd Zd Zy)r/  c                     || _         |D ci c]  }|t        ||       c}| _        |j                         D ]  \  }}t	        |||        y c c}w r/   )moduler  
to_restoreitemsr  )r   r  rx   keyrO  s        r   r#  z_Monkey.__init__y	  sR    @BC3 44C((* 	(JCFC'	( Ds   Ac                     | S r/   r   r   s    r   	__enter__z_Monkey.__enter__	  s    r   c                 v    | j                   j                         D ]  \  }}t        | j                  ||        y r/   )r  r  r  r  )r   exc_typeexc_valexc_tbr  rO  s         r   __exit__z_Monkey.__exit__	  s2    ////1 	-JCDKKe,	-r   Nr   r   r   r#  r  r  r   r   r   r/  r/  w	  s    (-r   r/  c                       e Zd Zd Zd Zd Zy)r`  c                     || _         t        ||      | _        | j                  j                         | _        | j                  j                          | j                  j                  |       y r/   )r  r  targetcopyr  clearupdate)r   r  attrnamerx   s       r   r#  z_MonkeyDict.__init__	  sM    fh/++**,2r   c                     | j                   S r/   )r  r   s    r   r  z_MonkeyDict.__enter__	  s    {{r   c                     | j                   j                          | j                   j                  | j                         y r/   )r  r  r  r  )r   r  r  r  s       r   r  z_MonkeyDict.__exit__	  s(    4??+r   Nr  r   r   r   r`  r`  	  s    ,r   r`  ).r
  unittestr  r   r   #zope.interface.tests.test_interfacer   r   TestCaser   r;   rp   r   r   r>  r
  r  r  r1  re  rj  rt  r  r  r  r  r(  r8  rV  ra  ru  r  r  r  r  r  r  r  r  r4  r8  r  r  r  r/  r`  r   r   r   <module>r     s    6 1 Q
 (8"" 8>7(H-- 7(tH9, H9V@,4 @,Fp86&&p8f@"!2!2 @"F
3.%% %%N-43X5F5F -4`cX/1B1B cXL	/ 4 	/<h// <&<D+ <D@>4 >D/1** /1d1 Dy
H-- y
z'H%% '>+AH-- +A\?)) ?@.@H-- .@b+HX%6%6 +H\)2;)=** =D&1 &RK
H-- K
\+;h// +;\9H%% 9(9(++ 9xe=(*;*; e=P&"E"7&p?h// p?h-+g$1B1B g$R-2-- - , ,r   