57
57
expected = kw.get(n, [])
59
59
# tests are written with unix paths; fix them up for windows
61
# expected = [x.replace('/', os.sep) for x in expected]
61
expected = [x.replace('/', os.sep) for x in expected]
63
63
# strip out only the path components
64
64
got = [x[0] for x in getattr(delta, n)]
65
65
self.assertEquals(expected, got)
67
67
def test_cur_revno(self):
68
b = Branch(u'.', init=True)
68
b = Branch('.', init=True)
71
b.working_tree().commit('empty commit')
71
b.commit('empty commit')
72
72
show_log(b, lf, verbose=True, start_revision=1, end_revision=1)
73
73
self.assertRaises(InvalidRevisionNumber, show_log, b, lf,
74
74
start_revision=2, end_revision=1)
152
154
# commit a log message with control characters
153
155
msg = "All 8-bit chars: " + ''.join([unichr(x) for x in range(256)])
154
self.log("original commit message: %r", msg)
155
b.working_tree().commit(msg)
156
157
lf = LogCatcher()
157
158
show_log(b, lf, verbose=True)
158
159
committed_msg = lf.logs[0].rev.message
159
160
self.log("escaped commit message: %r", committed_msg)
160
161
self.assert_(msg != committed_msg)
161
162
self.assert_(len(committed_msg) > len(msg))
163
# Check that log message with only XML-valid characters isn't
164
# escaped. As ElementTree apparently does some kind of
165
# newline conversion, neither LF (\x0A) nor CR (\x0D) are
166
# included in the test commit message, even though they are
167
# valid XML 1.0 characters.
168
msg = "\x09" + ''.join([unichr(x) for x in range(0x20, 256)])
169
self.log("original commit message: %r", msg)
170
b.working_tree().commit(msg)
172
show_log(b, lf, verbose=True)
173
committed_msg = lf.logs[0].rev.message
174
self.log("escaped commit message: %r", committed_msg)
175
self.assert_(msg == committed_msg)
177
def test_trailing_newlines(self):
178
b = Branch.initialize(u'.')
180
wt = b.working_tree()
181
open('a', 'wb').write('hello moto\n')
183
wt.commit('simple log message', rev_id='a1'
184
, timestamp=1132586655.459960938, timezone=-6*3600
185
, committer='Joe Foo <joe@foo.com>')
186
open('b', 'wb').write('goodbye\n')
188
wt.commit('multiline\nlog\nmessage\n', rev_id='a2'
189
, timestamp=1132586842.411175966, timezone=-6*3600
190
, committer='Joe Foo <joe@foo.com>')
192
open('c', 'wb').write('just another manic monday\n')
194
wt.commit('single line with trailing newline\n', rev_id='a3'
195
, timestamp=1132587176.835228920, timezone=-6*3600
196
, committer = 'Joe Foo <joe@foo.com>')
199
lf = ShortLogFormatter(to_file=sio)
201
self.assertEquals(sio.getvalue(), """\
202
3 Joe Foo\t2005-11-21
203
single line with trailing newline
205
2 Joe Foo\t2005-11-21
210
1 Joe Foo\t2005-11-21
216
lf = LongLogFormatter(to_file=sio)
218
self.assertEquals(sio.getvalue(), """\
219
------------------------------------------------------------
221
committer: Joe Foo <joe@foo.com>
223
timestamp: Mon 2005-11-21 09:32:56 -0600
225
single line with trailing newline
226
------------------------------------------------------------
228
committer: Joe Foo <joe@foo.com>
230
timestamp: Mon 2005-11-21 09:27:22 -0600
235
------------------------------------------------------------
237
committer: Joe Foo <joe@foo.com>
239
timestamp: Mon 2005-11-21 09:24:15 -0600
244
def test_verbose_log(self):
245
"""Verbose log includes changed files
249
b = Branch.initialize(u'.')
250
self.build_tree(['a'])
251
wt = b.working_tree()
253
# XXX: why does a longer nick show up?
254
b.nick = 'test_verbose_log'
255
wt.commit(message='add a',
256
timestamp=1132711707,
258
committer='Lorem Ipsum <test@example.com>')
259
logfile = file('out.tmp', 'w+')
260
formatter = LongLogFormatter(to_file=logfile)
261
show_log(b, formatter, verbose=True)
264
log_contents = logfile.read()
265
self.assertEqualDiff(log_contents, '''\
266
------------------------------------------------------------
268
committer: Lorem Ipsum <test@example.com>
269
branch nick: test_verbose_log
270
timestamp: Wed 2005-11-23 12:08:27 +1000