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