
                              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J	r	  SSK
Jr  SSKJs  Jr   " S	 S
\5      r " S S\R"                  5      rg)*Unit tests for PluralityCheckableIterator.    )absolute_import)print_function)division)unicode_literalsN)range)PluralityCheckableIteratorc                       \ rS rSrSrg)CustomTestException&    N)__name__
__module____qualname____firstlineno____static_attributes__r       @platform/gsutil/gslib/tests/test_plurality_checkable_iterator.pyr   r   &   s    r   r   c                   H    \ 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g)PluralityCheckableIteratorTests*   r   c                    [        [        S5      5      n[        U5      n[        U5      nU R	                  UR                  5       5        U R                  UR                  5       5        [        U5      nU R                  X5        g)z'Tests empty PluralityCheckableIterator.r   N)	listr   iterr	   
assertTrueIsEmptyassertFalseHasPluralityassertEqualself
input_listitpcitoutput_lists        r   (testPluralityCheckableIteratorWith0ElemsHPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith0Elems-   sc    eAhJ	j	B%b)DOODLLN#T&&()t*KZ-r   c                    [        [        S5      5      n[        U5      n[        U5      nU R	                  UR                  5       5        U R	                  UR                  5       5        [        U5      nU R                  X5        g)z0Tests PluralityCheckableIterator with 1 element.   N)r   r   r   r	   r   r   r   r   r    s        r   'testPluralityCheckableIteratorWith1ElemGPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem7   se    eAhJ	j	B%b)DT\\^$T&&()t*KZ-r   c                    [        [        S5      5      n[        U5      n[        U5      nU R	                  UR                  5       5        U R                  UR                  5       5        [        U5      nU R                  X5        g)z1Tests PluralityCheckableIterator with 2 elements.   N	r   r   r   r	   r   r   r   r   r   r    s        r   (testPluralityCheckableIteratorWith2ElemsHPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2ElemsA   c    eAhJ	j	B%b)DT\\^$OOD%%'(t*KZ-r   c                    [        [        S5      5      n[        U5      n[        U5      nU R	                  UR                  5       5        U R                  UR                  5       5        [        U5      nU R                  X5        g)z1Tests PluralityCheckableIterator with 3 elements.   Nr.   r    s        r   (testPluralityCheckableIteratorWith3ElemsHPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith3ElemsK   r1   r   c                 T    " S S[         R                  5      n[        U" 5       5      nU R                  UR	                  5       5        U R                  UR                  5       5        Sn U H  nUnM     U R                  S5        U R                  US5        g! [         a     Nf = f)z[Tests PluralityCheckableIterator with 2 elements.

The second element raises an exception.
c                   &    \ rS rSrS rS rS rSrg)cPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem1Exception.<locals>.IterTest[   c                     SU l         g Nr   positionr!   s    r   __init__lPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem1Exception.<locals>.IterTest.__init__]   	    r   c                     U $ Nr   r>   s    r   __iter__lPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem1Exception.<locals>.IterTest.__iter__`       r   c                     U R                   S:X  a  U =R                   S-  sl         gU R                   S:X  a   U =R                   S-  sl         [        S5      e[        5       e)Nr   r)   zTest exceptionr=   r   StopIterationr>   s    r   __next__lPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem1Exception.<locals>.IterTest.__next__c   sM    ==A
--1
-]]a
--1
-#$45
5
r   r<   Nr   r   r   r   r?   rD   rJ   r   r   r   r   IterTestr8   [   s     r   rM   Nz Expected exception from iteratorr)   )
sixIteratorr	   r   r   r   r   failr   r   )r!   rM   r$   iterated_valuevalues        r   1testPluralityCheckableIteratorWith1Elem1ExceptionQPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith1Elem1ExceptionU   s     3<<  $ &hj1DT\\^$OOD%%'(N% 
ii23 	^Q'  
s   +B 
B'&B'c                     " S S[         R                  5      n[        U" 5       5      n UR                  5         U R	                  S5         U H  nM     U R	                  S5         UR                  5         U R	                  S5         U H  nM     U R	                  S	5        U H  nU R	                  S
5        M     g! [
         a%  nU R                  [        U5      S5         SnANSnAff = f! [
         a%  nU R                  [        U5      S5         SnANSnAff = f! [
         a%  nU R                  [        U5      S5         SnANSnAff = f! [
         a%  nU R                  [        U5      S5         SnANSnAff = f)zATests PluralityCheckableIterator with 2 elements that both raise.c                   &    \ rS rSrS rS rS rSrg)_PluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2Exceptions.<locals>.IterTest|   c                     SU l         g r;   r<   r>   s    r   r?   hPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2Exceptions.<locals>.IterTest.__init__~   rA   r   c                     U $ rC   r   r>   s    r   rD   hPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2Exceptions.<locals>.IterTest.__iter__   rF   r   c                     U R                   S:  a-  U =R                   S-  sl         [        SU R                   -  5      e[        5       e)Nr-   r)   zTest exception %srH   r>   s    r   rJ   hPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2Exceptions.<locals>.IterTest.__next__   s9    ==1
--1
-#$7$--$GH
H
r   r<   NrL   r   r   r   rM   rW   |   s     r   rM   z'Expected exception 1 from PeekExceptionzTest exception 1Nz"Expected exception 1 from iteratorz'Expected exception 2 from PeekExceptionzTest exception 2z"Expected exception 2 from iteratorExpected StopIteration)rN   rO   r	   PeekExceptionrP   r   assertInstr)r!   rM   r$   e_s        r   -testPluralityCheckableIteratorWith2ExceptionsMPluralityCheckableIteratorTests.testPluralityCheckableIteratorWith2Exceptionsy   sP    3<<   &hj1D0

ii9:0! 
ii450

ii9:0! 
ii45 
ii() '  0
mmCF.//0  0
mmCF.//0
  0
mmCF.//0  0
mmCF.//0s_   !B? C1 (!D# 
E ?
C.	C))C.1
D ;DD #
E-EE
FE??Fc                 .    " S S[         R                  5      n[        U" 5       5      nSn U H  nM     U R                  S5        U H  nUnM     U R                  US5        g! [         a%  nU R                  [        U5      S5         SnANHSnAff = f)zTests PCI with an iterator that yields an exception.

The yielded exception is in the form of a tuple and must also contain a
stack trace.
c                   &    \ rS rSrS rS rS rSrg)dPluralityCheckableIteratorTests.testPluralityCheckableIteratorWithYieldedException.<locals>.IterTest   c                     SU l         g r;   r<   r>   s    r   r?   mPluralityCheckableIteratorTests.testPluralityCheckableIteratorWithYieldedException.<locals>.IterTest.__init__   rA   r   c                     U $ rC   r   r>   s    r   rD   mPluralityCheckableIteratorTests.testPluralityCheckableIteratorWithYieldedException.<locals>.IterTest.__iter__   rF   r   c                 &   U R                   S:X  a!   U =R                   S-  sl         [        S5      eU R                   S:X  a  U =R                   S-  sl         g[	        5       e! [         a$  nU[        R                  " 5       S   4s S nA$ S nAff = f)Nr   r)   Test exception 0r-   )r=   r   sysexc_inforI   )r!   rc   s     r   rJ   mPluralityCheckableIteratorTests.testPluralityCheckableIteratorWithYieldedException.<locals>.IterTest.__next__   s|    ==A*MMQM%&899 ]]a
--1
-
 % *s||~a())*s    A" "
B,BBBr<   NrL   r   r   r   rM   ri      s     r   rM   Nz"Expected exception 0 from iteratorrp   r)   )rN   rO   r	   rP   r   ra   rb   r   )r!   rM   r$   rQ   rd   rc   rR   s          r   2testPluralityCheckableIteratorWithYieldedExceptionRPluralityCheckableIteratorTests.testPluralityCheckableIteratorWithYieldedException   s     3<<  * &hj1DN0! 
ii45 n ^Q'	  0
mmCF.//0s   A% %
B/BBc                     " S S[         R                  5      n[        U" 5       5      nUR                  5         UR	                  5         U R                  UR                  R                  S5        UR                  5         U R                  UR                  R                  S5        [        U5        U R                  UR                  R                  S5        [        U5        U R                  UR                  R                  S5        [        U5        U R                  UR                  R                  S5         [        U5        U R                  S5        g! [         a     gf = f)z<Tests that the PCI does not unnecessarily read new elements.c                   &    \ rS rSrS rS rS rSrg)bPluralityCheckableIteratorTests.testPluralityCheckableIteratorReadsAheadAsNeeded.<locals>.IterTest   c                     SU l         g r;   r<   r>   s    r   r?   kPluralityCheckableIteratorTests.testPluralityCheckableIteratorReadsAheadAsNeeded.<locals>.IterTest.__init__   rA   r   c                     U $ rC   r   r>   s    r   rD   kPluralityCheckableIteratorTests.testPluralityCheckableIteratorReadsAheadAsNeeded.<locals>.IterTest.__iter__   rF   r   c                 b    U R                   S:X  a
  [        5       eU =R                   S-  sl         g )Nr3   r)   )r=   rI   r>   s    r   rJ   kPluralityCheckableIteratorTests.testPluralityCheckableIteratorReadsAheadAsNeeded.<locals>.IterTest.__next__   s$    ==A
r   r<   NrL   r   r   r   rM   rx      s    r   rM   r)   r-   r3   r_   N)rN   rO   r	   r   r`   r   orig_iteratorr=   r   nextrP   rI   )r!   rM   r$   s      r   0testPluralityCheckableIteratorReadsAheadAsNeededPPluralityCheckableIteratorTests.testPluralityCheckableIteratorReadsAheadAsNeeded   s   3<<  &hj1DLLNT''00!4T''00!4 	JT''00!4JT''00!4JT''00!4
4j
ii() 
s   :E 
E$#E$r   N)r   r   r   r   __doc__r&   r*   r/   r4   rS   re   rt   r   r   r   r   r   r   r   *   s0    2...."(H**X&(P%r   r   )r   
__future__r   r   r   r   rq   rN   	six.movesr   "gslib.plurality_checkable_iteratorr	   gslib.tests.testcaseteststestcase	Exceptionr   GsUtilUnitTestCaser   r   r   r   <module>r      sH   , 1 & %  ' 
 
  I ' ') Hh&A&A Hr   