File: test_515c_fonts_lff.py

package info (click to toggle)
ezdxf 1.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 104,528 kB
  • sloc: python: 182,341; makefile: 116; lisp: 20; ansic: 4
file content (78 lines) | stat: -rw-r--r-- 2,391 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
#  Copyright (c) 2023, Manfred Moitzi
#  License: MIT License
import pytest

from ezdxf import path
from ezdxf.fonts import fonts

FONT = "standard.lff"


@pytest.fixture(scope="module", autouse=True)
def check_libre_cad_fonts_available():
    if not fonts.font_manager.has_font(FONT):
        pytest.skip(reason=f"required LibreCAD '{FONT}' font is not available")


def test_get_font_family_for_lff_files():
    # LibreCAD does not include a replacement font for TXT
    font_face = fonts.font_manager.get_font_face("standard.lff")
    assert font_face.family == "standard"


TOL = 0.001


class TestLibreCadFont:
    @pytest.fixture(scope="class")
    def lff(self):
        return fonts.make_font(FONT, 2.5)

    def test_is_a_lff_font(self, lff):
        assert lff.name == FONT

    def test_space_width(self, lff):
        assert lff.space_width() == pytest.approx(1.875, abs=TOL)

    def test_text_width(self, lff):
        assert lff.text_width("1234") == pytest.approx(7.578981985029027, abs=TOL)

    def test_text_width_ex(self, lff):
        assert lff.text_width_ex("1234", cap_height=3, width_factor=2) == pytest.approx(
            18.189556764069664, abs=TOL
        )

    def test_text_path(self, lff):
        text_path = lff.text_path("1234")

        # fmt: off
        assert text_path.command_codes() == [
            1, 1, 4, 1, 3, 3, 1, 1, 4, 1, 3, 3, 4, 1, 3, 3, 1, 3, 3, 1, 4, 1, 1, 4, 1
        ]
        # fmt: on
        box = text_path.bbox()
        assert box.size.x > 6
        assert box.size.y == pytest.approx(2.5789819850290274, abs=TOL)

    def test_text_path_ex(self, lff):
        text_path = lff.text_path_ex("1234", cap_height=3, width_factor=2)
        box = path.precise_bbox(text_path)
        assert box.size.x > 16
        assert box.size.y == pytest.approx(3, abs=TOL)


def test_low_level_glyph_cache_measures_spaces():
    cache = fonts.font_manager.get_lff_glyph_cache(FONT)
    assert cache.get_text_length("   ", cache.font_measurements.cap_height) == 20.25


def test_map_shx_to_lff():
    assert fonts.map_shx_to_lff("txt") == "standard.lff"
    assert fonts.map_shx_to_lff("txt.shx") == "standard.lff"
    assert fonts.map_shx_to_lff("iso") == "iso.lff"
    assert fonts.map_shx_to_lff("iso.shx") == "iso.lff"
    assert fonts.map_shx_to_lff("unknown.shx") == "unknown.shx"


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