/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_msgeditor.py

  • Committer: v.ladeuil+lp at free
  • Date: 2006-10-12 14:29:32 UTC
  • mto: (2145.1.1 keepalive)
  • mto: This revision was merged to the branch mainline in revision 2146.
  • Revision ID: v.ladeuil+lp@free.fr-20061012142932-7221fe16d2b48fa3
Shuffle http related test code. Hopefully it ends up at the right place :)

* bzrlib/tests/HttpServer.py: 
New file. bzrlib.tests.ChrootedTestCase use HttpServer. So the
class can't be defined in bzrlib.tests.HTTPUtils because it
creates a circular dependency (bzrlib.tests.HTTPUtils needs to
import bzrlib.tests).

* bzrlib/transport/http/_urllib.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/_pycurl.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/__init__.py: 
Transfer all test related code to either bzrlib.tests.HttpServer
and bzrlib.tests.HTTPUtils.
Fix all use of TransportNotPossible and InvalidURL by prefixing it
by 'errors.' (this seems to be the preferred way in the rest of
bzr).
Get rid of unused imports.

* bzrlib/tests/test_transport.py:
(ReadonlyDecoratorTransportTest.test_local_parameters,
FakeNFSDecoratorTests.test_http_parameters): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_sftp_transport.py:
(set_test_transport_to_sftp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_selftest.py:
(TestTestCaseWithTransport.test_get_readonly_url_http): Use
HttpServer from bzrlib.tests.HttpServer instead of
bzrlib.transport.http.

* bzrlib/tests/test_repository.py: 
Does *not* use HttpServer.

* bzrlib/tests/test_http.py: 
Build on top of bzrlib.tests.HttpServer and bzrlib.tests.HTTPUtils
instead of bzrlib.transport.http.

* bzrlib/tests/test_bzrdir.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_http.py:
(HTTPBranchTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_branch.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/__init__.py:
(ChrootedTestCase.setUp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 by Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License version 2 as published by
 
5
# the Free Software Foundation.
 
6
#
 
7
# This program is distributed in the hope that it will be useful,
 
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
10
# GNU General Public License for more details.
 
11
#
 
12
# You should have received a copy of the GNU General Public License
 
13
# along with this program; if not, write to the Free Software
 
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
 
 
16
"""Test commit message editor.
 
17
"""
 
18
 
 
19
import os
 
20
import sys
 
21
 
 
22
from bzrlib.branch import Branch
 
23
from bzrlib.config import ensure_config_dir_exists, config_filename
 
24
import bzrlib.msgeditor 
 
25
from bzrlib.tests import TestCaseWithTransport, TestSkipped
 
26
from bzrlib.trace import mutter
 
27
 
 
28
 
 
29
class MsgEditorTest(TestCaseWithTransport):
 
30
 
 
31
    def make_uncommitted_tree(self):
 
32
        """Build a branch with uncommitted unicode named changes in the cwd."""
 
33
        working_tree = self.make_branch_and_tree('.')
 
34
        b = working_tree.branch
 
35
        filename = u'hell\u00d8'
 
36
        try:
 
37
            self.build_tree_contents([(filename, 'contents of hello')])
 
38
        except UnicodeEncodeError:
 
39
            raise TestSkipped("can't build unicode working tree in "
 
40
                "filesystem encoding %s" % sys.getfilesystemencoding())
 
41
        working_tree.add(filename)
 
42
        return working_tree
 
43
    
 
44
    def test_commit_template(self):
 
45
        """Test building a commit message template"""
 
46
        working_tree = self.make_uncommitted_tree()
 
47
        template = bzrlib.msgeditor.make_commit_message_template(working_tree, None)
 
48
        self.assertEqualDiff(template,
 
49
u"""\
 
50
added:
 
51
  hell\u00d8
 
52
""")
 
53
 
 
54
    def setUp(self):
 
55
        super(MsgEditorTest, self).setUp()
 
56
        self._bzr_editor = os.environ.get('BZR_EDITOR', None)
 
57
 
 
58
    def tearDown(self):
 
59
        if self._bzr_editor is not None:
 
60
            os.environ['BZR_EDITOR'] = self._bzr_editor
 
61
        else:
 
62
            if os.environ.get('BZR_EDITOR', None) is not None:
 
63
                del os.environ['BZR_EDITOR']
 
64
        super(MsgEditorTest, self).tearDown()
 
65
 
 
66
    def test_run_editor(self):
 
67
        if sys.platform == "win32":
 
68
            f = file('fed.bat', 'w')
 
69
            f.write('@rem dummy fed')
 
70
            f.close()
 
71
            os.environ['BZR_EDITOR'] = 'fed.bat'
 
72
        else:
 
73
            f = file('fed.sh', 'wb')
 
74
            f.write('#!/bin/sh\n')
 
75
            f.close()
 
76
            os.chmod('fed.sh', 0755)
 
77
            os.environ['BZR_EDITOR'] = './fed.sh'
 
78
 
 
79
        self.assertEqual(True, bzrlib.msgeditor._run_editor(''),
 
80
                         'Unable to run dummy fake editor')
 
81
 
 
82
    def test_edit_commit_message(self):
 
83
        working_tree = self.make_uncommitted_tree()
 
84
        # make fake editor
 
85
        f = file('fed.py', 'wb')
 
86
        f.write('#!%s\n' % sys.executable)
 
87
        f.write("""\
 
88
import sys
 
89
if len(sys.argv) == 2:
 
90
    fn = sys.argv[1]
 
91
    f = file(fn, 'rb')
 
92
    s = f.read()
 
93
    f.close()
 
94
    f = file(fn, 'wb')
 
95
    f.write('test message from fed\\n')
 
96
    f.write(s)
 
97
    f.close()
 
98
""")
 
99
        f.close()
 
100
        if sys.platform == "win32":
 
101
            # [win32] make batch file and set BZR_EDITOR
 
102
            f = file('fed.bat', 'w')
 
103
            f.write("""\
 
104
@echo off
 
105
"%s" fed.py %%1
 
106
""" % sys.executable)
 
107
            f.close()
 
108
            os.environ['BZR_EDITOR'] = 'fed.bat'
 
109
        else:
 
110
            # [non-win32] make python script executable and set BZR_EDITOR
 
111
            os.chmod('fed.py', 0755)
 
112
            os.environ['BZR_EDITOR'] = './fed.py'
 
113
 
 
114
        mutter('edit_commit_message without infotext')
 
115
        self.assertEqual('test message from fed\n',
 
116
                         bzrlib.msgeditor.edit_commit_message(''))
 
117
 
 
118
        mutter('edit_commit_message with unicode infotext')
 
119
        self.assertEqual('test message from fed\n',
 
120
                         bzrlib.msgeditor.edit_commit_message(u'\u1234'))
 
121
 
 
122
    def test_deleted_commit_message(self):
 
123
        working_tree = self.make_uncommitted_tree()
 
124
 
 
125
        if sys.platform == 'win32':
 
126
            os.environ['BZR_EDITOR'] = 'cmd.exe /c del'
 
127
        else:
 
128
            os.environ['BZR_EDITOR'] = 'rm'
 
129
 
 
130
        self.assertRaises((IOError, OSError), bzrlib.msgeditor.edit_commit_message, '')
 
131
 
 
132
    def test__get_editor(self):
 
133
        # Test that _get_editor can return a decent list of items
 
134
        bzr_editor = os.environ.get('BZR_EDITOR')
 
135
        visual = os.environ.get('VISUAL')
 
136
        editor = os.environ.get('EDITOR')
 
137
        try:
 
138
            os.environ['BZR_EDITOR'] = 'bzr_editor'
 
139
            os.environ['VISUAL'] = 'visual'
 
140
            os.environ['EDITOR'] = 'editor'
 
141
 
 
142
            ensure_config_dir_exists()
 
143
            f = open(config_filename(), 'wb')
 
144
            f.write('editor = config_editor\n')
 
145
            f.close()
 
146
 
 
147
            editors = list(bzrlib.msgeditor._get_editor())
 
148
 
 
149
            self.assertEqual(['bzr_editor', 'config_editor', 'visual',
 
150
                              'editor'], editors[:4])
 
151
 
 
152
            if sys.platform == 'win32':
 
153
                self.assertEqual(['wordpad.exe', 'notepad.exe'], editors[4:])
 
154
            else:
 
155
                self.assertEqual(['/usr/bin/editor', 'vi', 'pico', 'nano',
 
156
                                  'joe'], editors[4:])
 
157
 
 
158
        finally:
 
159
            # Restore the environment
 
160
            if bzr_editor is None:
 
161
                del os.environ['BZR_EDITOR']
 
162
            else:
 
163
                os.environ['BZR_EDITOR'] = bzr_editor
 
164
            if visual is None:
 
165
                del os.environ['VISUAL']
 
166
            else:
 
167
                os.environ['VISUAL'] = visual
 
168
            if editor is None:
 
169
                del os.environ['EDITOR']
 
170
            else:
 
171
                os.environ['EDITOR'] = editor