+
    Z4ieJ                         ^ RI H t Ht ^ RIHt ^ RIHtHtHtHt ^ RI	H
t
Ht  ! R R]4      t ! R R]4      t ! R	 R
]4      tR# )    )datetimetimezone)ResourcedTestCase)FakeLaunchpadFakeResourceFakeRootIntegrityError)FakeLaunchpadResourceget_applicationc                   &   a  ] tR t^#t o R tRtV tR# )FakeRootTestc                j    \        \        4       4      pV P                  \        V\        4      4       R # N)r   r   
assertTrue
isinstancer   )selfroot_resources   & K/usr/lib/python3/dist-packages/launchpadlib/testing/tests/test_launchpad.pytest_create_root_resource&FakeRootTest.test_create_root_resource$   s"     !23
=,?@     N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell____classdict__s   @r   r   r   #   s     A Ar   r   c                   L   a  ] tR t^)t o R]! 4       3.tR tR tR tR t	Rt
V tR# )FakeResourceTest	launchpadc                    \        4       p\        V.R7      V P                  n        \        V P                  P                  4      w  pV P	                  R\        \        V4      4      ,          \        V4      4       R# )z3A custom C{__repr__} is provided for L{FakeEntry}s.entriesz<FakeEntry bug object at %s>Ndictr#   bugslistassertEqualhexidreprr   bugs   & r   test_repr_entry FakeResourceTest.test_repr_entry-   sV    f"C51T^^(()*SC\949	
r   c                  a \        RR7      o\        V3R lR7      V P                  n        V P                  P                  P                  . 4      o\	        \        S4      4      pV P                  RV,          \        S4      4       R# )z8A custom C{__repr__} is provided for L{FakeCollection}s.test-branch
total_sizec                    < S# r   r   statusesbranchess   &r   <lambda>7FakeResourceTest.test_repr_collection.<locals>.<lambda>9       hr   getBranchesz2<FakeCollection branch-page-resource object at %s>N)r(   r#   mer?   r,   r-   r+   r.   )r   obj_idr:   s   & @r   test_repr_collection%FakeResourceTest.test_repr_collection6   sd    =1 -FG>>$$004R\"@6IN	
r   c                    \        RR7      V P                  n        V P                  P                  pV P                  R\	        \        V4      4      ,          \        V4      4       R# )zq
If the fake has a C{name} property it's included in the repr string to
make it easier to figure out what it is.
foonamez<FakeEntry person foo at %s>N)r(   r#   r@   r+   r,   r-   r.   r   persons   & r   test_repr_with_name$FakeResourceTest.test_repr_with_nameA   sH    
 !e,""*SF_<d6l	
r   c                   \        RRR7      p\        V.R7      V P                  n        \        V P                  P                  4      w  pV P	                  R\        \        V4      4      ,          \        V4      4       R# )zp
If the fake has an C{id} property it's included in the repr string to
make it easier to figure out what it is.
1Bug #1r-   titler%   z<FakeEntry bug 1 at %s>Nr'   r/   s   & r   test_repr_with_id"FakeResourceTest.test_repr_with_idL   s[    
 c*"C51T^^(()2SC\A49Mr   r   N)r   r   r   r   r
   	resourcesr1   rB   rJ   rQ   r   r   r   s   @r   r"   r"   )   s1     4678I
	
	
N Nr   r"   c                   0  a  ] tR t^Wt o R]! 4       3.tR tR tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R t#R  t$R! t%R" t&R# t'R$ t(R% t)R& t*R' t+R( t,R) t-R* t.R+ t/R,t0V t1R-# ).FakeLaunchpadTestr#   c                    \        4       p\        V4      pV P                  WP                  4       V P                  \	        4       VP
                  4       R# )za
The builtin WADL definition is used if the C{application} is not
provided during instantiation.
N)objectr   r+   credentialsr   _applicationr   rX   r#   s   &  r   'test_wb_instantiate_without_application9FakeLaunchpadTest.test_wb_instantiate_without_application[   sB    
 h!+.	&;&;<*I,B,BCr   c           	         \        4       p\        VRRRR\        4       R7      pV P                  WP                  4       R# )z
L{FakeLaunchpad} takes the same parameters as L{Launchpad} during
instantiation, with the addition of an C{application} parameter.  The
optional parameters are discarded when the object is instantiated.
N)service_rootcachetimeout
proxy_infoapplicationrW   r   r   r+   rX   rZ   s   &  r    test_instantiate_with_everything2FakeLaunchpadTest.test_instantiate_with_everythinge   s@     h!')
	 	&;&;<r   c                z    \        4       p\        V\        4       R7      pV P                  WP                  4       R# )z8A L{FakeLaunchpad} can be instantiated with credentials.)rb   Nrc   rZ   s   &  r   !test_instantiate_with_credentials3FakeLaunchpadTest.test_instantiate_with_credentialsv   s,    h!+?;LM	&;&;<r   c                P    V P                  V P                  P                  4       R# )zf
A L{FakeLaunchpad} instantiated without credentials has its
C{credentials} attribute set to C{None}.
N)assertIsNoner#   rX   r   s   &r   $test_instantiate_without_credentials6FakeLaunchpadTest.test_instantiate_without_credentials|   s    
 	$..445r   c                T    V P                  \        \        V P                  RR4       R# )z
An L{IntegrityError} is raised if an attribute is set on a
L{FakeLaunchpad} instance that isn't present in the WADL definition.
rE   barN)assertRaisesr	   setattrr#   rk   s   &r   test_set_undefined_property-FakeLaunchpadTest.test_set_undefined_property   s!    
 	GT^^UE	
r   c                    \        RR7      V P                  n        V P                  \        \
        V P                  P                  R4       R# )zo
An L{AttributeError} is raised if an attribute is accessed on a
L{FakeLaunchpad} instance that doesn't exist.
Foo)display_namerG   N)r(   r#   r@   rp   AttributeErrorgetattrrk   s   &r   test_get_undefined_resource-FakeLaunchpadTest.test_get_undefined_resource   s3    
 !e4.'4>>3D3DfMr   c                    \        RR7      V P                  n        V P                  RV P                  P                  P                  4       R# )z
Sample data can be created by setting L{FakeLaunchpad} attributes with
dicts that represent objects.  Plain string values can be represented
as C{str} values.
rE   rF   Nr(   r#   r@   r+   rG   rk   s   &r   test_string_property&FakeLaunchpadTest.test_string_property   5     !e, 1 1 6 67r   c                    \        RR7      V P                  n        V P                  RV P                  P                  P                  4       R# )z
Sample data can be created by setting L{FakeLaunchpad} attributes with
dicts that represent objects.  Plain string values can be represented
as C{unicode} strings.
rE   rF   Nr|   rk   s   &r   test_unicode_property'FakeLaunchpadTest.test_unicode_property   r   r   c                    \         P                  ! \        P                  4      p\	        VR7      V P
                  n        V P                  WP
                  P                  P                  4       R# )zE
Attributes that represent dates are set with C{datetime} instances.
date_createdN)	r   nowr   utcr(   r#   r@   r+   r   )r   r   s   & r   test_datetime_property(FakeLaunchpadTest.test_datetime_property   sE     ll8<<( c2nn//<<=r   c           
     h    V P                  \        \        V P                  R\	        RR7      4       R# )zg
Only C{datetime} values can be set on L{FakeLaunchpad} instances for
attributes that represent dates.
r@   r   r   Nrp   r	   rq   r#   r(   rk   s   &r   test_invalid_datetime_property0FakeLaunchpadTest.test_invalid_datetime_property   s*    
 	NNe$	
r   c                    \        RRR7      V P                  n        V P                  RV P                  P                  P                  4       V P                  RV P                  P                  P
                  4       R# )zf
Sample data can be created by setting L{FakeLaunchpad} attributes with
dicts that represent objects.
rE   ru   )rG   rv   N)r(   r#   r@   r+   rG   rv   rk   s   &r   test_multiple_string_properties1FakeLaunchpadTest.test_multiple_string_properties   sW    
 !e%@ 1 1 6 67 1 1 > >?r   c           
     h    V P                  \        \        V P                  R\	        RR7      4       R# )z
Sample data set on a L{FakeLaunchpad} instance is validated against
the WADL definition.  If a key is defined on a resource that doesn't
match a related parameter, an L{IntegrityError} is raised.
r@   ro   rE   Nr   rk   s   &r   test_invalid_property_name,FakeLaunchpadTest.test_invalid_property_name   s%     	GT^^T4E?	
r   c           
     h    V P                  \        \        V P                  R\	        ^fR7      4       R# )z
The types of sample data values set on L{FakeLaunchpad} instances are
validated against types defined in the WADL definition.
r@   rF   Nr   rk   s   &r   test_invalid_property_value-FakeLaunchpadTest.test_invalid_property_value   s%    
 	GT^^T4S>	
r   c                   a \        RR7      o\        V3R lR7      V P                  n        V P                  RV P                  P                  P	                  . 4      4       R# )z
A callable set on a L{FakeLaunchpad} instance is validated against the
WADL definition, to make sure a matching method exists.
r4   r5   c                    < S# r   r   r8   s   &r   r;   1FakeLaunchpadTest.test_callable.<locals>.<lambda>   r=   r   r>   N)r(   r#   r@   assertNotEqualr?   r   r:   s   &@r   test_callableFakeLaunchpadTest.test_callable   sF    
 =1 -FGD$.."3"3"?"?"CDr   c           
     j    V P                  \        \        V P                  R\	        R R7      4       R# )z
An L{IntegrityError} is raised if a method is defined on a resource
that doesn't match a method defined in the WADL definition.
r@   c                      R # r   r   r   r   r   r;   >FakeLaunchpadTest.test_invalid_callable_name.<locals>.<lambda>   s    Tr   r   Nr   rk   s   &r   test_invalid_callable_name,FakeLaunchpadTest.test_invalid_callable_name   s*    
 	NN\"	
r   c                  a \        RR7      o\        V3R lR7      V P                  n        V P                  P                  P                  . 4      oV P	                  \        S\        4      4       V P                  RSP                  4       R# )z{
The result of a fake method is a L{FakeResource}, automatically
created from the object used to define the return object.
8r5   c                    < S# r   r   r8   s   &r   r;   DFakeLaunchpadTest.test_callable_object_return_type.<locals>.<lambda>   r=   r   r>   N)	r(   r#   r@   r?   r   r   r   r+   r6   r   s   &@r    test_callable_object_return_type2FakeLaunchpadTest.test_callable_object_return_type   sd    
 3' -FG>>$$004
8\:;h112r   c                   a \        ^R7      o\        V3R lR7      V P                  n        V P                  \        V P                  P                  P
                  . 4       R# )zG
An L{IntegrityError} is raised if a method returns an invalid result.
r5   c                    < S# r   r   r8   s   &r   r;   LFakeLaunchpadTest.test_invalid_callable_object_return_type.<locals>.<lambda>   r=   r   r>   N)r(   r#   r@   rp   r	   r?   r   s   &@r   (test_invalid_callable_object_return_type:FakeLaunchpadTest.test_invalid_callable_object_return_type   sC     1% -FG.$..*;*;*G*GLr   c                    \        R R7      V P                  n        V P                  V P                  P                  P	                  R4      4       R# )ze
A fake method passes through a return value of None rather than
trying to create a L{FakeResource}.
c                     R # r   r   rF   s   &r   r;   DFakeLaunchpadTest.test_callable_object_return_None.<locals>.<lambda>  s    Dr   getByUniqueNamerE   N)r(   r#   r:   rj   r   rk   s   &r    test_callable_object_return_None2FakeLaunchpadTest.test_callable_object_return_None   s9    
 #'7H"I$..11AA%HIr   c                   a \        R R7      o\        V3R lR7      V P                  n        V P                  P                  P                  R4      oV P	                  SP                  4       4       R# )z
If the WADL definition of a method does not include a response
representation, then fake versions of that method just pass through
the return value.
c                      R # )Tr   r   r   r   r;   SFakeLaunchpadTest.test_callable_object_no_response_representation.<locals>.<lambda>  s    4r   )canBeDeletedc                    < S# r   r   rG   branchs   &r   r;   r         Fr   r   rE   N)r(   r#   r:   r   r   r   r   r   s   &@r   /test_callable_object_no_response_representationAFakeLaunchpadTest.test_callable_object_no_response_representation  sP     <0"&7J"K((88?++-.r   c                    \        \        RR7      R7      p\        V.R7      V P                  n        V P                  P                  ^ ,          pV P                  RVP                  P
                  4       R# )z`
Attributes that represent links to other objects are set using a
dict representing the object.
ztest-personrF   ownerr%   N)r(   r#   r)   r+   r   rG   r/   s   & r   test_entry_property%FakeLaunchpadTest.test_entry_property  sR    
 =12"C51nn!!!$		7r   c           
         \        \        RR7      R7      pV P                  \        \        V P                  R\        V.R7      4       R# )z.
Sample data for linked entries is validated.
ro   r   r   r)   r%   Nr(   rp   r	   rq   r#   r/   s   & r   test_invalid_entry_property-FakeLaunchpadTest.test_invalid_entry_property  s:     %)NN#	
r   c                   a \        RR7      o\        V3R lR7      V P                  n        V P                  P                  P                  R4      oV P	                  RSP
                  4       R# )z
Sample top-level collections can be set on L{FakeLaunchpad}
instances.  They are validated the same way other sample data is
validated.
rE   rF   c                    < S# r   r   r   s   &r   r;   FFakeLaunchpadTest.test_top_level_collection_property.<locals>.<lambda>1  r   r   r   N)r(   r#   r:   r   r+   rG   r   s   &@r   "test_top_level_collection_property4FakeLaunchpadTest.test_top_level_collection_property*  sO     5!"&7J"K((88?,r   c                <  a \        RR7      p\        \        V.R7      R7      o\        V3R lR7      V P                  n        V P                  P                  P                  R4      o\	        SP
                  4      w  pV P                  RVP                  4       R# )	zs
Attributes that represent links to collections of other objects are
set using a dict representing the collection.
rM   )r-   r%   linked_bugsc                    < S# r   r   r   s   &r   r;   <FakeLaunchpadTest.test_collection_property.<locals>.<lambda><  r   r   r   rE   N)r(   r#   r:   r   r*   r   r+   r-   r   r0   r   s   & @r   test_collection_property*FakeLaunchpadTest.test_collection_property5  sq    
 cl$u"56"&7J"K((88?V''(cff%r   c                N   \        RRR7      p\        V.R7      V P                  n        \        V P                  P                  4      pV P	                  ^\        V4      4       V^ ,          pV P	                  RVP                  4       V P	                  RVP                  4       R# )zw
Data for a sample collection set on a L{FakeLaunchpad} instance can be
iterated over if an C{entries} key is defined.
rM   rN   rO   r%   N)r(   r#   r)   r*   r+   lenr-   rP   )r   r0   r)   s   &  r   test_iterate_collection)FakeLaunchpadTest.test_iterate_collectionA  s|    
 c*"C51DNN''(CI&1gcff%399-r   c           
         \        RR7      pV P                  \        \        V P                  R\        V.R7      4       R# )zg
Sample data for each entry in a collection is validated when it's set
on a L{FakeLaunchpad} instance.
ro   r   r)   r%   Nr   r/   s   & r   .test_top_level_collection_with_invalid_entries@FakeLaunchpadTest.test_top_level_collection_with_invalid_entriesN  s5    
 uoNN#	
r   c                   a \        RR7      p\        \        V.R7      R7      o\        V3R lR7      V P                  n        V P                  \        V P                  P                  P
                  R4       R# )	z
Sample data for each entry in a collection is validated when it's set
on an attribute representing a link to a collection of objects.
ro   r   r%   r   c                    < S# r   r   r   s   &r   r;   HFakeLaunchpadTest.test_collection_with_invalid_entries.<locals>.<lambda>c  r   r   r   rE   N)r(   r#   r:   rp   r	   r   r   s   & @r   $test_collection_with_invalid_entries6FakeLaunchpadTest.test_collection_with_invalid_entries\  sX    
 uo$u"56"&7J"KNN##33	
r   c                   \        RRR7      p\        RRR7      p\        RRR7      p\        WV.R7      V P                  n        V P                  P                  R	,          pV P                  ^\	        V4      4       V P                  RV^ ,          P
                  4       V P                  RV^,          P
                  4       R
# )zp
Data for a sample collection set on a L{FakeLaunchpad} instance can be
sliced if an C{entries} key is defined.
rM   rN   rO   2Bug #23zBug #3r%   :      NN)r(   r#   r)   r+   r   r-   )r   bug1bug2bug3r)   s   &    r   test_slice_collection'FakeLaunchpadTest.test_slice_collectionj  s    
 s(+s(+s(+"D+=>~~""3'CI&d1gjj)d1gjj)r   c                   a  \        RRR7      p\        RRR7      p\        W.R7      S P                  n        S P                  \        V 3R l4       S P                  \        V 3R l4       R	# )
z
A C{ValueError} is raised if a negative start value is used when
slicing a sample collection set on a L{FakeLaunchpad} instance.
rM   rN   rO   r   r   r%   c                  6   < S P                   P                  RR # )r   Nr#   r)   rk   s   r   r;   MFakeLaunchpadTest.test_slice_collection_with_negative_start.<locals>.<lambda>  s    dnn.A.A"#.Fr   c                  6   < S P                   P                  R^ # )r   r   r   rk   s   r   r;   r     s    dnn.A.A"Q.Gr   Nr(   r#   r)   rp   
ValueErrorr   r   r   s   f  r   )test_slice_collection_with_negative_start;FakeLaunchpadTest.test_slice_collection_with_negative_startx  R    
 s(+s(+"D<8*&FG*&GHr   c                   a  \        RRR7      p\        RRR7      p\        W.R7      S P                  n        S P                  \        V 3R l4       S P                  \        V 3R l4       R	# )
z
A C{ValueError} is raised if a negative stop value is used when
slicing a sample collection set on a L{FakeLaunchpad} instance.
rM   rN   rO   r   r   r%   c                  6   < S P                   P                  R R # )Nr   r   rk   s   r   r;   LFakeLaunchpadTest.test_slice_collection_with_negative_stop.<locals>.<lambda>  s    dnn.A.A#2.Fr   c                  6   < S P                   P                  ^ R # )r   r   r   rk   s   r   r;   r     s    dnn.A.A!B.Gr   Nr   r   s   f  r   (test_slice_collection_with_negative_stop:FakeLaunchpadTest.test_slice_collection_with_negative_stop  r   r   c                   a  \        RRR7      p\        V.R7      S P                  n        S P                  \        V 3R l4       R# )zg
An C{IndexError} is raised if an invalid index is used when retrieving
data from a sample collection.
rM   rN   rO   r%   c                  >   < S P                   P                  ^,          # )   r   rk   s   r   r;   HFakeLaunchpadTest.test_subscript_operator_out_of_range.<locals>.<lambda>  s    dnn.A.A!.Dr   N)r(   r#   r)   rp   
IndexError)r   r   s   f r   $test_subscript_operator_out_of_range6FakeLaunchpadTest.test_subscript_operator_out_of_range  s5    
 s(+"D62*&DEr   c                F   \        RR7      V P                  n        V P                  P                  pV P                  RVP                  4       RVn        V P                  RVP                  4       V P                  RV P                  P                  P                  4       R# )z<Values already set on fake resource objects can be replaced.rE   rF   ro   Nr|   rH   s   & r   test_replace_property'FakeLaunchpadTest.test_replace_property  sq     e,"",, 1 1 6 67r   c                <  aa \        RRR7      o\        RRR7      o\        V3R lR7      V P                  n        V3R lV P                  P                  n        V P                  P                  P                  R4      pV P	                  RVP
                  4       R# )	z=Methods already set on fake resource objects can be replaced.rE   zlp:~user/project/branch1)rG   bzr_identityzlp:~user/project/branch2c                    < S# r   r   )rG   branch1s   &r   r;   7FakeLaunchpadTest.test_replace_method.<locals>.<lambda>  s    Gr   r   c                    < S# r   r   )rG   branch2s   &r   r;   r    s    wr   N)r(   r#   r:   r   r+   r  )r   r   r  r  s   & @@r   test_replace_method%FakeLaunchpadTest.test_replace_method  sr    E0JKE0JK"&7K"L2F/((88?3V5H5HIr   c                    \        RR7      V P                  n        V P                  P                  pV P                  \        \
        VR^4       R# )z2Values set on fake resource objects are validated.rE   rF   rG   N)r(   r#   r@   rp   r	   rq   rH   s   & r   (test_replace_property_with_invalid_value:FakeLaunchpadTest.test_replace_property_with_invalid_value  s8     e,"".'661Er   c                2   \        RR7      V P                  n        V P                  RV P                  P                  P                  4       \        RR7      V P                  n        V P                  RV P                  P                  P                  4       R# )z:Resources already set on L{FakeLaunchpad} can be replaced.rE   rF   ro   Nr|   rk   s   &r   test_replace_resource'FakeLaunchpadTest.test_replace_resource  sd     e, 1 1 6 67 e, 1 1 6 67r   c                   \        RR7      V P                  n        V P                  P                  pRVn        V P	                  RVP
                  4       V P	                  RVP                  4       V P	                  RV P                  P                  P
                  4       V P	                  RV P                  P                  P                  4       R# )z?Sample data set on a L{FakeLaunchpad} instance can be added to.rE   rF   ru   N)r(   r#   r@   rv   r+   rG   rH   s   & r   test_add_property#FakeLaunchpadTest.test_add_property  s     e,""#, 3 34 1 1 6 67 1 1 > >?r   c                .   \        4       V P                  n        V P                  \        \
        V P                  P                  R4       RV P                  P                  n        V P                  RV P                  P                  P                  4       R# )z6An empty object can be used when creating sample data.rG   rE   N)r(   r#   r@   rp   rw   rx   rG   r+   rk   s   &r   !test_add_property_to_empty_object3FakeLaunchpadTest.test_add_property_to_empty_object  s`     F.'4>>3D3DfM!& 1 1 6 67r   c                t    \         P                  ! RRR4      pV P                  \        V\         4      4       R# )zm
L{FakeLaunchpad.login} ignores all parameters and returns a new
instance using the builtin WADL definition.
rG   tokensecretN)r   loginr   r   r   r#   s   & r   
test_loginFakeLaunchpadTest.test_login  s+    
 "''B	
9m<=r   c                p    \         P                  ! R4      pV P                  \        V\         4      4       R# )z{
L{FakeLaunchpad.get_token_and_login} ignores all parameters and
returns a new instance using the builtin WADL definition.
rG   N)r   get_token_and_loginr   r   r#  s   & r   test_get_token_and_login*FakeLaunchpadTest.test_get_token_and_login  s'    
 "55f=	
9m<=r   c                p    \         P                  ! R4      pV P                  \        V\         4      4       R# )zr
L{FakeLaunchpad.login_with} ignores all parameters and returns a new
instance using the builtin WADL definition.
rG   N)r   
login_withr   r   r#  s   & r   test_login_with!FakeLaunchpadTest.test_login_with  s'    
 ",,V4	
9m<=r   c                    \        RR7      V P                  n        V P                  V P                  P                  P	                  4       4       R# )zE
Sample object have an C{lp_save} method that is a no-op by default.
rE   rF   N)r(   r#   r@   r   lp_saverk   s   &r   test_lp_saveFakeLaunchpadTest.test_lp_save  s4     !e,))1134r   c                    \        RR R7      V P                  n        V P                  RV P                  P                  P	                  4       4       R# )z;A custom C{lp_save} method can be set on a L{FakeResource}.rE   c                      R # customr   r   r   r   r;   7FakeLaunchpadTest.test_custom_lp_save.<locals>.<lambda>  s    Xr   )rG   r/  r5  N)r(   r#   r@   r+   r/  rk   s   &r   test_custom_lp_save%FakeLaunchpadTest.test_custom_lp_save  s9     e5EF4>>#4#4#<#<#>?r   c                    \        RR7      V P                  n        R V P                  P                  n        V P	                  RV P                  P                  P                  4       4       R# )zT
A custom C{lp_save} method can be set on a L{FakeResource} after its
been created.
rE   rF   c                      R # r4  r   r   r   r   r;   ;FakeLaunchpadTest.test_set_custom_lp_save.<locals>.<lambda>  s    Hr   r5  N)r(   r#   r@   r/  r+   rk   s   &r   test_set_custom_lp_save)FakeLaunchpadTest.test_set_custom_lp_save  sJ    
 !e,$4!4>>#4#4#<#<#>?r   r   N)2r   r   r   r   r
   rS   r[   rd   rg   rl   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  r  r  r  r  r  r$  r(  r,  r0  r7  r<  r   r   r   s   @r   rU   rU   W   s     4678ID="=6
N88>
@

E
	3MJ	/8
	-
&.

*	I	IF8JF8@8>>>5@
@ @r   rU   N)r   r   testresourcesr   launchpadlib.testing.launchpadr   r   r   r	   launchpadlib.testing.resourcesr
   r   r   r"   rU   r   r   r   <module>rA     sL   & ( + A$ A+N( +N\[@) [@r   