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.
98 lines
2.5 KiB
98 lines
2.5 KiB
from fontTools.misc.py23 import tostr
|
|
from fontTools.ufoLib import UFOReader, UFOWriter, UFOFileStructure
|
|
from fontTools.ufoLib.errors import UFOLibError, GlifLibError
|
|
from fontTools.misc import plistlib
|
|
import sys
|
|
import os
|
|
import fs.osfs
|
|
import fs.tempfs
|
|
import fs.memoryfs
|
|
import fs.copy
|
|
import pytest
|
|
import warnings
|
|
|
|
|
|
TESTDATA = fs.osfs.OSFS(
|
|
os.path.join(os.path.dirname(__file__), "testdata")
|
|
)
|
|
TEST_UFO3 = "TestFont1 (UFO3).ufo"
|
|
TEST_UFOZ = "TestFont1 (UFO3).ufoz"
|
|
|
|
|
|
@pytest.fixture(params=[TEST_UFO3, TEST_UFOZ])
|
|
def testufo(request):
|
|
name = request.param
|
|
with fs.tempfs.TempFS() as tmp:
|
|
if TESTDATA.isdir(name):
|
|
fs.copy.copy_dir(TESTDATA, name, tmp, name)
|
|
else:
|
|
fs.copy.copy_file(TESTDATA, name, tmp, name)
|
|
yield tmp.getsyspath(name)
|
|
|
|
|
|
@pytest.fixture
|
|
def testufoz():
|
|
with fs.tempfs.TempFS() as tmp:
|
|
fs.copy.copy_file(TESTDATA, TEST_UFOZ, tmp, TEST_UFOZ)
|
|
yield tmp.getsyspath(TEST_UFOZ)
|
|
|
|
|
|
class TestUFOZ:
|
|
|
|
def test_read(self, testufoz):
|
|
with UFOReader(testufoz) as reader:
|
|
assert reader.fileStructure == UFOFileStructure.ZIP
|
|
assert reader.formatVersion == 3
|
|
|
|
def test_write(self, testufoz):
|
|
with UFOWriter(testufoz, structure="zip") as writer:
|
|
writer.writeLib({"hello world": 123})
|
|
with UFOReader(testufoz) as reader:
|
|
assert reader.readLib() == {"hello world": 123}
|
|
|
|
|
|
def test_pathlike(testufo):
|
|
|
|
class PathLike:
|
|
|
|
def __init__(self, s):
|
|
self._path = s
|
|
|
|
def __fspath__(self):
|
|
return tostr(self._path, sys.getfilesystemencoding())
|
|
|
|
path = PathLike(testufo)
|
|
|
|
with UFOReader(path) as reader:
|
|
assert reader._path == path.__fspath__()
|
|
|
|
with UFOWriter(path) as writer:
|
|
assert writer._path == path.__fspath__()
|
|
|
|
|
|
def test_path_attribute_deprecated(testufo):
|
|
with UFOWriter(testufo) as writer:
|
|
with pytest.warns(DeprecationWarning, match="The 'path' attribute"):
|
|
writer.path
|
|
|
|
|
|
@pytest.fixture
|
|
def memufo():
|
|
m = fs.memoryfs.MemoryFS()
|
|
fs.copy.copy_dir(TESTDATA, TEST_UFO3, m, "/")
|
|
return m
|
|
|
|
|
|
class TestMemoryFS:
|
|
|
|
def test_init_reader(self, memufo):
|
|
with UFOReader(memufo) as reader:
|
|
assert reader.formatVersion == 3
|
|
assert reader.fileStructure == UFOFileStructure.PACKAGE
|
|
|
|
def test_init_writer(self):
|
|
m = fs.memoryfs.MemoryFS()
|
|
with UFOWriter(m) as writer:
|
|
assert m.exists("metainfo.plist")
|
|
assert writer._path == "<memfs>"
|