File: test_block.py

package info (click to toggle)
python-term-image 0.7.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,708 kB
  • sloc: python: 8,300; makefile: 75
file content (91 lines) | stat: -rw-r--r-- 3,171 bytes parent folder | download
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
"""BlockImage-specific tests"""

from term_image.ctlseqs import SGR_BG_RGB, SGR_NORMAL
from term_image.image import BlockImage
from term_image.image.common import _ALPHA_THRESHOLD

from .. import set_fg_bg_colors
from . import common
from .common import _size, setup_common


def test_setup_common():
    setup_common(BlockImage)


for name, obj in vars(common).items():
    if name.endswith(("_All", "_Text")):
        globals()[name] = obj


class TestRender:
    # Fully transparent image
    # It's easy to predict it's pixel values
    trans = BlockImage.from_file("tests/images/trans.png")
    trans.height = _size

    def render_image(self, alpha):
        return self.trans._renderer(self.trans._render_image, alpha)

    def test_size(self):
        render = self.render_image(_ALPHA_THRESHOLD)
        # No '\n' after the last line, hence the `+ 1`
        assert render.count("\n") + 1 == self.trans.height
        assert render.partition("\n")[0].count(" ") == self.trans.width

    def test_transparency(self):
        # Transparency enabled
        render = self.render_image(_ALPHA_THRESHOLD)
        assert render == str(self.trans) == f"{self.trans:1.1}"
        assert all(
            line == SGR_NORMAL + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )
        # Transparency disabled
        render = self.render_image(None)
        assert render == f"{self.trans:1.1#}"
        assert all(
            line == SGR_BG_RGB % (0, 0, 0) + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )

    def test_background_colour(self):
        # Terminal BG
        for bg in ((0,) * 3, (100,) * 3, (255,) * 3, None):
            set_fg_bg_colors(bg=bg)
            bg = bg or (0, 0, 0)
            render = self.render_image("#")
            assert render == f"{self.trans:1.1##}"
            assert all(
                line == SGR_BG_RGB % bg + " " * self.trans.width + SGR_NORMAL
                for line in render.splitlines()
            )
        set_fg_bg_colors((0, 0, 0), (0, 0, 0))
        # red
        render = self.render_image("#ff0000")
        assert render == f"{self.trans:1.1#ff0000}"
        assert all(
            line == SGR_BG_RGB % (255, 0, 0) + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )
        # green
        render = self.render_image("#00ff00")
        assert render == f"{self.trans:1.1#00ff00}"
        assert all(
            line == SGR_BG_RGB % (0, 255, 0) + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )
        # blue
        render = self.render_image("#0000ff")
        assert render == f"{self.trans:1.1#0000ff}"
        assert all(
            line == SGR_BG_RGB % (0, 0, 255) + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )
        # white
        render = self.render_image("#ffffff")
        assert render == f"{self.trans:1.1#ffffff}"
        assert all(
            line == SGR_BG_RGB % (255, 255, 255) + " " * self.trans.width + SGR_NORMAL
            for line in render.splitlines()
        )