22
22
from sha import sha
24
25
from bzrlib.tests import TestCaseWithTransport
25
from bzrlib.testament import Testament, StrictTestament, StrictTestament3
26
from bzrlib.branch import Branch
27
from bzrlib.testament import Testament, StrictTestament
28
from bzrlib.trace import mutter
26
29
from bzrlib.transform import TreeTransform
27
30
from bzrlib.osutils import has_symlinks
30
class TestamentSetup(TestCaseWithTransport):
33
class TestamentTests(TestCaseWithTransport):
33
super(TestamentSetup, self).setUp()
36
super(TestamentTests, self).setUp()
34
37
self.wt = self.make_branch_and_tree('.')
35
self.wt.set_root_id('TREE_ROT')
36
38
b = self.b = self.wt.branch
37
39
b.nick = "test branch"
38
40
self.wt.commit(message='initial null commit',
55
57
rev_id='test@user-2',
56
58
committer='test@user')
59
class TestamentTests(TestamentSetup):
61
def testament_class(self):
64
def expected(self, key):
65
return texts[self.testament_class()][key]
67
def from_revision(self, repository, revision_id):
68
return self.testament_class().from_revision(repository, revision_id)
70
60
def test_null_testament(self):
71
61
"""Testament for a revision with no contents."""
72
t = self.from_revision(self.b.repository, 'test@user-1')
62
t = Testament.from_revision(self.b.repository, 'test@user-1')
73
63
ass = self.assertTrue
74
64
eq = self.assertEqual
75
65
ass(isinstance(t, Testament))
81
71
def test_testment_text_form(self):
82
72
"""Conversion of testament to canonical text form."""
83
t = self.from_revision(self.b.repository, 'test@user-1')
84
text_form = t.as_text()
85
self.log('testament text form:\n' + text_form)
86
self.assertEqualDiff(text_form, self.expected('rev_1'))
87
short_text_form = t.as_short_text()
88
self.assertEqualDiff(short_text_form, self.expected('rev_1_short'))
73
t = Testament.from_revision(self.b.repository, 'test@user-1')
74
text_form = t.as_text()
75
self.log('testament text form:\n' + text_form)
76
self.assertEqual(text_form, REV_1_TESTAMENT)
78
def test_strict_testment_text_form(self):
79
"""Conversion of testament to canonical text form."""
80
t = StrictTestament.from_revision(self.b.repository, 'test@user-1')
81
text_form = t.as_text()
82
self.log('testament text form:\n' + text_form)
83
self.assertEqualDiff(text_form, REV_1_STRICT_TESTAMENT)
90
85
def test_testament_with_contents(self):
91
86
"""Testament containing a file and a directory."""
92
t = self.from_revision(self.b.repository, 'test@user-2')
93
text_form = t.as_text()
94
self.log('testament text form:\n' + text_form)
95
self.assertEqualDiff(text_form, self.expected('rev_2'))
96
actual_short = t.as_short_text()
97
self.assertEqualDiff(actual_short, self.expected('rev_2_short'))
87
t = Testament.from_revision(self.b.repository, 'test@user-2')
88
text_form = t.as_text()
89
self.log('testament text form:\n' + text_form)
90
self.assertEqualDiff(text_form, REV_2_TESTAMENT)
91
actual_short = t.as_short_text()
92
self.assertEqualDiff(actual_short, REV_2_SHORT)
94
def test_strict_testament_with_contents(self):
95
"""Testament containing a file and a directory."""
96
t = StrictTestament.from_revision(self.b.repository, 'test@user-2')
97
text_form = t.as_text()
98
self.log('testament text form:\n' + text_form)
99
self.assertEqualDiff(text_form, REV_2_STRICT_TESTAMENT)
100
actual_short = t.as_short_text()
101
self.assertEqualDiff(actual_short, REV_2_SHORT_STRICT)
103
def test_testament_command(self):
104
"""Testament containing a file and a directory."""
105
out, err = self.run_bzr_captured(['testament', '--long'])
106
self.assertEqualDiff(err, '')
107
self.assertEqualDiff(out, REV_2_TESTAMENT)
109
def test_testament_command_2(self):
110
"""Command getting short testament of previous version."""
111
out, err = self.run_bzr_captured(['testament', '-r1'])
112
self.assertEqualDiff(err, '')
113
self.assertEqualDiff(out, REV_1_SHORT)
115
def test_testament_command_3(self):
116
"""Command getting short testament of previous version."""
117
out, err = self.run_bzr_captured(['testament', '-r1', '--strict'])
118
self.assertEqualDiff(err, '')
119
self.assertEqualDiff(out, REV_1_SHORT_STRICT)
99
121
def test_testament_symlinks(self):
100
122
"""Testament containing symlink (where possible)"""
108
130
rev_id='test@user-3',
109
131
committer='test@user')
110
t = self.from_revision(self.b.repository, 'test@user-3')
111
self.assertEqualDiff(t.as_text(), self.expected('rev_3'))
132
t = Testament.from_revision(self.b.repository, 'test@user-3')
133
self.assertEqualDiff(t.as_text(), REV_3_TESTAMENT)
113
135
def test_testament_revprops(self):
114
136
"""Testament to revision with extra properties"""
115
137
props = dict(flavor='sour cherry\ncream cheese',
119
139
self.wt.commit(message='revision with properties',
120
140
timestamp=1129025493,
122
142
rev_id='test@user-3',
123
143
committer='test@user',
125
t = self.from_revision(self.b.repository, 'test@user-3')
126
self.assertEqualDiff(t.as_text(), self.expected('rev_props'))
145
t = Testament.from_revision(self.b.repository, 'test@user-3')
146
self.assertEqualDiff(t.as_text(), REV_PROPS_TESTAMENT)
128
148
def test_testament_unicode_commit_message(self):
131
151
timestamp=1129025493,
133
153
rev_id='test@user-3',
134
committer='Erik B\xe5gfors <test@user>',
135
revprops={'uni':u'\xb5'}
137
t = self.from_revision(self.b.repository, 'test@user-3')
154
committer='test@user')
155
t = Testament.from_revision(self.b.repository, 'test@user-3')
138
156
self.assertEqualDiff(
139
self.expected('sample_unicode').encode('utf-8'), t.as_text())
157
SAMPLE_UNICODE_TESTAMENT.encode('utf-8'), t.as_text())
141
159
def test___init__(self):
142
160
revision = self.b.repository.get_revision('test@user-2')
143
161
inventory = self.b.repository.get_inventory('test@user-2')
144
testament_1 = self.testament_class()(revision, inventory)
145
text_1 = testament_1.as_short_text()
146
text_2 = self.from_revision(self.b.repository,
147
'test@user-2').as_short_text()
148
self.assertEqual(text_1, text_2)
162
testament_1 = Testament(revision, inventory).as_short_text()
163
testament_2 = Testament.from_revision(self.b.repository,
164
'test@user-2').as_short_text()
165
self.assertEqual(testament_1, testament_2)
151
class TestamentTestsStrict(TestamentTests):
153
def testament_class(self):
154
return StrictTestament
157
class TestamentTestsStrict2(TestamentTests):
159
def testament_class(self):
160
return StrictTestament3
163
168
REV_1_TESTAMENT = """\
164
169
bazaar-ng testament version 1
165
170
revision-id: test@user-1
341
REV_PROPS_TESTAMENT_STRICT = """\
342
bazaar-ng testament version 2.1
343
revision-id: test@user-3
345
timestamp: 1129025493
350
revision with properties
352
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
353
directory src src-id test@user-2 no
354
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
367
REV_PROPS_TESTAMENT_STRICT3 = """\
368
bazaar testament version 3 strict
369
revision-id: test@user-3
371
timestamp: 1129025493
376
revision with properties
378
directory . TREE_ROT test@user-3 no
379
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
380
directory src src-id test@user-2 no
381
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
415
REV_3_TESTAMENT_STRICT = """\
416
bazaar-ng testament version 2.1
417
revision-id: test@user-3
419
timestamp: 1129025493
426
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
427
symlink link link-id wibble/linktarget test@user-3 no
428
directory src src-id test@user-2 no
429
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
436
REV_3_TESTAMENT_STRICT3 = """\
437
bazaar testament version 3 strict
438
revision-id: test@user-3
440
timestamp: 1129025493
447
directory . TREE_ROT test@user-3 no
448
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
449
symlink link link-id wibble/linktarget test@user-3 no
450
directory src src-id test@user-2 no
451
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
458
313
SAMPLE_UNICODE_TESTAMENT = u"""\
459
314
bazaar-ng testament version 1
460
315
revision-id: test@user-3
461
committer: Erik B\xe5gfors <test@user>
462
317
timestamp: 1129025493
480
SAMPLE_UNICODE_TESTAMENT_STRICT = u"""\
481
bazaar-ng testament version 2.1
482
revision-id: test@user-3
483
committer: Erik B\xe5gfors <test@user>
484
timestamp: 1129025493
489
non-ascii commit \N{COPYRIGHT SIGN} me
491
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
492
directory src src-id test@user-2 no
493
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
502
SAMPLE_UNICODE_TESTAMENT_STRICT3 = u"""\
503
bazaar testament version 3 strict
504
revision-id: test@user-3
505
committer: Erik B\xe5gfors <test@user>
506
timestamp: 1129025493
511
non-ascii commit \N{COPYRIGHT SIGN} me
513
directory . TREE_ROT test@user-3 no
514
file hello hello-id 34dd0ac19a24bf80c4d33b5c8960196e8d8d1f73 test@user-2 yes
515
directory src src-id test@user-2 no
516
file src/foo.c foo.c-id a2a049c20f908ae31b231d98779eb63c66448f24 test@user-2 no
526
Testament: { 'rev_1': REV_1_TESTAMENT,
527
'rev_1_short': REV_1_SHORT,
528
'rev_2': REV_2_TESTAMENT,
529
'rev_2_short': REV_2_SHORT,
530
'rev_3': REV_3_TESTAMENT,
531
'rev_props': REV_PROPS_TESTAMENT,
532
'sample_unicode': SAMPLE_UNICODE_TESTAMENT,
534
StrictTestament: {'rev_1': REV_1_STRICT_TESTAMENT,
535
'rev_1_short': REV_1_SHORT_STRICT,
536
'rev_2': REV_2_STRICT_TESTAMENT,
537
'rev_2_short': REV_2_SHORT_STRICT,
538
'rev_3': REV_3_TESTAMENT_STRICT,
539
'rev_props': REV_PROPS_TESTAMENT_STRICT,
540
'sample_unicode': SAMPLE_UNICODE_TESTAMENT_STRICT,
542
StrictTestament3: {'rev_1': REV_1_STRICT_TESTAMENT3,
543
'rev_1_short': REV_1_SHORT_STRICT3,
544
'rev_2': REV_2_STRICT_TESTAMENT3,
545
'rev_2_short': REV_2_SHORT_STRICT3,
546
'rev_3': REV_3_TESTAMENT_STRICT3,
547
'rev_props': REV_PROPS_TESTAMENT_STRICT3,
548
'sample_unicode': SAMPLE_UNICODE_TESTAMENT_STRICT3,