aboutsummaryrefslogtreecommitdiff
path: root/Tests/designspaceLib/designspace_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/designspaceLib/designspace_test.py')
-rw-r--r--Tests/designspaceLib/designspace_test.py74
1 files changed, 59 insertions, 15 deletions
diff --git a/Tests/designspaceLib/designspace_test.py b/Tests/designspaceLib/designspace_test.py
index b6ee9d65..ee2d19e6 100644
--- a/Tests/designspaceLib/designspace_test.py
+++ b/Tests/designspaceLib/designspace_test.py
@@ -1,15 +1,26 @@
# coding=utf-8
import os
-import sys
-import pytest
-import warnings
+import re
-from fontTools.misc import plistlib
-from fontTools.designspaceLib import (
- DesignSpaceDocument, SourceDescriptor, AxisDescriptor, RuleDescriptor,
- InstanceDescriptor, evaluateRule, processRules, posix, DesignSpaceDocumentError)
+import pytest
from fontTools import ttLib
+from fontTools.designspaceLib import (
+ AxisDescriptor,
+ AxisLabelDescriptor,
+ DesignSpaceDocument,
+ DesignSpaceDocumentError,
+ DiscreteAxisDescriptor,
+ InstanceDescriptor,
+ RuleDescriptor,
+ SourceDescriptor,
+ evaluateRule,
+ posix,
+ processRules,
+)
+from fontTools.designspaceLib.types import Range
+from fontTools.misc import plistlib
+
def _axesAsDict(axes):
"""
@@ -30,19 +41,22 @@ def _axesAsDict(axes):
def assert_equals_test_file(path, test_filename):
- with open(path) as fp:
+ with open(path, encoding="utf-8") as fp:
actual = fp.read()
test_path = os.path.join(os.path.dirname(__file__), test_filename)
- with open(test_path) as fp:
+ with open(test_path, encoding="utf-8") as fp:
expected = fp.read()
+ expected = re.sub(r"<!--(.|\n)*?-->", "", expected)
+ expected = re.sub(r"\s*\n+", "\n", expected)
assert actual == expected
def test_fill_document(tmpdir):
tmpdir = str(tmpdir)
- testDocPath = os.path.join(tmpdir, "test.designspace")
+ testDocPath = os.path.join(tmpdir, "test_v4.designspace")
+ testDocPath5 = os.path.join(tmpdir, "test_v5.designspace")
masterPath1 = os.path.join(tmpdir, "masters", "masterTest1.ufo")
masterPath2 = os.path.join(tmpdir, "masters", "masterTest2.ufo")
instancePath1 = os.path.join(tmpdir, "instances", "instanceTest1.ufo")
@@ -121,6 +135,10 @@ def test_fill_document(tmpdir):
i1.postScriptFontName = "InstancePostscriptName"
i1.styleMapFamilyName = "InstanceStyleMapFamilyName"
i1.styleMapStyleName = "InstanceStyleMapStyleName"
+ i1.localisedStyleName = dict(fr="Demigras", ja="半ば")
+ i1.localisedFamilyName = dict(fr="Montserrat", ja="モンセラート")
+ i1.localisedStyleMapStyleName = dict(de="Standard")
+ i1.localisedStyleMapFamilyName = dict(de="Montserrat Halbfett", ja="モンセラート SemiBold")
glyphData = dict(name="arrow", mute=True, unicodes=[0x123, 0x124, 0x125])
i1.glyphs['arrow'] = glyphData
i1.lib['com.coolDesignspaceApp.binaryData'] = plistlib.Data(b'<binary gunk>')
@@ -158,16 +176,21 @@ def test_fill_document(tmpdir):
])
r1.subs.append(("a", "a.alt"))
doc.addRule(r1)
- # write the document
+ # write the document; without an explicit format it will be 5.0 by default
+ doc.write(testDocPath5)
+ assert os.path.exists(testDocPath5)
+ assert_equals_test_file(testDocPath5, 'data/test_v5_original.designspace')
+ # write again with an explicit format = 4.1
+ doc.formatVersion = "4.1"
doc.write(testDocPath)
assert os.path.exists(testDocPath)
- assert_equals_test_file(testDocPath, 'data/test.designspace')
+ assert_equals_test_file(testDocPath, 'data/test_v4_original.designspace')
# import it again
new = DesignSpaceDocument()
new.read(testDocPath)
assert new.default.location == {'width': 20.0, 'weight': 0.0}
- assert new.filename == 'test.designspace'
+ assert new.filename == 'test_v4.designspace'
assert new.lib == doc.lib
assert new.instances[0].lib == doc.instances[0].lib
@@ -197,6 +220,7 @@ def test_unicodes(tmpdir):
instancePath1 = os.path.join(tmpdir, "instances", "instanceTest1.ufo")
instancePath2 = os.path.join(tmpdir, "instances", "instanceTest2.ufo")
doc = DesignSpaceDocument()
+ doc.formatVersion = "4.1" # This test about instance glyphs is deprecated in v5
# add master 1
s1 = SourceDescriptor()
s1.filename = os.path.relpath(masterPath1, os.path.dirname(testDocPath))
@@ -832,7 +856,7 @@ def test_updatePaths(tmpdir):
def test_read_with_path_object():
import pathlib
- source = (pathlib.Path(__file__) / "../data/test.designspace").resolve()
+ source = (pathlib.Path(__file__) / "../data/test_v4_original.designspace").resolve()
assert source.exists()
doc = DesignSpaceDocument()
doc.read(source)
@@ -841,7 +865,7 @@ def test_read_with_path_object():
def test_with_with_path_object(tmpdir):
import pathlib
tmpdir = str(tmpdir)
- dest = pathlib.Path(tmpdir) / "test.designspace"
+ dest = pathlib.Path(tmpdir) / "test_v4_original.designspace"
doc = DesignSpaceDocument()
doc.write(dest)
assert dest.exists()
@@ -1020,3 +1044,23 @@ def test_addRuleDescriptor(tmp_path):
# Test it doesn't crash.
ds.write(tmp_path / "test.designspace")
+
+
+def test_deepcopyExceptFonts():
+ ds = DesignSpaceDocument()
+ ds.addSourceDescriptor(font=object())
+ ds.addSourceDescriptor(font=object())
+
+ ds_copy = ds.deepcopyExceptFonts()
+
+ assert ds.tostring() == ds_copy.tostring()
+ assert ds.sources[0].font is ds_copy.sources[0].font
+ assert ds.sources[1].font is ds_copy.sources[1].font
+
+
+def test_Range_post_init():
+ # test min and max are sorted and default is clamped to either min/max
+ r = Range(minimum=2, maximum=-1, default=-2)
+ assert r.minimum == -1
+ assert r.maximum == 2
+ assert r.default == -1