]> arthur.barton.de Git - bup.git/blob - lib/bup/t/tvint.py
6bee0f32662946435c036ca1500cecf7b17cc2d2
[bup.git] / lib / bup / t / tvint.py
1
2 from __future__ import absolute_import
3 from io import BytesIO
4
5 from wvtest import *
6
7 from bup import vint
8 from buptest import no_lingering_errors
9
10
11 def encode_and_decode_vuint(x):
12     f = BytesIO()
13     vint.write_vuint(f, x)
14     return vint.read_vuint(BytesIO(f.getvalue()))
15
16
17 @wvtest
18 def test_vuint():
19     with no_lingering_errors():
20         for x in (0, 1, 42, 128, 10**16):
21             WVPASSEQ(encode_and_decode_vuint(x), x)
22         WVEXCEPT(Exception, vint.write_vuint, BytesIO(), -1)
23         WVEXCEPT(EOFError, vint.read_vuint, BytesIO())
24
25
26 def encode_and_decode_vint(x):
27     f = BytesIO()
28     vint.write_vint(f, x)
29     return vint.read_vint(BytesIO(f.getvalue()))
30
31
32 @wvtest
33 def test_vint():
34     with no_lingering_errors():
35         values = (0, 1, 42, 64, 10**16)
36         for x in values:
37             WVPASSEQ(encode_and_decode_vint(x), x)
38         for x in [-x for x in values]:
39             WVPASSEQ(encode_and_decode_vint(x), x)
40         WVEXCEPT(EOFError, vint.read_vint, BytesIO())
41         WVEXCEPT(EOFError, vint.read_vint, BytesIO(b"\x80\x80"))
42
43
44 def encode_and_decode_bvec(x):
45     f = BytesIO()
46     vint.write_bvec(f, x)
47     return vint.read_bvec(BytesIO(f.getvalue()))
48
49
50 @wvtest
51 def test_bvec():
52     with no_lingering_errors():
53         values = (b'', b'x', b'foo', b'\0', b'\0foo', b'foo\0bar\0')
54         for x in values:
55             WVPASSEQ(encode_and_decode_bvec(x), x)
56         WVEXCEPT(EOFError, vint.read_bvec, BytesIO())
57         outf = BytesIO()
58         for x in (b'foo', b'bar', b'baz', b'bax'):
59             vint.write_bvec(outf, x)
60         inf = BytesIO(outf.getvalue())
61         WVPASSEQ(vint.read_bvec(inf), b'foo')
62         WVPASSEQ(vint.read_bvec(inf), b'bar')
63         vint.skip_bvec(inf)
64         WVPASSEQ(vint.read_bvec(inf), b'bax')
65
66
67 def pack_and_unpack(types, *values):
68     data = vint.pack(types, *values)
69     return vint.unpack(types, data)
70
71
72 @wvtest
73 def test_pack_and_unpack():
74     with no_lingering_errors():
75         tests = [('', []),
76                  ('s', [b'foo']),
77                  ('ss', [b'foo', b'bar']),
78                  ('sV', [b'foo', 0]),
79                  ('sv', [b'foo', -1]),
80                  ('V', [0]),
81                  ('Vs', [0, b'foo']),
82                  ('VV', [0, 1]),
83                  ('Vv', [0, -1]),
84                  ('v', [0]),
85                  ('vs', [0, b'foo']),
86                  ('vV', [0, 1]),
87                  ('vv', [0, -1])]
88         for test in tests:
89             (types, values) = test
90             WVPASSEQ(pack_and_unpack(types, *values), values)
91         WVEXCEPT(Exception, vint.pack, 's')
92         WVEXCEPT(Exception, vint.pack, 's', 'foo', 'bar')
93         WVEXCEPT(Exception, vint.pack, 'x', 1)
94         WVEXCEPT(Exception, vint.unpack, 's', '')
95         WVEXCEPT(Exception, vint.unpack, 'x', '')