~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_pack.py

  • Committer: Andrew Bennetts
  • Date: 2007-10-29 06:11:51 UTC
  • mto: (2535.4.22 streaming-smart-fetch)
  • mto: This revision was merged to the branch mainline in revision 2981.
  • Revision ID: andrew.bennetts@canonical.com-20071029061151-s542b9ort6ph7vg1
Refactor TestContainerWriter to be a little more concise.

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
 
68
68
class TestContainerWriter(tests.TestCase):
69
69
 
 
70
    def setUp(self):
 
71
        self.output = StringIO()
 
72
        self.writer = pack.ContainerWriter(self.output.write)
 
73
 
 
74
    def assertOutput(self, expected_output):
 
75
        """Assert that the output of self.writer ContainerWriter is equal to
 
76
        expected_output.
 
77
        """
 
78
        self.assertEqual(expected_output, self.output.getvalue())
 
79
 
70
80
    def test_construct(self):
71
81
        """Test constructing a ContainerWriter.
72
82
        
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.
75
85
        """
76
86
        writer = pack.ContainerWriter(None)
77
87
 
78
88
    def test_begin(self):
79
89
        """The begin() method writes the container format marker line."""
80
 
        output = StringIO()
81
 
        writer = pack.ContainerWriter(output.write)
82
 
        writer.begin()
83
 
        self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\n',
84
 
                         output.getvalue())
 
90
        self.writer.begin()
 
91
        self.assertOutput('Bazaar pack format 1 (introduced in 0.18)\n')
85
92
 
86
93
    def test_zero_records_written_after_begin(self):
87
94
        """After begin is written, 0 records have been written."""
88
 
        output = StringIO()
89
 
        writer = pack.ContainerWriter(output.write)
90
 
        writer.begin()
91
 
        self.assertEqual(0, writer.records_written)
 
95
        self.writer.begin()
 
96
        self.assertEqual(0, self.writer.records_written)
92
97
 
93
98
    def test_end(self):
94
99
        """The end() method writes an End Marker record."""
95
 
        output = StringIO()
96
 
        writer = pack.ContainerWriter(output.write)
97
 
        writer.begin()
98
 
        writer.end()
99
 
        self.assertEqual('Bazaar pack format 1 (introduced in 0.18)\nE',
100
 
                         output.getvalue())
 
100
        self.writer.begin()
 
101
        self.writer.end()
 
102
        self.assertOutput('Bazaar pack format 1 (introduced in 0.18)\nE')
101
103
 
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."""
104
 
        output = StringIO()
105
 
        writer = pack.ContainerWriter(output.write)
106
 
        writer.begin()
107
 
        writer.end()
108
 
        self.assertEqual(0, writer.records_written)
 
106
        self.writer.begin()
 
107
        self.writer.end()
 
108
        self.assertEqual(0, self.writer.records_written)
109
109
 
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."""
112
 
        output = StringIO()
113
 
        writer = pack.ContainerWriter(output.write)
114
 
        writer.begin()
115
 
        writer.add_bytes_record('foo', names=[])
116
 
        writer.end()
117
 
        self.assertEqual(1, writer.records_written)
 
112
        self.writer.begin()
 
113
        self.writer.add_bytes_record('foo', names=[])
 
114
        self.writer.end()
 
115
        self.assertEqual(1, self.writer.records_written)
118
116
 
119
117
    def test_add_bytes_record_no_name(self):
120
118
        """Add a bytes record with no name."""
121
 
        output = StringIO()
122
 
        writer = pack.ContainerWriter(output.write)
123
 
        writer.begin()
124
 
        offset, length = writer.add_bytes_record('abc', names=[])
 
119
        self.writer.begin()
 
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',
127
 
                         output.getvalue())
 
122
        self.assertOutput(
 
123
            'Bazaar pack format 1 (introduced in 0.18)\nB3\n\nabc')
128
124
 
129
125
    def test_add_bytes_record_one_name(self):
130
126
        """Add a bytes record with one name."""
131
 
        output = StringIO()
132
 
        writer = pack.ContainerWriter(output.write)
133
 
        writer.begin()
134
 
        offset, length = writer.add_bytes_record('abc', names=[('name1', )])
 
127
        self.writer.begin()
 
128
        offset, length = self.writer.add_bytes_record(
 
129
            'abc', names=[('name1', )])
135
130
        self.assertEqual((42, 13), (offset, length))
136
 
        self.assertEqual(
137
 
            'Bazaar pack format 1 (introduced in 0.18)\n'
138
 
            'B3\nname1\n\nabc',
139
 
            output.getvalue())
140
 
 
141
 
    def test_add_bytes_record_two_names(self):
142
 
        """Add a bytes record with two names."""
143
 
        output = StringIO()
144
 
        writer = pack.ContainerWriter(output.write)
145
 
        writer.begin()
146
 
        offset, length = writer.add_bytes_record('abc', names=[('name1', ), ('name2', )])
147
 
        self.assertEqual((42, 19), (offset, length))
148
 
        self.assertEqual(
149
 
            'Bazaar pack format 1 (introduced in 0.18)\n'
150
 
            'B3\nname1\nname2\n\nabc',
151
 
            output.getvalue())
152
 
 
153
 
    def test_add_bytes_record_two_names(self):
154
 
        """Add a bytes record with two names."""
155
 
        output = StringIO()
156
 
        writer = pack.ContainerWriter(output.write)
157
 
        writer.begin()
158
 
        offset, length = writer.add_bytes_record('abc', names=[('name1', ), ('name2', )])
159
 
        self.assertEqual((42, 19), (offset, length))
160
 
        self.assertEqual(
161
 
            'Bazaar pack format 1 (introduced in 0.18)\n'
162
 
            'B3\nname1\nname2\n\nabc',
163
 
            output.getvalue())
 
131
        self.assertOutput(
 
132
            'Bazaar pack format 1 (introduced in 0.18)\n'
 
133
            'B3\nname1\n\nabc')
 
134
 
 
135
    def test_add_bytes_record_two_names(self):
 
136
        """Add a bytes record with two names."""
 
137
        self.writer.begin()
 
138
        offset, length = self.writer.add_bytes_record(
 
139
            'abc', names=[('name1', ), ('name2', )])
 
140
        self.assertEqual((42, 19), (offset, length))
 
141
        self.assertOutput(
 
142
            'Bazaar pack format 1 (introduced in 0.18)\n'
 
143
            'B3\nname1\nname2\n\nabc')
 
144
 
 
145
    def test_add_bytes_record_two_names(self):
 
146
        """Add a bytes record with two names."""
 
147
        self.writer.begin()
 
148
        offset, length = self.writer.add_bytes_record(
 
149
            'abc', names=[('name1', ), ('name2', )])
 
150
        self.assertEqual((42, 19), (offset, length))
 
151
        self.assertOutput(
 
152
            'Bazaar pack format 1 (introduced in 0.18)\n'
 
153
            'B3\nname1\nname2\n\nabc')
164
154
 
165
155
    def test_add_bytes_record_two_element_name(self):
166
156
        """Add a bytes record with a two-element name."""
167
 
        output = StringIO()
168
 
        writer = pack.ContainerWriter(output.write)
169
 
        writer.begin()
170
 
        offset, length = writer.add_bytes_record('abc', names=[('name1', 'name2')])
 
157
        self.writer.begin()
 
158
        offset, length = self.writer.add_bytes_record(
 
159
            'abc', names=[('name1', 'name2')])
171
160
        self.assertEqual((42, 19), (offset, length))
172
 
        self.assertEqual(
 
161
        self.assertOutput(
173
162
            'Bazaar pack format 1 (introduced in 0.18)\n'
174
 
            'B3\nname1\x00name2\n\nabc',
175
 
            output.getvalue())
 
163
            'B3\nname1\x00name2\n\nabc')
176
164
 
177
165
    def test_add_second_bytes_record_gets_higher_offset(self):
178
 
        output = StringIO()
179
 
        writer = pack.ContainerWriter(output.write)
180
 
        writer.begin()
181
 
        writer.add_bytes_record('abc', names=[])
182
 
        offset, length = writer.add_bytes_record('abc', names=[])
 
166
        self.writer.begin()
 
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))
184
 
        self.assertEqual(
 
170
        self.assertOutput(
185
171
            'Bazaar pack format 1 (introduced in 0.18)\n'
186
172
            'B3\n\nabc'
187
 
            'B3\n\nabc',
188
 
            output.getvalue())
 
173
            'B3\n\nabc')
189
174
 
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.
193
178
        """
194
 
        output = StringIO()
195
 
        writer = pack.ContainerWriter(output.write)
196
 
        writer.begin()
 
179
        self.writer.begin()
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', )])
200
183
 
201
184
    def test_add_bytes_records_add_to_records_written(self):
202
185
        """Adding a Bytes record increments the records_written counter."""
203
 
        output = StringIO()
204
 
        writer = pack.ContainerWriter(output.write)
205
 
        writer.begin()
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)
 
186
        self.writer.begin()
 
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)
210
191
 
211
192
 
212
193
class TestContainerReader(tests.TestCase):