"""16/10: a janela usa as fontes e as regras do sistema com um cache de fontes só do openTARS (tema.preparar_fontconfig). Um cache corrompido em ~/.cache/fontconfig derrubava o Qt no primeiro caractere fora da IBM Plex, até no modo seguro. Confere: os caches do sistema saem, as inclusões relativas viram absolutas, o cache do openTARS entra, e nada muda quando a pessoa já escolheu um FONTCONFIG_FILE, com TARS_FONTCONFIG_SISTEMA=1 ou sem o fonts.conf do sistema.""" import os import tempfile from pathlib import Path from _util import RAIZ # noqa: F401 from tars_qt import tema pasta = Path(tempfile.mkdtemp(prefix="opentars-fc-")) (pasta / "etc").mkdir() sistema = pasta / "etc" / "fonts.conf" sistema.write_text(""" /usr/share/fonts conf.d /etc/outro.conf /var/cache/fontconfig fontconfig """, encoding="utf-8") for var in ("FONTCONFIG_FILE", "TARS_FONTCONFIG_SISTEMA"): os.environ.pop(var, None) arquivo = tema.preparar_fontconfig(str(sistema), casa=str(pasta / "cache")) texto = arquivo.read_text(encoding="utf-8") assert os.environ["FONTCONFIG_FILE"] == str(arquivo) assert "/var/cache/fontconfig" not in texto and 'prefix="xdg">fontconfig' not in texto, "os caches de fora saem" assert f"{pasta / 'cache' / 'opentars' / 'fontconfig'}" in texto assert f">{pasta / 'etc' / 'conf.d'}" in texto and ">/etc/outro.conf" in texto assert "/usr/share/fonts" in texto, "as fontes do sistema continuam" print("OK: fontes e regras do sistema, com o cache só do openTARS") assert tema.preparar_fontconfig(str(sistema), casa=str(pasta / "outro")) is None, "FONTCONFIG_FILE já escolhido: não mexe" os.environ.pop("FONTCONFIG_FILE") os.environ["TARS_FONTCONFIG_SISTEMA"] = "1" assert tema.preparar_fontconfig(str(sistema), casa=str(pasta / "outro")) is None and "FONTCONFIG_FILE" not in os.environ os.environ.pop("TARS_FONTCONFIG_SISTEMA") assert tema.preparar_fontconfig(str(pasta / "nao-existe.conf"), casa=str(pasta / "outro")) is None assert "FONTCONFIG_FILE" not in os.environ print("OK: respeita FONTCONFIG_FILE, TARS_FONTCONFIG_SISTEMA=1 e a falta do fonts.conf") print("\nTUDO OK.")