
    ,h?                        d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
m
Z
 d dlmZ d dlmZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ dd
lmZmZ ddlm Z  ddl!m"Z"m#Z# dZ$djK                  dd      Z&dZ'dZ(djK                  dd      Z) G d de jT                        Z+ G d de+      Z,d Z-d Z.d Z/d Z0d Z1d Z2d  Z3d! Z4e5d"k(  r e4        yy)#    )print_functionunicode_literalsN)datetime)
make_msgid)binary_type	text_typePY3	iteritems   )parse_config_filecreate_client_from_config)FixedOffset)
IMAPClientDELETEDRECENT_dict_bytes_normaliser)EnvelopeAddress)unittest)to_bytes
to_unicodezSubject: something

Foo
a7  From: Bob Smith <bob@smith.com>
To: Some One <some@one.com>, foo@foo.com
Date: Tue, 16 Mar 2010 16:45:32 +0000
MIME-Version: 1.0
Subject: A multipart message
Content-Type: multipart/mixed; boundary="===============1534046211=="

--===============1534046211==
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html><body>
Here is the first part.
</body></html>

--===============1534046211==
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

Here is the second part.

--===============1534046211==--

z
u   ☺   µs>   Subject: stuff
Content-Type: text/plain; charset="UTF-8"

☺
   
s   
c                       e Zd ZdZdZed        Zd Zd Zed        Z	d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dZy)	_TestBaseNTc                     t        | j                        | _        | j                  | j                  _        | j                  j                  d   dz   | _        | j                  j                  d   | _        y )Nr   __imapclientr   )r   confclientuse_uid	namespacebase_folderfolder_delimiterclss    U/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/imapclient/livetest.py
setUpClassz_TestBase.setUpClassM   sT    .sxx8
 [[

((,,Q/.@"xx11!4    c                     | j                          | j                          | j                  j                  | j                         | j                  j                  | j                         y N)clear_test_foldersunsub_all_test_foldersr    create_folderr#   select_folderselfs    r'   setUpz_TestBase.setUpT   sJ    !##%!!$"2"23!!$"2"23r)   c                 D    | j                          | j                          y r+   )r,   r-   r0   s    r'   tearDownz_TestBase.tearDownZ   s    !##%r)   c                 8    | j                   j                          y r+   )r    logoutr%   s    r'   tearDownClassz_TestBase.tearDownClass^   s    

r)   c                 l    | j                   j                  |      s|s|}| j                  d|z         y y )NzServer doesn't support %s)r    has_capabilityskipTest)r1   
capabilitynames      r'   skip_unless_capablez_TestBase.skip_unless_capableb   s3    {{))*5!MM5<= 6r)   c                     | j                   j                  rd}nd}g }|D ])  \  }}}|j                  |      r|j                  |       + |S )N[   [)r    folder_encode
startswithappend)r1   datgmail_special_prefixret_folder_names         r'   just_folder_namesz_TestBase.just_folder_namesh   sX    ;;$$#& #' !$ 	(Aq+))*>?

;'	( 
r)   c                 j    | j                  | j                  j                  | j                              S r+   )rI   r    list_foldersr#   r0   s    r'   all_test_folder_namesz_TestBase.all_test_folder_namest   s(    %%dkk&>&>t?O?O&PQQr)   c                 j    | j                  | j                  j                  | j                              S r+   )rI   r    list_sub_foldersr#   r0   s    r'   all_sub_test_folder_namesz#_TestBase.all_sub_test_folder_namesw   s(    %%dkk&B&B4CSCS&TUUr)   c                    	 | j                   j                          d| j                   _        t        | j                         | j                  d      }|D ]  }	 | j                   j                  |         d| j                   _        y # t        j                  $ r Y w xY w# t        j                  $ r | j                         s Y rw xY w)NFT)keyreverse)
r    close_folderr   ErrorrA   sortedrL   get_folder_depthdelete_folderis_fastmail)r1   folder_namesfolders      r'   r,   z_TestBase.clear_test_foldersz   s    	KK$$& %*!d88:"&"7"7&*, # 	F))&1	 %)!  		 ## '') *s#   B B!BB!$CCc                 V    |j                  | j                  j                  d            S Nascii)countr$   encoder1   rZ   s     r'   rV   z_TestBase.get_folder_depth   s$     ||D1188ABBr)   c                     | j                   j                  |       | j                   j                  | j                   j                                | j                   j	                          y r+   )r    r/   delete_messagessearchexpunger`   s     r'   clear_folderz_TestBase.clear_folder   sC    !!&)##DKK$6$6$89r)   c                     t        |t              r:| j                  j                  d      | j                  j                  d      z   |z   S | j                  | j                  z   |z   S r\   )
isinstancer   r#   r_   r$   r`   s     r'   add_prefix_to_folderz_TestBase.add_prefix_to_folder   sd    fk*##**73%%,,W568>? ? ##d&;&;;fDDr)   c                 J    |D cg c]  }| j                  |       c}S c c}w r+   )rh   )r1   foldersrZ   s      r'   add_prefix_to_foldersz_TestBase.add_prefix_to_folders   s!    @GHf))&1HHHs    c                 d    | j                         D ]  }| j                  j                  |        y r+   )rO   r    unsubscribe_folderr`   s     r'   r-   z _TestBase.unsub_all_test_folders   s,    446 	3FKK**62	3r)   c                 H    | j                   j                  j                  dk(  S )Nzimap.gmail.comr    _imaphostr0   s    r'   is_gmailz_TestBase.is_gmail   s    {{  %%)999r)   c                 H    | j                   j                  j                  dk(  S )Nzmail.messagingengine.comro   r0   s    r'   rX   z_TestBase.is_fastmail   s    {{  %%)CCCr)   c                     | j                   j                  d      xr8 | j                   j                  d      xr | j                   j                  d      S )NIMAP4z	AUTH=NTLMzAUTH=GSSAPI)r    r9   r0   s    r'   is_exchangez_TestBase.is_exchange   sI     **73 :**;7:**=9	;r)   c                     |s| j                   }| j                  j                  ||       | j                         r| j                  j	                          y y r+   )r#   r    rC   rr   noop)r1   msgrZ   s      r'   
append_msgz_TestBase.append_msg   sB    %%F63'==?KK r)   r+   )__name__
__module____qualname__r   r!   classmethodr(   r2   r4   r7   r=   rI   rL   rO   r,   rV   re   rh   rk   r-   rr   rX   rv   rz    r)   r'   r   r   H   s    DG5 54&  >
RV)(C
EI3:D;r)   r   c                   j    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y)TestGeneralzD
    Tests that don't involve message number/UID functionality.
    c           
      6   t        | j                  j                        D ]p  \  }}t        r|j                  rt        d|z         '	 t        |      }|j                          |j                  sP| j                  d|d|j                         r y # t        $ r{}|j                  rNt        j                  |j                  t        |            s<| j                  d|d|d|j                         n| j                  d|d|       Y d }~d }~ww xY w)Nz3Skipping OAUTH test %r on Python 3 (not compatible)zconnection test z didn't fail, expected z failed with z, expected z failed unexpectedly with )r
   r   
alternatesr	   oauthprintr   r6   expect_failurefail	Exceptionrerc   str)r1   r<   r   r    errs        r'   test_alternateszTestGeneral.test_alternates   s    #DII$8$89 	5JD$tzzKdRS5248 &&IIt2245#	5  ^&&99T%8%8#c(C		!3(;(;=> IIRVX[\]^s   B	DA1DDc                 P   | j                   j                         }| j                  |t               | j	                  t        |      d       |D ],  }| j                  | j                   j                  |             . | j                  | j                   j                  d             y )Nr   z
WONT EXIST)	r    capabilitiesassertIsInstancetupleassertGreaterlen
assertTruer9   assertFalse)r1   capscaps      r'   test_capabilitieszTestGeneral.test_capabilities   s    {{'')dE*3t9a( 	=COODKK66s;<	=33LABr)   c                    | j                  d       d }| j                  j                         }| j                  t	        |      d        ||j
                          ||j                          ||j                         | j                  |j
                  |d          | j                  |j                  |d          | j                  |j                  |d          y )N	NAMESPACEc                 >    | t        | t              s
J d| z         y y )Nzunexpected namespace value %r)rg   r   vals    r'   assertNoneOrTuplez5TestGeneral.test_namespace.<locals>.assertNoneOrTuple   s'    ;*S%"8 6/#56"8;r)      r   r      )r=   r    r"   assertEqualr   personalothershared)r1   r   nss      r'   test_namespacezTestGeneral.test_namespace   s      -	6 [[""$R!$"++&"((#"))$be,2a5)BqE*r)   c                 L   | j                   j                  | j                        }| j                  |d   d       | j	                  |d   t
               | j	                  |d   t               | j                  t        |d         d       | j                   j                          y )N   EXISTSr      RECENT   FLAGSr   )
r    r/   r#   r   r   intr   r   r   rS   )r1   resps     r'   test_select_and_closez!TestGeneral.test_select_and_close   s    {{(()9)9:i!,d9os3d8ne43tH~.2  "r)   c                 2   | j                  t               t        | j                  j                  j
                        }| j                  d|       | j                  j                  | j                  d      }t        | j                  j                  j
                        }| j                  d|       | j                  |d   d       | j                  |d   t               | j                  |d   t               | j                  t        |d         d       y )Ns	   READ-ONLYT)readonlyr   r   r   r   )rz   SIMPLE_MESSAGEr   r    rp   untagged_responsesassertNotInr/   r#   assertInr   r   r   r   r   r   )r1   untaggedr   s      r'   test_select_read_onlyz!TestGeneral.test_select_read_only   s    ')$++*;*;*N*NOx0{{(()9)9D(I)$++*;*;*N*NOlH-i!,d9os3d8ne43tH~.2r)   c                    g d}| j                         s|j                  ddg       | j                  |      }|D ]  }| j                  j	                  |        | j                         }| j                  t        |      dd       | j                  | j                  |       |D ]  }| j                  t        |      |        y )N)simples   simple2u   LÿRztest"folder"s   foo\barr   zNo folders visible on server)rX   extendrk   r    r.   rL   r   r   r   r#   r   )r1   some_foldersr<   rj   s       r'   test_list_folderszTestGeneral.test_list_folders  s    7!+ >?11,?  	,DKK%%d+	, ,,.3w<,JKd&&0  	5DMM*T*G4	5r)   c                     | j                   j                         }| j                         r| j                  d|d       y y )Ns   XLISTz&expected XLIST in Gmail's capabilities)r    r   rr   r   )r1   r   s     r'   test_gmail_xlistzTestGeneral.test_gmail_xlist  s3    {{'')==?MM(D*RS r)   c                 &   | j                  d       | j                  j                         }| j                  t	        |      dd       d}|D ]*  \  }}}d|D cg c]  }|j                          c}v s(d} n |s| j                  d       y y c c}w )NXLISTr   zNo folders returned by XLISTFs   \INBOXTz"INBOX not returned in XLIST output)r=   r    xlist_foldersr   r   upperr   )r1   result
foundInboxflagsrG   flags         r'   
test_xlistzTestGeneral.test_xlist  s      )**,3v;+IJ
! 	KE1au=tdjjl==!
	 II:;  >s   Bc                 |   | j                  g d      }|D ]8  }| j                  j                  |       | j                  j                  |       : | j	                         }|j                  | j                         |j                          | j                  |t        | j                                      |D ]  }| j                  j                  |        | j                  | j                         g        | j                         s6| j                  t        j                  | j                  j                  d       y y )N)foobar   foobar2stuff & things   stuff & things2
   test & ☢z"this folder is not likely to exist)rk   r    r.   subscribe_folderrL   remover#   sortassertListEqualrU   rO   rm   rv   assertRaisesr   rT   )r1   rj   rZ   server_folderss       r'   test_subscriptionszTestGeneral.test_subscriptions)  s   ,, .
   	1FKK%%f-KK((0	1 335d../^VD4R4R4T-UV 	3FKK**62	3T;;=rB !j.."kk::BD "r)   c                 |   | j                  | j                  j                  | j                               | j	                  | j                  j                  d             g d}| j                         s|j                  g d       | j                  |d       |j                  g d       | j                  |d       y )Nzthis is very unlikely to exist)r   123s   foobars   123)z"foobar"z	foo "bar"s   "foobar"s	   foo "bar"F)r   r   s   stuff & thingsT)r   r    folder_existsr#   r   rX   r   run_folder_tests)r1   rj   s     r'   test_folderszTestGeneral.test_foldersE  s    11$2B2BCD223STU
 !NN   	gu- 	 
 	
 	gt,r)   c                    || j                   _        	 | j                  |      }|D ]"  }| j                  | j                   j	                  |             | j                   j                  |       | j                  | j                   j	                  |             | j                  |rt        |      n
t        |      | j                                | j                   j                  |       | j                   j                          | j                   j                  |       | j                  | j                   j	                  |             % 	 d| j                   _        y # d| j                   _        w xY w)NT)r    rA   rk   r   r   r.   r   r   r   r   rL   r/   rS   rW   )r1   rY   rA   rZ   s       r'   r   zTestGeneral.run_folder_testsd  s   $1!	-55lCL& D  !:!:6!BC))&1 9 9& AB*7Jv&Xf=M..0
 ))&1((*))&1  !:!:6!BC!D$ )-DKK%DKK%s   D9E E2c                    | j                  g d      }|D ]  }| j                  j                  |       t        |t              r|dz   }n|dz   }| j                  j                  ||      }| j                  |t               | j                  t        |      dkD         | j                  | j                  j                  |             | j                  | j                  j                  |              y )N)r   r   r   r   r   s   1232r      xxr   )rk   r    r.   rg   r   rename_folderr   r   r   r   r   )r1   rj   rZ   
new_folderr   s        r'   test_rename_folderzTestGeneral.test_rename_folder}  s    ,, .
   	CFKK%%f-&+.#d]
#c\
;;,,VZ@D!!$4OOCIM*T[[66v>?OODKK55jAB	Cr)   c                    | j                  t        | j                  j                  | j                              d       | j                  d      }| j                  j                  |       	 | j                  j                  |      }| j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  t        |       | j                  j                  |      }| j                  |d   d       | j                         s| j                  |d   d       | j                  |d   d       | j                  j                  |       y # | j                  j                  |       w xY w)N   u   test ☢s   MESSAGESr   r   s   UNSEENr   )r   r   r    folder_statusr#   rh   r.   rz   r   rr   rW   )r1   r   statuss      r'   test_statuszTestGeneral.test_status  s7   T[[66t7G7GHI1M..}=
!!*-	2[[..z:FVK0!4VI.2VI.2 OONJ7[[..z:FVK0!4==?  	!2A6VI.2KK%%j1DKK%%j1s   ,CE" "E?c                 B   | j                   j                  d      s| j                  d      S | j                   j                  | j                         | j                   j                          	 t        | j                        }| j                  t        |       |j                  | j                         |j                  | j                  t               | j                   j                  d      }| j                   j                         \  }}| j                  d|       | j                  t!        |t"                     | j%                  t'        |      d       | j                  t!        |t(                     | j+                         ry | j                   j                          	 |j                  | j                         |j                  | j                  t               t-        j.                  d       | j                   j                         \  }}| j                  d|       | j                  t!        |t"                     | j%                  t'        |      d       y # | j                   j                         \  }}w xY w# | j                   j                         \  }}w xY w)	NIDLEzServer doesn't support IDLEr   )timeoutr   r   r   r   )r   r   )r    r9   r:   r/   r#   idler   r   
addCleanupquiet_logoutrC   r   
idle_check	idle_doner   r   rg   r   r   r   listrr   timesleep)r1   client2	responsestextmore_responsess        r'   	test_idlezTestGeneral.test_idle  s   {{))&1==!>?? 	!!$"2"23
	;/		:GOOL'2!!$"2"23NN4++^< ..q.9I#';;#8#8#: D.ni0
4563t9a(
>489 ==?	6!!$"2"23NN4++^<JJqM"kk335OD)ni0
4563t9a(- $(;;#8#8#: D.& #kk335OD)s   -BI #AI? I<?Jc                    | j                   j                  | j                         | j                   j                         \  }}| j	                  t        |t                     | j                  t        |      d       | j                  |g        t        | j                        }| j                  t        |       |j                  | j                         |j                  | j                  t               | j                   j                         \  }}| j	                  t        |t                     | j                  t        |      d       | j	                  t        |t                      | j#                  d|       y )Nr   r   )r    r/   r#   rx   r   rg   r   r   r   r   r   r   r   r   rC   r   r   r   )r1   r   respsr   ry   s        r'   	test_noopzTestGeneral.test_noop  s   !!$"2"23 kk&&(e
4563t9a(# ,DII6g.d../t''8 [[%%'
U
4563t9a(
5$/0ne,r)   N)r{   r|   r}   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r'   r   r      sW    5.C+ #35 T
<D8->-2C22.()T-r)   r   c                 F      G  fddt               } |_        ||_        |S )Nc                       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dZd Z fdZy)$createUidTestClass.<locals>.LiveTestz
        Tests could possibily involve message number/UID functionality
        or change behaviour based on the use_uid attribute should go
        here.

        They are tested twice: once with use_uid on and once with it
        off.
        c                 8    | j                  t        t               y r+   )check_appendr   r0   s    r'   test_append_unicodez8createUidTestClass.<locals>.LiveTest.test_append_unicode  s    nn=r)   c                 V    | j                  t        j                  d      t               y r\   )r   r   r_   r0   s    r'   test_append_bytesz6createUidTestClass.<locals>.LiveTest.test_append_bytes  s    n33G<nMr)   c                    t        j                         j                  d      }| j                  j	                  | j
                  |d|      }| j                  |t               | j                  | j                  j                  | j
                        d   d       | j                  j                  | j                  j                         d   d      }| j                  t        |      d       t        |j                               d   }|d   }| j                  |j                          | j                  ||       | j#                  d|d	          | j#                  d
|d	          | j                  |d   t%        |             y )Nr   )microsecond)abcdefr   r   )RFC822FLAGSINTERNALDATE   INTERNALDATEs   abcr   s   def   RFC822)r   nowreplacer    rC   r#   r   r   r   r/   fetchrc   r   r   valuesassertIsNonetzinfor   r   )r1   
in_messageout_messagemsg_timer   msginforeturned_msg_times          r'   r   z1createUidTestClass.<locals>.LiveTest.check_append   sF     ||~--!-<H ;;%%d&6&6
NT\]D!!$4 T[[66t7G7GHSUVW;;$$T[[%7%7%9!%<>abDSY*DKKM*1-G !( 8/667.9 MM&'("34MM&'("34 WY/+1FGr)   c                 ~     j                  t                j                  j                         d    fd}ddg} | j                  j                  |g|        | j                  j
                  g |        | j                  j                  dg|dgz           | j                  j                  dg|       y )Nr   c                      | g| }j                  |v        t        |         }|j                  t               j	                  |t        d |D                     y )Nc              3   2   K   | ]  }t        |        y wr+   )r   ).0fs     r'   	<genexpr>zUcreateUidTestClass.<locals>.LiveTest.test_flags.<locals>._flagtest.<locals>.<genexpr>&  s     5Zahqk5Zs   )r   setdiscardr   assertSetEqual)funcargsexpected_flagsansweranswer_flagsmsg_idr1   s        r'   	_flagtestzBcreateUidTestClass.<locals>.LiveTest.test_flags.<locals>._flagtest!  sZ    f,t,& 01"6&>2$$V,##L#5Z>5Z2Z[r)   r  r  boo)rz   r   r    rc   	set_flags	get_flags	add_flagsremove_flags)r1   r#  
base_flagsr"  s   `  @r'   
test_flagsz/createUidTestClass.<locals>.LiveTest.test_flags  s    OON+[['')!,F\  Jdkk++j\:Fdkk++R<dkk++eWjE76JKdkk..Dr)   c                      j                  dd        j                  t                j                  j	                         d    fd}d}d}d}|||g}||g}	  | j                  j
                  |g|        | j                  j                  g |        | j                  j                  |g|        | j                  j                  |g|       |D ]9  } j                  j                  |      s j                  j                  |       ; y # |D ]9  } j                  j                  |      s j                  j                  |       ; w xY w)N
X-GM-EXT-1labelsr   c                      | g| }j                  t        |j                               g       t        |         }j	                  |t        |             y r+   )r   r   keysr  r  )r  r  expected_labelsr   actual_labelsr"  r1   s        r'   
_labeltestzJcreateUidTestClass.<locals>.LiveTest.test_gmail_labels.<locals>._labeltest4  sR    f,t,  fkkm!4vh? #F6N 3##M33GHr)   s   _imapclient_foos   _imapclient_bars   _imapclient_baz)r=   rz   r   r    rc   set_gmail_labelsget_gmail_labelsadd_gmail_labelsremove_gmail_labelsr   rW   )	r1   r2  FOOBARBAZ
all_labelsbase_labelslabelr"  s	   `       @r'   test_gmail_labelsz6createUidTestClass.<locals>.LiveTest.test_gmail_labels.  s-   $$\8<OON+[['')!,FI %C$C$CsCJ*K	94;;77+T4;;77[I4;;77#
K4;;::SE;O ( 9E{{00711%89Z 9E{{00711%89s   A;D !E9Ec                    d}d}|D ]=  }||z  }|dk(  rt         f}nd}| j                  j                  | j                  ||       ? | j                  j	                          | j                  j                  d      }| j                         r(| j                  t        |      t        |      dz
         n$| j                  t        |      t        |             | j                  | j                  j                         |       | j                         s4| j                  t        | j                  j                  d            d       | j                  t        | j                  j                  ddg            t        |      dz
         | j                  t        | j                  j                  g d	            t        |      dz
         | j                  t        | j                  j                  g d
            d       | j                  t        | j                  j                  g d            d       | j                  t        | j                  j                  g d            d       | j                  t        | j                  j                  d            d       | j                  t        | j                  j                  d            d       y )NSubject: %s

BodyabcrC  r   ALLr   r   NOT)rE  r   SMALLERi  )rE  r   rF  r   r   )rE  r   SUBJECTrA  )rE  r   rG  rC  zSUBJECT "a" NOT DELETEDzNOT DELETED SUBJECT SMALLER 5)
r   r    rC   r#   rx   rc   rr   r   r   r   )r1   msg_tmplsubjectssubjectry   r   messages_alls          r'   test_searchz0createUidTestClass.<locals>.LiveTest.test_searchJ  s1   0H&H# A(c>$JEE""4#3#3S%@A KK  ;;--e4L}}  \!2CMA4EF  \!2CMB  !3!3!5|D==?  T[[%7%7	%B!CQGS!3!3UI4F!GH#h-Z[J[\S!3!32"4 569(ma6GIS!3!34T!UVXYZS!3!34V!WXZ[\S!3!34V!WXZ[\ S!3!34M!NOQRSS!3!34S!TUWXYr)   c                 $   | j                   j                  d      s| j                  d      S | j                         r| j                  d      S | j                   j	                  | j
                         | j                  t               | j                   j                         d   }| j                   j                  |dg       | j                   j                          | j                  | j
                         | j                   j	                  | j
                        d   }| j                  t               | j                   j                  dt        |      g      }| j                  t        |      d       | j                  |j                   |       y )N	CONDSTORE Server doesn't support CONDSTOREz=Gmail doesn't seem to return MODSEQ parts in SEARCH responsesr   MODSEQ   HIGHESTMODSEQr   )r    r9   r:   rr   r/   r#   rz   r   rc   r  rS   re   r   r   r   r   modseq)r1   r"  initial_modseqidss       r'   test_search_with_modseqz<createUidTestClass.<locals>.LiveTest.test_search_with_modseqo  s4    ;;--k:}}%GHH}}}}SU U
 KK%%d&6&67OON+[['')!,FKKfxj1KK$$&d../ "[[66t7G7GHIYZN OON+ ++$$hN0C%DECSXq)szz>:r)   c           
         | j                   j                  | j                  t               | j	                  t        | j                   j                  dt        gd            d       | j	                  t        | j                   j                  dt        gd            d       | j	                  t        | j                   j                  dt        ddgd            d       y )	NBODYzUTF-8)charsetr   r   TEXTrE  r   )	r    rC   r#   SMILE_MESSAGEr   r   rc   SMILEMICROr0   s    r'   test_search_with_unicodez=createUidTestClass.<locals>.LiveTest.test_search_with_unicode  s    KKt//?S!3!3VUOW!3!UVXYZS!3!3VUOW!3!UVXYZ S!3!3y17 "4 "D EFGIr)   c                    | j                  dd       dj                  t        j                  t        j
                  dz  d            }d|z  }| j                  |       | j                  t               | j                  j                  |      }| j                  t        |      d       | j                  j                  d      }| j                  t        |      d	       | j                  j                  t              }| j                  t        |      d	       | j                  j                  t              }| j                  t        |      d	       y )
Nr,  zGmail search    @   zSubject: something

Foo
%s
r   zs0mewh4t unl1kelyr   )r=   joinrandomsamplestringascii_lettersrz   rZ  r    gmail_searchr   r   r\  r[  r   )r1   random_stringry   rT  s       r'   test_gmail_searchz6createUidTestClass.<locals>.LiveTest.test_gmail_search  s    $$\>BGGFMM&2F2F2KR$PQM;mKCOOC OOM*++**=9CSXq)++**+>?CSXq) ++**51CSXq)++**51Cs3x+r)   c                    | j                  d       d}d}d}|D ]0  }|||z  z   }| j                  j                  | j                  |       2 | j                  j	                  d      }| j                  t        |      d       |d   }||dz
  |d	z
  g}| j                  ||       | j                  j	                  dd
dg      }| j                  ||       | j                  j	                  dd      }| j                  ||       y )NSORTzSubject: Test

Body)
   r`     zI
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzREVERSE SIZEr   r   r   r   rE  r   NOT DELETED)r=   r    rC   r#   r   r   r   r   )	r1   rH  	num_lineslineline_cntry   messagesfirst_idexpecteds	            r'   	test_sortz.createUidTestClass.<locals>.LiveTest.test_sort  s    $$V, 3H$I$D% :$/2""4#3#3S9: {{''7HS]A.{H (Q,1=H  84{{''	8JKH  84{{''FH  84r)   c                 D   | j                  d       | j                  t               | j                  j	                  ddt
        g      }| j                  t        |      d       | j                  j	                  ddt        g      }| j                  t        |      d       y )Nrk  ARRIVALrY  r   r   )	r=   rz   rZ  r    r   r[  r   r   r\  )r1   rr  s     r'   test_sort_with_unicodez;createUidTestClass.<locals>.LiveTest.test_sort_with_unicode  sx    $$V,OOM*{{''	FE?CHS]A.{{''	FE?CHS]A.r)   c                    | j                  d       d}d}|D ]  }| j                  ||z          | j                  j                         }| j	                  t        |      d       | j                  |d   t               |d   d   }|f|dz   f|dz   ff}| j                  ||       | j                  j                  dd	g
      }| j                  ||       | j                  j                  d
      }| j                  ||       y )NTHREAD=REFERENCESr?  r@  r   r   r   r   rE  r   criteriarn  )	r=   rz   r    threadr   r   r   r   assertTupleEqual)r1   rH  rI  rJ  threadsrs  rt  s          r'   test_threadz0createUidTestClass.<locals>.LiveTest.test_thread  s   $$%890H&H# 47 234 kk((*GS\1-!!'!*e4qz!}H!hl_x!|oFH!!'84kk((5)2D(EG!!'84kk((-(@G!!'84r)   c                    | j                  d       | j                  t               | j                  j	                  dt
        g      }| j                  t        |      d       | j                  t        |d         d       | j                  j	                  dt        g      }| j                  t        |      d       y )Nrz  rY  r{  r   r   )	r=   rz   rZ  r    r}  r[  r   r   r\  )r1   r  s     r'   test_thread_with_unicodez=createUidTestClass.<locals>.LiveTest.test_thread_with_unicode  s    $$%89OOM*kk((65/(BGS\1-S_a0kk((65/(BGS\1-r)   c                    | j                  t               | j                  d      }| j                  j	                  |       | j                  j                         d   }| j                  j                  ||       | j                  j                  |       | j                  j                         }| j                  t        |      d       |d   }| j                  d| j                  j                  |dg      |   d          y )Ntargetr   r   s	   somethingr  r  )rz   r   rh   r    r.   rc   copyr/   r   r   r   r  )r1   target_folderr"  msgss       r'   	test_copyz.createUidTestClass.<locals>.LiveTest.test_copy  s    OON+ 55h?MKK%%m4[['')!,FKKV]3KK%%m4;;%%'DSY*!WFMM,(9(9&8*(Mf(UV_(`ar)   c                    t               }d|z  t        z   }| j                  j                  | j                         | j                  |       d| j                  _        g d}| j                  j                         d   }| j                  j                  ||      }| j                  t        |      d       ||   }| j                  t        |j                               t        |D cg c]  }t        |       c}dgz                | j                  |d   d       | j                  |d   t        |             | j                  |d   t                | j                  |d	   t"               | j%                  |d
   t'        t!        ddddddt)        d            dt+        dd dd      ft+        dd dd      ft+        dd dd      ft+        dd dd      t+        d d dd      fd d d t        |      
             y c c}w )NzMessage-ID: %s
F)r  r   r  ENVELOPEr   r   s   SEQr  r  r   s   ENVELOPEi  r      -       )r  s   A multipart messages	   Bob Smiths   bobs	   smith.coms   Some Ones   somes   one.coms   foos   foo.com)r   MULTIPART_MESSAGEr    r/   r#   rz   normalise_timesrc   r  r   r   r  r  r/  r   r   r   r   assertSequenceEqualr   r   r   )r1   msg_id_headerry   fieldsr"  r   r  r  s           r'   
test_fetchz/createUidTestClass.<locals>.LiveTest.test_fetch  s   
 'LM'-7;LLCKK%%d&6&67OOC */DKK'EF[['')!,F;;$$VV4DSY*6lGGLLN#&1QXa[1VH<= WV_a0WY/#?!!'/":HE!!'("3U;$$W[%9%-q"b"bQH&tV\BDtV\BDtV\BDdGZ@tVZ8:dD(="9&;	< 2s   'G8c                 \   | j                   j                  | j                  t               | j                   j	                  | j                         | j                   j                         d   }| j                   j                  |dg      }||   d   }| j                  t        |      d       | j                  |j                  d             | j                   j                  |dg      }||   d   }| j                  t        |      d       | j                  |j                  d	             y )
Nr   zBODY[]<0.20>s	   BODY[]<0>r`  s   From: Bob SmithzBODY[]<2.25>s	   BODY[]<2>   s   om: Bob Smith)r    rC   r#   r  r/   rc   r  r   r   r   rB   )r1   r"  r   bodys       r'   test_partial_fetchz7createUidTestClass.<locals>.LiveTest.test_partial_fetch#  s    KKt//1BCKK%%d&6&67[['')!,F;;$$Vn-=>D<-DSY+OODOO,>?@;;$$Vn-=>D<-DSY+OODOO,<=>r)   c                 H   | j                   j                  d      s| j                  d      S | j                   j                  | j                         | j                  t               | j                   j                         d   }| j                   j                  |dg       | j                   j                          | j                  | j                         | j                   j                  | j                        d   }| j                  t               | j                   j                         d   }| j                   j                  |dgd|z  g      }||   d   d   }| j                  ||       | j                   j                  |dgd|z  g      }| j                  |i        y )	NrN  rO  r   rP  rQ  r  zCHANGEDSINCE %ds   MODSEQ)r    r9   r:   r/   r#   rz   r   rc   r  rS   re   r   r   )r1   r"  rR  r   
new_modseqs        r'   test_fetch_modifiersz9createUidTestClass.<locals>.LiveTest.test_fetch_modifiers2  sa    ;;--k:}}%GHH KK%%d&6&67OON+[['')!,FKKfxj1KK$$&d../ [[..t/?/?@AQRF OON+[['')!,F ;;$$VgY9JV9S8TUDfi03Jz62 ;;$$VgY9JZ9W8XYDT2&r)   c                    | j                   j                  | j                         | j                  t               | j                  t
               | j                   j                         }| j                   j                  |ddg      }d}| j                  |||d      d   d       | j                  |||d      d   d       d	d
gddf}| j                  |||d      d   d       | j                  |||d      d   d       y )NrW  BODYSTRUCTURE)   text   plains   charsets   us-asciiNN   7bitr   r   r   s   BODYF)	multiparts   BODYSTRUCTURE)r  s   htmlr  NNs   quoted-printable7   r   )r  r  r  NNr     r   s   mixed)s   boundarys   ===============1534046211==r   T)	r    r/   r#   rz   r   r  rc   r  check_BODYSTRUCTURE)r1   r  fetchedrt  s       r'   test_BODYSTRUCTUREz7createUidTestClass.<locals>.LiveTest.test_BODYSTRUCTUREV  s   KK%%d&6&67OON+OO-.;;%%'Dkk''v.GHG aH$$XwtAw/?/HTY$Z$$XwtAw/?@P/Q]b$cnc !E	GH
 $$XwtAw/?/HTX$Y$$XwtAw/?@P/Q]a$br)   Nc                    || j                  |j                  |       t        ||t        t        f      r!t        ||      D ]  } | j                  |   y |dk(  r|y | j                  t        |      t        |             y )Nr  )r   is_multiparthave_matching_typesr   r   zipr  maybe_lower)r1   rt  actualr  pairs        r'   r  z8createUidTestClass.<locals>.LiveTest.check_BODYSTRUCTUREn  s    $  !4!4i@"8VdE]C  &1 4D,D,,d34666>  X!6F8KLr)   c                    | j                   j                  | j                         | j                   j                         \  }}| j	                  t        |t                     | j                  t        |      d       | j                  |g dgf       | j                   j                  | j                  t        t        g       | j                   j                         \  }}| j	                  t        |t                     | j                  t        |      d       | j	                  t        |t                     | j                         s| j                  d|       y y )Nr   )r   r   )r   )r   s   EXPUNGE)r    r/   r#   rd   r   rg   r   r   r   r   rC   r   r   r   rr   )r1   r   r   ry   s       r'   test_expungez1createUidTestClass.<locals>.LiveTest.test_expunge|  s    KK%%d&6&67 ++--/KD%OOJt[9:s4y!,MM%"~&6!78 KKt//yQ,,.JCOOJt[9:s4y!,OOJud34==? ou5 #r)   c           	      (   | j                  d       | j                  d      }| j                  j                  |       t	        d         }| j                  j                  |      }| j                  ||D cg c]  \  }}|	 c}}       y c c}}w )NACLtest_aclusername)r=   rh   r    r.   r   getaclr   )r1   rZ   whorightsurr   s         r'   test_getaclz0createUidTestClass.<locals>.LiveTest.test_getacl  sv    $$U+..z:FKK%%f-4
+,C[[''/FMM#f5da565s   9Br+   )r{   r|   r}   r   r   r   r   r*  r=  rL  rU  r]  ri  ru  rx  r  r  r  r  r  r  r  r  r  r  )r   s   r'   LiveTestr     s|    		>	N	H:	E"	98#	ZJ	;<	I	,*	5.	/	5,
	.	b$	<L	?"	'H	c0	M	6.	7r)   r  )r   r   r!   )r   r!   r  s   `  r'   createUidTestClassr    s(    k79 k7Z HMHOr)   c                 X    	 | j                          y# t        j                  $ r Y yw xY w)zOLog out a connection, ignoring errors (say because the connection is down)
    N)r6   r   rT   )r    s    r'   r   r     s(     s    ))c                 R    t        | t        t        f      r| j                         S | S r+   )rg   r   r   lowerr   s    r'   r  r    s"    #	;/0yy{Jr)   c                 F    t        | |      syt        |t        |             S )z^True if a and b are instances of the same type and that type is
    one of type_or_types.
    F)rg   type)rA  rB  type_or_typess      r'   r  r    s"     a'aa!!r)   c                     t        | t        j                         t        t        j                         t        dt        j                  d   z  t        j                         t        j                  d       y )N)filez8usage: %s <livetest.ini> [ optional unittest arguments ]r   r   )r   sysstderrargvexit)ry   s    r'   
argv_errorr    sG    	#CJJ	szz	
DsxxPQ{
RY\YcYcdHHQKr)   c                      t         j                  dd  } | st        d       t         j                  j                  d      }t        j
                  j                  |      st        d|z         t        |      }|S )Nr   zQPlease specify a host configuration file. See livetest-sample.ini for an example.z%r is not a livetest INI file)r  r  r  popospathisfiler   )r  ini_pathhost_configs      r'   
parse_argvr    s\    88AB<Dfgxx||AH77>>(#2X=>#H-Kr)   c                     t        |       }|j                         }|j                          |j                  st	        d      |j                  d   S )Nz7Can't run tests: IMAP account has no personal namespacer   )r   r"   r6   r   RuntimeError)configr    r   s      r'   
probe_hostr    sD    &v.F				B
MMO;;UVV;;q>r)   c                  D   t               } t        |       }|| _        t        j                  d      t
        j                  d<   d	fd	}| t        _         |t                |t        | d      d        |t        | d      d       t        j                  d       y )
N	livetestsc                 z    || j                   }nt        s|j                  d      }|| _         t        ||        y r\   )r{   r	   r_   setattr)klassr<   live_test_mods     r'   add_test_classzmain.<locals>.add_test_class  s5    <>>D{{7+!ENtU+r)   T)r!   TestWithUIDsFTestWithoutUIDs)moduler+   )r  r  r"   imp
new_moduler  modulesr   r   r  r   main)r  r"   r  r  s      @r'   r  r    s    ,K;'I%KNN;/M,CKK, #K;%k4@.Q%k5ACTUMM%r)   __main__)6
__future__r   r   r  r  rc  r   re  r  r   r   email.utilsr   sixr   r   r	   r
   r  r   r   fixed_offsetr   
imapclientr   r   r   r   response_typesr   r   	test.utilr   utilr   r   r   r
  r  r[  r\  rZ  TestCaser   r   r  r   r  r  r  r  r  r  r{   r   r)   r'   <module>r     s    8 
 	  	  
   " 6 6 @ % K K -  &
 5. GD&/ 4 	
 GE7 q!! qho-) o-d	rj"&2 zF r)   