~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_msgeditor.py

  • Committer: Vincent Ladeuil
  • Date: 2007-10-09 20:32:29 UTC
  • mto: (2903.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 2904.
  • Revision ID: v.ladeuil+lp@free.fr-20071009203229-5k200m1g7mf4jf9l
Fix 149019 by using a proper line number when reporting errors.

* bzrlib/util/configobj/configobj.py:
(ConfigObj._handle_error): Trivial fix. Since cur_index is
0-based, line number was off by one.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Test commit message editor.
18
18
"""
20
20
import os
21
21
import sys
22
22
 
 
23
import bzrlib
23
24
from bzrlib import (
24
 
    commit,
25
25
    errors,
26
26
    msgeditor,
27
27
    osutils,
28
 
    tests,
29
 
    trace,
30
28
    )
31
29
from bzrlib.branch import Branch
32
30
from bzrlib.config import ensure_config_dir_exists, config_filename
35
33
    edit_commit_message_encoded
36
34
)
37
35
from bzrlib.tests import (
 
36
    probe_bad_non_ascii,
38
37
    TestCaseWithTransport,
39
 
    TestNotApplicable,
40
38
    TestSkipped,
41
 
    multiply_tests,
42
 
    probe_bad_non_ascii,
43
 
    split_suite_by_re,
44
39
    )
45
 
from bzrlib.tests.EncodingAdapter import encoding_scenarios
46
40
from bzrlib.trace import mutter
47
41
 
48
42
 
49
 
def load_tests(standard_tests, module, loader):
50
 
    """Parameterize the test for tempfile creation with different encodings."""
51
 
    to_adapt, result = split_suite_by_re(standard_tests,
52
 
        "test__create_temp_file_with_commit_template_in_unicode_dir")
53
 
    return multiply_tests(to_adapt, encoding_scenarios, result)
54
 
 
55
 
 
56
43
class MsgEditorTest(TestCaseWithTransport):
57
44
 
58
45
    def make_uncommitted_tree(self):
67
54
                "filesystem encoding %s" % sys.getfilesystemencoding())
68
55
        working_tree.add(filename)
69
56
        return working_tree
70
 
 
 
57
    
71
58
    def test_commit_template(self):
72
59
        """Test building a commit message template"""
73
60
        working_tree = self.make_uncommitted_tree()
79
66
  hell\u00d8
80
67
""")
81
68
 
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
 
 
114
69
    def test_commit_template_encoded(self):
115
70
        """Test building a commit message template"""
116
71
        working_tree = self.make_uncommitted_tree()
141
96
  hell\u00d8
142
97
""".encode('utf8') in template)
143
98
 
144
 
    def make_do_nothing_editor(self):
 
99
    def test_run_editor(self):
145
100
        if sys.platform == "win32":
146
101
            f = file('fed.bat', 'w')
147
102
            f.write('@rem dummy fed')
148
103
            f.close()
149
 
            return 'fed.bat'
 
104
            os.environ['BZR_EDITOR'] = 'fed.bat'
150
105
        else:
151
106
            f = file('fed.sh', 'wb')
152
107
            f.write('#!/bin/sh\n')
153
108
            f.close()
154
109
            os.chmod('fed.sh', 0755)
155
 
            return './fed.sh'
 
110
            os.environ['BZR_EDITOR'] = './fed.sh'
156
111
 
157
 
    def test_run_editor(self):
158
 
        os.environ['BZR_EDITOR'] = self.make_do_nothing_editor()
159
112
        self.assertEqual(True, msgeditor._run_editor(''),
160
113
                         'Unable to run dummy fake editor')
161
114
 
250
203
            f.close()
251
204
 
252
205
            editors = list(msgeditor._get_editor())
253
 
            editors = [editor for (editor, cfg_src) in editors]
254
206
 
255
207
            self.assertEqual(['bzr_editor', 'config_editor', 'visual',
256
208
                              'editor'], editors[:4])
276
228
            else:
277
229
                os.environ['EDITOR'] = editor
278
230
 
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
300
 
        self.assertStartsWith(warnings[0], 'Could not start editor "eacces.py"')
301
 
 
302
231
    def test__create_temp_file_with_commit_template(self):
303
232
        # check that commit template written properly
304
233
        # and has platform native line-endings (CRLF on win32)
314
243
                                    'infotext'])
315
244
        self.assertFileEqual(expected, msgfilename)
316
245
 
317
 
    def test__create_temp_file_with_commit_template_in_unicode_dir(self):
318
 
        self.requireFeature(tests.UnicodeFilenameFeature)
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:
324
 
            raise TestNotApplicable('Test run elsewhere with non-ascii data.')
325
 
 
326
246
    def test__create_temp_file_with_empty_commit_template(self):
327
247
        # empty file
328
248
        create_file = msgeditor._create_temp_file_with_commit_template
337
257
            # LANG env variable has no effect on Windows
338
258
            # but some characters anyway cannot be represented
339
259
            # in default user encoding
340
 
            char = probe_bad_non_ascii(osutils.get_user_encoding())
 
260
            char = probe_bad_non_ascii(bzrlib.user_encoding)
341
261
            if char is None:
342
262
                raise TestSkipped('Cannot find suitable non-ascii character '
343
 
                    'for user_encoding (%s)' % osutils.get_user_encoding())
 
263
                    'for user_encoding (%s)' % bzrlib.user_encoding)
344
264
 
345
265
            self.make_fake_editor(message=char)
346
266
 
349
269
                              msgeditor.edit_commit_message, '')
350
270
        finally:
351
271
            osutils.set_or_unset_env('LANG', old_env)
352
 
 
353
 
    def test_generate_commit_message_template_no_hooks(self):
354
 
        commit_obj = commit.Commit()
355
 
        self.assertIs(None,
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()
365
 
        self.assertEquals("save me some typing\n",
366
 
            msgeditor.generate_commit_message_template(commit_obj))