68
68
class TestContainerWriter(tests.TestCase):
71
self.output = StringIO()
72
self.writer = pack.ContainerWriter(self.output.write)
74
def assertOutput(self, expected_output):
75
"""Assert that the output of self.writer ContainerWriter is equal to
78
self.assertEqual(expected_output, self.output.getvalue())
70
80
def test_construct(self):
71
81
"""Test constructing a ContainerWriter.
73
This uses None as the output stream to show that the constructor doesn't
74
try to use the output stream.
83
This uses None as the output stream to show that the constructor
84
doesn't try to use the output stream.
76
86
writer = pack.ContainerWriter(None)
78
88
def test_begin(self):
79
89
"""The begin() method writes the container format marker line."""
81
writer = pack.ContainerWriter(output.write)
83
self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\n',
91
self.assertOutput('Bazaar pack format 1 (introduced in 0.18)\n')
86
93
def test_zero_records_written_after_begin(self):
87
94
"""After begin is written, 0 records have been written."""
89
writer = pack.ContainerWriter(output.write)
91
self.assertEqual(0, writer.records_written)
96
self.assertEqual(0, self.writer.records_written)
93
98
def test_end(self):
94
99
"""The end() method writes an End Marker record."""
96
writer = pack.ContainerWriter(output.write)
99
self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\nE',
102
self.assertOutput('Bazaar pack format 1 (introduced in 0.18)\nE')
102
104
def test_empty_end_does_not_add_a_record_to_records_written(self):
103
105
"""The end() method does not count towards the records written."""
105
writer = pack.ContainerWriter(output.write)
108
self.assertEqual(0, writer.records_written)
108
self.assertEqual(0, self.writer.records_written)
110
110
def test_non_empty_end_does_not_add_a_record_to_records_written(self):
111
111
"""The end() method does not count towards the records written."""
113
writer = pack.ContainerWriter(output.write)
115
writer.add_bytes_record('foo', names=[])
117
self.assertEqual(1, writer.records_written)
113
self.writer.add_bytes_record('foo', names=[])
115
self.assertEqual(1, self.writer.records_written)
119
117
def test_add_bytes_record_no_name(self):
120
118
"""Add a bytes record with no name."""
122
writer = pack.ContainerWriter(output.write)
124
offset, length = writer.add_bytes_record('abc', names=[])
120
offset, length = self.writer.add_bytes_record('abc', names=[])
125
121
self.assertEqual((42, 7), (offset, length))
126
self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\nB3\n\nabc',
123
'Bazaar pack format 1 (introduced in 0.18)\nB3\n\nabc')
129
125
def test_add_bytes_record_one_name(self):
130
126
"""Add a bytes record with one name."""
132
writer = pack.ContainerWriter(output.write)
134
offset, length = writer.add_bytes_record('abc', names=[('name1', )])
128
offset, length = self.writer.add_bytes_record(
129
'abc', names=[('name1', )])
135
130
self.assertEqual((42, 13), (offset, length))
137
'Bazaar pack format 1 (introduced in 0.18)\n'
141
def test_add_bytes_record_two_names(self):
142
"""Add a bytes record with two names."""
144
writer = pack.ContainerWriter(output.write)
146
offset, length = writer.add_bytes_record('abc', names=[('name1', ), ('name2', )])
147
self.assertEqual((42, 19), (offset, length))
149
'Bazaar pack format 1 (introduced in 0.18)\n'
150
'B3\nname1\nname2\n\nabc',
153
def test_add_bytes_record_two_names(self):
154
"""Add a bytes record with two names."""
156
writer = pack.ContainerWriter(output.write)
158
offset, length = writer.add_bytes_record('abc', names=[('name1', ), ('name2', )])
159
self.assertEqual((42, 19), (offset, length))
161
'Bazaar pack format 1 (introduced in 0.18)\n'
162
'B3\nname1\nname2\n\nabc',
132
'Bazaar pack format 1 (introduced in 0.18)\n'
135
def test_add_bytes_record_two_names(self):
136
"""Add a bytes record with two names."""
138
offset, length = self.writer.add_bytes_record(
139
'abc', names=[('name1', ), ('name2', )])
140
self.assertEqual((42, 19), (offset, length))
142
'Bazaar pack format 1 (introduced in 0.18)\n'
143
'B3\nname1\nname2\n\nabc')
145
def test_add_bytes_record_two_names(self):
146
"""Add a bytes record with two names."""
148
offset, length = self.writer.add_bytes_record(
149
'abc', names=[('name1', ), ('name2', )])
150
self.assertEqual((42, 19), (offset, length))
152
'Bazaar pack format 1 (introduced in 0.18)\n'
153
'B3\nname1\nname2\n\nabc')
165
155
def test_add_bytes_record_two_element_name(self):
166
156
"""Add a bytes record with a two-element name."""
168
writer = pack.ContainerWriter(output.write)
170
offset, length = writer.add_bytes_record('abc', names=[('name1', 'name2')])
158
offset, length = self.writer.add_bytes_record(
159
'abc', names=[('name1', 'name2')])
171
160
self.assertEqual((42, 19), (offset, length))
173
162
'Bazaar pack format 1 (introduced in 0.18)\n'
174
'B3\nname1\x00name2\n\nabc',
163
'B3\nname1\x00name2\n\nabc')
177
165
def test_add_second_bytes_record_gets_higher_offset(self):
179
writer = pack.ContainerWriter(output.write)
181
writer.add_bytes_record('abc', names=[])
182
offset, length = writer.add_bytes_record('abc', names=[])
167
self.writer.add_bytes_record('abc', names=[])
168
offset, length = self.writer.add_bytes_record('abc', names=[])
183
169
self.assertEqual((49, 7), (offset, length))
185
171
'Bazaar pack format 1 (introduced in 0.18)\n'
190
175
def test_add_bytes_record_invalid_name(self):
191
176
"""Adding a Bytes record with a name with whitespace in it raises
192
177
InvalidRecordError.
195
writer = pack.ContainerWriter(output.write)
197
180
self.assertRaises(
198
181
errors.InvalidRecordError,
199
writer.add_bytes_record, 'abc', names=[('bad name', )])
182
self.writer.add_bytes_record, 'abc', names=[('bad name', )])
201
184
def test_add_bytes_records_add_to_records_written(self):
202
185
"""Adding a Bytes record increments the records_written counter."""
204
writer = pack.ContainerWriter(output.write)
206
writer.add_bytes_record('foo', names=[])
207
self.assertEqual(1, writer.records_written)
208
writer.add_bytes_record('foo', names=[])
209
self.assertEqual(2, writer.records_written)
187
self.writer.add_bytes_record('foo', names=[])
188
self.assertEqual(1, self.writer.records_written)
189
self.writer.add_bytes_record('foo', names=[])
190
self.assertEqual(2, self.writer.records_written)
212
193
class TestContainerReader(tests.TestCase):