~bzr-pqm/bzr/bzr.dev

2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2005 Canonical Ltd
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
2
#
3
# This program is free software; you can redistribute it and/or modify
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
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.
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
16
17
"""Test commit message editor.
18
"""
19
20
import os
21
import sys
22
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
23
from bzrlib import (
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
24
    commit,
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
25
    errors,
26
    msgeditor,
27
    osutils,
3477.1.1 by John Arbash Meinel
Move UnicodeFeature into a core 'tests' feature, rather than living in test_diff.
28
    tests,
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
29
    trace,
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
30
    )
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
31
from bzrlib.branch import Branch
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
32
from bzrlib.config import ensure_config_dir_exists, config_filename
2598.6.24 by ghigo
update on the basis of Aaron suggestions
33
from bzrlib.msgeditor import (
34
    make_commit_message_template_encoded,
2598.6.27 by ghigo
small cleanup (line lenght)
35
    edit_commit_message_encoded
2598.6.24 by ghigo
update on the basis of Aaron suggestions
36
)
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
37
from bzrlib.tests import (
38
    TestCaseWithTransport,
3004.1.8 by Daniel Watkins
Changed TestSkipped to TestNotApplicable as suggested by Aaron.
39
    TestNotApplicable,
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
40
    TestSkipped,
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
41
    multiply_tests,
42
    probe_bad_non_ascii,
43
    split_suite_by_re,
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
44
    )
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
45
from bzrlib.tests.EncodingAdapter import encoding_scenarios
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
46
from bzrlib.trace import mutter
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
47
2592.3.164 by Robert Collins
Reduce spurious differences to bzr.dev from merge mishaps.
48
2921.6.14 by Robert Collins
Push the message editor test parameterisation down into the message editor
49
def load_tests(standard_tests, module, loader):
3128.1.3 by Vincent Ladeuil
Since we are there s/parameteris.*/parameteriz&/.
50
    """Parameterize the test for tempfile creation with different encodings."""
2921.6.14 by Robert Collins
Push the message editor test parameterisation down into the message editor
51
    to_adapt, result = split_suite_by_re(standard_tests,
52
        "test__create_temp_file_with_commit_template_in_unicode_dir")
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
53
    return multiply_tests(to_adapt, encoding_scenarios, result)
2921.6.14 by Robert Collins
Push the message editor test parameterisation down into the message editor
54
55
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
56
class MsgEditorTest(TestCaseWithTransport):
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
57
1526.1.4 by Robert Collins
forgot my self.
58
    def make_uncommitted_tree(self):
1526.1.1 by Robert Collins
Run the test suite with no locale as well as the default locale. Also add a test for build_tree_shape to selftest.
59
        """Build a branch with uncommitted unicode named changes in the cwd."""
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
60
        working_tree = self.make_branch_and_tree('.')
61
        b = working_tree.branch
1526.1.1 by Robert Collins
Run the test suite with no locale as well as the default locale. Also add a test for build_tree_shape to selftest.
62
        filename = u'hell\u00d8'
1526.1.3 by Robert Collins
Merge from upstream.
63
        try:
64
            self.build_tree_contents([(filename, 'contents of hello')])
65
        except UnicodeEncodeError:
66
            raise TestSkipped("can't build unicode working tree in "
1185.33.97 by Martin Pool
MsgEditor tests should be skipped on platforms without unicode fs.
67
                "filesystem encoding %s" % sys.getfilesystemencoding())
1526.1.1 by Robert Collins
Run the test suite with no locale as well as the default locale. Also add a test for build_tree_shape to selftest.
68
        working_tree.add(filename)
69
        return working_tree
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
70
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
71
    def test_commit_template(self):
72
        """Test building a commit message template"""
1526.1.2 by Robert Collins
Fix typo in my msgeditor test changes.
73
        working_tree = self.make_uncommitted_tree()
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
74
        template = msgeditor.make_commit_message_template(working_tree,
2598.6.24 by ghigo
update on the basis of Aaron suggestions
75
                                                                 None)
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
76
        self.assertEqualDiff(template,
77
u"""\
78
added:
79
  hell\u00d8
80
""")
81
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
82
    def make_multiple_pending_tree(self):
83
        from bzrlib import config
84
        config.GlobalConfig().set_user_option('email',
85
                                              'Bilbo Baggins <bb@hobbit.net>')
86
        tree = self.make_branch_and_tree('a')
87
        tree.commit('Initial checkin.', timestamp=1230912900, timezone=0)
88
        tree2 = tree.bzrdir.clone('b').open_workingtree()
89
        tree.commit('Minor tweak.', timestamp=1231977840, timezone=0)
90
        tree2.commit('Feature X work.', timestamp=1233186240, timezone=0)
91
        tree3 = tree2.bzrdir.clone('c').open_workingtree()
92
        tree2.commit('Feature X finished.', timestamp=1233187680, timezone=0)
93
        tree3.commit('Feature Y, based on initial X work.',
94
                     timestamp=1233285960, timezone=0)
95
        tree.merge_from_branch(tree2.branch)
96
        tree.merge_from_branch(tree3.branch)
97
        return tree
98
99
    def test_commit_template_pending_merges(self):
100
        """Test building a commit message template when there are pending
101
        merges.  The commit message should show all pending merge revisions,
102
        as does 'status -v', not only the merge tips.
103
        """
104
        working_tree = self.make_multiple_pending_tree()
105
        template = msgeditor.make_commit_message_template(working_tree, None)
106
        self.assertEqualDiff(template,
107
u"""\
108
pending merges:
109
  Bilbo Baggins 2009-01-29 Feature X finished.
110
    Bilbo Baggins 2009-01-28 Feature X work.
111
  Bilbo Baggins 2009-01-30 Feature Y, based on initial X work.
112
""")
113
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
114
    def test_commit_template_encoded(self):
115
        """Test building a commit message template"""
116
        working_tree = self.make_uncommitted_tree()
2598.6.24 by ghigo
update on the basis of Aaron suggestions
117
        template = make_commit_message_template_encoded(working_tree,
118
                                                        None,
119
                                                        output_encoding='utf8')
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
120
        self.assertEqualDiff(template,
121
u"""\
122
added:
123
  hell\u00d8
2598.6.14 by ghigo
Update the test
124
""".encode("utf8"))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
125
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
126
2598.6.2 by ghigo
Add testcase
127
    def test_commit_template_and_diff(self):
128
        """Test building a commit message template"""
129
        working_tree = self.make_uncommitted_tree()
2598.6.24 by ghigo
update on the basis of Aaron suggestions
130
        template = make_commit_message_template_encoded(working_tree,
131
                                                        None,
132
                                                        diff=True,
133
                                                        output_encoding='utf8')
2598.6.2 by ghigo
Add testcase
134
2598.6.10 by ghigo
In the commit dialog, the diff is stored as 8-bit raw data
135
        self.assertTrue("""\
2598.6.2 by ghigo
Add testcase
136
@@ -0,0 +1,1 @@
137
+contents of hello
2598.6.14 by ghigo
Update the test
138
""" in template)
2598.6.3 by ghigo
Add test case
139
        self.assertTrue(u"""\
140
added:
141
  hell\u00d8
2598.6.14 by ghigo
Update the test
142
""".encode('utf8') in template)
2598.6.2 by ghigo
Add testcase
143
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
144
    def make_do_nothing_editor(self):
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
145
        if sys.platform == "win32":
146
            f = file('fed.bat', 'w')
147
            f.write('@rem dummy fed')
148
            f.close()
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
149
            return 'fed.bat'
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
150
        else:
151
            f = file('fed.sh', 'wb')
152
            f.write('#!/bin/sh\n')
153
            f.close()
154
            os.chmod('fed.sh', 0755)
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
155
            return './fed.sh'
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
156
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
157
    def test_run_editor(self):
158
        os.environ['BZR_EDITOR'] = self.make_do_nothing_editor()
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
159
        self.assertEqual(True, msgeditor._run_editor(''),
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
160
                         'Unable to run dummy fake editor')
161
2625.9.5 by Daniel Watkins
Modified test_msgeditor.make_fake_editor to allow a custom message to be inserted.
162
    def make_fake_editor(self, message='test message from fed\\n'):
2258.3.2 by James Westby
Allow an empty start message.
163
        """Set up environment so that an editor will be a known script.
164
165
        Sets up BZR_EDITOR so that if an editor is spawned it will run a
166
        script that just adds a known message to the start of the file.
167
        """
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
168
        f = file('fed.py', 'wb')
169
        f.write('#!%s\n' % sys.executable)
170
        f.write("""\
2625.9.5 by Daniel Watkins
Modified test_msgeditor.make_fake_editor to allow a custom message to be inserted.
171
# coding=utf-8
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
172
import sys
173
if len(sys.argv) == 2:
174
    fn = sys.argv[1]
175
    f = file(fn, 'rb')
176
    s = f.read()
177
    f.close()
178
    f = file(fn, 'wb')
2625.9.9 by Daniel Watkins
Used format string as suggested by abentley.
179
    f.write('%s')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
180
    f.write(s)
181
    f.close()
2625.9.9 by Daniel Watkins
Used format string as suggested by abentley.
182
""" % (message, ))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
183
        f.close()
184
        if sys.platform == "win32":
185
            # [win32] make batch file and set BZR_EDITOR
186
            f = file('fed.bat', 'w')
187
            f.write("""\
188
@echo off
1711.4.2 by jfmeinel
current python may be running in a path that has a space, so properly quote the python exe name. for test_msgeditor
189
"%s" fed.py %%1
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
190
""" % sys.executable)
191
            f.close()
192
            os.environ['BZR_EDITOR'] = 'fed.bat'
193
        else:
194
            # [non-win32] make python script executable and set BZR_EDITOR
195
            os.chmod('fed.py', 0755)
196
            os.environ['BZR_EDITOR'] = './fed.py'
197
2258.3.2 by James Westby
Allow an empty start message.
198
    def test_edit_commit_message(self):
199
        working_tree = self.make_uncommitted_tree()
200
        self.make_fake_editor()
201
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
202
        mutter('edit_commit_message without infotext')
203
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
204
                         msgeditor.edit_commit_message(''))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
205
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
206
        mutter('edit_commit_message with ascii string infotext')
207
        self.assertEqual('test message from fed\n',
208
                         msgeditor.edit_commit_message('spam'))
209
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
210
        mutter('edit_commit_message with unicode infotext')
211
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
212
                         msgeditor.edit_commit_message(u'\u1234'))
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
213
2598.6.27 by ghigo
small cleanup (line lenght)
214
        tmpl = edit_commit_message_encoded(u'\u1234'.encode("utf8"))
215
        self.assertEqual('test message from fed\n', tmpl)
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
216
2258.3.2 by James Westby
Allow an empty start message.
217
    def test_start_message(self):
218
        self.make_uncommitted_tree()
219
        self.make_fake_editor()
2258.3.1 by James Westby
Add a way to specify a template commit message.
220
        self.assertEqual('test message from fed\nstart message\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
221
                         msgeditor.edit_commit_message('',
2258.3.1 by James Westby
Add a way to specify a template commit message.
222
                                              start_message='start message\n'))
2258.3.2 by James Westby
Allow an empty start message.
223
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
224
                         msgeditor.edit_commit_message('',
2258.3.2 by James Westby
Allow an empty start message.
225
                                              start_message=''))
2258.3.1 by James Westby
Add a way to specify a template commit message.
226
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
227
    def test_deleted_commit_message(self):
228
        working_tree = self.make_uncommitted_tree()
229
230
        if sys.platform == 'win32':
1711.4.1 by John Arbash Meinel
del is not an executable program on win32, you must use cmd /c del
231
            os.environ['BZR_EDITOR'] = 'cmd.exe /c del'
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
232
        else:
233
            os.environ['BZR_EDITOR'] = 'rm'
234
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
235
        self.assertRaises((IOError, OSError), msgeditor.edit_commit_message, '')
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
236
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
237
    def test__get_editor(self):
238
        # Test that _get_editor can return a decent list of items
239
        bzr_editor = os.environ.get('BZR_EDITOR')
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
240
        visual = os.environ.get('VISUAL')
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
241
        editor = os.environ.get('EDITOR')
242
        try:
243
            os.environ['BZR_EDITOR'] = 'bzr_editor'
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
244
            os.environ['VISUAL'] = 'visual'
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
245
            os.environ['EDITOR'] = 'editor'
246
247
            ensure_config_dir_exists()
248
            f = open(config_filename(), 'wb')
249
            f.write('editor = config_editor\n')
250
            f.close()
251
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
252
            editors = list(msgeditor._get_editor())
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
253
            editors = [editor for (editor, cfg_src) in editors]
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
254
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
255
            self.assertEqual(['bzr_editor', 'config_editor', 'visual',
256
                              'editor'], editors[:4])
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
257
258
            if sys.platform == 'win32':
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
259
                self.assertEqual(['wordpad.exe', 'notepad.exe'], editors[4:])
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
260
            else:
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
261
                self.assertEqual(['/usr/bin/editor', 'vi', 'pico', 'nano',
262
                                  'joe'], editors[4:])
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
263
264
        finally:
265
            # Restore the environment
266
            if bzr_editor is None:
267
                del os.environ['BZR_EDITOR']
268
            else:
269
                os.environ['BZR_EDITOR'] = bzr_editor
1668.4.1 by Olaf Conradi
Make msgeditor invocation comply with Debian Policy.
270
            if visual is None:
271
                del os.environ['VISUAL']
272
            else:
273
                os.environ['VISUAL'] = visual
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
274
            if editor is None:
275
                del os.environ['EDITOR']
276
            else:
277
                os.environ['EDITOR'] = editor
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
278
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
279
    def test__run_editor_EACCES(self):
280
        """If running a configured editor raises EACESS, the user is warned."""
281
        os.environ['BZR_EDITOR'] = 'eacces.py'
282
        f = file('eacces.py', 'wb')
283
        f.write('# Not a real editor')
284
        f.close()
285
        # Make the fake editor unreadable (and unexecutable)
286
        os.chmod('eacces.py', 0)
287
        # Set $EDITOR so that _run_editor will terminate before trying real
288
        # editors.
289
        os.environ['EDITOR'] = self.make_do_nothing_editor()
290
        # Call _run_editor, capturing mutter.warning calls.
291
        warnings = []
292
        def warning(*args):
293
            warnings.append(args[0] % args[1:])
294
        _warning = trace.warning
295
        trace.warning = warning
296
        try:
297
            msgeditor._run_editor('')
298
        finally:
299
            trace.warning = _warning
3910.1.3 by Andrew Bennetts
Tweak warning slightly.
300
        self.assertStartsWith(warnings[0], 'Could not start editor "eacces.py"')
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
301
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
302
    def test__create_temp_file_with_commit_template(self):
303
        # check that commit template written properly
304
        # and has platform native line-endings (CRLF on win32)
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
305
        create_file = msgeditor._create_temp_file_with_commit_template
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
306
        msgfilename, hasinfo = create_file('infotext','----','start message')
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
307
        self.assertNotEqual(None, msgfilename)
308
        self.assertTrue(hasinfo)
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
309
        expected = os.linesep.join(['start message',
310
                                    '',
311
                                    '',
312
                                    '----',
313
                                    '',
314
                                    'infotext'])
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
315
        self.assertFileEqual(expected, msgfilename)
316
3004.1.1 by Daniel Watkins
Added (failing) test to check if a temp file containing a commit message can be created in a folder with a Unicode name.
317
    def test__create_temp_file_with_commit_template_in_unicode_dir(self):
3477.1.2 by John Arbash Meinel
Rename UnicodeFilename => UnicodeFilenameFeature
318
        self.requireFeature(tests.UnicodeFilenameFeature)
3004.1.7 by Daniel Watkins
test__create_temp_file_with_commit_template_in_unicode_dir now uses EncodingTestAdapter info.
319
        if hasattr(self, 'info'):
320
            os.mkdir(self.info['directory'])
321
            os.chdir(self.info['directory'])
322
            msgeditor._create_temp_file_with_commit_template('infotext')
323
        else:
3004.1.8 by Daniel Watkins
Changed TestSkipped to TestNotApplicable as suggested by Aaron.
324
            raise TestNotApplicable('Test run elsewhere with non-ascii data.')
3004.1.1 by Daniel Watkins
Added (failing) test to check if a temp file containing a commit message can be created in a folder with a Unicode name.
325
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
326
    def test__create_temp_file_with_empty_commit_template(self):
327
        # empty file
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
328
        create_file = msgeditor._create_temp_file_with_commit_template
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
329
        msgfilename, hasinfo = create_file('')
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
330
        self.assertNotEqual(None, msgfilename)
331
        self.assertFalse(hasinfo)
332
        self.assertFileEqual('', msgfilename)
2625.9.6 by Daniel Watkins
Added test to ensure correct error message is thrown when an unencodable commit message is entered through the editor.
333
334
    def test_unsupported_encoding_commit_message(self):
335
        old_env = osutils.set_or_unset_env('LANG', 'C')
2625.9.8 by Daniel Watkins
Updated as per poolie's !tweak.
336
        try:
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
337
            # LANG env variable has no effect on Windows
338
            # but some characters anyway cannot be represented
339
            # in default user encoding
3224.5.4 by Andrew Bennetts
Fix test suite, mainly weeding out uses of bzrlib.user_encoding.
340
            char = probe_bad_non_ascii(osutils.get_user_encoding())
2839.6.2 by Alexander Belchenko
changes after Martin's review
341
            if char is None:
342
                raise TestSkipped('Cannot find suitable non-ascii character '
3224.5.4 by Andrew Bennetts
Fix test suite, mainly weeding out uses of bzrlib.user_encoding.
343
                    'for user_encoding (%s)' % osutils.get_user_encoding())
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
344
345
            self.make_fake_editor(message=char)
2625.9.6 by Daniel Watkins
Added test to ensure correct error message is thrown when an unencodable commit message is entered through the editor.
346
2625.9.8 by Daniel Watkins
Updated as per poolie's !tweak.
347
            working_tree = self.make_uncommitted_tree()
348
            self.assertRaises(errors.BadCommitMessageEncoding,
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
349
                              msgeditor.edit_commit_message, '')
2625.9.8 by Daniel Watkins
Updated as per poolie's !tweak.
350
        finally:
351
            osutils.set_or_unset_env('LANG', old_env)
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
352
353
    def test_generate_commit_message_template_no_hooks(self):
354
        commit_obj = commit.Commit()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
355
        self.assertIs(None,
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
356
            msgeditor.generate_commit_message_template(commit_obj))
357
358
    def test_generate_commit_message_template_hook(self):
359
        def restoreDefaults():
360
            msgeditor.hooks['commit_message_template'] = []
361
        self.addCleanup(restoreDefaults)
362
        msgeditor.hooks.install_named_hook("commit_message_template",
363
                lambda commit_obj, msg: "save me some typing\n", None)
364
        commit_obj = commit.Commit()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
365
        self.assertEquals("save me some typing\n",
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
366
            msgeditor.generate_commit_message_template(commit_obj))