diff options
Diffstat (limited to 'Tests/designspaceLib/designspace_test.py')
-rw-r--r-- | Tests/designspaceLib/designspace_test.py | 74 |
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 |