1import unittest
2from util import *
3
4class HexTests(unittest.TestCase):
5
6    def test_hex_to_bytes(self):
7        LEN = 4
8        buf, buf_len = make_cbuffer('00' * LEN)
9
10        for i in range(256):
11            for s in ("%02X" % i, "%02x" % i): # Upper/Lower
12                ret, written = wally_hex_to_bytes(utf8(s * LEN), buf, buf_len)
13                self.assertEqual((ret, written), (WALLY_OK, LEN))
14
15        # Bad inputs
16        for (s, b, l) in [(None,        buf,  buf_len),
17                          (utf8('00'),  None, buf_len),
18                          (utf8('000'), buf,  buf_len),
19                          (utf8('00'),  buf,  0)]:
20            ret, written = wally_hex_to_bytes(s, b, l)
21            self.assertEqual((ret, written), (WALLY_EINVAL, 0))
22
23        for l in (1,    # Too small, returns the required length
24                  LEN): # Too large, returns length written
25            ret, written = wally_hex_to_bytes(utf8('0000'), buf, l)
26            self.assertEqual((ret, written), (WALLY_OK, 2))
27
28        # Empty string
29        ret, written = wally_hex_to_bytes(utf8(''), buf, buf_len)
30        self.assertEqual((ret, written), (WALLY_OK, 0))
31
32
33    def test_hex_from_bytes(self):
34        LEN = 4
35
36        for i in range(256):
37            s = "%02x" % i * LEN
38            buf, buf_len = make_cbuffer(s)
39            ret, retstr = wally_hex_from_bytes(buf, buf_len)
40            self.assertEqual((ret, retstr), (WALLY_OK, s))
41
42        # Bad input
43        ret, written = wally_hex_from_bytes(None, buf_len)
44        self.assertEqual((ret, written), (WALLY_EINVAL, None))
45
46        # Empty buffer
47        ret, written = wally_hex_from_bytes(buf, 0)
48        self.assertEqual((ret, written), (WALLY_OK, ''))
49
50
51if __name__ == '__main__':
52    unittest.main()
53