|
| 1 | +# SPDX-FileCopyrightText: 2024 James Bowman |
| 2 | +# |
| 3 | +# SPDX-License-Identifier: MIT |
| 4 | + |
1 | 5 | import sys
|
2 | 6 | import unittest
|
3 | 7 | import random
|
4 | 8 |
|
5 | 9 | sys.path.append(".")
|
6 | 10 |
|
| 11 | +# pylint: disable=C0413 |
7 | 12 | import adafruit_miniqr
|
8 | 13 |
|
9 |
| -def enc(msg, args = {}): |
10 |
| - qr = adafruit_miniqr.QRCode(**args) |
11 |
| - qr.add_data(msg) |
12 |
| - qr.make() |
13 |
| - return qr.matrix |
14 | 14 |
|
15 |
| -class TestMiniQR(unittest.TestCase): |
| 15 | +def enc(msg, **args): |
| 16 | + _q = adafruit_miniqr.QRCode(**args) |
| 17 | + _q.add_data(msg) |
| 18 | + _q.make() |
| 19 | + return _q.matrix |
| 20 | + |
16 | 21 |
|
| 22 | +class TestMiniQR(unittest.TestCase): |
17 | 23 | def test_example(self):
|
18 | 24 | # Confirm the simple test that is in the docs
|
19 |
| - msg = b'https://www.adafruit.com' |
20 |
| - qr = adafruit_miniqr.QRCode() |
21 |
| - qr.add_data(msg) |
22 |
| - qr.make() |
23 |
| - with open("tests/test_example.gild") as f: |
24 |
| - self.assertEqual(f.read(), repr(qr.matrix)) |
| 25 | + msg = b"https://www.adafruit.com" |
| 26 | + _qr = adafruit_miniqr.QRCode() |
| 27 | + _qr.add_data(msg) |
| 28 | + _qr.make() |
| 29 | + with open("tests/test_example.gild") as _f: |
| 30 | + self.assertEqual(_f.read(), repr(_qr.matrix)) |
25 | 31 |
|
26 | 32 | def test_qr_type(self):
|
27 | 33 | # Confirm that qr_type 1-9 increases the matrix size
|
28 | 34 | expected_size = [None, 21, 25, 29, 33, 37, 41, 45, 49, 53]
|
29 |
| - for t in range(1, 10): |
30 |
| - m = enc(b'abc', dict(qr_type = t)) |
31 |
| - self.assertEqual(m.width, m.height) |
32 |
| - self.assertEqual(m.width, expected_size[t]) |
| 35 | + for _t in range(1, 10): |
| 36 | + _m = enc(b"abc", qr_type=_t) |
| 37 | + self.assertEqual(_m.width, _m.height) |
| 38 | + self.assertEqual(_m.width, expected_size[_t]) |
33 | 39 |
|
34 | 40 | def test_qr_error_correct(self):
|
35 | 41 | # Confirm that error correct L,M,Q,H give different matrix
|
36 | 42 | matrices = set()
|
37 |
| - for ec in adafruit_miniqr.L, adafruit_miniqr.M, adafruit_miniqr.Q, adafruit_miniqr.H: |
38 |
| - m = enc(b'abc', dict(error_correct = ec)) |
39 |
| - matrices.add(m) |
| 43 | + for _ec in ( |
| 44 | + adafruit_miniqr.L, |
| 45 | + adafruit_miniqr.M, |
| 46 | + adafruit_miniqr.Q, |
| 47 | + adafruit_miniqr.H, |
| 48 | + ): |
| 49 | + _m = enc(b"abc", error_correct=_ec) |
| 50 | + matrices.add(_m) |
40 | 51 | self.assertEqual(len(matrices), 4) # All 4 are unique
|
41 | 52 |
|
42 | 53 | def test_qr_pattern_mask(self):
|
43 | 54 | # Confirm that pattern_mask 0-7 gives different matrix
|
44 | 55 | matrices = set()
|
45 |
| - qr = adafruit_miniqr.QRCode() |
46 |
| - qr.add_data('test_qr_pattern_mask/1Z') |
47 |
| - for m in range(8): |
48 |
| - qr.make(mask_pattern = m) |
49 |
| - matrices.add(tuple(qr.matrix.buffer)) |
| 56 | + _qr = adafruit_miniqr.QRCode() |
| 57 | + _qr.add_data("test_qr_pattern_mask/1Z") |
| 58 | + for _m in range(8): |
| 59 | + _qr.make(mask_pattern=_m) |
| 60 | + matrices.add(tuple(_qr.matrix.buffer)) |
50 | 61 | self.assertEqual(len(matrices), 8) # All 8 are unique
|
51 | 62 |
|
52 | 63 | def test_qr_auto(self):
|
53 | 64 | # Confirm that increasing message size increases the matrix size monotonically
|
54 | 65 | sizes = []
|
55 |
| - for i in range(14): # XXX size 41 crashes |
56 |
| - m = enc(b'aBc!1234' * i) |
57 |
| - sizes.append(m.width) |
| 66 | + for i in range(14): # size 41 crashes |
| 67 | + _m = enc(b"aBc!1234" * i) |
| 68 | + sizes.append(_m.width) |
58 | 69 | self.assertTrue(len(set(sizes)) > 1)
|
59 | 70 | self.assertEqual(sizes, sorted(sizes))
|
60 | 71 |
|
61 | 72 | def test_qr_str(self):
|
62 | 73 | # Confirm that bytes and str give the same result
|
63 |
| - for s in ("", "abc", "https://www.adafruit.com", "AbCd12"): |
64 |
| - a = enc(s.encode(), {}) |
65 |
| - b = enc(s, {}) |
66 |
| - self.assertEqual(a.buffer, b.buffer) |
| 74 | + for _s in ("", "abc", "https://www.adafruit.com", "AbCd12"): |
| 75 | + _a = enc(_s.encode()) |
| 76 | + _b = enc(_s) |
| 77 | + self.assertEqual(_a.buffer, _b.buffer) |
67 | 78 |
|
68 | 79 | def test_qr_all(self):
|
69 |
| - for type in range(1, 10): |
70 |
| - for ec in adafruit_miniqr.L, adafruit_miniqr.M, adafruit_miniqr.Q, adafruit_miniqr.H: |
71 |
| - qr = adafruit_miniqr.QRCode(qr_type = type, error_correct = ec) |
72 |
| - qr.add_data('abc') |
73 |
| - for m in range(8): |
74 |
| - qr.make(mask_pattern = m) |
| 80 | + for _ty in range(1, 10): |
| 81 | + for _ec in ( |
| 82 | + adafruit_miniqr.L, |
| 83 | + adafruit_miniqr.M, |
| 84 | + adafruit_miniqr.Q, |
| 85 | + adafruit_miniqr.H, |
| 86 | + ): |
| 87 | + _qr = adafruit_miniqr.QRCode(qr_type=_ty, error_correct=_ec) |
| 88 | + _qr.add_data("abc") |
| 89 | + for _m in range(8): |
| 90 | + _qr.matrix = None |
| 91 | + _qr.make(mask_pattern=_m) |
| 92 | + self.assertTrue(_qr.matrix is not None) |
75 | 93 |
|
76 | 94 | def test_qr_maximum(self):
|
77 | 95 | msg = bytes([random.randrange(32, 127) for i in range(230)])
|
78 |
| - m = enc(msg, dict(qr_type = 9)) |
| 96 | + _a = enc(msg, qr_type=9) |
| 97 | + self.assertTrue(_a is not None) |
| 98 | + |
79 | 99 |
|
80 | 100 | if __name__ == "__main__":
|
81 | 101 | unittest.main()
|
0 commit comments