/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2681.1.8 by Aaron Bentley
Add Thunderbird support to bzr send
1
# Copyright (C) 2007 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
from bzrlib import (
3042.1.2 by Lukáš Lalinský
Don't use None as address in TestXDGEmail and add a test to check if it raises NoMailAddressSpecified with None.
18
    errors,
2681.1.8 by Aaron Bentley
Add Thunderbird support to bzr send
19
    mail_client,
20
    tests,
21
    urlutils,
22
    )
23
2790.2.1 by Keir Mierle
Add Mutt as a supported client email program. Also rearranges various listings
24
class TestMutt(tests.TestCase):
25
26
    def test_commandline(self):
27
        mutt = mail_client.Mutt(None)
28
        commandline = mutt._get_compose_commandline(None, None, 'file%')
29
        self.assertEqual(['-a', 'file%'], commandline)
30
        commandline = mutt._get_compose_commandline('jrandom@example.org',
31
                                                     'Hi there!', None)
32
        self.assertEqual(['-s', 'Hi there!', 'jrandom@example.org'],
33
                         commandline)
34
3234.2.6 by Alexander Belchenko
because every mail client has different rules to compose command line we should encode arguments to 8 bit string only when needed.
35
    def test_commandline_is_8bit(self):
36
        mutt = mail_client.Mutt(None)
37
        cmdline = mutt._get_compose_commandline(u'jrandom@example.org',
38
            u'Hi there!', u'file%')
39
        self.assertEqual(
40
            ['-s', 'Hi there!', '-a', 'file%', 'jrandom@example.org'],
41
            cmdline)
42
        for item in cmdline:
43
            self.assertFalse(isinstance(item, unicode),
44
                'Command-line item %r is unicode!' % item)
45
2681.1.8 by Aaron Bentley
Add Thunderbird support to bzr send
46
47
class TestThunderbird(tests.TestCase):
48
49
    def test_commandline(self):
2681.1.9 by Aaron Bentley
Add support for mail-from-editor
50
        tbird = mail_client.Thunderbird(None)
2681.1.8 by Aaron Bentley
Add Thunderbird support to bzr send
51
        commandline = tbird._get_compose_commandline(None, None,
52
                                                     'file%')
53
        self.assertEqual(['-compose', "attachment='%s'" %
54
                          urlutils.local_path_to_url('file%')], commandline)
55
        commandline = tbird._get_compose_commandline('jrandom@example.org',
56
                                                     'Hi there!', None)
57
        self.assertEqual(['-compose', "subject='Hi there!',"
58
                                      "to='jrandom@example.org'"], commandline)
2681.2.1 by Lukáš Lalinsky
Support for Evolution mail client.
59
3234.2.3 by Alexander Belchenko
mail_client.py: provide new private method ExternalMailClient._get_compose_8bit_commandline to make bug #139318 testable (as Aaron requested).
60
    def test_commandline_is_8bit(self):
61
        # test for bug #139318
62
        tbird = mail_client.Thunderbird(None)
3234.2.6 by Alexander Belchenko
because every mail client has different rules to compose command line we should encode arguments to 8 bit string only when needed.
63
        cmdline = tbird._get_compose_commandline(u'jrandom@example.org',
64
            u'Hi there!', u'file%')
65
        self.assertEqual(['-compose',
3234.2.3 by Alexander Belchenko
mail_client.py: provide new private method ExternalMailClient._get_compose_8bit_commandline to make bug #139318 testable (as Aaron requested).
66
            ("attachment='%s'," % urlutils.local_path_to_url('file%')) +
67
            "subject='Hi there!',to='jrandom@example.org'",
68
            ], cmdline)
69
        for item in cmdline:
70
            self.assertFalse(isinstance(item, unicode),
71
                'Command-line item %r is unicode!' % item)
72
2681.2.1 by Lukáš Lalinsky
Support for Evolution mail client.
73
2681.1.23 by Aaron Bentley
Add support for xdg-email
74
class TestXDGEmail(tests.TestCase):
75
76
    def test_commandline(self):
77
        xdg_email = mail_client.XDGEmail(None)
3042.1.2 by Lukáš Lalinský
Don't use None as address in TestXDGEmail and add a test to check if it raises NoMailAddressSpecified with None.
78
        self.assertRaises(errors.NoMailAddressSpecified,
79
                          xdg_email._get_compose_commandline,
80
                          None, None, 'file%')
81
        commandline = xdg_email._get_compose_commandline(
82
            'jrandom@example.org', None, 'file%')
83
        self.assertEqual(['jrandom@example.org', '--attach', 'file%'],
84
                         commandline)
2681.1.23 by Aaron Bentley
Add support for xdg-email
85
        commandline = xdg_email._get_compose_commandline(
86
            'jrandom@example.org', 'Hi there!', None)
87
        self.assertEqual(['jrandom@example.org', '--subject', 'Hi there!'],
88
                         commandline)
89
3234.2.6 by Alexander Belchenko
because every mail client has different rules to compose command line we should encode arguments to 8 bit string only when needed.
90
    def test_commandline_is_8bit(self):
91
        xdg_email = mail_client.XDGEmail(None)
92
        cmdline = xdg_email._get_compose_commandline(u'jrandom@example.org',
93
            u'Hi there!', u'file%')
94
        self.assertEqual(
95
            ['jrandom@example.org', '--subject', 'Hi there!',
96
             '--attach', 'file%'],
97
            cmdline)
98
        for item in cmdline:
99
            self.assertFalse(isinstance(item, unicode),
100
                'Command-line item %r is unicode!' % item)
101
2681.1.23 by Aaron Bentley
Add support for xdg-email
102
2681.2.1 by Lukáš Lalinsky
Support for Evolution mail client.
103
class TestEvolution(tests.TestCase):
104
105
    def test_commandline(self):
106
        evo = mail_client.Evolution(None)
107
        commandline = evo._get_compose_commandline(None, None, 'file%')
2681.1.18 by Aaron Bentley
Refactor to increase code sharing, allow multiple command names for tbird
108
        self.assertEqual(['mailto:?attach=file%25'], commandline)
2681.2.1 by Lukáš Lalinsky
Support for Evolution mail client.
109
        commandline = evo._get_compose_commandline('jrandom@example.org',
110
                                                   'Hi there!', None)
2681.1.18 by Aaron Bentley
Refactor to increase code sharing, allow multiple command names for tbird
111
        self.assertEqual(['mailto:jrandom@example.org?subject=Hi%20there%21'],
2681.2.1 by Lukáš Lalinsky
Support for Evolution mail client.
112
                         commandline)
2681.1.21 by Aaron Bentley
Refactor prompt generation to make it testable, test it with unicode
113
3234.2.6 by Alexander Belchenko
because every mail client has different rules to compose command line we should encode arguments to 8 bit string only when needed.
114
    def test_commandline_is_8bit(self):
115
        evo = mail_client.Evolution(None)
116
        cmdline = evo._get_compose_commandline(u'jrandom@example.org',
117
            u'Hi there!', u'file%')
118
        self.assertEqual(
119
            ['mailto:jrandom@example.org?attach=file%25&subject=Hi%20there%21'
120
            ],
121
            cmdline)
122
        for item in cmdline:
123
            self.assertFalse(isinstance(item, unicode),
124
                'Command-line item %r is unicode!' % item)
125
2681.1.21 by Aaron Bentley
Refactor prompt generation to make it testable, test it with unicode
126
2681.5.2 by ghigo
update docs and tests
127
class TestKMail(tests.TestCase):
128
129
    def test_commandline(self):
2681.1.35 by Aaron Bentley
Rename test var evo => kmail
130
        kmail = mail_client.KMail(None)
131
        commandline = kmail._get_compose_commandline(None, None, 'file%')
2681.5.2 by ghigo
update docs and tests
132
        self.assertEqual(['--attach', 'file%'], commandline)
2681.1.35 by Aaron Bentley
Rename test var evo => kmail
133
        commandline = kmail._get_compose_commandline('jrandom@example.org',
134
                                                     'Hi there!', None)
2681.5.2 by ghigo
update docs and tests
135
        self.assertEqual(['-s', 'Hi there!', 'jrandom@example.org'],
136
                         commandline)
137
3234.2.6 by Alexander Belchenko
because every mail client has different rules to compose command line we should encode arguments to 8 bit string only when needed.
138
    def test_commandline_is_8bit(self):
139
        kmail = mail_client.KMail(None)
140
        cmdline = kmail._get_compose_commandline(u'jrandom@example.org',
141
            u'Hi there!', u'file%')
142
        self.assertEqual(
143
            ['-s', 'Hi there!', '--attach', 'file%', 'jrandom@example.org'],
144
            cmdline)
145
        for item in cmdline:
146
            self.assertFalse(isinstance(item, unicode),
147
                'Command-line item %r is unicode!' % item)
148
2681.5.2 by ghigo
update docs and tests
149
2681.1.21 by Aaron Bentley
Refactor prompt generation to make it testable, test it with unicode
150
class TestEditor(tests.TestCase):
151
152
    def test_get_merge_prompt_unicode(self):
153
        """Prompt, to and subject are unicode, the attachement is binary"""
154
        editor = mail_client.Editor(None)
155
        prompt = editor._get_merge_prompt(u'foo\u1234',
156
                                        u'bar\u1234',
157
                                        u'baz\u1234',
158
                                        u'qux\u1234'.encode('utf-8'))
159
        self.assertContainsRe(prompt, u'foo\u1234(.|\n)*bar\u1234'
160
                              u'(.|\n)*baz\u1234(.|\n)*qux\u1234')
161
        editor._get_merge_prompt(u'foo', u'bar', u'baz', 'qux\xff')
3270.3.2 by James Westby
Add a smoke test to check that the DefaultMail client passes through
162
163
164
class DummyMailClient(object):
165
166
    def compose_merge_request(self, *args, **kwargs):
167
        self.args = args
168
        self.kwargs = kwargs
169
170
171
class DefaultMailDummyClient(mail_client.DefaultMail):
172
173
    def __init__(self):
174
        self.client = DummyMailClient()
175
176
    def _mail_client(self):
177
        return self.client
178
179
180
class TestDefaultMail(tests.TestCase):
181
182
    def test_compose_merge_request(self):
183
        client = DefaultMailDummyClient()
184
        to = "a@b.com"
185
        subject = "[MERGE]"
186
        directive = "directive",
187
        basename = "merge"
188
        client.compose_merge_request(to, subject, directive,
189
                                     basename=basename)
190
        dummy_client = client.client
191
        self.assertEqual(dummy_client.args, (to, subject, directive))
192
        self.assertEqual(dummy_client.kwargs, {"basename":basename})