/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2005-2012, 2016 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
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
23
from .. import (
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
24
    commit,
5345.1.13 by Vincent Ladeuil
Cleanup test_msgeditor.
25
    config,
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
26
    errors,
27
    msgeditor,
28
    osutils,
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
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
31
from ..msgeditor import (
2598.6.24 by ghigo
update on the basis of Aaron suggestions
32
    make_commit_message_template_encoded,
2598.6.27 by ghigo
small cleanup (line lenght)
33
    edit_commit_message_encoded
2598.6.24 by ghigo
update on the basis of Aaron suggestions
34
)
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
35
from . import (
5967.12.1 by Martin Pool
Move all test features into bzrlib.tests.features
36
    features,
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
37
    TestCaseInTempDir,
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
38
    TestCaseWithTransport,
3004.1.8 by Daniel Watkins
Changed TestSkipped to TestNotApplicable as suggested by Aaron.
39
    TestNotApplicable,
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
40
    multiply_tests,
41
    probe_bad_non_ascii,
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
42
    probe_unicode_in_user_encoding,
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
43
    split_suite_by_re,
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
44
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
45
from .EncodingAdapter import encoding_scenarios
46
from ..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
6625.1.5 by Martin
Drop custom load_tests implementation and use unittest signature
49
def load_tests(loader, standard_tests, pattern):
3128.1.3 by Vincent Ladeuil
Since we are there s/parameteris.*/parameteriz&/.
50
    """Parameterize the test for tempfile creation with different encodings."""
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
51
    to_adapt, result = split_suite_by_re(
52
        standard_tests,
53
        "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.
54
    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
55
56
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
57
class MsgEditorTest(TestCaseWithTransport):
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
58
1526.1.4 by Robert Collins
forgot my self.
59
    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.
60
        """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.
61
        working_tree = self.make_branch_and_tree('.')
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:
6855.4.1 by Jelmer Vernooij
Yet more bees.
64
            self.build_tree_contents([(filename, b'contents of hello')])
1526.1.3 by Robert Collins
Merge from upstream.
65
        except UnicodeEncodeError:
6833.7.3 by Jelmer Vernooij
Use skipTest.
66
            self.skipTest("can't build unicode working tree in "
7143.15.2 by Jelmer Vernooij
Run autopep8.
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,
7143.15.2 by Jelmer Vernooij
Run autopep8.
75
                                                          None)
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
76
        self.assertEqualDiff(template,
7143.15.2 by Jelmer Vernooij
Run autopep8.
77
                             u"""\
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
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):
6449.6.7 by Jelmer Vernooij
Fix tests.
83
        config.GlobalStack().set('email', 'Bilbo Baggins <bb@hobbit.net>')
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
84
        tree = self.make_branch_and_tree('a')
85
        tree.commit('Initial checkin.', timestamp=1230912900, timezone=0)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
86
        tree2 = tree.controldir.clone('b').open_workingtree()
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
87
        tree.commit('Minor tweak.', timestamp=1231977840, timezone=0)
88
        tree2.commit('Feature X work.', timestamp=1233186240, timezone=0)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
89
        tree3 = tree2.controldir.clone('c').open_workingtree()
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
90
        tree2.commit('Feature X finished.', timestamp=1233187680, timezone=0)
91
        tree3.commit('Feature Y, based on initial X work.',
92
                     timestamp=1233285960, timezone=0)
93
        tree.merge_from_branch(tree2.branch)
4721.3.2 by Vincent Ladeuil
Simplify mutable_tree.has_changes() and update call sites.
94
        tree.merge_from_branch(tree3.branch, force=True)
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
95
        return tree
96
97
    def test_commit_template_pending_merges(self):
98
        """Test building a commit message template when there are pending
99
        merges.  The commit message should show all pending merge revisions,
100
        as does 'status -v', not only the merge tips.
101
        """
102
        working_tree = self.make_multiple_pending_tree()
103
        template = msgeditor.make_commit_message_template(working_tree, None)
104
        self.assertEqualDiff(template,
7143.15.2 by Jelmer Vernooij
Run autopep8.
105
                             u"""\
3968.1.1 by Colin D Bennett
Show all pending merge revisions in the commit message template.
106
pending merges:
107
  Bilbo Baggins 2009-01-29 Feature X finished.
108
    Bilbo Baggins 2009-01-28 Feature X work.
109
  Bilbo Baggins 2009-01-30 Feature Y, based on initial X work.
110
""")
111
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
112
    def test_commit_template_encoded(self):
113
        """Test building a commit message template"""
114
        working_tree = self.make_uncommitted_tree()
2598.6.24 by ghigo
update on the basis of Aaron suggestions
115
        template = make_commit_message_template_encoded(working_tree,
116
                                                        None,
117
                                                        output_encoding='utf8')
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
118
        self.assertEqualDiff(template,
7143.15.2 by Jelmer Vernooij
Run autopep8.
119
                             u"""\
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
120
added:
121
  hell\u00d8
2598.6.14 by ghigo
Update the test
122
""".encode("utf8"))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
123
2598.6.2 by ghigo
Add testcase
124
    def test_commit_template_and_diff(self):
125
        """Test building a commit message template"""
126
        working_tree = self.make_uncommitted_tree()
2598.6.24 by ghigo
update on the basis of Aaron suggestions
127
        template = make_commit_message_template_encoded(working_tree,
128
                                                        None,
129
                                                        diff=True,
130
                                                        output_encoding='utf8')
2598.6.2 by ghigo
Add testcase
131
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
132
        self.assertTrue(b"""\
2598.6.2 by ghigo
Add testcase
133
@@ -0,0 +1,1 @@
134
+contents of hello
2598.6.14 by ghigo
Update the test
135
""" in template)
2598.6.3 by ghigo
Add test case
136
        self.assertTrue(u"""\
137
added:
138
  hell\u00d8
2598.6.14 by ghigo
Update the test
139
""".encode('utf8') in template)
2598.6.2 by ghigo
Add testcase
140
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
141
    def make_do_nothing_editor(self, basename='fed'):
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
142
        if sys.platform == "win32":
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
143
            name = basename + '.bat'
6973.7.5 by Jelmer Vernooij
s/file/open.
144
            with open(name, 'w') as f:
145
                f.write('@rem dummy fed')
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
146
            return name
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
147
        else:
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
148
            name = basename + '.sh'
6973.7.5 by Jelmer Vernooij
s/file/open.
149
            with open(name, 'wb') as f:
150
                f.write(b'#!/bin/sh\n')
6619.3.14 by Jelmer Vernooij
Convert some octal numbers to new notations.
151
            os.chmod(name, 0o755)
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
152
            return './' + name
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
153
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
154
    def test_run_editor(self):
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
155
        self.overrideEnv('BRZ_EDITOR', self.make_do_nothing_editor())
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
156
        self.assertEqual(True, msgeditor._run_editor(''),
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
157
                         'Unable to run dummy fake editor')
158
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
159
    def test_parse_editor_name(self):
160
        """Correctly interpret names with spaces.
161
162
        See <https://bugs.launchpad.net/bzr/+bug/220331>
163
        """
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
164
        self.overrideEnv('BRZ_EDITOR',
7143.15.2 by Jelmer Vernooij
Run autopep8.
165
                         '"%s"' % self.make_do_nothing_editor('name with spaces'))
166
        self.assertEqual(True, msgeditor._run_editor('a_filename'))
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
167
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
168
    def make_fake_editor(self, message='test message from fed\n'):
2258.3.2 by James Westby
Allow an empty start message.
169
        """Set up environment so that an editor will be a known script.
170
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
171
        Sets up BRZ_EDITOR so that if an editor is spawned it will run a
2258.3.2 by James Westby
Allow an empty start message.
172
        script that just adds a known message to the start of the file.
173
        """
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
174
        if not isinstance(message, bytes):
175
            message = message.encode('utf-8')
176
        with open('fed.py', 'w') as f:
177
            f.write('#!%s\n' % sys.executable)
178
            f.write("""\
2625.9.5 by Daniel Watkins
Modified test_msgeditor.make_fake_editor to allow a custom message to be inserted.
179
# coding=utf-8
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
180
import sys
181
if len(sys.argv) == 2:
182
    fn = sys.argv[1]
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
183
    with open(fn, 'rb') as f:
184
        s = f.read()
185
    with open(fn, 'wb') as f:
186
        f.write(%r)
187
        f.write(s)
2625.9.9 by Daniel Watkins
Used format string as suggested by abentley.
188
""" % (message, ))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
189
        if sys.platform == "win32":
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
190
            # [win32] make batch file and set BRZ_EDITOR
6973.7.5 by Jelmer Vernooij
s/file/open.
191
            with open('fed.bat', 'w') as f:
192
                f.write("""\
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
193
@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
194
"%s" fed.py %%1
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
195
""" % sys.executable)
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
196
            self.overrideEnv('BRZ_EDITOR', 'fed.bat')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
197
        else:
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
198
            # [non-win32] make python script executable and set BRZ_EDITOR
6619.3.14 by Jelmer Vernooij
Convert some octal numbers to new notations.
199
            os.chmod('fed.py', 0o755)
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
200
            self.overrideEnv('BRZ_EDITOR', './fed.py')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
201
6833.7.1 by Jelmer Vernooij
Split test.
202
    def test_edit_commit_message_without_infotext(self):
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
203
        self.make_uncommitted_tree()
2258.3.2 by James Westby
Allow an empty start message.
204
        self.make_fake_editor()
205
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
206
        mutter('edit_commit_message without infotext')
207
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
208
                         msgeditor.edit_commit_message(''))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
209
6833.7.1 by Jelmer Vernooij
Split test.
210
    def test_edit_commit_message_with_ascii_infotext(self):
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
211
        self.make_uncommitted_tree()
6833.7.1 by Jelmer Vernooij
Split test.
212
        self.make_fake_editor()
213
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
214
        mutter('edit_commit_message with ascii string infotext')
215
        self.assertEqual('test message from fed\n',
216
                         msgeditor.edit_commit_message('spam'))
217
6833.7.1 by Jelmer Vernooij
Split test.
218
    def test_edit_commit_message_with_unicode_infotext(self):
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
219
        self.make_uncommitted_tree()
6833.7.1 by Jelmer Vernooij
Split test.
220
        self.make_fake_editor()
221
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
222
        mutter('edit_commit_message with unicode infotext')
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
223
        uni_val, ue_val = probe_unicode_in_user_encoding()
224
        if ue_val is None:
6833.7.3 by Jelmer Vernooij
Use skipTest.
225
            self.skipTest(
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
226
                'Cannot find a unicode character that works in encoding %s'
227
                % (osutils.get_user_encoding(),))
228
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
229
        self.assertEqual('test message from fed\n',
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
230
                         msgeditor.edit_commit_message(uni_val))
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
231
2598.6.27 by ghigo
small cleanup (line lenght)
232
        tmpl = edit_commit_message_encoded(u'\u1234'.encode("utf8"))
233
        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.
234
2258.3.2 by James Westby
Allow an empty start message.
235
    def test_start_message(self):
236
        self.make_uncommitted_tree()
237
        self.make_fake_editor()
2258.3.1 by James Westby
Add a way to specify a template commit message.
238
        self.assertEqual('test message from fed\nstart message\n',
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
239
                         msgeditor.edit_commit_message(
240
                             '', start_message='start message\n'))
2258.3.2 by James Westby
Allow an empty start message.
241
        self.assertEqual('test message from fed\n',
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
242
                         msgeditor.edit_commit_message(
243
                             '', start_message=''))
2258.3.1 by James Westby
Add a way to specify a template commit message.
244
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
245
    def test_deleted_commit_message(self):
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
246
        self.make_uncommitted_tree()
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
247
248
        if sys.platform == 'win32':
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
249
            editor = 'cmd.exe /c del'
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
250
        else:
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
251
            editor = 'rm'
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
252
        self.overrideEnv('BRZ_EDITOR', editor)
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
253
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
254
        self.assertRaises((EnvironmentError, errors.NoSuchFile),
7143.15.2 by Jelmer Vernooij
Run autopep8.
255
                          msgeditor.edit_commit_message, '')
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
256
1185.50.93 by John Arbash Meinel
Added a test for the new list of editors.
257
    def test__get_editor(self):
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
258
        self.overrideEnv('BRZ_EDITOR', 'bzr_editor')
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
259
        self.overrideEnv('VISUAL', 'visual')
260
        self.overrideEnv('EDITOR', 'editor')
5345.1.13 by Vincent Ladeuil
Cleanup test_msgeditor.
261
6260.3.2 by Vincent Ladeuil
Only the DEFAULT section is searched for the normal uses of bazaar.conf
262
        conf = config.GlobalStack()
6973.10.4 by Jelmer Vernooij
Update python3.passing.
263
        conf.store._load_from_string(b'[DEFAULT]\neditor = config_editor\n')
6260.3.2 by Vincent Ladeuil
Only the DEFAULT section is searched for the normal uses of bazaar.conf
264
        conf.store.save()
5345.1.13 by Vincent Ladeuil
Cleanup test_msgeditor.
265
        editors = list(msgeditor._get_editor())
266
        editors = [editor for (editor, cfg_src) in editors]
267
268
        self.assertEqual(['bzr_editor', 'config_editor', 'visual', 'editor'],
269
                         editors[:4])
270
271
        if sys.platform == 'win32':
272
            self.assertEqual(['wordpad.exe', 'notepad.exe'], editors[4:])
273
        else:
274
            self.assertEqual(['/usr/bin/editor', 'vi', 'pico', 'nano', 'joe'],
275
                             editors[4:])
276
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
277
    def test__run_editor_EACCES(self):
278
        """If running a configured editor raises EACESS, the user is warned."""
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
279
        self.overrideEnv('BRZ_EDITOR', 'eacces.py')
6973.7.5 by Jelmer Vernooij
s/file/open.
280
        with open('eacces.py', 'wb') as f:
281
            f.write(b'# Not a real editor')
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
282
        # Make the fake editor unreadable (and unexecutable)
283
        os.chmod('eacces.py', 0)
284
        # Set $EDITOR so that _run_editor will terminate before trying real
285
        # editors.
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
286
        self.overrideEnv('EDITOR', self.make_do_nothing_editor())
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
287
        # Call _run_editor, capturing mutter.warning calls.
288
        warnings = []
7143.15.2 by Jelmer Vernooij
Run autopep8.
289
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
290
        def warning(*args):
4789.23.1 by John Arbash Meinel
Spawning a non-executable file raises ENOEXEC on windows, not EACCESS.
291
            if len(args) > 1:
292
                warnings.append(args[0] % args[1:])
293
            else:
294
                warnings.append(args[0])
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
295
        _warning = trace.warning
296
        trace.warning = warning
297
        try:
298
            msgeditor._run_editor('')
299
        finally:
300
            trace.warning = _warning
7143.15.2 by Jelmer Vernooij
Run autopep8.
301
        self.assertStartsWith(
302
            warnings[0], 'Could not start editor "eacces.py"')
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
303
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
304
    def test__create_temp_file_with_commit_template(self):
305
        # check that commit template written properly
306
        # and has platform native line-endings (CRLF on win32)
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
307
        create_file = msgeditor._create_temp_file_with_commit_template
7143.15.2 by Jelmer Vernooij
Run autopep8.
308
        msgfilename, hasinfo = create_file(
309
            b'infotext', '----', b'start message')
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
310
        self.assertNotEqual(None, msgfilename)
311
        self.assertTrue(hasinfo)
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
312
        expected = os.linesep.join(['start message',
313
                                    '',
314
                                    '',
315
                                    '----',
316
                                    '',
317
                                    'infotext'])
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
318
        self.assertFileEqual(expected, msgfilename)
319
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.
320
    def test__create_temp_file_with_commit_template_in_unicode_dir(self):
5967.12.1 by Martin Pool
Move all test features into bzrlib.tests.features
321
        self.requireFeature(features.UnicodeFilenameFeature)
3004.1.7 by Daniel Watkins
test__create_temp_file_with_commit_template_in_unicode_dir now uses EncodingTestAdapter info.
322
        if hasattr(self, 'info'):
5537.1.1 by Vincent Ladeuil
Create commit message files in TMPDIR instead of the current dir
323
            tmpdir = self.info['directory']
324
            os.mkdir(tmpdir)
325
            # Force the creation of temp file in a directory whose name
326
            # requires some encoding support
7045.4.21 by Jelmer Vernooij
Fix some msgeditor tests.
327
            msgeditor._create_temp_file_with_commit_template(b'infotext',
5537.1.1 by Vincent Ladeuil
Create commit message files in TMPDIR instead of the current dir
328
                                                             tmpdir=tmpdir)
3004.1.7 by Daniel Watkins
test__create_temp_file_with_commit_template_in_unicode_dir now uses EncodingTestAdapter info.
329
        else:
3004.1.8 by Daniel Watkins
Changed TestSkipped to TestNotApplicable as suggested by Aaron.
330
            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.
331
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
332
    def test__create_temp_file_with_empty_commit_template(self):
333
        # empty file
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
334
        create_file = msgeditor._create_temp_file_with_commit_template
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
335
        msgfilename, hasinfo = create_file('')
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
336
        self.assertNotEqual(None, msgfilename)
337
        self.assertFalse(hasinfo)
338
        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.
339
340
    def test_unsupported_encoding_commit_message(self):
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
341
        self.overrideEnv('LANG', 'C')
342
        # LANG env variable has no effect on Windows
343
        # but some characters anyway cannot be represented
344
        # in default user encoding
345
        char = probe_bad_non_ascii(osutils.get_user_encoding())
346
        if char is None:
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
347
            self.skipTest(
348
                'Cannot find suitable non-ascii character '
349
                'for user_encoding (%s)' % osutils.get_user_encoding())
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
350
351
        self.make_fake_editor(message=char)
352
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
353
        self.make_uncommitted_tree()
6734.1.20 by Jelmer Vernooij
Move errors.
354
        self.assertRaises(msgeditor.BadCommitMessageEncoding,
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
355
                          msgeditor.edit_commit_message, '')
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
356
5912.4.4 by Jonathan Riddell
add test
357
    def test_set_commit_message_no_hooks(self):
358
        commit_obj = commit.Commit()
359
        self.assertIs(None,
7143.15.2 by Jelmer Vernooij
Run autopep8.
360
                      msgeditor.set_commit_message(commit_obj))
5912.4.4 by Jonathan Riddell
add test
361
362
    def test_set_commit_message_hook(self):
363
        msgeditor.hooks.install_named_hook("set_commit_message",
7143.15.2 by Jelmer Vernooij
Run autopep8.
364
                                           lambda commit_obj, existing_message: "save me some typing\n", None)
5912.4.4 by Jonathan Riddell
add test
365
        commit_obj = commit.Commit()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
366
        self.assertEqual("save me some typing\n",
7143.15.2 by Jelmer Vernooij
Run autopep8.
367
                         msgeditor.set_commit_message(commit_obj))
5912.4.4 by Jonathan Riddell
add test
368
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
369
    def test_generate_commit_message_template_no_hooks(self):
370
        commit_obj = commit.Commit()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
371
        self.assertIs(None,
7143.15.2 by Jelmer Vernooij
Run autopep8.
372
                      msgeditor.generate_commit_message_template(commit_obj))
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
373
374
    def test_generate_commit_message_template_hook(self):
375
        msgeditor.hooks.install_named_hook("commit_message_template",
7143.15.2 by Jelmer Vernooij
Run autopep8.
376
                                           lambda commit_obj, msg: "save me some typing\n", None)
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
377
        commit_obj = commit.Commit()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
378
        self.assertEqual("save me some typing\n",
7143.15.2 by Jelmer Vernooij
Run autopep8.
379
                         msgeditor.generate_commit_message_template(commit_obj))
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
380
381
382
# GZ 2009-11-17: This wants moving to osutils when the errno checking code is
383
class TestPlatformErrnoWorkarounds(TestCaseInTempDir):
384
    """Ensuring workarounds enshrined in code actually serve a purpose"""
4805.1.4 by John Arbash Meinel
Document a bit more what 193 means, and why we are testing it.
385
386
    def test_subprocess_call_bad_file(self):
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
387
        if sys.platform != "win32":
4805.1.4 by John Arbash Meinel
Document a bit more what 193 means, and why we are testing it.
388
            raise TestNotApplicable("Workarounds for windows only")
7143.15.2 by Jelmer Vernooij
Run autopep8.
389
        import subprocess
390
        import errno
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
391
        ERROR_BAD_EXE_FORMAT = 193
6973.7.5 by Jelmer Vernooij
s/file/open.
392
        open("textfile.txt", "w").close()
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
393
        e = self.assertRaises(WindowsError, subprocess.call, "textfile.txt")
5848.2.1 by John Arbash Meinel
Break compatibility with python <2.6.
394
        self.assertEqual(e.errno, errno.ENOEXEC)
395
        self.assertEqual(e.winerror, ERROR_BAD_EXE_FORMAT)