22
22
from sha import sha
25
from bzrlib.tests import TestCaseInTempDir
25
from bzrlib.tests import TestCaseWithTransport
26
26
from bzrlib.branch import Branch
27
27
from bzrlib.testament import Testament
28
28
from bzrlib.trace import mutter
29
29
from bzrlib.osutils import has_symlinks
32
class TestamentTests(TestCaseInTempDir):
32
class TestamentTests(TestCaseWithTransport):
35
35
super(TestamentTests, self).setUp()
36
b = self.b = Branch.initialize(u'.')
36
self.wt = self.make_branch_and_tree('.')
37
b = self.b = self.wt.branch
37
38
b.nick = "test branch"
38
b.working_tree().commit(message='initial null commit',
39
self.wt.commit(message='initial null commit',
39
40
committer='test@user',
40
41
timestamp=1129025423, # 'Tue Oct 11 20:10:23 2005'
43
44
self.build_tree_contents([('hello', 'contents of hello file'),
45
46
('src/foo.c', 'int main()\n{\n}\n')])
46
b.working_tree().add(['hello', 'src', 'src/foo.c'],
47
self.wt.add(['hello', 'src', 'src/foo.c'],
47
48
['hello-id', 'src-id', 'foo.c-id'])
48
b.working_tree().commit(message='add files and directories',
49
self.wt.commit(message='add files and directories',
49
50
timestamp=1129025483,
51
52
rev_id='test@user-2',
54
55
def test_null_testament(self):
55
56
"""Testament for a revision with no contents."""
56
t = Testament.from_revision(self.b, 'test@user-1')
57
t = Testament.from_revision(self.b.repository, 'test@user-1')
57
58
ass = self.assertTrue
58
59
eq = self.assertEqual
59
60
ass(isinstance(t, Testament))
65
66
def test_testment_text_form(self):
66
67
"""Conversion of testament to canonical text form."""
67
t = Testament.from_revision(self.b, 'test@user-1')
68
t = Testament.from_revision(self.b.repository, 'test@user-1')
68
69
text_form = t.as_text()
69
70
self.log('testament text form:\n' + text_form)
70
71
self.assertEqual(text_form, REV_1_TESTAMENT)
72
73
def test_testament_with_contents(self):
73
74
"""Testament containing a file and a directory."""
74
t = Testament.from_revision(self.b, 'test@user-2')
75
t = Testament.from_revision(self.b.repository, 'test@user-2')
75
76
text_form = t.as_text()
76
77
self.log('testament text form:\n' + text_form)
77
78
self.assertEqualDiff(text_form, REV_2_TESTAMENT)
95
96
if not has_symlinks():
97
98
os.symlink('wibble/linktarget', 'link')
98
self.b.working_tree().add(['link'], ['link-id'])
99
self.b.working_tree().commit(message='add symlink',
99
self.wt.add(['link'], ['link-id'])
100
self.wt.commit(message='add symlink',
100
101
timestamp=1129025493,
102
103
rev_id='test@user-3',
103
104
committer='test@user')
104
t = Testament.from_revision(self.b, 'test@user-3')
105
t = Testament.from_revision(self.b.repository, 'test@user-3')
105
106
self.assertEqualDiff(t.as_text(), REV_3_TESTAMENT)
107
108
def test_testament_revprops(self):
108
109
"""Testament to revision with extra properties"""
109
110
props = dict(flavor='sour cherry\ncream cheese',
111
self.b.working_tree().commit(message='revision with properties',
112
self.wt.commit(message='revision with properties',
112
113
timestamp=1129025493,
114
115
rev_id='test@user-3',
115
116
committer='test@user',
117
t = Testament.from_revision(self.b, 'test@user-3')
118
t = Testament.from_revision(self.b.repository, 'test@user-3')
118
119
self.assertEqualDiff(t.as_text(), REV_PROPS_TESTAMENT)
121
def test_testament_unicode_commit_message(self):
123
message=u'non-ascii commit \N{COPYRIGHT SIGN} me',
124
timestamp=1129025493,
126
rev_id='test@user-3',
127
committer='test@user')
128
t = Testament.from_revision(self.b.repository, 'test@user-3')
129
self.assertEqualDiff(
130
SAMPLE_UNICODE_TESTAMENT.encode('utf-8'), t.as_text())
120
132
def test___init__(self):
121
revision = self.b.get_revision('test@user-2')
122
inventory = self.b.get_inventory('test@user-2')
133
revision = self.b.repository.get_revision('test@user-2')
134
inventory = self.b.repository.get_inventory('test@user-2')
123
135
testament_1 = Testament(revision, inventory).as_short_text()
124
testament_2 = Testament.from_revision(self.b,
136
testament_2 = Testament.from_revision(self.b.repository,
125
137
'test@user-2').as_short_text()
126
138
self.assertEqual(testament_1, testament_2)
236
SAMPLE_UNICODE_TESTAMENT = u"""\
237
bazaar-ng testament version 1
238
revision-id: test@user-3
240
timestamp: 1129025493
245
non-ascii commit \N{COPYRIGHT SIGN} me
247
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73
249
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24