Update documentation and scripts for font addition process; introduce uv run add-font CLI command for streamlined font management. Enhance formula generation with improved class name formatting and validation steps. Remove outdated font formula files.
This commit is contained in:
parent
69d8156b09
commit
56b64d0b34
266 changed files with 1187 additions and 8145 deletions
41
tests/test_font_structure.py
Normal file
41
tests/test_font_structure.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
"""Tests for font folder structure: required subdirs and at least one font file per font."""
|
||||
import pytest
|
||||
|
||||
from tests.conftest import FONT_FILES_DIR, REQUIRED_SUBDIRS, WEB_EXTENSIONS, get_font_dir_names
|
||||
|
||||
|
||||
# Top-level names to ignore (e.g. .DS_Store; cleanup script removes these)
|
||||
IGNORED_TOPLEVEL = {".DS_Store"}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("font_name", get_font_dir_names())
|
||||
def test_font_has_required_subdirs_only(font_name):
|
||||
"""Each font folder has exactly ttf/, otf/, web/, other_files/ and no other top-level items (except ignored)."""
|
||||
font_dir = FONT_FILES_DIR / font_name
|
||||
assert font_dir.is_dir(), f"Font dir missing: {font_dir}"
|
||||
names = [p.name for p in font_dir.iterdir() if p.name not in IGNORED_TOPLEVEL]
|
||||
for required in REQUIRED_SUBDIRS:
|
||||
assert required in names, f"{font_name}: missing subdir {required}/"
|
||||
# All must be directories (the four subdirs)
|
||||
for name in names:
|
||||
assert (font_dir / name).is_dir(), f"{font_name}: unexpected file or non-dir at top level: {name}"
|
||||
assert len(names) == 4, f"{font_name}: expected exactly 4 subdirs, got {names}"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("font_name", get_font_dir_names())
|
||||
def test_font_has_at_least_one_font_file_or_other(font_name):
|
||||
"""Each font folder has at least one font file (ttf/otf/web) or content in other_files."""
|
||||
font_dir = FONT_FILES_DIR / font_name
|
||||
has_ttf = any((font_dir / "ttf").glob("*.ttf"))
|
||||
has_otf = any((font_dir / "otf").glob("*.otf"))
|
||||
web_dir = font_dir / "web"
|
||||
has_web = any(
|
||||
f.suffix.lower() in WEB_EXTENSIONS
|
||||
for f in web_dir.glob("*")
|
||||
if f.is_file()
|
||||
)
|
||||
other_dir = font_dir / "other_files"
|
||||
has_other = any(other_dir.iterdir()) if other_dir.exists() else False
|
||||
assert has_ttf or has_otf or has_web or has_other, (
|
||||
f"{font_name}: no font files in ttf/, otf/, or web/ and no content in other_files/"
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue