47
48
return standard_tests
51
class TestGroupCompressor(TestCaseWithTransport):
52
"""Tests for GroupCompressor"""
54
def test_empty_delta(self):
55
compressor = groupcompress.GroupCompressor(True)
56
self.assertEqual([], compressor.lines)
58
def test_one_nosha_delta(self):
60
compressor = groupcompress.GroupCompressor(True)
61
sha1, end_point = compressor.compress(('label',),
62
['strange\n', 'common\n'], None)
63
self.assertEqual(sha_strings(['strange\n', 'common\n']), sha1)
70
'\n', # the last \n in a text is removed, which allows safe
71
# serialisation of lines without trailing \n.
73
self.assertEqual(expected_lines, compressor.lines)
74
self.assertEqual(sum(map(len, expected_lines)), end_point)
76
def test_two_nosha_delta(self):
77
compressor = groupcompress.GroupCompressor(True)
78
sha1_1, _ = compressor.compress(('label',),
79
['strange\n', 'common\n'], None)
80
sha1_2, end_point = compressor.compress(('newlabel',),
81
['common\n', 'different\n'], None)
82
self.assertEqual(sha_strings(['common\n', 'different\n']), sha1_2)
85
'sha1: %s\n' % sha1_1,
91
'sha1: %s\n' % sha1_2,
92
# Delete what we don't want. Perhaps we want an implicit
93
# delete all to keep from bloating with useless delete
100
self.assertEqual(expected_lines, compressor.lines)
101
self.assertEqual(sum(map(len, expected_lines)), end_point)
103
def test_three_nosha_delta(self):
104
# The first interesting test: make a change that should use lines from
106
compressor = groupcompress.GroupCompressor(True)
107
sha1_1, end_point = compressor.compress(('label',),
108
['strange\n', 'common\n'], None)
109
sha1_2, _ = compressor.compress(('newlabel',),
110
['common\n', 'different\n', 'moredifferent\n'], None)
111
sha1_3, end_point = compressor.compress(('label3',),
112
['new\n', 'common\n', 'different\n', 'moredifferent\n'], None)
114
sha_strings(['new\n', 'common\n', 'different\n', 'moredifferent\n']),
118
'sha1: %s\n' % sha1_1,
124
'sha1: %s\n' % sha1_2,
125
# Delete what we don't want. Perhaps we want an implicit
126
# delete all to keep from bloating with useless delete
134
'sha1: %s\n' % sha1_3,
135
# Delete what we don't want. Perhaps we want an implicit
136
# delete all to keep from bloating with useless delete
138
# replace 'strange' with 'new'
141
# delete from after common up to differnet
147
self.assertEqualDiff(''.join(expected_lines), ''.join(compressor.lines))
148
self.assertEqual(sum(map(len, expected_lines)), end_point)
150
def test_stats(self):
151
compressor = groupcompress.GroupCompressor(True)
152
compressor.compress(('label',),
153
['strange\n', 'common\n'], None)
154
compressor.compress(('newlabel',),
155
['common\n', 'different\n', 'moredifferent\n'], None)
156
compressor.compress(('label3',),
157
['new\n', 'common\n', 'different\n', 'moredifferent\n'], None)
158
self.assertAlmostEqual(0.3, compressor.ratio(), 1)