/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."""
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:
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 "
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):
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,
105
u"""\
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,
119
u"""\
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.18 by ghigo
Update the tests to the new *_encoded() functions
124
2598.6.2 by ghigo
Add testcase
125
    def test_commit_template_and_diff(self):
126
        """Test building a commit message template"""
127
        working_tree = self.make_uncommitted_tree()
2598.6.24 by ghigo
update on the basis of Aaron suggestions
128
        template = make_commit_message_template_encoded(working_tree,
129
                                                        None,
130
                                                        diff=True,
131
                                                        output_encoding='utf8')
2598.6.2 by ghigo
Add testcase
132
2598.6.10 by ghigo
In the commit dialog, the diff is stored as 8-bit raw data
133
        self.assertTrue("""\
2598.6.2 by ghigo
Add testcase
134
@@ -0,0 +1,1 @@
135
+contents of hello
2598.6.14 by ghigo
Update the test
136
""" in template)
2598.6.3 by ghigo
Add test case
137
        self.assertTrue(u"""\
138
added:
139
  hell\u00d8
2598.6.14 by ghigo
Update the test
140
""".encode('utf8') in template)
2598.6.2 by ghigo
Add testcase
141
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
142
    def make_do_nothing_editor(self, basename='fed'):
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
143
        if sys.platform == "win32":
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
144
            name = basename + '.bat'
6973.7.5 by Jelmer Vernooij
s/file/open.
145
            with open(name, 'w') as f:
146
                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.
147
            return name
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
148
        else:
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
149
            name = basename + '.sh'
6973.7.5 by Jelmer Vernooij
s/file/open.
150
            with open(name, 'wb') as f:
151
                f.write(b'#!/bin/sh\n')
6619.3.14 by Jelmer Vernooij
Convert some octal numbers to new notations.
152
            os.chmod(name, 0o755)
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
153
            return './' + name
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
154
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
155
    def test_run_editor(self):
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
156
        self.overrideEnv('BRZ_EDITOR', self.make_do_nothing_editor())
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
157
        self.assertEqual(True, msgeditor._run_editor(''),
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
158
                         'Unable to run dummy fake editor')
159
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
160
    def test_parse_editor_name(self):
161
        """Correctly interpret names with spaces.
162
163
        See <https://bugs.launchpad.net/bzr/+bug/220331>
164
        """
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
165
        self.overrideEnv('BRZ_EDITOR',
5646.1.1 by Martin Pool
Use cmdline.split on BZR_EDITOR so that you can pass names including spaces.
166
            '"%s"' % self.make_do_nothing_editor('name with spaces'))
167
        self.assertEqual(True, msgeditor._run_editor('a_filename'))    
168
2625.9.5 by Daniel Watkins
Modified test_msgeditor.make_fake_editor to allow a custom message to be inserted.
169
    def make_fake_editor(self, message='test message from fed\\n'):
2258.3.2 by James Westby
Allow an empty start message.
170
        """Set up environment so that an editor will be a known script.
171
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
172
        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.
173
        script that just adds a known message to the start of the file.
174
        """
6973.7.5 by Jelmer Vernooij
s/file/open.
175
        with open('fed.py', 'wb') as f:
176
            f.write(b'#!%s\n' % sys.executable)
177
            f.write(b"""\
2625.9.5 by Daniel Watkins
Modified test_msgeditor.make_fake_editor to allow a custom message to be inserted.
178
# coding=utf-8
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
179
import sys
180
if len(sys.argv) == 2:
181
    fn = sys.argv[1]
6973.7.5 by Jelmer Vernooij
s/file/open.
182
    f = open(fn, 'rb')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
183
    s = f.read()
184
    f.close()
6973.7.5 by Jelmer Vernooij
s/file/open.
185
    f = open(fn, 'wb')
2625.9.9 by Daniel Watkins
Used format string as suggested by abentley.
186
    f.write('%s')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
187
    f.write(s)
188
    f.close()
2625.9.9 by Daniel Watkins
Used format string as suggested by abentley.
189
""" % (message, ))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
190
        if sys.platform == "win32":
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
191
            # [win32] make batch file and set BRZ_EDITOR
6973.7.5 by Jelmer Vernooij
s/file/open.
192
            with open('fed.bat', 'w') as f:
193
                f.write("""\
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
194
@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
195
"%s" fed.py %%1
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
196
""" % sys.executable)
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
197
            self.overrideEnv('BRZ_EDITOR', 'fed.bat')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
198
        else:
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
199
            # [non-win32] make python script executable and set BRZ_EDITOR
6619.3.14 by Jelmer Vernooij
Convert some octal numbers to new notations.
200
            os.chmod('fed.py', 0o755)
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
201
            self.overrideEnv('BRZ_EDITOR', './fed.py')
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
202
6833.7.1 by Jelmer Vernooij
Split test.
203
    def test_edit_commit_message_without_infotext(self):
2258.3.2 by James Westby
Allow an empty start message.
204
        working_tree = self.make_uncommitted_tree()
205
        self.make_fake_editor()
206
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
207
        mutter('edit_commit_message without infotext')
208
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
209
                         msgeditor.edit_commit_message(''))
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
210
6833.7.1 by Jelmer Vernooij
Split test.
211
    def test_edit_commit_message_with_ascii_infotext(self):
212
        working_tree = self.make_uncommitted_tree()
213
        self.make_fake_editor()
214
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
215
        mutter('edit_commit_message with ascii string infotext')
216
        self.assertEqual('test message from fed\n',
217
                         msgeditor.edit_commit_message('spam'))
218
6833.7.1 by Jelmer Vernooij
Split test.
219
    def test_edit_commit_message_with_unicode_infotext(self):
220
        working_tree = self.make_uncommitted_tree()
221
        self.make_fake_editor()
222
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
223
        mutter('edit_commit_message with unicode infotext')
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
224
        uni_val, ue_val = probe_unicode_in_user_encoding()
225
        if ue_val is None:
6833.7.3 by Jelmer Vernooij
Use skipTest.
226
            self.skipTest(
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
227
                'Cannot find a unicode character that works in encoding %s'
228
                % (osutils.get_user_encoding(),))
229
1185.85.9 by John Arbash Meinel
[patch] Alexander Belchenko: test spawning a msg editor
230
        self.assertEqual('test message from fed\n',
6833.7.2 by Jelmer Vernooij
Cope with non-standard user encoding.
231
                         msgeditor.edit_commit_message(uni_val))
2598.6.18 by ghigo
Update the tests to the new *_encoded() functions
232
2598.6.27 by ghigo
small cleanup (line lenght)
233
        tmpl = edit_commit_message_encoded(u'\u1234'.encode("utf8"))
234
        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.
235
2258.3.2 by James Westby
Allow an empty start message.
236
    def test_start_message(self):
237
        self.make_uncommitted_tree()
238
        self.make_fake_editor()
2258.3.1 by James Westby
Add a way to specify a template commit message.
239
        self.assertEqual('test message from fed\nstart message\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
240
                         msgeditor.edit_commit_message('',
2258.3.1 by James Westby
Add a way to specify a template commit message.
241
                                              start_message='start message\n'))
2258.3.2 by James Westby
Allow an empty start message.
242
        self.assertEqual('test message from fed\n',
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
243
                         msgeditor.edit_commit_message('',
2258.3.2 by James Westby
Allow an empty start message.
244
                                              start_message=''))
2258.3.1 by James Westby
Add a way to specify a template commit message.
245
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
246
    def test_deleted_commit_message(self):
247
        working_tree = self.make_uncommitted_tree()
248
249
        if sys.platform == 'win32':
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
250
            editor = 'cmd.exe /c del'
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
251
        else:
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
252
            editor = 'rm'
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
253
        self.overrideEnv('BRZ_EDITOR', editor)
1185.85.14 by John Arbash Meinel
Change exception handling for msgeditor.py to only catch specific exceptions.
254
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
255
        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.
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
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
277
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
278
    def test__run_editor_EACCES(self):
279
        """If running a configured editor raises EACESS, the user is warned."""
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
280
        self.overrideEnv('BRZ_EDITOR', 'eacces.py')
6973.7.5 by Jelmer Vernooij
s/file/open.
281
        with open('eacces.py', 'wb') as f:
282
            f.write(b'# Not a real editor')
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
283
        # Make the fake editor unreadable (and unexecutable)
284
        os.chmod('eacces.py', 0)
285
        # Set $EDITOR so that _run_editor will terminate before trying real
286
        # editors.
5570.3.9 by Vincent Ladeuil
More use cases for overrideEnv, _cleanEnvironment *may* contain too much variables now.
287
        self.overrideEnv('EDITOR', self.make_do_nothing_editor())
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
288
        # Call _run_editor, capturing mutter.warning calls.
289
        warnings = []
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
3910.1.3 by Andrew Bennetts
Tweak warning slightly.
301
        self.assertStartsWith(warnings[0], 'Could not start editor "eacces.py"')
3910.1.1 by Andrew Bennetts
Improve error handling in msgeditor._run_editor.
302
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
303
    def test__create_temp_file_with_commit_template(self):
304
        # check that commit template written properly
305
        # and has platform native line-endings (CRLF on win32)
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
306
        create_file = msgeditor._create_temp_file_with_commit_template
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
307
        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
308
        self.assertNotEqual(None, msgfilename)
309
        self.assertTrue(hasinfo)
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
310
        expected = os.linesep.join(['start message',
311
                                    '',
312
                                    '',
313
                                    '----',
314
                                    '',
315
                                    'infotext'])
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
316
        self.assertFileEqual(expected, msgfilename)
317
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.
318
    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
319
        self.requireFeature(features.UnicodeFilenameFeature)
3004.1.7 by Daniel Watkins
test__create_temp_file_with_commit_template_in_unicode_dir now uses EncodingTestAdapter info.
320
        if hasattr(self, 'info'):
5537.1.1 by Vincent Ladeuil
Create commit message files in TMPDIR instead of the current dir
321
            tmpdir = self.info['directory']
322
            os.mkdir(tmpdir)
323
            # Force the creation of temp file in a directory whose name
324
            # requires some encoding support
325
            msgeditor._create_temp_file_with_commit_template('infotext',
326
                                                             tmpdir=tmpdir)
3004.1.7 by Daniel Watkins
test__create_temp_file_with_commit_template_in_unicode_dir now uses EncodingTestAdapter info.
327
        else:
3004.1.8 by Daniel Watkins
Changed TestSkipped to TestNotApplicable as suggested by Aaron.
328
            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.
329
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
330
    def test__create_temp_file_with_empty_commit_template(self):
331
        # empty file
2772.1.1 by Martin Pool
Merge commit --show-diff feature from Goffredo
332
        create_file = msgeditor._create_temp_file_with_commit_template
2472.4.2 by Alexander Belchenko
unwrapping long lines in tests
333
        msgfilename, hasinfo = create_file('')
2472.4.1 by Alexander Belchenko
Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added
334
        self.assertNotEqual(None, msgfilename)
335
        self.assertFalse(hasinfo)
336
        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.
337
338
    def test_unsupported_encoding_commit_message(self):
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
339
        self.overrideEnv('LANG', 'C')
340
        # LANG env variable has no effect on Windows
341
        # but some characters anyway cannot be represented
342
        # in default user encoding
343
        char = probe_bad_non_ascii(osutils.get_user_encoding())
344
        if char is None:
6833.7.3 by Jelmer Vernooij
Use skipTest.
345
            self.skipTest('Cannot find suitable non-ascii character '
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
346
                'for user_encoding (%s)' % osutils.get_user_encoding())
347
348
        self.make_fake_editor(message=char)
349
350
        working_tree = self.make_uncommitted_tree()
6734.1.20 by Jelmer Vernooij
Move errors.
351
        self.assertRaises(msgeditor.BadCommitMessageEncoding,
5570.3.12 by Vincent Ladeuil
Replace osutils.set_or_unset_env calls with self.overrideEnv.
352
                          msgeditor.edit_commit_message, '')
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
353
5912.4.4 by Jonathan Riddell
add test
354
    def test_set_commit_message_no_hooks(self):
355
        commit_obj = commit.Commit()
356
        self.assertIs(None,
357
            msgeditor.set_commit_message(commit_obj))
358
359
    def test_set_commit_message_hook(self):
360
        msgeditor.hooks.install_named_hook("set_commit_message",
5912.4.10 by Jonathan Riddell
add test for set_commit_message hook
361
                lambda commit_obj, existing_message: "save me some typing\n", None)
5912.4.4 by Jonathan Riddell
add test
362
        commit_obj = commit.Commit()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
363
        self.assertEqual("save me some typing\n",
5912.4.4 by Jonathan Riddell
add test
364
            msgeditor.set_commit_message(commit_obj))
365
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
366
    def test_generate_commit_message_template_no_hooks(self):
367
        commit_obj = commit.Commit()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
368
        self.assertIs(None,
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
369
            msgeditor.generate_commit_message_template(commit_obj))
370
371
    def test_generate_commit_message_template_hook(self):
372
        msgeditor.hooks.install_named_hook("commit_message_template",
373
                lambda commit_obj, msg: "save me some typing\n", None)
374
        commit_obj = commit.Commit()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
375
        self.assertEqual("save me some typing\n",
3642.2.2 by Jelmer Vernooij
Add tests for commit_message_template hooks.
376
            msgeditor.generate_commit_message_template(commit_obj))
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
377
378
379
# GZ 2009-11-17: This wants moving to osutils when the errno checking code is
380
class TestPlatformErrnoWorkarounds(TestCaseInTempDir):
381
    """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.
382
383
    def test_subprocess_call_bad_file(self):
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
384
        if sys.platform != "win32":
4805.1.4 by John Arbash Meinel
Document a bit more what 193 means, and why we are testing it.
385
            raise TestNotApplicable("Workarounds for windows only")
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
386
        import subprocess, errno
387
        ERROR_BAD_EXE_FORMAT = 193
6973.7.5 by Jelmer Vernooij
s/file/open.
388
        open("textfile.txt", "w").close()
4789.23.3 by Martin
Test that msgeditor errno workarounds for windows are actually required
389
        e = self.assertRaises(WindowsError, subprocess.call, "textfile.txt")
5848.2.1 by John Arbash Meinel
Break compatibility with python <2.6.
390
        self.assertEqual(e.errno, errno.ENOEXEC)
391
        self.assertEqual(e.winerror, ERROR_BAD_EXE_FORMAT)