[designspaceLib] Add tests for the new parameters

This commit is contained in:
Jany Belluz 2018-02-14 12:45:32 +00:00
parent ede5de6fb0
commit 03f8ec3b87
3 changed files with 122 additions and 1 deletions

View File

@ -1074,11 +1074,13 @@ class DesignSpaceDocument(object):
def read(self, path):
self.path = path
self.filename = os.path.basename(path)
reader = self.readerClass(path, self)
reader.read()
def write(self, path):
self.path = path
self.filename = os.path.basename(path)
self.updatePaths()
writer = self.writerClass(path, self)
writer.write()

View File

@ -0,0 +1,99 @@
<?xml version='1.0' encoding='utf-8'?>
<designspace format="3">
<axes>
<axis default="0" maximum="1000" minimum="0" name="weight" tag="wght">
<labelname xml:lang="en">Wéíght</labelname>
<labelname xml:lang="fa-IR">قطر</labelname>
</axis>
<axis default="20" hidden="1" maximum="1000" minimum="0" name="width" tag="wdth">
<labelname xml:lang="fr">Chasse</labelname>
<map input="0" output="10" />
<map input="401" output="66" />
<map input="1000" output="990" />
</axis>
</axes>
<rules>
<rule name="named.rule.1">
<condition maximum="1" minimum="0" name="aaaa" />
<condition maximum="3" minimum="2" name="bbbb" />
<sub name="a" with="a.alt" />
</rule>
</rules>
<sources>
<source familyname="MasterFamilyName" filename="masters/masterTest1.ufo" name="master.ufo1" stylename="MasterStyleNameOne">
<lib copy="1" />
<features copy="1" />
<info copy="1" />
<glyph mute="1" name="A" />
<glyph mute="1" name="Z" />
<location>
<dimension name="weight" xvalue="0" />
<dimension name="width" xvalue="20" />
</location>
</source>
<source familyname="MasterFamilyName" filename="masters/masterTest2.ufo" name="master.ufo2" stylename="MasterStyleNameTwo">
<kerning mute="1" />
<location>
<dimension name="weight" xvalue="1000" />
<dimension name="width" xvalue="20" />
</location>
</source>
</sources>
<instances>
<instance familyname="InstanceFamilyName" filename="instances/instanceTest1.ufo" name="instance.ufo1" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName" stylename="InstanceStyleName">
<location>
<dimension name="weight" xvalue="500" />
<dimension name="width" xvalue="20" />
</location>
<glyphs>
<glyph mute="1" name="arrow" unicode="0x123 0x124 0x125" />
</glyphs>
<kerning />
<info />
<lib>
<dict>
<key>com.coolDesignspaceApp.specimenText</key>
<string>Hamburgerwhatever</string>
</dict>
</lib>
</instance>
<instance familyname="InstanceFamilyName" filename="instances/instanceTest2.ufo" name="instance.ufo2" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName" stylename="InstanceStyleName">
<location>
<dimension name="weight" xvalue="500" />
<dimension name="width" xvalue="400" yvalue="300" />
</location>
<glyphs>
<glyph name="arrow" unicode="0x65 0xc9 0x12d">
<location>
<dimension name="weight" xvalue="120" />
<dimension name="width" xvalue="100" />
</location>
<note>A note about this glyph</note>
<masters>
<master glyphname="BB" source="master.ufo1">
<location>
<dimension name="weight" xvalue="20" />
<dimension name="width" xvalue="20" />
</location>
</master>
<master glyphname="CC" source="master.ufo2">
<location>
<dimension name="weight" xvalue="900" />
<dimension name="width" xvalue="900" />
</location>
</master>
</masters>
</glyph>
<glyph name="arrow2" />
</glyphs>
<kerning />
<info />
</instance>
</instances>
<lib>
<dict>
<key>com.coolDesignspaceApp.previewSize</key>
<integer>30</integer>
</dict>
</lib>
</designspace>

View File

@ -12,6 +12,17 @@ from fontTools.designspaceLib import (
InstanceDescriptor, evaluateRule, processRules, posix)
def assert_equals_test_file(path, test_filename):
with open(path) as fp:
actual = fp.read()
test_path = os.path.join(os.path.dirname(__file__), test_filename)
with open(test_path) as fp:
expected = fp.read()
assert actual == expected
def test_fill_document(tmpdir):
tmpdir = str(tmpdir)
testDocPath = os.path.join(tmpdir, "test.designspace")
@ -23,6 +34,7 @@ def test_fill_document(tmpdir):
# add master 1
s1 = SourceDescriptor()
s1.filename = os.path.relpath(masterPath1, os.path.dirname(testDocPath))
assert s1.font is None
s1.name = "master.ufo1"
s1.copyLib = True
s1.copyInfo = True
@ -57,6 +69,7 @@ def test_fill_document(tmpdir):
i1.styleMapStyleName = "InstanceStyleMapStyleName"
glyphData = dict(name="arrow", mute=True, unicodes=[0x123, 0x124, 0x125])
i1.glyphs['arrow'] = glyphData
i1.lib['com.coolDesignspaceApp.specimenText'] = "Hamburgerwhatever"
doc.addInstance(i1)
# add instance 2
i2 = InstanceDescriptor()
@ -78,6 +91,9 @@ def test_fill_document(tmpdir):
i2.glyphs['arrow2'] = dict(mute=False)
doc.addInstance(i2)
doc.filename = "suggestedFileName.designspace"
doc.lib['com.coolDesignspaceApp.previewSize'] = 30
# now we have sources and instances, but no axes yet.
doc.check()
@ -106,7 +122,7 @@ def test_fill_document(tmpdir):
a2.tag = "wdth"
a2.map = [(0.0, 10.0), (401.0, 66.0), (1000.0, 990.0)]
a2.hidden = True
a2.labelNames[u'fr'] = u"Poids"
a2.labelNames[u'fr'] = u"Chasse"
doc.addAxis(a2)
# add an axis that is not part of any location to see if that works
a3 = AxisDescriptor()
@ -127,12 +143,16 @@ def test_fill_document(tmpdir):
# write the document
doc.write(testDocPath)
assert os.path.exists(testDocPath)
assert_equals_test_file(testDocPath, 'data/test.designspace')
# import it again
new = DesignSpaceDocument()
new.read(testDocPath)
new.check()
assert new.default.location == {'width': 20.0, 'weight': 0.0}
assert new.filename == 'test.designspace'
assert new.lib == doc.lib
assert new.instances[0].lib == doc.instances[0].lib
# >>> for a, b in zip(doc.instances, new.instances):
# ... a.compare(b)