Skip to content

Commit 183ec01

Browse files
committed
Initial unit test, coverage is 97%
1 parent ddb2200 commit 183ec01

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

tests/test_example.gild

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
XXXXXXX.X.........XXXXXXX
2+
X.....X.X.XX.XXXX.X.....X
3+
X.XXX.X.X.X.XXXXX.X.XXX.X
4+
X.XXX.X..X...XXXX.X.XXX.X
5+
X.XXX.X.X..XXXXXX.X.XXX.X
6+
X.....X.X.XXXX.XX.X.....X
7+
XXXXXXX.X.X.X.X.X.XXXXXXX
8+
........X..X...X.........
9+
..X...XXX.XX.XXXXXXXX.XXX
10+
.X.XX....X.X.XX..X.XXXXX.
11+
X....XX...XXXX.XX.X....X.
12+
..X..X.X.XX.XX.X.XX.XX.XX
13+
...XXXX.XXXX....XXXXX..XX
14+
.X..XX.XXX.XX.XXXXXXX.XXX
15+
.X.XX.XX.X..X.....XX...X.
16+
XXXXXX.....X...X.XX....XX
17+
..XX..XXXX..XXXXXXXXX.XXX
18+
........X.X.X.X.X...XX...
19+
XXXXXXX.XXXXXXXXX.X.X..X.
20+
X.....X...X.X.X.X...XX..X
21+
X.XXX.X........XXXXXXXXX.
22+
X.XXX.X.....XX..XXXXXX.X.
23+
X.XXX.X.X.X...X......X...
24+
X.....X...XXX.XX.XXX...XX
25+
XXXXXXX..XX.XXX..XX...X.X

tests/unit.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import sys
2+
import unittest
3+
import random
4+
5+
sys.path.append(".")
6+
7+
import adafruit_miniqr
8+
9+
def enc(msg, args = {}):
10+
qr = adafruit_miniqr.QRCode(**args)
11+
qr.add_data(msg)
12+
qr.make()
13+
return qr.matrix
14+
15+
class TestMiniQR(unittest.TestCase):
16+
17+
def test_example(self):
18+
# 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+
26+
def test_qr_type(self):
27+
# Confirm that qr_type 1-9 increases the matrix size
28+
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])
33+
34+
def test_qr_error_correct(self):
35+
# Confirm that error correct L,M,Q,H give different matrix
36+
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)
40+
self.assertEqual(len(matrices), 4) # All 4 are unique
41+
42+
def test_qr_pattern_mask(self):
43+
# Confirm that pattern_mask 0-7 gives different matrix
44+
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))
50+
self.assertEqual(len(matrices), 8) # All 8 are unique
51+
52+
def test_qr_auto(self):
53+
# Confirm that increasing message size increases the matrix size monotonically
54+
sizes = []
55+
for i in range(14): # XXX size 41 crashes
56+
m = enc(b'aBc!1234' * i)
57+
sizes.append(m.width)
58+
self.assertTrue(len(set(sizes)) > 1)
59+
self.assertEqual(sizes, sorted(sizes))
60+
61+
def test_qr_str(self):
62+
# 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)
67+
68+
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)
75+
76+
def test_qr_maximum(self):
77+
msg = bytes([random.randrange(32, 127) for i in range(230)])
78+
m = enc(msg, dict(qr_type = 9))
79+
80+
if __name__ == "__main__":
81+
unittest.main()

0 commit comments

Comments
 (0)