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:
Matt Troutman 2026-02-09 22:04:01 -06:00
parent 69d8156b09
commit 56b64d0b34
No known key found for this signature in database
266 changed files with 1187 additions and 8145 deletions

105
tests/test_install_works.py Normal file
View file

@ -0,0 +1,105 @@
"""Verify that each font's formula install logic would copy the right files (simulated install)."""
import shutil
import tempfile
from pathlib import Path
import pytest
from tests.conftest import (
FONT_FILES_DIR,
FORMULA_DIR,
WEB_EXTENSIONS,
get_font_dir_names,
)
def _run_install_simulation(font_name: str, font_dir: Path, prefix: Path, formula_name: str) -> None:
"""
Simulate the formula's install: copy ttf/otf/web/other_files to prefix
as the formula would (same layout as homebrew-fonts-main/font_files/<font_name>/).
"""
# Layout formula expects: homebrew-fonts-main/font_files/<font_name>/{ttf,otf,web,other_files}
# We use font_dir directly (same layout).
(prefix / "fonts").mkdir(parents=True)
(prefix / "fonts/truetype").mkdir(parents=True)
(prefix / "fonts/opentype").mkdir(parents=True)
(prefix / "fonts/webfonts").mkdir(parents=True)
(prefix / formula_name).mkdir(parents=True)
for f in (font_dir / "ttf").glob("*.ttf"):
shutil.copy2(f, prefix / "fonts/truetype" / f.name)
for f in (font_dir / "otf").glob("*.otf"):
shutil.copy2(f, prefix / "fonts/opentype" / f.name)
web_dir = font_dir / "web"
for f in web_dir.iterdir():
if f.is_file() and f.suffix.lower() in WEB_EXTENSIONS:
shutil.copy2(f, prefix / "fonts/webfonts" / f.name)
other_src = font_dir / "other_files"
if other_src.exists():
for f in other_src.iterdir():
dest = prefix / formula_name / f.name
if f.is_dir():
shutil.copytree(f, dest, dirs_exist_ok=True)
else:
shutil.copy2(f, dest)
@pytest.mark.parametrize("font_name", get_font_dir_names())
def test_install_simulation_places_files(font_name):
"""Simulate install for this font and assert expected files are present under prefix."""
font_dir = FONT_FILES_DIR / font_name
formula_name = font_name.replace("font-", "", 1)
with tempfile.TemporaryDirectory() as tmp:
prefix = Path(tmp) / "prefix"
prefix.mkdir()
_run_install_simulation(font_name, font_dir, prefix, formula_name)
# Same assertions as the formula's test block: at least one expected path has content
ttf_files = list((prefix / "fonts/truetype").glob("*.ttf"))
otf_files = list((prefix / "fonts/opentype").glob("*.otf"))
web_files = list((prefix / "fonts/webfonts").iterdir()) if (prefix / "fonts/webfonts").exists() else []
other_dir = prefix / formula_name
has_other = other_dir.exists() and any(other_dir.iterdir())
has_ttf = len(ttf_files) > 0
has_otf = len(otf_files) > 0
has_web = len(web_files) > 0
assert has_ttf or has_otf or has_web or has_other, (
f"{font_name}: after simulated install, no files in share/fonts/truetype, "
f"share/fonts/opentype, share/fonts/webfonts, or share/{formula_name}"
)
@pytest.mark.parametrize("font_name", get_font_dir_names())
def test_install_simulation_file_counts_match_source(font_name):
"""After simulated install, number of installed font files matches font_files/."""
font_dir = FONT_FILES_DIR / font_name
formula_name = font_name.replace("font-", "", 1)
with tempfile.TemporaryDirectory() as tmp:
prefix = Path(tmp) / "prefix"
prefix.mkdir()
_run_install_simulation(font_name, font_dir, prefix, formula_name)
ttf_src = len(list((font_dir / "ttf").glob("*.ttf")))
otf_src = len(list((font_dir / "otf").glob("*.otf")))
web_src = sum(
1 for f in (font_dir / "web").iterdir()
if f.is_file() and f.suffix.lower() in WEB_EXTENSIONS
)
ttf_installed = len(list((prefix / "fonts/truetype").glob("*.ttf")))
otf_installed = len(list((prefix / "fonts/opentype").glob("*.otf")))
web_installed = len(list((prefix / "fonts/webfonts").iterdir()))
assert ttf_src == ttf_installed, (
f"{font_name}: TTF count mismatch: source={ttf_src}, installed={ttf_installed}"
)
assert otf_src == otf_installed, (
f"{font_name}: OTF count mismatch: source={otf_src}, installed={otf_installed}"
)
assert web_src == web_installed, (
f"{font_name}: web font count mismatch: source={web_src}, installed={web_installed}"
)