for constency with the rest of fontTools tests. Also, in setup.cfg we tell pytest to only search for modules named like these
100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import, unicode_literals
|
|
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(object):
|
|
|
|
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(object):
|
|
|
|
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(object):
|
|
|
|
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>"
|