
    X                         S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKrSSK	J
r
  SSKJr  SS	KJr  SS
KJr  SSKJs  Jr  SSKJr  SSKJr   " S S\R.                  5      r " S S\R.                  5      rg)z(Unit tests for gsutil wildcard_iterator.    )absolute_import)print_function)division)unicode_literalsN)wildcard_iterator)InvalidUrlError)ContainsWildcard)StorageUrlFromString)ObjectToURI)SetDummyProjectForUnitTestc                      ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r$ )CloudWildcardIteratorTests*   z%Unit tests for CloudWildcardIterator.c                 l  > [         [        U ]  5         / SQU l        / SQU l        U R                  5       U l        SU R                  R                  SS -  U l        [        U R                  5      U l
        U R                  R                  U R                  R                  U R                  5      U l
        U R                  SU R                  -  S9U l        [        5       U l        U R                   HB  nU R                  U R                  USS	9nU R                  R!                  [        U5      5        MD     U R                  S
U R                  -  S9U l        [        5       U l        U R                   HB  nU R                  U R"                  USS	9nU R$                  R!                  [        U5      5        MD     U R                  SU R                  -  S9U l        [        5       U l        / SQnU HB  nU R                  U R&                  USS	9nU R(                  R!                  [        U5      5        MD     g)zFCreates 2 mock buckets, each containing 4 objects, including 1 nested.)abcdabddade$)r   r   r   nested1/nested2/xyz1nested1/nested2/xyz2znested1/nested2xyz1znested1/nfile_abcz%s_N=   z%s0)bucket_name )
bucket_uriobject_namecontentsz%s1z%s2)f.txtdouble/f.txtzdouble/zf.txtdouble/foo/f.txtzdouble/foo/zf.txtdouble/bar/f.txtzdouble/bar/zf.txt)superr   setUpimmed_child_obj_namesall_obj_namesCreateBucketbase_bucket_urir   prefix_bucket_namesuribase_uri_strreplacetest_bucket0_urisettest_bucket0_obj_uri_strsCreateObjectaddtest_bucket1_uritest_bucket1_obj_uri_strstest_bucket2_uritest_bucket2_obj_uri_strs)selfobj_nameobj_uriobject_list	__class__s       5platform/gsutil/gslib/tests/test_wildcard_iterator.pyr!    CloudWildcardIteratorTests.setUp-   s    	
$d13!9DD
  ,,.D#d&:&:&F&Fs&KKDT112D))11(($*A*ACD !--%.2.E.E;F- GD%(UD"&&!!T-B-B.6+- " /g $$((g7	 ' !--%.2.E.E;F- GD%(UD"&&!!T-B-B.6+- " /g $$((g7	 ' !--%.2.E.E;F- GD%(UD"K  !!T-B-B.6+- " /g $$((g7	      c                     [        U R                  U R                  5      R                  S/S95      nU R	                  S[        U5      5        U R	                  [        U R                  5      [        US   5      5        g)z6Tests that bucket-only URI iterates just that one URI.idbucket_fields   r   N)list_test_wildcard_iteratorr*   IterBucketsassertEquallenstrr3   resultss     r8   testNoOpObjectIterator1CloudWildcardIteratorTests.testNoOpObjectIteratorc   sk    $$!!	##.;dV;#DFG 	QG%S../WQZAr:   c                     [        S U R                  U R                  R                  S5      5      R	                  SS9 5       5      nU R                  U R                  U5        g)z.Tests matching all objects, based on wildcard.c              3   `   #    U  H$  n[         R                  " [        U5      5      v   M&     g 7fN)sixensure_textrE   .0us     r8   	<genexpr>DCloudWildcardIteratorTests.testMatchingAllObjects.<locals>.<genexpr>m   s(      0*/AA */s   ,.**Texpand_top_level_bucketsN)r+   rA   r*   clone_replace_nameIterAllrC   r,   )r3   actual_obj_uri_strss     r8   testMatchingAllObjects1CloudWildcardIteratorTests.testMatchingAllObjectsk   sj     0)-)E)E!!44T:*<<CG)- =D =/*/0 0 	T335HIr:   c                 V   [        [        U R                  R                  S5      5      [        U R                  R                  S5      5      /5      n[        S U R	                  U R                  R                  S5      5      R                  SS9 5       5      nU R                  X5        g)z6Tests matching a subset of objects, based on wildcard.r   r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   rE   rO   s     r8   rR   FCloudWildcardIteratorTests.testMatchingObjectSubset.<locals>.<genexpr>y         0/1A /   ab??TrU   Nr+   rE   r*   rW   rA   rX   rC   r3   exp_obj_uri_strsrY   s      r8   testMatchingObjectSubset3CloudWildcardIteratorTests.testMatchingObjectSubsets   s    D!!44V<=D!!44V<=   044!!44V<>>Eg)- ?F ?//0 0 	%;r:   c                    [        [        U R                  R                  S5      5      /5      n[        S U R	                  U R                  R                  S5      5      R                  SS9 5       5      nU R                  X5        g)z%Tests matching a single named object.r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   JCloudWildcardIteratorTests.testMatchingNonWildcardedUri.<locals>.<genexpr>   r`   ra   TrU   Nrc   rd   s      r8   testMatchingNonWildcardedUri7CloudWildcardIteratorTests.testMatchingNonWildcardedUri   s    	T""55f=	>?A 044!!44V<>>Eg)- ?F ?//0 0 	%;r:   c                 B   [        S U R                  U R                  R                  S5      5      R	                  SS9 5       5      n[        S U R                  U R                  R                  S5      5      R	                  SS9 5       5      nU R                  X5        g)z@Tests that wildcarding w/ and w/o server prefix get same result.c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   XCloudWildcardIteratorTests.testWildcardedObjectUriWithVsWithoutPrefix.<locals>.<genexpr>   s      0/1A /ra   r   TrU   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   ro      s      0/1A /ra   z?bcdN)r+   rA   r*   rW   rX   rC   )r3   with_prefix_uri_strsno_prefix_uri_strss      r8   *testWildcardedObjectUriWithVsWithoutPrefixECloudWildcardIteratorTests.testWildcardedObjectUriWithVsWithoutPrefix   s      044!!44V<>>Eg)- ?F ?//0 0  044!!44V<>>Eg)- ?F ?//0 0 	)>r:   c           	      &   [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                   Vs/ s H  n[        U R                  U5      PM     sn5      nU R                  XQ5        U R                  S[        U5      5        U R                  SU;   5        gs  snf )z'Tests wildcarding with a nested subdir.*r?   nested1/N)r+   rA   r*   rW   IsPrefixr.   root_object
url_stringr"   r'   rC   rD   
assertTrue)r3   uri_strsprefixesblrxre   s         r8   (testWildcardedObjectUriNestedSubdirMatchCCloudWildcardIteratorTests.testWildcardedObjectUriNestedSubdirMatch   s    uHuH++0057	S__%S^^$7 151K1KL1KAd##Q	'1KLN%0QH&OOJ(*+ 	Ms   & Dc                    [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        5       n[        S/5      nU R                  XR5        U R                  XA5        g)$Tests gs://bucket/*/subdir matching.z	*/nested1rw   N)	r+   rA   r*   rW   rx   r.   ry   rz   rC   r3   actual_uri_strsactual_prefixesr~   expected_uri_strsexpected_prefixess         r8   testWildcardPlusSubdirMatch6CloudWildcardIteratorTests.testWildcardPlusSubdirMatch   s    eOeO++00=?	COO,CNN+? ZL)&8&8r:   c                 &   [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                  R                  S5      R                  U R                  R                  S5      R                  /5      n[        5       nU R                  XR5        U R                  XA5        g)z&Tests gs://bucket/*/subdir/* matching.z*/nested2/*r   r   N
r+   rA   r*   rW   rx   r.   ry   rz   urirC   r   s         r8   !testWildcardPlusSubdirSubdirMatch<CloudWildcardIteratorTests.testWildcardPlusSubdirSubdirMatch   s    eOeO++00?A	COO,CNN+A 001GHLL001GHLL  &8&8r:   c                     [        U R                  U R                  R                  S5      5      R	                  SS95      nU R                  S[        U5      5        g)zFTests that get back an empty iterator for non-matching wildcarded URI.z*x0TrU   r   N)r@   rA   r*   rW   rX   rC   rD   r3   ress     r8   !testNoMatchingWildcardedObjectUri<CloudWildcardIteratorTests.testNoMatchingWildcardedObjectUri   sW    
$$!!44U;	==DW)- >E >/0C 	QC!r:   c                      U R                  S5      R                  SS9 H  nU R                  S5        M     g! [         a7  nU R	                  UR
                  R                  S5      S:g  5         SnAgSnAff = f)z<Tests that we raise an exception for wildcarded invalid URI.zbadscheme://asdfTrU   z$Expected InvalidUrlError not raised.zUnrecognized schemeN)rA   rX   assertFalser   r{   messagefind)r3   unused_es      r8   testWildcardedInvalidObjectUri9CloudWildcardIteratorTests.testWildcardedInvalidObjectUri   sw    C112DEMM#' N )'?@)  C
ooaiinn%:;rABBCs   69 
A:-A55A:c                 T   [        [        U R                  5      U R                  R                  -   /5      n[	        5          [        S U R                  SU R                  -  5      R                  S/S9 5       5      nSSS5        U R                  UW5        g! , (       d  f       N!= f)z@Tests matching a single bucket based on a wildcarded bucket URI.c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   PCloudWildcardIteratorTests.testSingleMatchWildcardedBucketUri.<locals>.<genexpr>   $       KJa a&&Jra   z%s*1r<   r=   N)	r+   r'   r/   delimr   rA   r(   rB   rC   rd   s      r8   "testSingleMatchWildcardedBucketUri=CloudWildcardIteratorTests.testSingleMatchWildcardedBucketUri   s    	d##	$t'<'<'B'B	BCE	#	%  K//040A0A1B CCN;CG& DO DJJ K K 
& 	%':; 
&	%s   =B
B'c                     [        [        U R                  5      U R                  R                  -   [        U R                  5      U R                  R                  -   [        U R
                  5      U R
                  R                  -   /5      n[        5          [        S U R                  SU R                  -  5      R                  S/S9 5       5      nSSS5        U R                  UW5        g! , (       d  f       N!= f)zCTests matching a multiple buckets based on a wildcarded bucket URI.c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   OCloudWildcardIteratorTests.testMultiMatchWildcardedBucketUri.<locals>.<genexpr>   r   ra   z%s*r<   r=   N)r+   r'   r*   r   r/   r1   r   rA   r(   rB   rC   rd   s      r8   !testMultiMatchWildcardedBucketUri<CloudWildcardIteratorTests.testMultiMatchWildcardedBucketUri   s    T""#d&;&;&A&AAT""#d&;&;&A&AAT""#d&;&;&A&AA 
 
$	%  K//040A0A1B CCN;CG& DO DJJ K K 
& 	%':; 
&	%s   =C//
C=c                 B   [        [        U R                  R                  S5      5      /5      n[	        5          [        S U R                  SU R                  -  5      R                  SS9 5       5      nSSS5        U R                  UW5        g! , (       d  f       N!= f)z5Tests matching with both bucket and object wildcards.r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   LCloudWildcardIteratorTests.testWildcardBucketAndObjectUri.<locals>.<genexpr>   s!       IHQ#a&& Hra   z	%s0*/abc*TrU   N)	r+   rE   r*   rW   r   rA   r(   rX   rC   rd   s      r8   testWildcardBucketAndObjectUri9CloudWildcardIteratorTests.testWildcardBucketAndObjectUri   s    	T""55f=	>?A	#	%  I66 !!($!GH I I 
&
 	%':; 
&	%s   <B
Bc                    [        [        U R                  R                  S5      5      /5      n[        S U R	                  SU R                  R
                  -  5      R                  SS9 5       5      nU R                  X5        g)zTests wildcard subd*r/obj name.r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   [CloudWildcardIteratorTests.testWildcardUpToFinalCharSubdirPlusObjectName.<locals>.<genexpr>  !      ON1A Nra   z%snested1/nest*2/xyz1TrU   Nr+   rE   r*   rW   rA   r   rX   rC   rd   s      r8   -testWildcardUpToFinalCharSubdirPlusObjectNameHCloudWildcardIteratorTests.testWildcardUpToFinalCharSubdirPlusObjectName  s    	T""556LM	NOQ O44#!!%%&''.ww'MNO O 	%;r:   c                    [        [        U R                  R                  S5      5      /5      n[        S U R	                  SU R                  R
                  -  5      R                  SS9 5       5      nU R                  X5        g)z@Tests wildcard containing ** followed by an additional wildcard.r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   GCloudWildcardIteratorTests.testPostRecursiveWildcard.<locals>.<genexpr>  r   ra   z	%s**/*y*2TrU   Nr   rd   s      r8   testPostRecursiveWildcard4CloudWildcardIteratorTests.testPostRecursiveWildcard  s    	T""556LM	NOQ O44!!%%&''.ww'MNO O 	%;r:   c                    [        S U R                  U R                  R                  S5      5      R	                  S/S9 5       5      nU R                  [        U5      5        U H;  nU R                  UR                  =(       a    UR                  R                  5        M=     [        S U R                  U R                  R                  S5      5      R	                  S/S9 5       5      nU R                  [        U5      5        U H@  nU R                  UR                  =(       a    UR                  R                  (       + 5        MB     g)zBTests that wildcard w/fields specification returns correct fields.c              3   $   #    U  H  ov   M     g 7frL    rO   s     r8   rR   @CloudWildcardIteratorTests.testWildcardFields.<locals>.<genexpr>  s      4 3Qq 3   rT   timeCreated)bucket_listing_fieldsc              3   $   #    U  H  ov   M     g 7frL   r   rO   s     r8   rR   r     s      3 2Qq 2r   
generationN)	r+   rA   r*   rW   rX   r{   rD   ry   r   )r3   blrsr~   s      r8   testWildcardFields-CloudWildcardIteratorTests.testWildcardFields  s    4$6600688?#0/ 9@ 933 4 4D 	OOCI
oocooE#//*E*EF  3$6600688?#/. 9@ 922 3 3D 	OOCI
oocooIcoo.I.I*IJ r:   c                 &   [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                  R                  S5      R                  U R                  R                  S5      R                  /5      n[        5       nU R                  XR5        U R                  XA5        g)r   z**/xyz*r   r   Nr   r   s         r8   *testDoesNotStripDelimiterForDoubleWildcardECloudWildcardIteratorTests.testDoesNotStripDelimiterForDoubleWildcard%  s    eOeO++00;=	COO,CNN+= 001GHLL001GHLL  &8&8r:   c                    [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                  R                  S5      R                  U R                  R                  S5      R                  U R                  R                  S5      R                  U R                  R                  S5      R                  /5      n[        5       nU R                  XR5        U R                  XA5        g)z%Tests gs://bucket/**/object matching.z**/f.txtr   r   r   r   N
r+   rA   r1   rW   rx   r.   ry   rz   r   rC   r   s         r8   testDoubleWildcardAfterBucket8CloudWildcardIteratorTests.testDoubleWildcardAfterBucket7  s   eOeO++00<>	COO,CNN+> 009==00@DD001CDHH001CDHH	  &8&8r:   c                 n   [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                  R                  S5      R                  U R                  R                  S5      R                  U R                  R                  S5      R                  /5      n[        5       nU R                  XR5        U R                  XA5        g)z)Tests gs://bucket/dir/**/object matching.zdouble/**/f.txtr   r   r   Nr   r   s         r8   testDoubleWildcardAfterPrefix8CloudWildcardIteratorTests.testDoubleWildcardAfterPrefixK  s    eOeO++001BCE	COO,CNN+E 00@DD001CDHH001CDHH 
 &8&8r:   c                 n   [        5       n[        5       nU R                  U R                  R                  S5      5       HP  nUR	                  5       (       a  UR                  UR                  5        M5  UR                  UR                  5        MR     [        U R                  R                  S5      R                  U R                  R                  S5      R                  U R                  R                  S5      R                  /5      n[        5       nU R                  XR5        U R                  XA5        g)z,Tests gs://bucket/**/dir/**/object matching.z**/double/**/f.txtr   r   r   Nr   r   s         r8   &testDoubleWildcardBeforeAndAfterPrefixACloudWildcardIteratorTests.testDoubleWildcardBeforeAndAfterPrefix^  s    eOeO++001EFH	COO,CNN+H 00@DD001CDHH001CDHH 
 &8&8r:   )r#   r%   r(   r"   r&   r,   r*   r0   r/   r2   r1   )__name__
__module____qualname____firstlineno____doc__r!   rH   rZ   rf   rk   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__r7   s   @r8   r   r   *   sy    -48lBJ
<<? , 99$"C
<<	<<<K9$9(9&9 9r:   r   c                      ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrU =r$ )FileIteratorTestsir  z$Unit tests for FileWildcardIterator.c                   > [         [        U ]  5         U R                  / SQS9U l        [        [        U R                  S5      [        U R                  S5      [        U R                  S5      /5      U l        [        [        U R                  S5      /5      U l        [        [        U R                  SSS5      /5      U l	        U R                  U R                  -  U l
        U R                  U R                  -  U l        g	)
zCCreates a test dir with 3 files and one nested subdirectory + file.)r   r   r   )dir1dir2zzz)
test_filesr   r   r   r   r   r   N)r    r   r!   CreateTempDirtest_dirr+   r'   root_files_uri_strssubdirs_uri_strsnested_files_uri_strsimmed_child_uri_strsall_file_uri_strs)r3   r7   s    r8   r!   FileIteratorTests.setUpu  s    	
T(*&&D ' FDM  #T]]F#T]]F#T]]F#$  D  dmmV!< =>D!$	dmmVVU	34"6D !% 8 84;P;P PD"66"889Dr:   c                     U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        g)zTests ContainsWildcard call.za*.txtz
a[0-9].txtz0-9.txtz?.txtN)r{   r	   r   )r3   s    r8   testContainsWildcard&FileIteratorTests.testContainsWildcard  sL    OO$X./OO$\23%i01OO$W-.r:   c                     [        U R                  [        [        R                  5      5      R                  SS95      nU R                  S[        U5      5        U R                  [        [        R                  5      [        US   5      5        g)z9Tests that directory-only URI iterates just that one URI.TrU   r?   r   N)	r@   rA   r'   tempfiletempdirrX   rC   rD   rE   rF   s     r8   testNoOpDirectoryIterator+FileIteratorTests.testNoOpDirectoryIterator  sp    $$T& 	&wwEGG 	QG%T(**+S_=r:   c                     U R                  [        U R                  S5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  U R                  U5        g),Tests matching all files, based on wildcard.rv   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   9FileIteratorTests.testMatchingAllFiles.<locals>.<genexpr>        ,+1A +ra   TrU   N)_test_storage_urir'   r   r+   rA   rX   rC   r   r3   r   r   s      r8   testMatchingAllFiles&FileIteratorTests.testMatchingAllFiles  sk    

 
 dmmS!9
:C ,44S9AA%) B +, ,O 	T..@r:   c                    U R                  [        U R                  S5      5      nU R                  U5      R	                  SS/S9nSnSnU Hl  nU R                  [        U5      U R                  ;   5        UR                  5       (       d  MA  US-  nU R                  UR                  R                  S5        Mn     U R                  X45        g	)
r   rv   Tsize)rV   r      r   r?      N)r   r'   r   rA   rX   r{   rE   r   IsObjectrC   ry   r   )r3   r   r   num_expected_objectsnum_actual_objectsr~   s         r8   testMatchingAllFilesWithSize.FileIteratorTests.testMatchingAllFilesWithSize  s    

 
 dmmS!9
:C'',44!%fX 5 GD
ooc#h$";";;<	a--q1  	)>r:   c                 6   [        [        U R                  S5      [        U R                  S5      /5      nU R                  [        U R                  S5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  X5        g)z4Tests matching a subset of files, based on wildcard.r   r   rb   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   ;FileIteratorTests.testMatchingFileSubset.<locals>.<genexpr>  r   ra   TrU   Nr+   r'   r   r   rA   rX   rC   r3   exp_uri_strsr   r   s       r8   testMatchingFileSubset(FileIteratorTests.testMatchingFileSubset  s    	dmmV	$	dmmV	$	&'L 
 
 dmmV!<
=C ,44S9AA%) B +, ,O 	\3r:   c                    [        [        U R                  S5      /5      nU R                  [        U R                  S5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  X5        g)z#Tests matching a single named file.r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   AFileIteratorTests.testMatchingNonWildcardedUri.<locals>.<genexpr>  r   ra   TrU   Nr  r	  s       r8   rk   .FileIteratorTests.testMatchingNonWildcardedUri  s{    T]]F345L

 
 dmmV!<
=C ,44S9AA%) B +, ,O 	\3r:   c                    [        [        U R                  S5      /5      nU R                  [        U R                  S5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  X5        g)z8Tests ignoring non-wildcard regex chars (e.g., ^ and $).r   zad*$c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   MFileIteratorTests.testMatchingFilesIgnoringOtherRegexChars.<locals>.<genexpr>  r   ra   TrU   Nr  r	  s       r8   (testMatchingFilesIgnoringOtherRegexChars:FileIteratorTests.testMatchingFilesIgnoringOtherRegexChars  s}     T]]F345L

 
 dmmV!<
=C ,44S9AA%) B +, ,O 	\3r:   c                     U R                  [        U R                  S5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  U R                  U5        g)z:Tests recursive expansion of directory-only '**' wildcard.rT   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   JFileIteratorTests.testRecursiveDirectoryOnlyWildcarding.<locals>.<genexpr>  r   ra   TrU   Nr   r'   r   r+   rA   rX   rC   r   r   s      r8   %testRecursiveDirectoryOnlyWildcarding7FileIteratorTests.testRecursiveDirectoryOnlyWildcarding  sk    

 
 dmmT!:
;C ,44S9AA%) B +, ,O 	T++_=r:   c                     U R                  [        U R                  SS5      5      n[        S U R	                  U5      R                  SS9 5       5      nU R                  U R                  U5        g)z>Tests recursive expansion of '**' directory plus '*' wildcard.rT   rv   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   NFileIteratorTests.testRecursiveDirectoryPlusFileWildcarding.<locals>.<genexpr>  r   ra   TrU   Nr  r   s      r8   )testRecursiveDirectoryPlusFileWildcarding;FileIteratorTests.testRecursiveDirectoryPlusFileWildcarding  sm    

 
 dmmT3!?
@C ,44S9AA%) B +, ,O 	T++_=r:   c                 X    U R                  [        U R                  SS5      5      nU R                  U5      R	                  SS9 H  nU R                  S5        M     g! [        R                   a6  nU R                  [        U5      R                  S5      S:g  5         SnAgSnAff = f)	z6Tests that wildcard containing '***' raises exception.z***r   TrU   z&Expected WildcardException not raised.zmore than 2 consecutiver   N)r   r'   r   rA   rX   failr   WildcardExceptionr{   rE   r   )r3   r   r   r   s       r8   %testInvalidRecursiveDirectoryWildcard7FileIteratorTests.testInvalidRecursiveDirectoryWildcard  s    D""4uf#EFc11#6>>#' ? )'		:;) .. D
ooc!fkk";<BCCDs   AA B)3,B$$B)c                     [        U R                  [        SS5      5      R                  SS95      nU R	                  S[        U5      5        g)zETests that wildcard gets empty iterator when directory doesn't exist.no_such_dirrv   TrU   r   N)r@   rA   r'   rX   rC   rD   r   s     r8   testMissingDir FileIteratorTests.testMissingDir  sI    
$$T3&  	!!($!GIC 	QC!r:   c                     U R                  [        U R                  S5      5      n[        U R	                  U5      R                  SS95      nU R                  S[        U5      5        g)zATests that wildcard returns empty iterator when there's no match.znon_existent*TrU   r   N)r   r'   r   r@   rA   rX   rC   rD   )r3   r   r   s      r8   testExistingDirNoFileMatch,FileIteratorTests.testExistingDirNoFileMatch  s^    

 
 dmm_!E
FC
$$S)11%) 	2 	+,C 	QC!r:   c                 8   U R                   nU R                  [        U R                  S5      5      n[	        U R                  5      S[
        R                  " S5      4n[        S U R                  X#S9R                  SS9 5       5      nU R                  X5        g)z:Tests that the exclude regex will omit a nested directory.rT   Tr   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   3FileIteratorTests.testExcludeDir.<locals>.<genexpr>  !      0/A 	A/ra   exclude_tuplerU   N)r   r   r'   r   r
   recompiler+   rA   rX   rC   r3   r
  r   r2  r   s        r8   testExcludeDir FileIteratorTests.testExcludeDir  s    ++L

 
 dmmT!:
;C)$--8$ZZ')M 0--c-O./0 0O 	\3r:   c                 8   U R                   nU R                  [        U R                  S5      5      n[	        U R                  5      S[
        R                  " S5      4n[        S U R                  X#S9R                  SS9 5       5      nU R                  X5        g)	zCTests that the exclude regex will be disabled by exlude_dirs False.rT   Fr   c              3   8   #    U  H  n[        U5      v   M     g 7frL   r^   rO   s     r8   rR   GFileIteratorTests.testExcludeTupleButExcludeDirFalse.<locals>.<genexpr>  r0  ra   r1  TrU   N)r   r   r'   r   r
   r3  r4  r+   rA   rX   rC   r5  s        r8   "testExcludeTupleButExcludeDirFalse4FileIteratorTests.testExcludeTupleButExcludeDirFalse  s    ))L

 
 dmmT!:
;C)$--8%ZZ')M 0--c-O./0 0O 	\3r:   )r   r   r   r   r   r   )r   r   r   r   r   r!   r   r   r   r  r  rk   r  r  r  r$  r(  r+  r6  r;  r   r   r   s   @r8   r   r   r  sX    ,:,/>A?	444>>	D""
4
4 
4r:   r   )r   
__future__r   r   r   r   r3  rM   r   gslibr   gslib.exceptionr   gslib.storage_urlr	   r
   gslib.tests.testcaseteststestcasegslib.tests.utilr   r'   r   GsUtilUnitTestCaser   r   r   r:   r8   <module>rF     s`   , / & %  ' 	 
  # + . 2 ' ' 0 7E9!<!< E9P
]433 ]4r:   