47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
import numpy
|
|
|
|
from ..shapes import Polygon, Text
|
|
|
|
|
|
def test_text_to_polygons() -> None:
|
|
pytest.importorskip("freetype")
|
|
font_path = "/usr/share/fonts/truetype/dejavu/DejaVuMathTeXGyre.ttf"
|
|
if not Path(font_path).exists():
|
|
pytest.skip("Font file not found")
|
|
|
|
t = Text("Hi", height=10, font_path=font_path)
|
|
polys = t.to_polygons()
|
|
assert len(polys) > 0
|
|
assert all(isinstance(p, Polygon) for p in polys)
|
|
|
|
# Each character produces polygons with distinct horizontal placement.
|
|
char_x_means = [p.vertices[:, 0].mean() for p in polys]
|
|
assert len(set(char_x_means)) >= 2
|
|
|
|
def test_text_bounds_and_normalized_form() -> None:
|
|
pytest.importorskip("freetype")
|
|
font_path = "/usr/share/fonts/truetype/dejavu/DejaVuMathTeXGyre.ttf"
|
|
if not Path(font_path).exists():
|
|
pytest.skip("Font file not found")
|
|
|
|
text = Text("Hi", height=10, font_path=font_path)
|
|
_intrinsic, extrinsic, ctor = text.normalized_form(5)
|
|
normalized = ctor()
|
|
|
|
assert extrinsic[1] == 2
|
|
assert normalized.height == 5
|
|
|
|
bounds = text.get_bounds_single()
|
|
assert bounds is not None
|
|
assert numpy.isfinite(bounds).all()
|
|
assert numpy.all(bounds[1] > bounds[0])
|
|
|
|
def test_text_mirroring_affects_comparison() -> None:
|
|
text = Text("A", height=10, font_path="dummy.ttf")
|
|
mirrored = Text("A", height=10, font_path="dummy.ttf", mirrored=True)
|
|
|
|
assert text != mirrored
|
|
assert (text < mirrored) != (mirrored < text)
|