File: test_tex.py

package info (click to toggle)
segno 1.6.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,072 kB
  • sloc: python: 9,936; makefile: 162; javascript: 16
file content (98 lines) | stat: -rw-r--r-- 2,588 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#
# Copyright (c) 2016 - 2024 -- Lars Heuer
# All rights reserved.
#
# License: BSD License
#
"""\
LaTex output related tests.
"""
import re
import io
import segno


def test_write_tex():
    # Test with default options
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    qr.save(out, kind='tex', border=4)
    assert r'\pgfpathmoveto{\pgfqpoint{4pt}{-4pt}}' in out.getvalue()


def test_write_tex_url():
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    url = 'http://www.example.org/~xxx#aaa'
    qr.save(out, kind='tex', border=4, url=url)
    assert r'\href{' + url + '}' in out.getvalue()


def test_write_tex_omit_url():
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    url = ''
    qr.save(out, kind='tex', border=4, url=url)
    assert r'\href' not in out.getvalue()


def test_write_tex_omit_url2():
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    qr.save(out, kind='tex', border=4)
    assert r'\href' not in out.getvalue()


def test_write_tex_color():
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    qr.save(out, kind='tex', border=4)
    assert r'\color' not in out.getvalue()


def test_write_tex_color2():
    qr = segno.make_qr('test', error='m', boost_error=False)
    out = io.StringIO()
    qr.save(out, kind='tex', border=4, dark='green')
    assert r'\color{green}' in out.getvalue()


_COMMAND_PATTERN = re.compile(r'pgfpath(move|line)to{\\pgfqpoint{(-?[0-9]+)pt}{(-?[0-9]+)pt}')


def tex_as_matrix(buff, border):
    """\
    Returns the LaTeX QR code as list of [0,1] lists.

    :param io.StringIO buff: Buffer to read the matrix from.
    """
    res = []
    last_y = None
    res_row = None
    size = 0
    prev_x = border
    for m in _COMMAND_PATTERN.finditer(buff.getvalue()):
        op, x, y = m.groups()
        x, y = int(x), int(y)
        length = x - prev_x
        prev_x = x
        if y != last_y:
            length = x - border
            if res_row is not None:
                res_row.extend([0] * (size - len(res_row)))
                if not size:
                    size = len(res_row)
            last_y = y
            res_row = []
            res.append(res_row)
        if op == 'move':
            res_row.extend([0] * length)
        elif op == 'line':
            res_row.extend([1] * length)
    res_row.extend([0] * (size - len(res_row)))
    return res


if __name__ == '__main__':
    import pytest
    pytest.main([__file__])