You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.2 KiB
99 lines
3.2 KiB
import logging
|
|
import shutil
|
|
|
|
from fontTools.misc import plistlib
|
|
from fontTools.ufoLib import UFOReader, UFOWriter, UFOFormatVersion
|
|
from fontTools.ufoLib.errors import UFOLibError, UnsupportedUFOFormat
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def ufo_path(tmp_path):
|
|
ufodir = tmp_path / "TestFont.ufo"
|
|
ufodir.mkdir()
|
|
with (ufodir / "metainfo.plist").open("wb") as f:
|
|
plistlib.dump({"creator": "pytest", "formatVersion": 3}, f)
|
|
(ufodir / "glyphs").mkdir()
|
|
with (ufodir / "layercontents.plist").open("wb") as f:
|
|
plistlib.dump([("public.default", "glyphs")], f)
|
|
return ufodir
|
|
|
|
|
|
def test_formatVersion_deprecated(ufo_path):
|
|
reader = UFOReader(ufo_path)
|
|
|
|
with pytest.warns(DeprecationWarning) as warnings:
|
|
assert reader.formatVersion == 3
|
|
|
|
assert len(warnings) == 1
|
|
assert "is deprecated; use the 'formatVersionTuple'" in warnings[0].message.args[0]
|
|
|
|
|
|
def test_formatVersionTuple(ufo_path):
|
|
reader = UFOReader(ufo_path)
|
|
|
|
assert reader.formatVersionTuple == (3, 0)
|
|
assert reader.formatVersionTuple.major == 3
|
|
assert reader.formatVersionTuple.minor == 0
|
|
assert str(reader.formatVersionTuple) == "3.0"
|
|
|
|
|
|
def test_readMetaInfo_errors(ufo_path):
|
|
(ufo_path / "metainfo.plist").unlink()
|
|
with pytest.raises(UFOLibError, match="'metainfo.plist' is missing"):
|
|
UFOReader(ufo_path)
|
|
|
|
(ufo_path / "metainfo.plist").write_bytes(plistlib.dumps({}))
|
|
with pytest.raises(UFOLibError, match="Missing required formatVersion"):
|
|
UFOReader(ufo_path)
|
|
|
|
(ufo_path / "metainfo.plist").write_bytes(plistlib.dumps([]))
|
|
with pytest.raises(UFOLibError, match="metainfo.plist is not properly formatted"):
|
|
UFOReader(ufo_path)
|
|
|
|
|
|
def test_readMetaInfo_unsupported_format_version(ufo_path, caplog):
|
|
metainfo = {"formatVersion": 10, "formatVersionMinor": 15}
|
|
(ufo_path / "metainfo.plist").write_bytes(plistlib.dumps(metainfo))
|
|
|
|
with pytest.raises(UnsupportedUFOFormat):
|
|
UFOReader(ufo_path) # validate=True by default
|
|
|
|
with pytest.raises(UnsupportedUFOFormat):
|
|
UFOReader(ufo_path, validate=True)
|
|
|
|
caplog.clear()
|
|
with caplog.at_level(logging.WARNING, logger="fontTools.ufoLib"):
|
|
UFOReader(ufo_path, validate=False)
|
|
|
|
assert len(caplog.records) == 1
|
|
assert "Unsupported UFO format" in caplog.text
|
|
assert "Assuming the latest supported version" in caplog.text
|
|
|
|
|
|
def test_UFOWriter_formatVersion(tmp_path):
|
|
ufo_path = tmp_path / "TestFont.ufo"
|
|
with UFOWriter(ufo_path, formatVersion=3) as writer:
|
|
assert writer.formatVersionTuple == (3, 0)
|
|
|
|
shutil.rmtree(str(ufo_path))
|
|
with UFOWriter(ufo_path, formatVersion=(2, 0)) as writer:
|
|
assert writer.formatVersionTuple == (2, 0)
|
|
|
|
|
|
def test_UFOWriter_formatVersion_default_latest(tmp_path):
|
|
writer = UFOWriter(tmp_path / "TestFont.ufo")
|
|
assert writer.formatVersionTuple == UFOFormatVersion.default()
|
|
|
|
|
|
def test_UFOWriter_unsupported_format_version(tmp_path):
|
|
with pytest.raises(UnsupportedUFOFormat):
|
|
UFOWriter(tmp_path, formatVersion=(123, 456))
|
|
|
|
|
|
def test_UFOWriter_previous_higher_format_version(ufo_path):
|
|
with pytest.raises(
|
|
UnsupportedUFOFormat, match="UFO located at this path is a higher version"
|
|
):
|
|
UFOWriter(ufo_path, formatVersion=(2, 0))
|