diff -r 8f85262fbe8a Lib/test/test_imaplib.py --- a/Lib/test/test_imaplib.py Sun Jul 06 02:24:24 2014 -0400 +++ b/Lib/test/test_imaplib.py Wed Jul 16 16:34:22 2014 -0700 @@ -134,7 +134,6 @@ return if line.endswith(b'\r\n'): break - if verbose: print('GOT: %r' % line.strip()) if self.continuation: try: @@ -228,6 +227,49 @@ client.shutdown() @reap_threads + def test_bracket_flags(self): + + class MyServer(SimpleIMAPHandler): + + def handle(self): + self.flags = ['Answered', 'Flagged', 'Deleted', 'Seen', 'Draft'] + super(MyServer, self).handle() + + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'FAKEAUTH successful') + + def cmd_SELECT(self, tag, args): + flag_msg = ' \\'.join(self.flags) + self._send_line(('* FLAGS (%s)' % flag_msg).encode('ascii')) + self._send_line(b'* 2 EXISTS') + self._send_line(b'* 0 RECENT') + msg = ('* OK [PERMANENTFLAGS %s \\*)] Flags permitted.' + % flag_msg) + self._send_line(msg.encode('ascii')) + self._send_tagged(tag, 'OK', '[READ-WRITE] SELECT completed.') + + def cmd_STORE(self, tag, args): + new_flags = args[2].strip('(').strip(')').split() + self.flags.extend(new_flags) + flags_msg = '(FLAGS (%s))' % ' \\'.join(self.flags) + msg = '* %s FETCH %s' % (args[0], flags_msg) + self._send_line(msg.encode('ascii')) + self._send_tagged(tag, 'OK', 'STORE completed.') + + with self.reaped_pair(MyServer) as (server, client): + code, data = client.authenticate('MYAUTH', lambda x: b'fake') + self.assertEqual(code, 'OK') + self.assertEqual(server.response, b'ZmFrZQ==\r\n') + client.select('test') + typ, [data] = client.store(b'1', "+FLAGS", "[test]") + self.assertTrue(b'[test]' in data) + client.select('test') + typ, [data] = client.response('PERMANENTFLAGS') + self.assertTrue(b'[test]' in data) + + @reap_threads def test_issue5949(self): class EOFHandler(socketserver.StreamRequestHandler):