Show
Ignore:
Timestamp:
28/12/09 18:37:09 (2 years ago)
Author:
msmits@…
Branch:
default
Message:

Backslash escaped double quotes in folder names now handled correctly

Also extracted the common code for list_folders and
list_sub_folders. The tests act on that directly.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • imapclient/test/test_IMAPClient.py

    r87 r91  
    66from imapclient.fixed_offset import FixedOffset 
    77from imapclient.imapclient import datetime_to_imap 
    8 from imapclient.test.mock import patch, sentinel 
     8from imapclient.test.mock import patch, sentinel, Mock 
    99from imapclient.test.testable_imapclient import TestableIMAPClient as IMAPClient 
    1010import unittest 
     
    1919class TestListFolders(IMAPClientTest): 
    2020 
    21     def test_simple(self): 
    22         self.client._imap.list.return_value = ('OK', ['(\\HasNoChildren) "/" "A"', 
    23                                                       '(\\HasNoChildren) "/" "Foo Bar"', 
    24                                                       ]) 
     21    def test_list_folders(self): 
     22        self.client._imap.list.return_value = ('OK', sentinel.folder_data) 
     23        self.client._proc_folder_list = Mock(return_value=sentinel.folder_list) 
    2524 
    2625        folders = self.client.list_folders(sentinel.dir, sentinel.pattern) 
    2726 
    2827        self.assert_(self.client._imap.list.call_args == ((sentinel.dir, sentinel.pattern), {})) 
    29         self.assert_(folders == ['A', 'Foo Bar']) 
     28        self.assert_(self.client._proc_folder_list.call_args == ((sentinel.folder_data,), {})) 
     29        self.assert_(folders is sentinel.folder_list) 
     30 
     31         
     32    def test_list_sub_folders(self): 
     33        self.client._imap.lsub.return_value = ('OK', sentinel.folder_data) 
     34        self.client._proc_folder_list = Mock(return_value=sentinel.folder_list) 
     35 
     36        folders = self.client.list_sub_folders(sentinel.dir, sentinel.pattern) 
     37 
     38        self.assert_(self.client._imap.lsub.call_args == ((sentinel.dir, sentinel.pattern), {})) 
     39        self.assert_(self.client._proc_folder_list.call_args == ((sentinel.folder_data,), {})) 
     40        self.assert_(folders is sentinel.folder_list) 
    3041 
    3142 
    32     def test_NO(self): 
     43    def test_list_folders_NO(self): 
    3344        self.client._imap.list.return_value = ('NO', ['badness']) 
    3445        self.assertRaises(IMAPClient.Error, self.client.list_folders) 
    3546 
    3647 
     48    def test_list_sub_folders_NO(self): 
     49        self.client._imap.list.return_value = ('NO', ['badness']) 
     50        self.assertRaises(IMAPClient.Error, self.client.list_folders) 
     51 
     52 
     53    def test_simple(self): 
     54        folders = self.client._proc_folder_list(['(\\HasNoChildren) "/" "A"', 
     55                                                 '(\\HasNoChildren) "/" "Foo Bar"', 
     56                                                 ]) 
     57        self.assert_(folders == ['A', 'Foo Bar']) 
     58 
     59 
     60 
     61 
    3762    def test_without_quotes(self): 
    38         self.client._imap.list.return_value = ('OK', ['(\\HasNoChildren) "/" A', 
    39                                                       '(\\HasNoChildren) "/" B', 
    40                                                       '(\\HasNoChildren) "/" C', 
    41                                                       ]) 
    42  
    43         folders = self.client.list_folders() 
     63        folders = self.client._proc_folder_list(['(\\HasNoChildren) "/" A', 
     64                                                 '(\\HasNoChildren) "/" B', 
     65                                                 '(\\HasNoChildren) "/" C', 
     66                                                 ]) 
    4467        self.assert_(folders == ['A', 'B', 'C'], 'got %r' % folders) 
    4568 
    4669 
    4770    def test_mixed(self): 
    48         self.client._imap.list.return_value = ('OK', ['(\\HasNoChildren) "/" Alpha', 
    49                                                       '(\\HasNoChildren) "/" "Foo Bar"', 
    50                                                       '(\\HasNoChildren) "/" C', 
    51                                                       ]) 
    52  
    53         folders = self.client.list_folders() 
     71        folders = self.client._proc_folder_list(['(\\HasNoChildren) "/" Alpha', 
     72                                                 '(\\HasNoChildren) "/" "Foo Bar"', 
     73                                                 '(\\HasNoChildren) "/" C', 
     74                                                 ]) 
    5475        self.assert_(folders == ['Alpha', 'Foo Bar', 'C'], 'got %r' % folders) 
    5576 
    5677 
    5778    def test_funky_characters(self): 
    58         self.client._imap.list.return_value = ('OK', 
    59                                                [('(\\NoInferiors \\UnMarked) "/" {5}', 'bang\xff'), 
    60                                                 '', 
    61                                                 '(\\HasNoChildren \\UnMarked) "/" "INBOX"']) 
     79        folders = self.client._proc_folder_list([('(\\NoInferiors \\UnMarked) "/" {5}', 'bang\xff'), 
     80                                                 '', 
     81                                                 '(\\HasNoChildren \\UnMarked) "/" "INBOX"']) 
     82        self.assert_(folders == ['bang\xff', 'INBOX'], 'got %r' % folders) 
    6283 
    63         folders = self.client.list_folders() 
    64         self.assert_(folders == ['bang\xff', 'INBOX'], 'got %r' % folders) 
     84 
     85    def test_escaped_quotes(self): 
     86        folders = self.client._proc_folder_list(['(\\HasNoChildren) "/" "Test \"Folder\""', 
     87                                                 '(\\HasNoChildren) "/" "Left\"Right"', 
     88                                                 ]) 
     89        self.assert_(folders == ['Test "Folder"', 'Left\"Right'], 'got %r' % folders) 
     90 
     91 
     92    def test_other_escaping(self): 
     93        self.fail("what other escapes are allowed?") 
    6594 
    6695