/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 tests/__init__.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) 2006, 2007 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 as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
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
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
"""The basic test suite for bzr-git."""
18
 
 
19
 
from cStringIO import StringIO
20
 
 
21
 
import time
22
 
 
23
 
from bzrlib import (
24
 
    errors as bzr_errors,
25
 
    tests,
26
 
    )
27
 
from bzrlib.plugins.git import (
28
 
    import_dulwich,
29
 
    )
30
 
 
31
 
TestCase = tests.TestCase
32
 
TestCaseInTempDir = tests.TestCaseInTempDir
33
 
TestCaseWithTransport = tests.TestCaseWithTransport
34
 
TestCaseWithMemoryTransport = tests.TestCaseWithMemoryTransport
35
 
 
36
 
class _DulwichFeature(tests.Feature):
37
 
 
38
 
    def _probe(self):
39
 
        try:
40
 
            import_dulwich()
41
 
        except bzr_errors.DependencyNotPresent:
42
 
            return False
43
 
        return True
44
 
 
45
 
    def feature_name(self):
46
 
        return 'dulwich'
47
 
 
48
 
 
49
 
DulwichFeature = _DulwichFeature()
50
 
 
51
 
 
52
 
class GitBranchBuilder(object):
53
 
 
54
 
    def __init__(self, stream=None):
55
 
        self.commit_info = []
56
 
        self.orig_stream = stream
57
 
        if stream is None:
58
 
            self.stream = StringIO()
59
 
        else:
60
 
            self.stream = stream
61
 
        self._counter = 0
62
 
        self._branch = 'refs/heads/master'
63
 
 
64
 
    def set_branch(self, branch):
65
 
        """Set the branch we are committing."""
66
 
        self._branch = branch
67
 
 
68
 
    def _write(self, text):
69
 
        self.stream.write(text)
70
 
 
71
 
    def _writelines(self, lines):
72
 
        self.stream.writelines(lines)
73
 
 
74
 
    def _create_blob(self, content):
75
 
        self._counter += 1
76
 
        self._write('blob\n')
77
 
        self._write('mark :%d\n' % (self._counter,))
78
 
        self._write('data %d\n' % (len(content),))
79
 
        self._write(content)
80
 
        self._write('\n')
81
 
        return self._counter
82
 
 
83
 
    def set_symlink(self, path, content):
84
 
        """Create or update symlink at a given path."""
85
 
        mark = self._create_blob(content)
86
 
        mode = '120000'
87
 
        self.commit_info.append('M %s :%d %s\n'
88
 
                % (mode, mark, self._encode_path(path)))
89
 
 
90
 
    def set_file(self, path, content, executable):
91
 
        """Create or update content at a given path."""
92
 
        mark = self._create_blob(content)
93
 
        if executable:
94
 
            mode = '100755'
95
 
        else:
96
 
            mode = '100644'
97
 
        self.commit_info.append('M %s :%d %s\n'
98
 
                                % (mode, mark, self._encode_path(path)))
99
 
 
100
 
    def set_link(self, path, link_target):
101
 
        """Create or update a link at a given path."""
102
 
        mark = self._create_blob(link_target)
103
 
        self.commit_info.append('M 120000 :%d %s\n'
104
 
                                % (mark, self._encode_path(path)))
105
 
 
106
 
    def delete_entry(self, path):
107
 
        """This will delete files or symlinks at the given location."""
108
 
        self.commit_info.append('D %s\n' % (self._encode_path(path),))
109
 
 
110
 
    @staticmethod
111
 
    def _encode_path(path):
112
 
        if '\n' in path or path[0] == '"':
113
 
            path = path.replace('\\', '\\\\')
114
 
            path = path.replace('\n', '\\n')
115
 
            path = path.replace('"', '\\"')
116
 
            path = '"' + path + '"'
117
 
        return path.encode('utf-8')
118
 
 
119
 
    # TODO: Author
120
 
    # TODO: Author timestamp+timezone
121
 
    def commit(self, committer, message, timestamp=None,
122
 
               timezone='+0000', author=None,
123
 
               merge=None, base=None):
124
 
        """Commit the new content.
125
 
 
126
 
        :param committer: The name and address for the committer
127
 
        :param message: The commit message
128
 
        :param timestamp: The timestamp for the commit
129
 
        :param timezone: The timezone of the commit, such as '+0000' or '-1000'
130
 
        :param author: The name and address of the author (if different from
131
 
            committer)
132
 
        :param merge: A list of marks if this should merge in another commit
133
 
        :param base: An id for the base revision (primary parent) if that
134
 
            is not the last commit.
135
 
        :return: A mark which can be used in the future to reference this
136
 
            commit.
137
 
        """
138
 
        self._counter += 1
139
 
        mark = self._counter
140
 
        if timestamp is None:
141
 
            timestamp = int(time.time())
142
 
        self._write('commit %s\n' % (self._branch,))
143
 
        self._write('mark :%d\n' % (mark,))
144
 
        self._write('committer %s %s %s\n'
145
 
                    % (committer, timestamp, timezone))
146
 
        message = message.encode('UTF-8')
147
 
        self._write('data %d\n' % (len(message),))
148
 
        self._write(message)
149
 
        self._write('\n')
150
 
        if base is not None:
151
 
            self._write('from :%d\n' % (base,))
152
 
        if merge is not None:
153
 
            for m in merge:
154
 
                self._write('merge :%d\n' % (m,))
155
 
        self._writelines(self.commit_info)
156
 
        self._write('\n')
157
 
        self.commit_info = []
158
 
        return mark
159
 
 
160
 
    def reset(self, ref=None, mark=None):
161
 
        """Create or recreate the named branch.
162
 
 
163
 
        :param ref: branch name, defaults to the current branch.
164
 
        :param mark: commit the branch will point to.
165
 
        """
166
 
        if ref is None:
167
 
            ref = self._branch
168
 
        self._write('reset %s\n' % (ref,))
169
 
        if mark is not None:
170
 
            self._write('from :%d\n' % mark)
171
 
        self._write('\n')
172
 
 
173
 
    def finish(self):
174
 
        """We are finished building, close the stream, get the id mapping"""
175
 
        self.stream.seek(0)
176
 
        if self.orig_stream is None:
177
 
            from dulwich.repo import Repo
178
 
            r = Repo(".")
179
 
            from dulwich.fastexport import FastImporter
180
 
            importer = FastImporter(r)
181
 
            return importer.import_stream(self.stream)
182
 
 
183
 
 
184
 
def test_suite():
185
 
    loader = tests.TestUtil.TestLoader()
186
 
 
187
 
    suite = tests.TestUtil.TestSuite()
188
 
 
189
 
    testmod_names = [
190
 
        'test_blackbox',
191
 
        'test_builder',
192
 
        'test_branch',
193
 
        'test_cache',
194
 
        'test_dir',
195
 
        'test_fetch',
196
 
        'test_mapping',
197
 
        'test_object_store',
198
 
        'test_push',
199
 
        'test_remote',
200
 
        'test_repository',
201
 
        'test_refs',
202
 
        'test_revspec',
203
 
        'test_roundtrip',
204
 
        'test_transportgit',
205
 
        ]
206
 
    testmod_names = ['%s.%s' % (__name__, t) for t in testmod_names]
207
 
    suite.addTests(loader.loadTestsFromModuleNames(testmod_names))
208
 
 
209
 
    return suite