@@ -1173,6 +1173,35 @@ def test_uid_copy(self):
11731173 self .assertEqual (data , [None ])
11741174 self .assertEqual (server .args , ['COPY' , '4827313:4828442' , '"New folder"' ])
11751175
1176+ def test_move (self ):
1177+ client , server = self ._setup (make_simple_handler ('MOVE' ))
1178+ client .login ('user' , 'pass' )
1179+ client .select ()
1180+ typ , data = client .move ('2:4' , 'MEETING' )
1181+ self .assertEqual (typ , 'OK' )
1182+ self .assertEqual (data , [b'MOVE completed' ])
1183+ self .assertEqual (server .args , ['2:4' , 'MEETING' ])
1184+
1185+ typ , data = client .move ('2:4' , 'New folder' )
1186+ self .assertEqual (typ , 'OK' )
1187+ self .assertEqual (data , [b'MOVE completed' ])
1188+ self .assertEqual (server .args , ['2:4' , '"New folder"' ])
1189+
1190+ def test_uid_move (self ):
1191+ client , server = self ._setup (make_simple_handler ('UID' ,
1192+ completed = 'UID MOVE completed' ))
1193+ client .login ('user' , 'pass' )
1194+ client .select ()
1195+ typ , data = client .uid ('move' , '4827313:4828442' , 'MEETING' )
1196+ self .assertEqual (typ , 'OK' )
1197+ self .assertEqual (data , [None ])
1198+ self .assertEqual (server .args , ['MOVE' , '4827313:4828442' , 'MEETING' ])
1199+
1200+ typ , data = client .uid ('move' , '4827313:4828442' , 'New folder' )
1201+ self .assertEqual (typ , 'OK' )
1202+ self .assertEqual (data , [None ])
1203+ self .assertEqual (server .args , ['MOVE' , '4827313:4828442' , '"New folder"' ])
1204+
11761205 def test_store (self ):
11771206 client , server = self ._setup (make_simple_handler ('STORE' , [
11781207 r'* 2 FETCH (FLAGS (\Deleted \Seen))' ,
@@ -1769,10 +1798,20 @@ def test_uppercase_command_names(self):
17691798 client .NONEXISTENT
17701799
17711800 def test_control_characters (self ):
1772- client , _ = self ._setup (SimpleIMAPHandler )
1773- for c0 in support .control_characters_c0 ():
1801+ client , server = self ._setup (SimpleIMAPHandler )
1802+ client .login ('user' , 'pass' )
1803+ for c in '\0 \r \n ' :
17741804 with self .assertRaises (ValueError ):
1775- client .login (f'user{ c0 } ' , 'pass' )
1805+ client .select (f'a{ c } b' )
1806+ # Other control characters are valid in a quoted string and can
1807+ # occur in mailbox names returned by the server, so the client
1808+ # must be able to send them back.
1809+ for c in support .control_characters_c0 ():
1810+ if c in '\0 \r \n ' :
1811+ continue
1812+ typ , _ = client .select (f'a{ c } b' )
1813+ self .assertEqual (typ , 'OK' )
1814+ self .assertEqual (server .is_selected , [f'"a{ c } b"' ])
17761815
17771816 # property tests
17781817
@@ -1913,8 +1952,8 @@ def test_connect(self):
19131952 @threading_helper .reap_threads
19141953 def test_bracket_flags (self ):
19151954
1916- # This violates RFC 3501, which disallows ']' characters in tag names ,
1917- # but imaplib has allowed producing such tags forever, other programs
1955+ # This violates RFC 3501, which disallows ']' characters in flags ,
1956+ # but imaplib has allowed producing such flags forever, other programs
19181957 # also produce them (eg: OtherInbox's Organizer app as of 20140716),
19191958 # and Gmail, for example, accepts them and produces them. So we
19201959 # support them. See issue #21815.
0 commit comments