~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/util/bencode.py

Merge from bzr.dev, resolving conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
89
89
        raise ValueError
90
90
    return r
91
91
 
 
92
def test_bdecode():
 
93
    try:
 
94
        bdecode('0:0:')
 
95
        assert 0
 
96
    except ValueError:
 
97
        pass
 
98
    try:
 
99
        bdecode('ie')
 
100
        assert 0
 
101
    except ValueError:
 
102
        pass
 
103
    try:
 
104
        bdecode('i341foo382e')
 
105
        assert 0
 
106
    except ValueError:
 
107
        pass
 
108
    assert bdecode('i4e') == 4L
 
109
    assert bdecode('i0e') == 0L
 
110
    assert bdecode('i123456789e') == 123456789L
 
111
    assert bdecode('i-10e') == -10L
 
112
    try:
 
113
        bdecode('i-0e')
 
114
        assert 0
 
115
    except ValueError:
 
116
        pass
 
117
    try:
 
118
        bdecode('i123')
 
119
        assert 0
 
120
    except ValueError:
 
121
        pass
 
122
    try:
 
123
        bdecode('')
 
124
        assert 0
 
125
    except ValueError:
 
126
        pass
 
127
    try:
 
128
        bdecode('i6easd')
 
129
        assert 0
 
130
    except ValueError:
 
131
        pass
 
132
    try:
 
133
        bdecode('35208734823ljdahflajhdf')
 
134
        assert 0
 
135
    except ValueError:
 
136
        pass
 
137
    try:
 
138
        bdecode('2:abfdjslhfld')
 
139
        assert 0
 
140
    except ValueError:
 
141
        pass
 
142
    assert bdecode('0:') == ''
 
143
    assert bdecode('3:abc') == 'abc'
 
144
    assert bdecode('10:1234567890') == '1234567890'
 
145
    try:
 
146
        bdecode('02:xy')
 
147
        assert 0
 
148
    except ValueError:
 
149
        pass
 
150
    try:
 
151
        bdecode('l')
 
152
        assert 0
 
153
    except ValueError:
 
154
        pass
 
155
    assert bdecode('le') == []
 
156
    try:
 
157
        bdecode('leanfdldjfh')
 
158
        assert 0
 
159
    except ValueError:
 
160
        pass
 
161
    assert bdecode('l0:0:0:e') == ['', '', '']
 
162
    try:
 
163
        bdecode('relwjhrlewjh')
 
164
        assert 0
 
165
    except ValueError:
 
166
        pass
 
167
    assert bdecode('li1ei2ei3ee') == [1, 2, 3]
 
168
    assert bdecode('l3:asd2:xye') == ['asd', 'xy']
 
169
    assert bdecode('ll5:Alice3:Bobeli2ei3eee') == [['Alice', 'Bob'], [2, 3]]
 
170
    try:
 
171
        bdecode('d')
 
172
        assert 0
 
173
    except ValueError:
 
174
        pass
 
175
    try:
 
176
        bdecode('defoobar')
 
177
        assert 0
 
178
    except ValueError:
 
179
        pass
 
180
    assert bdecode('de') == {}
 
181
    assert bdecode('d3:agei25e4:eyes4:bluee') == {'age': 25, 'eyes': 'blue'}
 
182
    assert bdecode('d8:spam.mp3d6:author5:Alice6:lengthi100000eee') == {'spam.mp3': {'author': 'Alice', 'length': 100000}}
 
183
    try:
 
184
        bdecode('d3:fooe')
 
185
        assert 0
 
186
    except ValueError:
 
187
        pass
 
188
    try:
 
189
        bdecode('di1e0:e')
 
190
        assert 0
 
191
    except ValueError:
 
192
        pass
 
193
    try:
 
194
        bdecode('d1:b0:1:a0:e')
 
195
        assert 0
 
196
    except ValueError:
 
197
        pass
 
198
    try:
 
199
        bdecode('d1:a0:1:a0:e')
 
200
        assert 0
 
201
    except ValueError:
 
202
        pass
 
203
    try:
 
204
        bdecode('i03e')
 
205
        assert 0
 
206
    except ValueError:
 
207
        pass
 
208
    try:
 
209
        bdecode('l01:ae')
 
210
        assert 0
 
211
    except ValueError:
 
212
        pass
 
213
    try:
 
214
        bdecode('9999:x')
 
215
        assert 0
 
216
    except ValueError:
 
217
        pass
 
218
    try:
 
219
        bdecode('l0:')
 
220
        assert 0
 
221
    except ValueError:
 
222
        pass
 
223
    try:
 
224
        bdecode('d0:0:')
 
225
        assert 0
 
226
    except ValueError:
 
227
        pass
 
228
    try:
 
229
        bdecode('d0:')
 
230
        assert 0
 
231
    except ValueError:
 
232
        pass
 
233
    try:
 
234
        bdecode('00:')
 
235
        assert 0
 
236
    except ValueError:
 
237
        pass
 
238
    try:
 
239
        bdecode('l-3:e')
 
240
        assert 0
 
241
    except ValueError:
 
242
        pass
 
243
    try:
 
244
        bdecode('i-03e')
 
245
        assert 0
 
246
    except ValueError:
 
247
        pass
 
248
    bdecode('d0:i3ee')
92
249
 
93
250
from types import StringType, IntType, LongType, DictType, ListType, TupleType
94
251
 
142
299
    encode_func[type(x)](x, r)
143
300
    return ''.join(r)
144
301
 
 
302
def test_bencode():
 
303
    assert bencode(4) == 'i4e'
 
304
    assert bencode(0) == 'i0e'
 
305
    assert bencode(-10) == 'i-10e'
 
306
    assert bencode(12345678901234567890L) == 'i12345678901234567890e'
 
307
    assert bencode('') == '0:'
 
308
    assert bencode('abc') == '3:abc'
 
309
    assert bencode('1234567890') == '10:1234567890'
 
310
    assert bencode([]) == 'le'
 
311
    assert bencode([1, 2, 3]) == 'li1ei2ei3ee'
 
312
    assert bencode([['Alice', 'Bob'], [2, 3]]) == 'll5:Alice3:Bobeli2ei3eee'
 
313
    assert bencode({}) == 'de'
 
314
    assert bencode({'age': 25, 'eyes': 'blue'}) == 'd3:agei25e4:eyes4:bluee'
 
315
    assert bencode({'spam.mp3': {'author': 'Alice', 'length': 100000}}) == 'd8:spam.mp3d6:author5:Alice6:lengthi100000eee'
 
316
    assert bencode(Bencached(bencode(3))) == 'i3e'
 
317
    try:
 
318
        bencode({1: 'foo'})
 
319
    except TypeError:
 
320
        return
 
321
    assert 0
 
322