aboutsummaryrefslogtreecommitdiff
path: root/Tests/ufoLib/UFO3_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/ufoLib/UFO3_test.py')
-rw-r--r--Tests/ufoLib/UFO3_test.py9680
1 files changed, 5022 insertions, 4658 deletions
diff --git a/Tests/ufoLib/UFO3_test.py b/Tests/ufoLib/UFO3_test.py
index c4218023..95a51c4d 100644
--- a/Tests/ufoLib/UFO3_test.py
+++ b/Tests/ufoLib/UFO3_test.py
@@ -9,4165 +9,4519 @@ from fontTools.misc import plistlib
from .testSupport import fontInfoVersion3
-class TestInfoObject: pass
+class TestInfoObject:
+ pass
# --------------
# fontinfo.plist
# --------------
-class ReadFontInfoVersion3TestCase(unittest.TestCase):
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- metaInfo = {
- "creator": "test",
- "formatVersion": 3
- }
- path = os.path.join(self.dstDir, "metainfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(metaInfo, f)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def _writeInfoToPlist(self, info):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(info, f)
-
- def testRead(self):
- originalData = dict(fontInfoVersion3)
- self._writeInfoToPlist(originalData)
- infoObject = TestInfoObject()
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(infoObject)
- readData = {}
- for attr in list(fontInfoVersion3.keys()):
- readData[attr] = getattr(infoObject, attr)
- self.assertEqual(originalData, readData)
-
- def testGenericRead(self):
- # familyName
- info = dict(fontInfoVersion3)
- info["familyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleName
- info = dict(fontInfoVersion3)
- info["styleName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleMapFamilyName
- info = dict(fontInfoVersion3)
- info["styleMapFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleMapStyleName
- ## not a string
- info = dict(fontInfoVersion3)
- info["styleMapStyleName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion3)
- info["styleMapStyleName"] = "REGULAR"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # versionMajor
- info = dict(fontInfoVersion3)
- info["versionMajor"] = "1"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # versionMinor
- info = dict(fontInfoVersion3)
- info["versionMinor"] = "0"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["versionMinor"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # copyright
- info = dict(fontInfoVersion3)
- info["copyright"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # trademark
- info = dict(fontInfoVersion3)
- info["trademark"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # unitsPerEm
- info = dict(fontInfoVersion3)
- info["unitsPerEm"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["unitsPerEm"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["unitsPerEm"] = -1.0
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # descender
- info = dict(fontInfoVersion3)
- info["descender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # xHeight
- info = dict(fontInfoVersion3)
- info["xHeight"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # capHeight
- info = dict(fontInfoVersion3)
- info["capHeight"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # ascender
- info = dict(fontInfoVersion3)
- info["ascender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # italicAngle
- info = dict(fontInfoVersion3)
- info["italicAngle"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testGaspRead(self):
- # not a list
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # empty list
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = []
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- # not a dict
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = ["abc"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # dict not properly formatted
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=0xFFFF, notTheRightKey=1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(notTheRightKey=1, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # not an int for ppem
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM="abc", rangeGaspBehavior=[0]), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # not a list for behavior
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=10, rangeGaspBehavior="abc"), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # invalid behavior value
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=10, rangeGaspBehavior=[-1]), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # not sorted
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]), dict(rangeMaxPPEM=10, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # no 0xFFFF
- info = dict(fontInfoVersion3)
- info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]), dict(rangeMaxPPEM=20, rangeGaspBehavior=[0])]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
-
- def testHeadRead(self):
- # openTypeHeadCreated
- ## not a string
- info = dict(fontInfoVersion3)
- info["openTypeHeadCreated"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## invalid format
- info = dict(fontInfoVersion3)
- info["openTypeHeadCreated"] = "2000-Jan-01 00:00:00"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHeadLowestRecPPEM
- info = dict(fontInfoVersion3)
- info["openTypeHeadLowestRecPPEM"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeHeadLowestRecPPEM"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHeadFlags
- info = dict(fontInfoVersion3)
- info["openTypeHeadFlags"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testHheaRead(self):
- # openTypeHheaAscender
- info = dict(fontInfoVersion3)
- info["openTypeHheaAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaDescender
- info = dict(fontInfoVersion3)
- info["openTypeHheaDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaLineGap
- info = dict(fontInfoVersion3)
- info["openTypeHheaLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretSlopeRise
- info = dict(fontInfoVersion3)
- info["openTypeHheaCaretSlopeRise"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretSlopeRun
- info = dict(fontInfoVersion3)
- info["openTypeHheaCaretSlopeRun"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretOffset
- info = dict(fontInfoVersion3)
- info["openTypeHheaCaretOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testNameRead(self):
- # openTypeNameDesigner
- info = dict(fontInfoVersion3)
- info["openTypeNameDesigner"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameDesignerURL
- info = dict(fontInfoVersion3)
- info["openTypeNameDesignerURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameManufacturer
- info = dict(fontInfoVersion3)
- info["openTypeNameManufacturer"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameManufacturerURL
- info = dict(fontInfoVersion3)
- info["openTypeNameManufacturerURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameLicense
- info = dict(fontInfoVersion3)
- info["openTypeNameLicense"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameLicenseURL
- info = dict(fontInfoVersion3)
- info["openTypeNameLicenseURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameVersion
- info = dict(fontInfoVersion3)
- info["openTypeNameVersion"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameUniqueID
- info = dict(fontInfoVersion3)
- info["openTypeNameUniqueID"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameDescription
- info = dict(fontInfoVersion3)
- info["openTypeNameDescription"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNamePreferredFamilyName
- info = dict(fontInfoVersion3)
- info["openTypeNamePreferredFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNamePreferredSubfamilyName
- info = dict(fontInfoVersion3)
- info["openTypeNamePreferredSubfamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameCompatibleFullName
- info = dict(fontInfoVersion3)
- info["openTypeNameCompatibleFullName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameSampleText
- info = dict(fontInfoVersion3)
- info["openTypeNameSampleText"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameWWSFamilyName
- info = dict(fontInfoVersion3)
- info["openTypeNameWWSFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameWWSSubfamilyName
- info = dict(fontInfoVersion3)
- info["openTypeNameWWSSubfamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameRecords
- ## not a list
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## not a dict
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = ["abc"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## invalid dict structure
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [dict(foo="bar")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## incorrect keys
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record.", foo="bar")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1)
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## invalid values
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID="1", platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID="1", encodingID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID="1", languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, languageID="1", string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string=1)
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## duplicate
- info = dict(fontInfoVersion3)
- info["openTypeNameRecords"] = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record."),
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
-
- def testOS2Read(self):
- # openTypeOS2WidthClass
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2WidthClass"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out or range
- info = dict(fontInfoVersion3)
- info["openTypeOS2WidthClass"] = 15
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WeightClass
- info = dict(fontInfoVersion3)
- ## not an int
- info["openTypeOS2WeightClass"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info["openTypeOS2WeightClass"] = -50
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Selection
- info = dict(fontInfoVersion3)
- info["openTypeOS2Selection"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2VendorID
- info = dict(fontInfoVersion3)
- info["openTypeOS2VendorID"] = 1234
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Panose
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## negative
- info = dict(fontInfoVersion3)
- info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, -9]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too few values
- info = dict(fontInfoVersion3)
- info["openTypeOS2Panose"] = [0, 1, 2, 3]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2FamilyClass
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2FamilyClass"] = [1, str(1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too few values
- info = dict(fontInfoVersion3)
- info["openTypeOS2FamilyClass"] = [1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["openTypeOS2FamilyClass"] = [1, 1, 1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion3)
- info["openTypeOS2FamilyClass"] = [1, 201]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2UnicodeRanges
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2UnicodeRanges"] = ["0"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion3)
- info["openTypeOS2UnicodeRanges"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2CodePageRanges
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2CodePageRanges"] = ["0"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion3)
- info["openTypeOS2CodePageRanges"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoAscender
- info = dict(fontInfoVersion3)
- info["openTypeOS2TypoAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoDescender
- info = dict(fontInfoVersion3)
- info["openTypeOS2TypoDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoLineGap
- info = dict(fontInfoVersion3)
- info["openTypeOS2TypoLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WinAscent
- info = dict(fontInfoVersion3)
- info["openTypeOS2WinAscent"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeOS2WinAscent"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WinDescent
- info = dict(fontInfoVersion3)
- info["openTypeOS2WinDescent"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- info = dict(fontInfoVersion3)
- info["openTypeOS2WinDescent"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Type
- ## not an int
- info = dict(fontInfoVersion3)
- info["openTypeOS2Type"] = ["1"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion3)
- info["openTypeOS2Type"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptXSize
- info = dict(fontInfoVersion3)
- info["openTypeOS2SubscriptXSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptYSize
- info = dict(fontInfoVersion3)
- info["openTypeOS2SubscriptYSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptXOffset
- info = dict(fontInfoVersion3)
- info["openTypeOS2SubscriptXOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptYOffset
- info = dict(fontInfoVersion3)
- info["openTypeOS2SubscriptYOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptXSize
- info = dict(fontInfoVersion3)
- info["openTypeOS2SuperscriptXSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptYSize
- info = dict(fontInfoVersion3)
- info["openTypeOS2SuperscriptYSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptXOffset
- info = dict(fontInfoVersion3)
- info["openTypeOS2SuperscriptXOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptYOffset
- info = dict(fontInfoVersion3)
- info["openTypeOS2SuperscriptYOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2StrikeoutSize
- info = dict(fontInfoVersion3)
- info["openTypeOS2StrikeoutSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2StrikeoutPosition
- info = dict(fontInfoVersion3)
- info["openTypeOS2StrikeoutPosition"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testVheaRead(self):
- # openTypeVheaVertTypoAscender
- info = dict(fontInfoVersion3)
- info["openTypeVheaVertTypoAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaVertTypoDescender
- info = dict(fontInfoVersion3)
- info["openTypeVheaVertTypoDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaVertTypoLineGap
- info = dict(fontInfoVersion3)
- info["openTypeVheaVertTypoLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretSlopeRise
- info = dict(fontInfoVersion3)
- info["openTypeVheaCaretSlopeRise"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretSlopeRun
- info = dict(fontInfoVersion3)
- info["openTypeVheaCaretSlopeRun"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretOffset
- info = dict(fontInfoVersion3)
- info["openTypeVheaCaretOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testFONDRead(self):
- # macintoshFONDFamilyID
- info = dict(fontInfoVersion3)
- info["macintoshFONDFamilyID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # macintoshFONDName
- info = dict(fontInfoVersion3)
- info["macintoshFONDName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testPostscriptRead(self):
- # postscriptFontName
- info = dict(fontInfoVersion3)
- info["postscriptFontName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptFullName
- info = dict(fontInfoVersion3)
- info["postscriptFullName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptSlantAngle
- info = dict(fontInfoVersion3)
- info["postscriptSlantAngle"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptUniqueID
- info = dict(fontInfoVersion3)
- info["postscriptUniqueID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptUnderlineThickness
- info = dict(fontInfoVersion3)
- info["postscriptUnderlineThickness"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptUnderlinePosition
- info = dict(fontInfoVersion3)
- info["postscriptUnderlinePosition"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptIsFixedPitch
- info = dict(fontInfoVersion3)
- info["postscriptIsFixedPitch"] = 2
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueValues
- ## not a list
- info = dict(fontInfoVersion3)
- info["postscriptBlueValues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion3)
- info["postscriptBlueValues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptBlueValues"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptOtherBlues
- ## not a list
- info = dict(fontInfoVersion3)
- info["postscriptOtherBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion3)
- info["postscriptOtherBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptOtherBlues"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptFamilyBlues
- ## not a list
- info = dict(fontInfoVersion3)
- info["postscriptFamilyBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion3)
- info["postscriptFamilyBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptFamilyBlues"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptFamilyOtherBlues
- ## not a list
- info = dict(fontInfoVersion3)
- info["postscriptFamilyOtherBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion3)
- info["postscriptFamilyOtherBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptFamilyOtherBlues"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptStemSnapH
- ## not list
- info = dict(fontInfoVersion3)
- info["postscriptStemSnapH"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptStemSnapH"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptStemSnapV
- ## not list
- info = dict(fontInfoVersion3)
- info["postscriptStemSnapV"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion3)
- info["postscriptStemSnapV"] = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueFuzz
- info = dict(fontInfoVersion3)
- info["postscriptBlueFuzz"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueShift
- info = dict(fontInfoVersion3)
- info["postscriptBlueShift"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueScale
- info = dict(fontInfoVersion3)
- info["postscriptBlueScale"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptForceBold
- info = dict(fontInfoVersion3)
- info["postscriptForceBold"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptDefaultWidthX
- info = dict(fontInfoVersion3)
- info["postscriptDefaultWidthX"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptNominalWidthX
- info = dict(fontInfoVersion3)
- info["postscriptNominalWidthX"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptWeightName
- info = dict(fontInfoVersion3)
- info["postscriptWeightName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptDefaultCharacter
- info = dict(fontInfoVersion3)
- info["postscriptDefaultCharacter"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptWindowsCharacterSet
- info = dict(fontInfoVersion3)
- info["postscriptWindowsCharacterSet"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # macintoshFONDFamilyID
- info = dict(fontInfoVersion3)
- info["macintoshFONDFamilyID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # macintoshFONDName
- info = dict(fontInfoVersion3)
- info["macintoshFONDName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
-
- def testWOFFRead(self):
- # woffMajorVersion
- info = dict(fontInfoVersion3)
- info["woffMajorVersion"] = 1.0
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["woffMajorVersion"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMinorVersion
- info = dict(fontInfoVersion3)
- info["woffMinorVersion"] = 1.0
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["woffMinorVersion"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataUniqueID
- ## none
- info = dict(fontInfoVersion3)
- del info["woffMetadataUniqueID"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataUniqueID"] = 1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataUniqueID"] = dict(id="foo", notTheRightKey=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no id
- info = dict(fontInfoVersion3)
- info["woffMetadataUniqueID"] = dict()
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## not a string for id
- info = dict(fontInfoVersion3)
- info["woffMetadataUniqueID"] = dict(id=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## empty string
- info = dict(fontInfoVersion3)
- info["woffMetadataUniqueID"] = dict(id="")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- # woffMetadataVendor
- ## no name
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(url="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## name not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name=1, url="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## name an empty string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="", url="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## no URL
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url empty string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url="")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## have dir
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="ltr")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="rtl")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## dir not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url="bar", dir=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="utd")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## have class
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = {"name" : "foo", "url" : "bar", "class" : "hello"}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = {"name" : "foo", "url" : "bar", "class" : 1}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class empty string
- info = dict(fontInfoVersion3)
- info["woffMetadataVendor"] = {"name" : "foo", "url" : "bar", "class" : ""}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- # woffMetadataCredits
- ## no credits attribute
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = {}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## unknown attribute
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo")], notTheRightKey=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## not a list
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits="abc")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no elements in credits
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## credit not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=["abc"])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo", notTheRightKey=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no name
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(url="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## name not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo", url=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## role not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo", role=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo", dir=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[dict(name="foo", dir="utd")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCredits"] = dict(credits=[{"name" : "foo", "class" : 1}])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataDescription
- ## no url
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo")], url=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no text
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(url="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a list
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text="abc")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=["abc"])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo", notTheRightKey=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item missing text
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(language="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo", url=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## language not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo", language=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[dict(text="foo", dir="utd")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataDescription"] = dict(text=[{"text" : "foo", "class" : 1}])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataLicense
- ## no url
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo")], url=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## id not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo")], id=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no text
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(url="foo")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## text not a list
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text="abc")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=["abc"])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo", notTheRightKey=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item missing text
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(language="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo", url=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## language not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo", language=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[dict(text="foo", dir="utd")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicense"] = dict(text=[{"text" : "foo", "class" : 1}])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataCopyright
- ## unknown attribute
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text="foo")], notTheRightKey=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no text
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict()
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a list
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text="abc")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=["abc"])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text="foo", notTheRightKey=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item missing text
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(language="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text="foo", url=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## language not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text="foo", language=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[dict(text="foo", dir="utd")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataCopyright"] = dict(text=[{"text" : "foo", "class" : 1}])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataTrademark
- ## unknown attribute
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text="foo")], notTheRightKey=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## no text
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict()
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a list
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text="abc")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item not a dict
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=["abc"])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item unknown key
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text="foo", notTheRightKey=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text item missing text
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(language="foo")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## text not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## url not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text="foo", url=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## language not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text="foo", language=1)])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[dict(text="foo", dir="utd")])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataTrademark"] = dict(text=[{"text" : "foo", "class" : 1}])
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # woffMetadataLicensee
- ## no name
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict()
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## unknown attribute
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict(name="foo", notTheRightKey=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## name not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict(name=1)
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## dir options
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict(name="foo", dir="ltr")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict(name="foo", dir="rtl")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## dir not ltr or rtl
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = dict(name="foo", dir="utd")
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## have class
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = {"name" : "foo", "class" : "hello"}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- reader.readInfo(TestInfoObject())
- ## class not a string
- info = dict(fontInfoVersion3)
- info["woffMetadataLicensee"] = {"name" : "foo", "class" : 1}
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
-
- def testGuidelinesRead(self):
- # x
- ## not an int or float
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x="1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # y
- ## not an int or float
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(y="1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # angle
- ## < 0
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, y=0, angle=-1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## > 360
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, y=0, angle=361)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # name
- ## not a string
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, name=1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # color
- ## not a string
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color=1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## not enough commas
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1 0, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1 0 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1 0 0 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## not enough parts
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color=", 0, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, , 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, 0, , 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, 0, 0, ")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color=", , , ")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## not a number in all positions
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="r, 1, 1, 1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, g, 1, 1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, 1, b, 1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, 1, 1, a")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many parts
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="1, 0, 0, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## < 0 in each position
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="-1, 0, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, -1, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, 0, -1, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, 0, 0, -1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## > 1 in each position
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="2, 0, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, 2, 0, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, 0, 2, 0")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, color="0, 0, 0, 2")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # identifier
- ## duplicate
- info = dict(fontInfoVersion3)
- info["guidelines"] = [dict(x=0, identifier="guide1"), dict(y=0, identifier="guide1")]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir, validate=True)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+class ReadFontInfoVersion3TestCase(unittest.TestCase):
+ def setUp(self):
+ self.dstDir = tempfile.mktemp()
+ os.mkdir(self.dstDir)
+ metaInfo = {"creator": "test", "formatVersion": 3}
+ path = os.path.join(self.dstDir, "metainfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(metaInfo, f)
+
+ def tearDown(self):
+ shutil.rmtree(self.dstDir)
+
+ def _writeInfoToPlist(self, info):
+ path = os.path.join(self.dstDir, "fontinfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(info, f)
+
+ def testRead(self):
+ originalData = dict(fontInfoVersion3)
+ self._writeInfoToPlist(originalData)
+ infoObject = TestInfoObject()
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(infoObject)
+ readData = {}
+ for attr in list(fontInfoVersion3.keys()):
+ readData[attr] = getattr(infoObject, attr)
+ self.assertEqual(originalData, readData)
+
+ def testGenericRead(self):
+ # familyName
+ info = dict(fontInfoVersion3)
+ info["familyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # styleName
+ info = dict(fontInfoVersion3)
+ info["styleName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # styleMapFamilyName
+ info = dict(fontInfoVersion3)
+ info["styleMapFamilyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # styleMapStyleName
+ ## not a string
+ info = dict(fontInfoVersion3)
+ info["styleMapStyleName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info = dict(fontInfoVersion3)
+ info["styleMapStyleName"] = "REGULAR"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # versionMajor
+ info = dict(fontInfoVersion3)
+ info["versionMajor"] = "1"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # versionMinor
+ info = dict(fontInfoVersion3)
+ info["versionMinor"] = "0"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["versionMinor"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # copyright
+ info = dict(fontInfoVersion3)
+ info["copyright"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # trademark
+ info = dict(fontInfoVersion3)
+ info["trademark"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # unitsPerEm
+ info = dict(fontInfoVersion3)
+ info["unitsPerEm"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["unitsPerEm"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["unitsPerEm"] = -1.0
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # descender
+ info = dict(fontInfoVersion3)
+ info["descender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # xHeight
+ info = dict(fontInfoVersion3)
+ info["xHeight"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # capHeight
+ info = dict(fontInfoVersion3)
+ info["capHeight"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # ascender
+ info = dict(fontInfoVersion3)
+ info["ascender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # italicAngle
+ info = dict(fontInfoVersion3)
+ info["italicAngle"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testGaspRead(self):
+ # not a list
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # empty list
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = []
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ # not a dict
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = ["abc"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # dict not properly formatted
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [dict(rangeMaxPPEM=0xFFFF, notTheRightKey=1)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(notTheRightKey=1, rangeGaspBehavior=[0])
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # not an int for ppem
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(rangeMaxPPEM="abc", rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # not a list for behavior
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior="abc"),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # invalid behavior value
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[-1]),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # not sorted
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # no 0xFFFF
+ info = dict(fontInfoVersion3)
+ info["openTypeGaspRangeRecords"] = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=20, rangeGaspBehavior=[0]),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+
+ def testHeadRead(self):
+ # openTypeHeadCreated
+ ## not a string
+ info = dict(fontInfoVersion3)
+ info["openTypeHeadCreated"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## invalid format
+ info = dict(fontInfoVersion3)
+ info["openTypeHeadCreated"] = "2000-Jan-01 00:00:00"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHeadLowestRecPPEM
+ info = dict(fontInfoVersion3)
+ info["openTypeHeadLowestRecPPEM"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeHeadLowestRecPPEM"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHeadFlags
+ info = dict(fontInfoVersion3)
+ info["openTypeHeadFlags"] = [-1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testHheaRead(self):
+ # openTypeHheaAscender
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaAscender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHheaDescender
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaDescender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHheaLineGap
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaLineGap"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHheaCaretSlopeRise
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaCaretSlopeRise"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHheaCaretSlopeRun
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaCaretSlopeRun"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeHheaCaretOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeHheaCaretOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testNameRead(self):
+ # openTypeNameDesigner
+ info = dict(fontInfoVersion3)
+ info["openTypeNameDesigner"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameDesignerURL
+ info = dict(fontInfoVersion3)
+ info["openTypeNameDesignerURL"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameManufacturer
+ info = dict(fontInfoVersion3)
+ info["openTypeNameManufacturer"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameManufacturerURL
+ info = dict(fontInfoVersion3)
+ info["openTypeNameManufacturerURL"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameLicense
+ info = dict(fontInfoVersion3)
+ info["openTypeNameLicense"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameLicenseURL
+ info = dict(fontInfoVersion3)
+ info["openTypeNameLicenseURL"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameVersion
+ info = dict(fontInfoVersion3)
+ info["openTypeNameVersion"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameUniqueID
+ info = dict(fontInfoVersion3)
+ info["openTypeNameUniqueID"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameDescription
+ info = dict(fontInfoVersion3)
+ info["openTypeNameDescription"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNamePreferredFamilyName
+ info = dict(fontInfoVersion3)
+ info["openTypeNamePreferredFamilyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNamePreferredSubfamilyName
+ info = dict(fontInfoVersion3)
+ info["openTypeNamePreferredSubfamilyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameCompatibleFullName
+ info = dict(fontInfoVersion3)
+ info["openTypeNameCompatibleFullName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameSampleText
+ info = dict(fontInfoVersion3)
+ info["openTypeNameSampleText"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameWWSFamilyName
+ info = dict(fontInfoVersion3)
+ info["openTypeNameWWSFamilyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameWWSSubfamilyName
+ info = dict(fontInfoVersion3)
+ info["openTypeNameWWSSubfamilyName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeNameRecords
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## not a dict
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = ["abc"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## invalid dict structure
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [dict(foo="bar")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## incorrect keys
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ foo="bar",
+ )
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(platformID=1, encodingID=1, languageID=1, string="Name Record.")
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(nameID=1, encodingID=1, languageID=1, string="Name Record.")
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(nameID=1, platformID=1, languageID=1, string="Name Record.")
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(nameID=1, platformID=1, encodingID=1, string="Name Record.")
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(nameID=1, platformID=1, encodingID=1, languageID=1)
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## invalid values
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID="1",
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID=1,
+ platformID="1",
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID="1",
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID="1",
+ string="Name Record.",
+ )
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(nameID=1, platformID=1, encodingID=1, languageID=1, string=1)
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## duplicate
+ info = dict(fontInfoVersion3)
+ info["openTypeNameRecords"] = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ ),
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ ),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+
+ def testOS2Read(self):
+ # openTypeOS2WidthClass
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WidthClass"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out or range
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WidthClass"] = 15
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2WeightClass
+ info = dict(fontInfoVersion3)
+ ## not an int
+ info["openTypeOS2WeightClass"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info["openTypeOS2WeightClass"] = -50
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2Selection
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Selection"] = [-1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2VendorID
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2VendorID"] = 1234
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2Panose
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## negative
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, -9]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## too few values
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Panose"] = [0, 1, 2, 3]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2FamilyClass
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2FamilyClass"] = [1, str(1)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## too few values
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2FamilyClass"] = [1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2FamilyClass"] = [1, 1, 1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2FamilyClass"] = [1, 201]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2UnicodeRanges
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2UnicodeRanges"] = ["0"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2UnicodeRanges"] = [-1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2CodePageRanges
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2CodePageRanges"] = ["0"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2CodePageRanges"] = [-1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2TypoAscender
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2TypoAscender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2TypoDescender
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2TypoDescender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2TypoLineGap
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2TypoLineGap"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2WinAscent
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WinAscent"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WinAscent"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2WinDescent
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WinDescent"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2WinDescent"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2Type
+ ## not an int
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Type"] = ["1"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ ## out of range
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2Type"] = [-1]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SubscriptXSize
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SubscriptXSize"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SubscriptYSize
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SubscriptYSize"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SubscriptXOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SubscriptXOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SubscriptYOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SubscriptYOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SuperscriptXSize
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SuperscriptXSize"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SuperscriptYSize
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SuperscriptYSize"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SuperscriptXOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SuperscriptXOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2SuperscriptYOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2SuperscriptYOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2StrikeoutSize
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2StrikeoutSize"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeOS2StrikeoutPosition
+ info = dict(fontInfoVersion3)
+ info["openTypeOS2StrikeoutPosition"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testVheaRead(self):
+ # openTypeVheaVertTypoAscender
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaVertTypoAscender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeVheaVertTypoDescender
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaVertTypoDescender"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeVheaVertTypoLineGap
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaVertTypoLineGap"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeVheaCaretSlopeRise
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaCaretSlopeRise"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeVheaCaretSlopeRun
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaCaretSlopeRun"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # openTypeVheaCaretOffset
+ info = dict(fontInfoVersion3)
+ info["openTypeVheaCaretOffset"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testFONDRead(self):
+ # macintoshFONDFamilyID
+ info = dict(fontInfoVersion3)
+ info["macintoshFONDFamilyID"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # macintoshFONDName
+ info = dict(fontInfoVersion3)
+ info["macintoshFONDName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+
+ def testPostscriptRead(self):
+ # postscriptFontName
+ info = dict(fontInfoVersion3)
+ info["postscriptFontName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # postscriptFullName
+ info = dict(fontInfoVersion3)
+ info["postscriptFullName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # postscriptSlantAngle
+ info = dict(fontInfoVersion3)
+ info["postscriptSlantAngle"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
+ # postscriptUniqueID
+ info = dict(fontInfoVersion3)
+ info["postscriptUniqueID"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptUnderlineThickness
+ info = dict(fontInfoVersion3)
+ info["postscriptUnderlineThickness"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptUnderlinePosition
+ info = dict(fontInfoVersion3)
+ info["postscriptUnderlinePosition"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptIsFixedPitch
+ info = dict(fontInfoVersion3)
+ info["postscriptIsFixedPitch"] = 2
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptBlueValues
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueValues"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## uneven value count
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueValues"] = [500]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueValues"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptOtherBlues
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["postscriptOtherBlues"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## uneven value count
+ info = dict(fontInfoVersion3)
+ info["postscriptOtherBlues"] = [500]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptOtherBlues"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptFamilyBlues
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyBlues"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## uneven value count
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyBlues"] = [500]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyBlues"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptFamilyOtherBlues
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyOtherBlues"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## uneven value count
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyOtherBlues"] = [500]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptFamilyOtherBlues"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptStemSnapH
+ ## not list
+ info = dict(fontInfoVersion3)
+ info["postscriptStemSnapH"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptStemSnapH"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptStemSnapV
+ ## not list
+ info = dict(fontInfoVersion3)
+ info["postscriptStemSnapV"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many values
+ info = dict(fontInfoVersion3)
+ info["postscriptStemSnapV"] = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptBlueFuzz
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueFuzz"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptBlueShift
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueShift"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptBlueScale
+ info = dict(fontInfoVersion3)
+ info["postscriptBlueScale"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptForceBold
+ info = dict(fontInfoVersion3)
+ info["postscriptForceBold"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptDefaultWidthX
+ info = dict(fontInfoVersion3)
+ info["postscriptDefaultWidthX"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptNominalWidthX
+ info = dict(fontInfoVersion3)
+ info["postscriptNominalWidthX"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptWeightName
+ info = dict(fontInfoVersion3)
+ info["postscriptWeightName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptDefaultCharacter
+ info = dict(fontInfoVersion3)
+ info["postscriptDefaultCharacter"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # postscriptWindowsCharacterSet
+ info = dict(fontInfoVersion3)
+ info["postscriptWindowsCharacterSet"] = -1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # macintoshFONDFamilyID
+ info = dict(fontInfoVersion3)
+ info["macintoshFONDFamilyID"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # macintoshFONDName
+ info = dict(fontInfoVersion3)
+ info["macintoshFONDName"] = 123
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+
+ def testWOFFRead(self):
+ # woffMajorVersion
+ info = dict(fontInfoVersion3)
+ info["woffMajorVersion"] = 1.0
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["woffMajorVersion"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMinorVersion
+ info = dict(fontInfoVersion3)
+ info["woffMinorVersion"] = 1.0
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["woffMinorVersion"] = "abc"
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataUniqueID
+ ## none
+ info = dict(fontInfoVersion3)
+ del info["woffMetadataUniqueID"]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataUniqueID"] = 1
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataUniqueID"] = dict(id="foo", notTheRightKey=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no id
+ info = dict(fontInfoVersion3)
+ info["woffMetadataUniqueID"] = dict()
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## not a string for id
+ info = dict(fontInfoVersion3)
+ info["woffMetadataUniqueID"] = dict(id=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## empty string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataUniqueID"] = dict(id="")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ # woffMetadataVendor
+ ## no name
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(url="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## name not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name=1, url="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## name an empty string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="", url="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## no URL
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url empty string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url="")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## have dir
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="ltr")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="rtl")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## dir not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url="bar", dir=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = dict(name="foo", url="bar", dir="utd")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## have class
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = {"name": "foo", "url": "bar", "class": "hello"}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = {"name": "foo", "url": "bar", "class": 1}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class empty string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataVendor"] = {"name": "foo", "url": "bar", "class": ""}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ # woffMetadataCredits
+ ## no credits attribute
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = {}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## unknown attribute
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo")], notTheRightKey=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## not a list
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits="abc")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no elements in credits
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## credit not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=["abc"])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo", notTheRightKey=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no name
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(url="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## name not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo", url=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## role not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo", role=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo", dir=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[dict(name="foo", dir="utd")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCredits"] = dict(credits=[{"name": "foo", "class": 1}])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataDescription
+ ## no url
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text="foo")], url=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(url="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a list
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text="abc")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=["abc"])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(
+ text=[dict(text="foo", notTheRightKey=1)]
+ )
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item missing text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(language="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text="foo", url=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## language not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text="foo", language=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[dict(text="foo", dir="utd")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataDescription"] = dict(text=[{"text": "foo", "class": 1}])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataLicense
+ ## no url
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo")], url=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## id not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo")], id=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(url="foo")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## text not a list
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text="abc")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=["abc"])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo", notTheRightKey=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item missing text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(language="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo", url=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## language not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo", language=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[dict(text="foo", dir="utd")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicense"] = dict(text=[{"text": "foo", "class": 1}])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataCopyright
+ ## unknown attribute
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text="foo")], notTheRightKey=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict()
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a list
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text="abc")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=["abc"])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text="foo", notTheRightKey=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item missing text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(language="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text="foo", url=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## language not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text="foo", language=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[dict(text="foo", dir="utd")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataCopyright"] = dict(text=[{"text": "foo", "class": 1}])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataTrademark
+ ## unknown attribute
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text="foo")], notTheRightKey=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## no text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict()
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a list
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text="abc")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item not a dict
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=["abc"])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item unknown key
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text="foo", notTheRightKey=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text item missing text
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(language="foo")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## text not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## url not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text="foo", url=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## language not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text="foo", language=1)])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[dict(text="foo", dir="utd")])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataTrademark"] = dict(text=[{"text": "foo", "class": 1}])
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # woffMetadataLicensee
+ ## no name
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict()
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## unknown attribute
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict(name="foo", notTheRightKey=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## name not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict(name=1)
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## dir options
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict(name="foo", dir="ltr")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict(name="foo", dir="rtl")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## dir not ltr or rtl
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = dict(name="foo", dir="utd")
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## have class
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = {"name": "foo", "class": "hello"}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ reader.readInfo(TestInfoObject())
+ ## class not a string
+ info = dict(fontInfoVersion3)
+ info["woffMetadataLicensee"] = {"name": "foo", "class": 1}
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+
+ def testGuidelinesRead(self):
+ # x
+ ## not an int or float
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x="1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # y
+ ## not an int or float
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(y="1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # angle
+ ## < 0
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, y=0, angle=-1)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## > 360
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, y=0, angle=361)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # name
+ ## not a string
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, name=1)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # color
+ ## not a string
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color=1)]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## not enough commas
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1 0, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1 0 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1 0 0 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## not enough parts
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color=", 0, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, , 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, 0, , 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, 0, 0, ")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color=", , , ")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## not a number in all positions
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="r, 1, 1, 1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, g, 1, 1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, 1, b, 1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, 1, 1, a")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## too many parts
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="1, 0, 0, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## < 0 in each position
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="-1, 0, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, -1, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, 0, -1, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, 0, 0, -1")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ ## > 1 in each position
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="2, 0, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, 2, 0, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, 0, 2, 0")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [dict(x=0, color="0, 0, 0, 2")]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
+ # identifier
+ ## duplicate
+ info = dict(fontInfoVersion3)
+ info["guidelines"] = [
+ dict(x=0, identifier="guide1"),
+ dict(y=0, identifier="guide1"),
+ ]
+ self._writeInfoToPlist(info)
+ reader = UFOReader(self.dstDir, validate=True)
+ self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
class WriteFontInfoVersion3TestCase(unittest.TestCase):
-
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.dstDir = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def tearDownUFO(self):
- if os.path.exists(self.dstDir):
- shutil.rmtree(self.dstDir)
-
- def makeInfoObject(self):
- infoObject = TestInfoObject()
- for attr, value in list(fontInfoVersion3.items()):
- setattr(infoObject, attr, value)
- return infoObject
-
- def readPlist(self):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- with open(path, "rb") as f:
- plist = plistlib.load(f)
- return plist
-
- def testWrite(self):
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- writtenData = self.readPlist()
- for attr, originalValue in list(fontInfoVersion3.items()):
- newValue = writtenData[attr]
- self.assertEqual(newValue, originalValue)
- self.tearDownUFO()
-
- def testGenericWrite(self):
- # familyName
- infoObject = self.makeInfoObject()
- infoObject.familyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # styleName
- infoObject = self.makeInfoObject()
- infoObject.styleName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # styleMapFamilyName
- infoObject = self.makeInfoObject()
- infoObject.styleMapFamilyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # styleMapStyleName
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.styleMapStyleName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.styleMapStyleName = "REGULAR"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # versionMajor
- infoObject = self.makeInfoObject()
- infoObject.versionMajor = "1"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # versionMinor
- infoObject = self.makeInfoObject()
- infoObject.versionMinor = "0"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # copyright
- infoObject = self.makeInfoObject()
- infoObject.copyright = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # trademark
- infoObject = self.makeInfoObject()
- infoObject.trademark = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # unitsPerEm
- infoObject = self.makeInfoObject()
- infoObject.unitsPerEm = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # descender
- infoObject = self.makeInfoObject()
- infoObject.descender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # xHeight
- infoObject = self.makeInfoObject()
- infoObject.xHeight = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # capHeight
- infoObject = self.makeInfoObject()
- infoObject.capHeight = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # ascender
- infoObject = self.makeInfoObject()
- infoObject.ascender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # italicAngle
- infoObject = self.makeInfoObject()
- infoObject.italicAngle = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testGaspWrite(self):
- # not a list
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # empty list
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = []
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- # not a dict
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = ["abc"]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # dict not properly formatted
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM=0xFFFF, notTheRightKey=1)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(notTheRightKey=1, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # not an int for ppem
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM="abc", rangeGaspBehavior=[0]), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # not a list for behavior
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM=10, rangeGaspBehavior="abc"), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # invalid behavior value
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM=10, rangeGaspBehavior=[-1]), dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # not sorted
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]), dict(rangeMaxPPEM=10, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # no 0xFFFF
- infoObject = self.makeInfoObject()
- infoObject.openTypeGaspRangeRecords = [dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]), dict(rangeMaxPPEM=20, rangeGaspBehavior=[0])]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
-
- def testHeadWrite(self):
- # openTypeHeadCreated
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadCreated = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## invalid format
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadCreated = "2000-Jan-01 00:00:00"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHeadLowestRecPPEM
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadLowestRecPPEM = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHeadFlags
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadFlags = [-1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testHheaWrite(self):
- # openTypeHheaAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaAscender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHheaDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaDescender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHheaLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaLineGap = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHheaCaretSlopeRise
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretSlopeRise = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHheaCaretSlopeRun
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretSlopeRun = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeHheaCaretOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testNameWrite(self):
- # openTypeNameDesigner
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDesigner = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameDesignerURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDesignerURL = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameManufacturer
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameManufacturer = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameManufacturerURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameManufacturerURL = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameLicense
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameLicense = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameLicenseURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameLicenseURL = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameVersion
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameVersion = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameUniqueID
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameUniqueID = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameDescription
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDescription = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNamePreferredFamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNamePreferredFamilyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNamePreferredSubfamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNamePreferredSubfamilyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameCompatibleFullName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameCompatibleFullName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameSampleText
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameSampleText = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameWWSFamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameWWSFamilyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameWWSSubfamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameWWSSubfamilyName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeNameRecords
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not a dict
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = ["abc"]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## invalid dict structure
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [dict(foo="bar")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## incorrect keys
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record.", foo="bar")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1)
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## invalid values
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID="1", platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID="1", encodingID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID="1", languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, languageID="1", string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string=1)
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## duplicate
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameRecords = [
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record."),
- dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record.")
- ]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
-
- def testOS2Write(self):
- # openTypeOS2WidthClass
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WidthClass = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out or range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WidthClass = 15
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2WeightClass
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WeightClass = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WeightClass = -50
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2Selection
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Selection = [-1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2VendorID
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2VendorID = 1234
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2Panose
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too few values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2FamilyClass
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [0, str(1)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too few values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1, 1, 1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1, 20]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2UnicodeRanges
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2UnicodeRanges = ["0"]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2UnicodeRanges = [-1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2CodePageRanges
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2CodePageRanges = ["0"]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2CodePageRanges = [-1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2TypoAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoAscender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2TypoDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoDescender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2TypoLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoLineGap = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2WinAscent
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinAscent = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinAscent = -1
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2WinDescent
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinDescent = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinDescent = -1
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2Type
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Type = ["1"]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Type = [-1]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SubscriptXSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptXSize = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SubscriptYSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptYSize = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SubscriptXOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptXOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SubscriptYOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptYOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SuperscriptXSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptXSize = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SuperscriptYSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptYSize = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SuperscriptXOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptXOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2SuperscriptYOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptYOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2StrikeoutSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2StrikeoutSize = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeOS2StrikeoutPosition
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2StrikeoutPosition = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testVheaWrite(self):
- # openTypeVheaVertTypoAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoAscender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeVheaVertTypoDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoDescender = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeVheaVertTypoLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoLineGap = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeVheaCaretSlopeRise
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretSlopeRise = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeVheaCaretSlopeRun
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretSlopeRun = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # openTypeVheaCaretOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretOffset = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testFONDWrite(self):
- # macintoshFONDFamilyID
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDFamilyID = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # macintoshFONDName
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testPostscriptWrite(self):
- # postscriptFontName
- infoObject = self.makeInfoObject()
- infoObject.postscriptFontName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptFullName
- infoObject = self.makeInfoObject()
- infoObject.postscriptFullName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptSlantAngle
- infoObject = self.makeInfoObject()
- infoObject.postscriptSlantAngle = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptUniqueID
- infoObject = self.makeInfoObject()
- infoObject.postscriptUniqueID = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptUnderlineThickness
- infoObject = self.makeInfoObject()
- infoObject.postscriptUnderlineThickness = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptUnderlinePosition
- infoObject = self.makeInfoObject()
- infoObject.postscriptUnderlinePosition = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptIsFixedPitch
- infoObject = self.makeInfoObject()
- infoObject.postscriptIsFixedPitch = 2
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptBlueValues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueValues = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueValues = [500]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueValues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptOtherBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptOtherBlues = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptOtherBlues = [500]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptOtherBlues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptFamilyBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyBlues = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyBlues = [500]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyBlues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptFamilyOtherBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyOtherBlues = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyOtherBlues = [500]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyOtherBlues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptStemSnapH
- ## not list
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapH = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapH = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptStemSnapV
- ## not list
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapV = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapV = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptBlueFuzz
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueFuzz = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptBlueShift
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueShift = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptBlueScale
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueScale = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptForceBold
- infoObject = self.makeInfoObject()
- infoObject.postscriptForceBold = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptDefaultWidthX
- infoObject = self.makeInfoObject()
- infoObject.postscriptDefaultWidthX = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptNominalWidthX
- infoObject = self.makeInfoObject()
- infoObject.postscriptNominalWidthX = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptWeightName
- infoObject = self.makeInfoObject()
- infoObject.postscriptWeightName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptDefaultCharacter
- infoObject = self.makeInfoObject()
- infoObject.postscriptDefaultCharacter = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # postscriptWindowsCharacterSet
- infoObject = self.makeInfoObject()
- infoObject.postscriptWindowsCharacterSet = -1
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # macintoshFONDFamilyID
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDFamilyID = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # macintoshFONDName
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDName = 123
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testWOFFWrite(self):
- # woffMajorVersion
- infoObject = self.makeInfoObject()
- infoObject.woffMajorVersion = 1.0
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.woffMajorVersion = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMinorVersion
- infoObject = self.makeInfoObject()
- infoObject.woffMinorVersion = 1.0
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.woffMinorVersion = "abc"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataUniqueID
- ## none
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = None
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## not a dict
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = 1
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## unknown key
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = dict(id="foo", notTheRightKey=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no id
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = dict()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not a string for id
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = dict(id=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## empty string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataUniqueID = dict(id="")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- # woffMetadataVendor
- ## no name
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(url="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## name not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name=1, url="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## name an empty string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="", url="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## no URL
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url empty string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url="")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## have dir
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="ltr")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="rtl")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## dir not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="utd")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## have class
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = {"name" : "foo", "url" : "bar", "class" : "hello"}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = {"name" : "foo", "url" : "bar", "class" : 1}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class empty string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataVendor = {"name" : "foo", "url" : "bar", "class" : ""}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- # woffMetadataCredits
- ## no credits attribute
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = {}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## unknown attribute
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo")], notTheRightKey=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits="abc")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no elements in credits
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## credit not a dict
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=["abc"])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## unknown key
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", notTheRightKey=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no name
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(url="foo")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## name not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", url=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## role not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", role=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", dir=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", dir="utd")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCredits = dict(credits=[{"name" : "foo", "class" : 1}])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataDescription
- ## no url
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo")], url=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no text
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(url="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a list
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text="abc")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item not a dict
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=["abc"])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item unknown key
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo", notTheRightKey=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item missing text
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(language="foo")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo", url=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## language not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo", language=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[dict(text="foo", dir="utd")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataDescription = dict(text=[{"text" : "foo", "class" : 1}])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataLicense
- ## no url
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo")])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo")], url=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## id not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo")], id=1)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no text
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(url="foo")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## text not a list
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text="abc")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item not a dict
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text=["abc"])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item unknown key
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo", notTheRightKey=1)])
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item missing text
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[dict(language="foo")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[dict(text=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo", url=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## language not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo", language=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[dict(text="foo", dir="utd")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicense = dict(text=[{"text" : "foo", "class" : 1}])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataCopyright
- ## unknown attribute
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text="foo")], notTheRightKey=1)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no text
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict()
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a list
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text="abc")
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item not a dict
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=["abc"])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item unknown key
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", notTheRightKey=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item missing text
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataCopyright = dict(text=[dict(language="foo")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", url=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## language not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", language=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", dir="utd")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataCopyright = dict(text=[{"text" : "foo", "class" : 1}])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataTrademark
- ## unknown attribute
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text="foo")], notTheRightKey=1)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## no text
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict()
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a list
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text="abc")
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item not a dict
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=["abc"])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item unknown key
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", notTheRightKey=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text item missing text
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(language="foo")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## text not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## url not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", url=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## language not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", language=1)])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", dir="utd")])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataTrademark = dict(text=[{"text" : "foo", "class" : 1}])
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # woffMetadataLicensee
- ## no name
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicensee = dict()
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## unknown attribute
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicensee = dict(name="foo", notTheRightKey=1)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## name not a string
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=3)
- infoObject.woffMetadataLicensee = dict(name=1)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## dir options
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicensee = dict(name="foo", dir="ltr")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicensee = dict(name="foo", dir="rtl")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## dir not ltr or rtl
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicensee = dict(name="foo", dir="utd")
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## have class
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicensee = {"name" : "foo", "class" : "hello"}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeInfo(infoObject)
- self.tearDownUFO()
- ## class not a string
- infoObject = self.makeInfoObject()
- infoObject.woffMetadataLicensee = {"name" : "foo", "class" : 1}
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
-
- def testGuidelinesWrite(self):
- # x
- ## not an int or float
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x="1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # y
- ## not an int or float
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(y="1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # angle
- ## < 0
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, y=0, angle=-1)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## > 360
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, y=0, angle=361)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # name
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, name=1)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # color
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color=1)]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not enough commas
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1 0, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1 0 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1 0 0 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not enough parts
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color=", 0, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, , 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, 0, , 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, 0, 0, ")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color=", , , ")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## not a number in all positions
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="r, 1, 1, 1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, g, 1, 1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, 1, b, 1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, 1, 1, a")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## too many parts
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="1, 0, 0, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## < 0 in each position
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="-1, 0, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, -1, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, 0, -1, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, 0, 0, -1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## > 1 in each position
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="2, 0, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, 2, 0, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, 0, 2, 0")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, color="0, 0, 0, 2")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- # identifier
- ## duplicate
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, identifier="guide1"), dict(y=0, identifier="guide1")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## below min
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, identifier="\0x1F")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
- ## above max
- infoObject = self.makeInfoObject()
- infoObject.guidelines = [dict(x=0, identifier="\0x7F")]
- writer = UFOWriter(self.dstDir, formatVersion=3)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- self.tearDownUFO()
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.dstDir = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def tearDownUFO(self):
+ if os.path.exists(self.dstDir):
+ shutil.rmtree(self.dstDir)
+
+ def makeInfoObject(self):
+ infoObject = TestInfoObject()
+ for attr, value in list(fontInfoVersion3.items()):
+ setattr(infoObject, attr, value)
+ return infoObject
+
+ def readPlist(self):
+ path = os.path.join(self.dstDir, "fontinfo.plist")
+ with open(path, "rb") as f:
+ plist = plistlib.load(f)
+ return plist
+
+ def testWrite(self):
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ writtenData = self.readPlist()
+ for attr, originalValue in list(fontInfoVersion3.items()):
+ newValue = writtenData[attr]
+ self.assertEqual(newValue, originalValue)
+ self.tearDownUFO()
+
+ def testGenericWrite(self):
+ # familyName
+ infoObject = self.makeInfoObject()
+ infoObject.familyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # styleName
+ infoObject = self.makeInfoObject()
+ infoObject.styleName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # styleMapFamilyName
+ infoObject = self.makeInfoObject()
+ infoObject.styleMapFamilyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # styleMapStyleName
+ ## not a string
+ infoObject = self.makeInfoObject()
+ infoObject.styleMapStyleName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.styleMapStyleName = "REGULAR"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # versionMajor
+ infoObject = self.makeInfoObject()
+ infoObject.versionMajor = "1"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # versionMinor
+ infoObject = self.makeInfoObject()
+ infoObject.versionMinor = "0"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # copyright
+ infoObject = self.makeInfoObject()
+ infoObject.copyright = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # trademark
+ infoObject = self.makeInfoObject()
+ infoObject.trademark = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # unitsPerEm
+ infoObject = self.makeInfoObject()
+ infoObject.unitsPerEm = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # descender
+ infoObject = self.makeInfoObject()
+ infoObject.descender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # xHeight
+ infoObject = self.makeInfoObject()
+ infoObject.xHeight = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # capHeight
+ infoObject = self.makeInfoObject()
+ infoObject.capHeight = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # ascender
+ infoObject = self.makeInfoObject()
+ infoObject.ascender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # italicAngle
+ infoObject = self.makeInfoObject()
+ infoObject.italicAngle = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testGaspWrite(self):
+ # not a list
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # empty list
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = []
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ # not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = ["abc"]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # dict not properly formatted
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM=0xFFFF, notTheRightKey=1)
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(notTheRightKey=1, rangeGaspBehavior=[0])
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # not an int for ppem
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM="abc", rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # not a list for behavior
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior="abc"),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # invalid behavior value
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[-1]),
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # not sorted
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # no 0xFFFF
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeGaspRangeRecords = [
+ dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]),
+ dict(rangeMaxPPEM=20, rangeGaspBehavior=[0]),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+
+ def testHeadWrite(self):
+ # openTypeHeadCreated
+ ## not a string
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHeadCreated = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## invalid format
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHeadCreated = "2000-Jan-01 00:00:00"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHeadLowestRecPPEM
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHeadLowestRecPPEM = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHeadFlags
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHeadFlags = [-1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testHheaWrite(self):
+ # openTypeHheaAscender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaAscender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHheaDescender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaDescender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHheaLineGap
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaLineGap = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHheaCaretSlopeRise
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaCaretSlopeRise = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHheaCaretSlopeRun
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaCaretSlopeRun = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeHheaCaretOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeHheaCaretOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testNameWrite(self):
+ # openTypeNameDesigner
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameDesigner = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameDesignerURL
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameDesignerURL = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameManufacturer
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameManufacturer = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameManufacturerURL
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameManufacturerURL = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameLicense
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameLicense = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameLicenseURL
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameLicenseURL = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameVersion
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameVersion = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameUniqueID
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameUniqueID = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameDescription
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameDescription = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNamePreferredFamilyName
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNamePreferredFamilyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNamePreferredSubfamilyName
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNamePreferredSubfamilyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameCompatibleFullName
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameCompatibleFullName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameSampleText
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameSampleText = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameWWSFamilyName
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameWWSFamilyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameWWSSubfamilyName
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameWWSSubfamilyName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeNameRecords
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = ["abc"]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## invalid dict structure
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [dict(foo="bar")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## incorrect keys
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ foo="bar",
+ )
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(platformID=1, encodingID=1, languageID=1, string="Name Record.")
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(nameID=1, encodingID=1, languageID=1, string="Name Record.")
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(nameID=1, platformID=1, languageID=1, string="Name Record.")
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(nameID=1, platformID=1, encodingID=1, string="Name Record.")
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(nameID=1, platformID=1, encodingID=1, languageID=1)
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## invalid values
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID="1",
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID=1,
+ platformID="1",
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID="1",
+ languageID=1,
+ string="Name Record.",
+ )
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID="1",
+ string="Name Record.",
+ )
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(nameID=1, platformID=1, encodingID=1, languageID=1, string=1)
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## duplicate
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeNameRecords = [
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ ),
+ dict(
+ nameID=1,
+ platformID=1,
+ encodingID=1,
+ languageID=1,
+ string="Name Record.",
+ ),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+
+ def testOS2Write(self):
+ # openTypeOS2WidthClass
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WidthClass = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out or range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WidthClass = 15
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2WeightClass
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WeightClass = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WeightClass = -50
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2Selection
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Selection = [-1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2VendorID
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2VendorID = 1234
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2Panose
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too few values
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Panose = [0, 1, 2, 3]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2FamilyClass
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2FamilyClass = [0, str(1)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too few values
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2FamilyClass = [1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2FamilyClass = [1, 1, 1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2FamilyClass = [1, 20]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2UnicodeRanges
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2UnicodeRanges = ["0"]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2UnicodeRanges = [-1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2CodePageRanges
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2CodePageRanges = ["0"]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2CodePageRanges = [-1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2TypoAscender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2TypoAscender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2TypoDescender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2TypoDescender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2TypoLineGap
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2TypoLineGap = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2WinAscent
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WinAscent = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WinAscent = -1
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2WinDescent
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WinDescent = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2WinDescent = -1
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2Type
+ ## not an int
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Type = ["1"]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## out of range
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2Type = [-1]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SubscriptXSize
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SubscriptXSize = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SubscriptYSize
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SubscriptYSize = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SubscriptXOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SubscriptXOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SubscriptYOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SubscriptYOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SuperscriptXSize
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SuperscriptXSize = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SuperscriptYSize
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SuperscriptYSize = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SuperscriptXOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SuperscriptXOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2SuperscriptYOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2SuperscriptYOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2StrikeoutSize
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2StrikeoutSize = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeOS2StrikeoutPosition
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeOS2StrikeoutPosition = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testVheaWrite(self):
+ # openTypeVheaVertTypoAscender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaVertTypoAscender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeVheaVertTypoDescender
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaVertTypoDescender = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeVheaVertTypoLineGap
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaVertTypoLineGap = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeVheaCaretSlopeRise
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaCaretSlopeRise = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeVheaCaretSlopeRun
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaCaretSlopeRun = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # openTypeVheaCaretOffset
+ infoObject = self.makeInfoObject()
+ infoObject.openTypeVheaCaretOffset = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testFONDWrite(self):
+ # macintoshFONDFamilyID
+ infoObject = self.makeInfoObject()
+ infoObject.macintoshFONDFamilyID = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # macintoshFONDName
+ infoObject = self.makeInfoObject()
+ infoObject.macintoshFONDName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testPostscriptWrite(self):
+ # postscriptFontName
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFontName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptFullName
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFullName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptSlantAngle
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptSlantAngle = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptUniqueID
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptUniqueID = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptUnderlineThickness
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptUnderlineThickness = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptUnderlinePosition
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptUnderlinePosition = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptIsFixedPitch
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptIsFixedPitch = 2
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptBlueValues
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueValues = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## uneven value count
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueValues = [500]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueValues = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptOtherBlues
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptOtherBlues = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## uneven value count
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptOtherBlues = [500]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptOtherBlues = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptFamilyBlues
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyBlues = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## uneven value count
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyBlues = [500]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyBlues = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptFamilyOtherBlues
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyOtherBlues = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## uneven value count
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyOtherBlues = [500]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptFamilyOtherBlues = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptStemSnapH
+ ## not list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptStemSnapH = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptStemSnapH = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptStemSnapV
+ ## not list
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptStemSnapV = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many values
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptStemSnapV = [
+ 10,
+ 20,
+ 30,
+ 40,
+ 50,
+ 60,
+ 70,
+ 80,
+ 90,
+ 100,
+ 110,
+ 120,
+ 130,
+ 140,
+ 150,
+ 160,
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptBlueFuzz
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueFuzz = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptBlueShift
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueShift = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptBlueScale
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptBlueScale = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptForceBold
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptForceBold = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptDefaultWidthX
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptDefaultWidthX = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptNominalWidthX
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptNominalWidthX = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptWeightName
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptWeightName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptDefaultCharacter
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptDefaultCharacter = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # postscriptWindowsCharacterSet
+ infoObject = self.makeInfoObject()
+ infoObject.postscriptWindowsCharacterSet = -1
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # macintoshFONDFamilyID
+ infoObject = self.makeInfoObject()
+ infoObject.macintoshFONDFamilyID = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # macintoshFONDName
+ infoObject = self.makeInfoObject()
+ infoObject.macintoshFONDName = 123
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testWOFFWrite(self):
+ # woffMajorVersion
+ infoObject = self.makeInfoObject()
+ infoObject.woffMajorVersion = 1.0
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.woffMajorVersion = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMinorVersion
+ infoObject = self.makeInfoObject()
+ infoObject.woffMinorVersion = 1.0
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.woffMinorVersion = "abc"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataUniqueID
+ ## none
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = None
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = 1
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## unknown key
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = dict(id="foo", notTheRightKey=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no id
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = dict()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not a string for id
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = dict(id=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## empty string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataUniqueID = dict(id="")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ # woffMetadataVendor
+ ## no name
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(url="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## name not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name=1, url="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## name an empty string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="", url="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## no URL
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url empty string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url="")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## have dir
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="ltr")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="rtl")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## dir not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = dict(name="foo", url="bar", dir="utd")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## have class
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = {"name": "foo", "url": "bar", "class": "hello"}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = {"name": "foo", "url": "bar", "class": 1}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class empty string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataVendor = {"name": "foo", "url": "bar", "class": ""}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ # woffMetadataCredits
+ ## no credits attribute
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = {}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## unknown attribute
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(
+ credits=[dict(name="foo")], notTheRightKey=1
+ )
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not a list
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits="abc")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no elements in credits
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## credit not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=["abc"])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## unknown key
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(
+ credits=[dict(name="foo", notTheRightKey=1)]
+ )
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no name
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(url="foo")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## name not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(name=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", url=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## role not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", role=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", dir=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[dict(name="foo", dir="utd")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCredits = dict(credits=[{"name": "foo", "class": 1}])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataDescription
+ ## no url
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text="foo")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text="foo")], url=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no text
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(url="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a list
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text="abc")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=["abc"])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item unknown key
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(
+ text=[dict(text="foo", notTheRightKey=1)]
+ )
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item missing text
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(language="foo")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text="foo", url=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## language not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text="foo", language=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[dict(text="foo", dir="utd")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataDescription = dict(text=[{"text": "foo", "class": 1}])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataLicense
+ ## no url
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo")])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo")], url=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## id not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo")], id=1)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no text
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(url="foo")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## text not a list
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text="abc")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item not a dict
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text=["abc"])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item unknown key
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo", notTheRightKey=1)])
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item missing text
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[dict(language="foo")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[dict(text=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo", url=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## language not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo", language=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[dict(text="foo", dir="utd")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicense = dict(text=[{"text": "foo", "class": 1}])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataCopyright
+ ## unknown attribute
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(
+ text=[dict(text="foo")], notTheRightKey=1
+ )
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no text
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict()
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a list
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text="abc")
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item not a dict
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=["abc"])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item unknown key
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(
+ text=[dict(text="foo", notTheRightKey=1)]
+ )
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item missing text
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataCopyright = dict(text=[dict(language="foo")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=[dict(text=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", url=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## language not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", language=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=[dict(text="foo", dir="utd")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataCopyright = dict(text=[{"text": "foo", "class": 1}])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataTrademark
+ ## unknown attribute
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(
+ text=[dict(text="foo")], notTheRightKey=1
+ )
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## no text
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict()
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a list
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text="abc")
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item not a dict
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=["abc"])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item unknown key
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(
+ text=[dict(text="foo", notTheRightKey=1)]
+ )
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text item missing text
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[dict(language="foo")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## text not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[dict(text=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## url not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", url=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## language not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", language=1)])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[dict(text="foo", dir="utd")])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataTrademark = dict(text=[{"text": "foo", "class": 1}])
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # woffMetadataLicensee
+ ## no name
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicensee = dict()
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## unknown attribute
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicensee = dict(name="foo", notTheRightKey=1)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## name not a string
+ infoObject = self.makeInfoObject()
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ infoObject.woffMetadataLicensee = dict(name=1)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## dir options
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicensee = dict(name="foo", dir="ltr")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicensee = dict(name="foo", dir="rtl")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## dir not ltr or rtl
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicensee = dict(name="foo", dir="utd")
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## have class
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicensee = {"name": "foo", "class": "hello"}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeInfo(infoObject)
+ self.tearDownUFO()
+ ## class not a string
+ infoObject = self.makeInfoObject()
+ infoObject.woffMetadataLicensee = {"name": "foo", "class": 1}
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+
+ def testGuidelinesWrite(self):
+ # x
+ ## not an int or float
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x="1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # y
+ ## not an int or float
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(y="1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # angle
+ ## < 0
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, y=0, angle=-1)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## > 360
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, y=0, angle=361)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # name
+ ## not a string
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, name=1)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # color
+ ## not a string
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color=1)]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not enough commas
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1 0, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1 0 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1 0 0 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not enough parts
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color=", 0, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, , 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, 0, , 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, 0, 0, ")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color=", , , ")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## not a number in all positions
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="r, 1, 1, 1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, g, 1, 1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, 1, b, 1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, 1, 1, a")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## too many parts
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="1, 0, 0, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## < 0 in each position
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="-1, 0, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, -1, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, 0, -1, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, 0, 0, -1")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## > 1 in each position
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="2, 0, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, 2, 0, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, 0, 2, 0")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, color="0, 0, 0, 2")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ # identifier
+ ## duplicate
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [
+ dict(x=0, identifier="guide1"),
+ dict(y=0, identifier="guide1"),
+ ]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## below min
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, identifier="\0x1F")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
+ ## above max
+ infoObject = self.makeInfoObject()
+ infoObject.guidelines = [dict(x=0, identifier="\0x7F")]
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
+ self.tearDownUFO()
# ------
# layers
# ------
-class UFO3ReadLayersTestCase(unittest.TestCase):
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.ufoPath = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def makeUFO(self, metaInfo=None, layerContents=None):
- self.clearUFO()
- if not os.path.exists(self.ufoPath):
- os.mkdir(self.ufoPath)
- # metainfo.plist
- if metaInfo is None:
- metaInfo = dict(creator="test", formatVersion=3)
- path = os.path.join(self.ufoPath, "metainfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(metaInfo, f)
- # layers
- if layerContents is None:
- layerContents = [
- ("public.default", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2"),
- ]
- if layerContents:
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- else:
- layerContents = [("", "glyphs")]
- for name, directory in layerContents:
- glyphsPath = os.path.join(self.ufoPath, directory)
- os.mkdir(glyphsPath)
- contents = dict(a="a.glif")
- path = os.path.join(glyphsPath, "contents.plist")
- with open(path, "wb") as f:
- plistlib.dump(contents, f)
- path = os.path.join(glyphsPath, "a.glif")
- with open(path, "w") as f:
- f.write(" ")
-
- def clearUFO(self):
- if os.path.exists(self.ufoPath):
- shutil.rmtree(self.ufoPath)
-
- # valid
-
- def testValidRead(self):
- # UFO 1
- self.makeUFO(
- metaInfo=dict(creator="test", formatVersion=1),
- layerContents=dict()
- )
- reader = UFOReader(self.ufoPath, validate=True)
- reader.getGlyphSet()
- # UFO 2
- self.makeUFO(
- metaInfo=dict(creator="test", formatVersion=2),
- layerContents=dict()
- )
- reader = UFOReader(self.ufoPath, validate=True)
- reader.getGlyphSet()
- # UFO 3
- self.makeUFO()
- reader = UFOReader(self.ufoPath, validate=True)
- reader.getGlyphSet()
-
- # missing layer contents
-
- def testMissingLayerContents(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # layer contents invalid format
-
- def testInvalidLayerContentsFormat(self):
- # bogus
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- with open(path, "w") as f:
- f.write("test")
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
- # dict
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = {
- "public.default" : "glyphs",
- "layer 1" : "glyphs.layer 1",
- "layer 2" : "glyphs.layer 2",
- }
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # layer contents invalid name format
-
- def testInvalidLayerContentsNameFormat(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- (1, "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # layer contents invalid directory format
-
- def testInvalidLayerContentsDirectoryFormat(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", 1),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # directory listed in contents not on disk
-
- def testLayerContentsHasMissingDirectory(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.doesnotexist"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # # directory on disk not listed in contents
- # XXX should this raise an error?
- #
- # def testLayerContentsHasMissingDirectory(self):
- # self.makeUFO()
- # path = os.path.join(self.ufoPath, "layercontents.plist")
- # os.remove(path)
- # layerContents = [
- # ("public.foregound", "glyphs"),
- # ("layer 1", "glyphs.layer 2")
- # ]
- # with open(path, "wb") as f:
- # plistlib.dump(layerContents, f)
- # reader = UFOReader(self.ufoPath, validate=True)
- # with self.assertRaises(UFOLibError):
- # reader.getGlyphSet()
-
- # no default layer on disk
-
- def testMissingDefaultLayer(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # duplicate layer name
-
- def testDuplicateLayerName(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 1", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # directory referenced by two layer names
-
- def testDuplicateLayerDirectory(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 1")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- self.assertRaises(UFOLibError, reader.getGlyphSet)
-
- # default without a name
-
- def testDefaultLayerNoName(self):
- # get the glyph set
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- reader.getGlyphSet()
-
- # default with a name
-
- def testDefaultLayerName(self):
- # get the name
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("custom name", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- expected = layerContents[0][0]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- result = reader.getDefaultLayerName()
- self.assertEqual(expected, result)
- # get the glyph set
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("custom name", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- reader.getGlyphSet(expected)
-
- # layer order
-
- def testLayerOrder(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- expected = [name for (name, directory) in layerContents]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- result = reader.getLayerNames()
- self.assertEqual(expected, result)
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("layer 1", "glyphs.layer 1"),
- ("public.foregound", "glyphs"),
- ("layer 2", "glyphs.layer 2")
- ]
- expected = [name for (name, directory) in layerContents]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- result = reader.getLayerNames()
- self.assertEqual(expected, result)
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("layer 2", "glyphs.layer 2"),
- ("layer 1", "glyphs.layer 1"),
- ("public.foregound", "glyphs")
- ]
- expected = [name for (name, directory) in layerContents]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- reader = UFOReader(self.ufoPath, validate=True)
- result = reader.getLayerNames()
- self.assertEqual(expected, result)
+class UFO3ReadLayersTestCase(unittest.TestCase):
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.ufoPath = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def makeUFO(self, metaInfo=None, layerContents=None):
+ self.clearUFO()
+ if not os.path.exists(self.ufoPath):
+ os.mkdir(self.ufoPath)
+ # metainfo.plist
+ if metaInfo is None:
+ metaInfo = dict(creator="test", formatVersion=3)
+ path = os.path.join(self.ufoPath, "metainfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(metaInfo, f)
+ # layers
+ if layerContents is None:
+ layerContents = [
+ ("public.default", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ if layerContents:
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ else:
+ layerContents = [("", "glyphs")]
+ for name, directory in layerContents:
+ glyphsPath = os.path.join(self.ufoPath, directory)
+ os.mkdir(glyphsPath)
+ contents = dict(a="a.glif")
+ path = os.path.join(glyphsPath, "contents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(contents, f)
+ path = os.path.join(glyphsPath, "a.glif")
+ with open(path, "w") as f:
+ f.write(" ")
+
+ def clearUFO(self):
+ if os.path.exists(self.ufoPath):
+ shutil.rmtree(self.ufoPath)
+
+ # valid
+
+ def testValidRead(self):
+ # UFO 1
+ self.makeUFO(
+ metaInfo=dict(creator="test", formatVersion=1), layerContents=dict()
+ )
+ reader = UFOReader(self.ufoPath, validate=True)
+ reader.getGlyphSet()
+ # UFO 2
+ self.makeUFO(
+ metaInfo=dict(creator="test", formatVersion=2), layerContents=dict()
+ )
+ reader = UFOReader(self.ufoPath, validate=True)
+ reader.getGlyphSet()
+ # UFO 3
+ self.makeUFO()
+ reader = UFOReader(self.ufoPath, validate=True)
+ reader.getGlyphSet()
+
+ # missing layer contents
+
+ def testMissingLayerContents(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # layer contents invalid format
+
+ def testInvalidLayerContentsFormat(self):
+ # bogus
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ with open(path, "w") as f:
+ f.write("test")
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+ # dict
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = {
+ "public.default": "glyphs",
+ "layer 1": "glyphs.layer 1",
+ "layer 2": "glyphs.layer 2",
+ }
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # layer contents invalid name format
+
+ def testInvalidLayerContentsNameFormat(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ (1, "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # layer contents invalid directory format
+
+ def testInvalidLayerContentsDirectoryFormat(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", 1),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # directory listed in contents not on disk
+
+ def testLayerContentsHasMissingDirectory(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.doesnotexist"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # # directory on disk not listed in contents
+ # XXX should this raise an error?
+ #
+ # def testLayerContentsHasMissingDirectory(self):
+ # self.makeUFO()
+ # path = os.path.join(self.ufoPath, "layercontents.plist")
+ # os.remove(path)
+ # layerContents = [
+ # ("public.foregound", "glyphs"),
+ # ("layer 1", "glyphs.layer 2")
+ # ]
+ # with open(path, "wb") as f:
+ # plistlib.dump(layerContents, f)
+ # reader = UFOReader(self.ufoPath, validate=True)
+ # with self.assertRaises(UFOLibError):
+ # reader.getGlyphSet()
+
+ # no default layer on disk
+
+ def testMissingDefaultLayer(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [("layer 1", "glyphs.layer 1"), ("layer 2", "glyphs.layer 2")]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # duplicate layer name
+
+ def testDuplicateLayerName(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 1", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # directory referenced by two layer names
+
+ def testDuplicateLayerDirectory(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 1"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ self.assertRaises(UFOLibError, reader.getGlyphSet)
+
+ # default without a name
+
+ def testDefaultLayerNoName(self):
+ # get the glyph set
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ reader.getGlyphSet()
+
+ # default with a name
+
+ def testDefaultLayerName(self):
+ # get the name
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("custom name", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ expected = layerContents[0][0]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ result = reader.getDefaultLayerName()
+ self.assertEqual(expected, result)
+ # get the glyph set
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("custom name", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ reader.getGlyphSet(expected)
+
+ # layer order
+
+ def testLayerOrder(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ expected = [name for (name, directory) in layerContents]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ result = reader.getLayerNames()
+ self.assertEqual(expected, result)
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("layer 1", "glyphs.layer 1"),
+ ("public.foregound", "glyphs"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ expected = [name for (name, directory) in layerContents]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ result = reader.getLayerNames()
+ self.assertEqual(expected, result)
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("layer 2", "glyphs.layer 2"),
+ ("layer 1", "glyphs.layer 1"),
+ ("public.foregound", "glyphs"),
+ ]
+ expected = [name for (name, directory) in layerContents]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ reader = UFOReader(self.ufoPath, validate=True)
+ result = reader.getLayerNames()
+ self.assertEqual(expected, result)
class UFO3WriteLayersTestCase(unittest.TestCase):
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.ufoPath = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def makeUFO(self, metaInfo=None, layerContents=None):
+ self.clearUFO()
+ if not os.path.exists(self.ufoPath):
+ os.mkdir(self.ufoPath)
+ # metainfo.plist
+ if metaInfo is None:
+ metaInfo = dict(creator="test", formatVersion=3)
+ path = os.path.join(self.ufoPath, "metainfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(metaInfo, f)
+ # layers
+ if layerContents is None:
+ layerContents = [
+ ("public.default", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ if layerContents:
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ else:
+ layerContents = [("", "glyphs")]
+ for name, directory in layerContents:
+ glyphsPath = os.path.join(self.ufoPath, directory)
+ os.mkdir(glyphsPath)
+ contents = dict(a="a.glif")
+ path = os.path.join(glyphsPath, "contents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(contents, f)
+ path = os.path.join(glyphsPath, "a.glif")
+ with open(path, "w") as f:
+ f.write(" ")
+
+ def clearUFO(self):
+ if os.path.exists(self.ufoPath):
+ shutil.rmtree(self.ufoPath)
+
+ # __init__: missing layer contents
+
+ def testMissingLayerContents(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: layer contents invalid format
+
+ def testInvalidLayerContentsFormat(self):
+ # bogus
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ with open(path, "w") as f:
+ f.write("test")
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+ # dict
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = {
+ "public.default": "glyphs",
+ "layer 1": "glyphs.layer 1",
+ "layer 2": "glyphs.layer 2",
+ }
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: layer contents invalid name format
+
+ def testInvalidLayerContentsNameFormat(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ (1, "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: layer contents invalid directory format
+
+ def testInvalidLayerContentsDirectoryFormat(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", 1),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: directory listed in contents not on disk
+
+ def testLayerContentsHasMissingDirectory(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.doesnotexist"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: no default layer on disk
+
+ def testMissingDefaultLayer(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [("layer 1", "glyphs.layer 1"), ("layer 2", "glyphs.layer 2")]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: duplicate layer name
+
+ def testDuplicateLayerName(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 1", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: directory referenced by two layer names
+
+ def testDuplicateLayerDirectory(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 1"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
+
+ # __init__: default without a name
+
+ def testDefaultLayerNoName(self):
+ # get the glyph set
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("public.foregound", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ writer = UFOWriter(self.ufoPath)
+
+ # __init__: default with a name
+
+ def testDefaultLayerName(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ os.remove(path)
+ layerContents = [
+ ("custom name", "glyphs"),
+ ("layer 1", "glyphs.layer 1"),
+ ("layer 2", "glyphs.layer 2"),
+ ]
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ writer = UFOWriter(self.ufoPath)
+
+ # __init__: up convert 1 > 3
+
+ def testUpConvert1To3(self):
+ self.makeUFO(
+ metaInfo=dict(creator="test", formatVersion=1), layerContents=dict()
+ )
+ writer = UFOWriter(self.ufoPath)
+ writer.writeLayerContents(["public.default"])
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [["public.default", "glyphs"]]
+ self.assertEqual(expected, result)
+
+ # __init__: up convert 2 > 3
+
+ def testUpConvert2To3(self):
+ self.makeUFO(
+ metaInfo=dict(creator="test", formatVersion=2), layerContents=dict()
+ )
+ writer = UFOWriter(self.ufoPath)
+ writer.writeLayerContents(["public.default"])
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [["public.default", "glyphs"]]
+ self.assertEqual(expected, result)
+
+ # __init__: down convert 3 > 1
+
+ def testDownConvert3To1(self):
+ self.makeUFO()
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath, formatVersion=1)
+
+ # __init__: down convert 3 > 2
+
+ def testDownConvert3To2(self):
+ self.makeUFO()
+ self.assertRaises(UFOLibError, UFOWriter, self.ufoPath, formatVersion=2)
+
+ # get glyph sets
+
+ def testGetGlyphSets(self):
+ self.makeUFO()
+ # hack contents.plist
+ path = os.path.join(self.ufoPath, "glyphs.layer 1", "contents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(dict(b="a.glif"), f)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2", "contents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(dict(c="a.glif"), f)
+ # now test
+ writer = UFOWriter(self.ufoPath)
+ # default
+ expected = ["a"]
+ result = list(writer.getGlyphSet().keys())
+ self.assertEqual(expected, result)
+ # layer 1
+ expected = ["b"]
+ result = list(writer.getGlyphSet("layer 1", defaultLayer=False).keys())
+ self.assertEqual(expected, result)
+ # layer 2
+ expected = ["c"]
+ result = list(writer.getGlyphSet("layer 2", defaultLayer=False).keys())
+ self.assertEqual(expected, result)
+
+ def testGetGlyphSetNoContents(self):
+ self.makeUFO()
+ os.remove(os.path.join(self.ufoPath, "glyphs.layer 1", "contents.plist"))
+
+ reader = UFOReader(self.ufoPath, validate=True)
+ with self.assertRaises(GlifLibError):
+ reader.getGlyphSet("layer 1")
+
+ writer = UFOWriter(self.ufoPath, validate=True)
+ with self.assertRaises(GlifLibError):
+ writer.getGlyphSet("layer 1", defaultLayer=False, expectContentsFile=True)
+
+ # There's a separate code path for < v3 UFOs.
+ with open(os.path.join(self.ufoPath, "metainfo.plist"), "wb") as f:
+ plistlib.dump(dict(creator="test", formatVersion=2), f)
+ os.remove(os.path.join(self.ufoPath, "glyphs", "contents.plist"))
+ writer = UFOWriter(self.ufoPath, validate=True, formatVersion=2)
+ with self.assertRaises(GlifLibError):
+ writer.getGlyphSet(expectContentsFile=True)
+
+ # make a new font with two layers
+
+ def testNewFontOneLayer(self):
+ self.clearUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.getGlyphSet()
+ writer.writeLayerContents(["public.default"])
+ # directory
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [["public.default", "glyphs"]]
+ self.assertEqual(expected, result)
+
+ def testNewFontThreeLayers(self):
+ self.clearUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.getGlyphSet("layer 1", defaultLayer=False)
+ writer.getGlyphSet()
+ writer.getGlyphSet("layer 2", defaultLayer=False)
+ writer.writeLayerContents(["layer 1", "public.default", "layer 2"])
+ # directories
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [
+ ["layer 1", "glyphs.layer 1"],
+ ["public.default", "glyphs"],
+ ["layer 2", "glyphs.layer 2"],
+ ]
+ self.assertEqual(expected, result)
+
+ # add a layer to an existing font
+
+ def testAddLayerToExistingFont(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.getGlyphSet("layer 3", defaultLayer=False)
+ writer.writeLayerContents(["public.default", "layer 1", "layer 2", "layer 3"])
+ # directories
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 3")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [
+ ["public.default", "glyphs"],
+ ["layer 1", "glyphs.layer 1"],
+ ["layer 2", "glyphs.layer 2"],
+ ["layer 3", "glyphs.layer 3"],
+ ]
+ self.assertEqual(expected, result)
+
+ # rename valid name
+
+ def testRenameLayer(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.renameGlyphSet("layer 1", "layer 3")
+ writer.writeLayerContents(["public.default", "layer 3", "layer 2"])
+ # directories
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ exists = os.path.exists(path)
+ self.assertEqual(False, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 3")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [
+ ["public.default", "glyphs"],
+ ["layer 3", "glyphs.layer 3"],
+ ["layer 2", "glyphs.layer 2"],
+ ]
+ self.assertEqual(expected, result)
+
+ def testRenameLayerDefault(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.renameGlyphSet("public.default", "layer xxx")
+ writer.renameGlyphSet("layer 1", "layer 1", defaultLayer=True)
+ writer.writeLayerContents(["layer xxx", "layer 1", "layer 2"])
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ exists = os.path.exists(path)
+ self.assertEqual(False, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer xxx")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [
+ ["layer xxx", "glyphs.layer xxx"],
+ ["layer 1", "glyphs"],
+ ["layer 2", "glyphs.layer 2"],
+ ]
+ self.assertEqual(expected, result)
+
+ # rename duplicate name
+
+ def testRenameLayerDuplicateName(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ self.assertRaises(UFOLibError, writer.renameGlyphSet, "layer 1", "layer 2")
+
+ # rename unknown layer
+
+ def testRenameLayerUnknownName(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ self.assertRaises(
+ UFOLibError, writer.renameGlyphSet, "does not exist", "layer 2"
+ )
+
+ # remove valid layer
+
+ def testRemoveLayer(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.deleteGlyphSet("layer 1")
+ writer.writeLayerContents(["public.default", "layer 2"])
+ # directories
+ path = os.path.join(self.ufoPath, "glyphs")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ exists = os.path.exists(path)
+ self.assertEqual(False, exists)
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ exists = os.path.exists(path)
+ self.assertEqual(True, exists)
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [["public.default", "glyphs"], ["layer 2", "glyphs.layer 2"]]
+ self.assertEqual(expected, result)
+
+ # remove default layer
+
+ def testRemoveDefaultLayer(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ writer.deleteGlyphSet("public.default")
+ writer.writeLayerContents(["layer 1", "layer 2"])
+ # directories
+ path = os.path.join(self.ufoPath, "glyphs")
+ self.assertEqual(False, os.path.exists(path))
+ path = os.path.join(self.ufoPath, "glyphs.layer 1")
+ self.assertEqual(True, os.path.exists(path))
+ path = os.path.join(self.ufoPath, "glyphs.layer 2")
+ self.assertEqual(True, os.path.exists(path))
+ # layer contents
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [["layer 1", "glyphs.layer 1"], ["layer 2", "glyphs.layer 2"]]
+ self.assertEqual(expected, result)
+
+ # remove unknown layer
+
+ def testRemoveDefaultLayer2(self):
+ self.makeUFO()
+ writer = UFOWriter(self.ufoPath)
+ self.assertRaises(UFOLibError, writer.deleteGlyphSet, "does not exist")
+
+ def testWriteAsciiLayerOrder(self):
+ self.makeUFO(
+ layerContents=[
+ ["public.default", "glyphs"],
+ ["layer 1", "glyphs.layer 1"],
+ ["layer 2", "glyphs.layer 2"],
+ ]
+ )
+ writer = UFOWriter(self.ufoPath)
+ writer.writeLayerContents(["public.default", "layer 2", "layer 1"])
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ expected = [
+ ["public.default", "glyphs"],
+ ["layer 2", "glyphs.layer 2"],
+ ["layer 1", "glyphs.layer 1"],
+ ]
+ self.assertEqual(expected, result)
+ for layerName, _ in result:
+ assert isinstance(layerName, str)
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.ufoPath = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def makeUFO(self, metaInfo=None, layerContents=None):
- self.clearUFO()
- if not os.path.exists(self.ufoPath):
- os.mkdir(self.ufoPath)
- # metainfo.plist
- if metaInfo is None:
- metaInfo = dict(creator="test", formatVersion=3)
- path = os.path.join(self.ufoPath, "metainfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(metaInfo, f)
- # layers
- if layerContents is None:
- layerContents = [
- ("public.default", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2"),
- ]
- if layerContents:
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- else:
- layerContents = [("", "glyphs")]
- for name, directory in layerContents:
- glyphsPath = os.path.join(self.ufoPath, directory)
- os.mkdir(glyphsPath)
- contents = dict(a="a.glif")
- path = os.path.join(glyphsPath, "contents.plist")
- with open(path, "wb") as f:
- plistlib.dump(contents, f)
- path = os.path.join(glyphsPath, "a.glif")
- with open(path, "w") as f:
- f.write(" ")
-
- def clearUFO(self):
- if os.path.exists(self.ufoPath):
- shutil.rmtree(self.ufoPath)
-
- # __init__: missing layer contents
-
- def testMissingLayerContents(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: layer contents invalid format
-
- def testInvalidLayerContentsFormat(self):
- # bogus
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- with open(path, "w") as f:
- f.write("test")
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
- # dict
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = {
- "public.default" : "glyphs",
- "layer 1" : "glyphs.layer 1",
- "layer 2" : "glyphs.layer 2",
- }
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: layer contents invalid name format
-
- def testInvalidLayerContentsNameFormat(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- (1, "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: layer contents invalid directory format
-
- def testInvalidLayerContentsDirectoryFormat(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", 1),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: directory listed in contents not on disk
-
- def testLayerContentsHasMissingDirectory(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.doesnotexist"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: no default layer on disk
-
- def testMissingDefaultLayer(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: duplicate layer name
-
- def testDuplicateLayerName(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 1", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: directory referenced by two layer names
-
- def testDuplicateLayerDirectory(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 1")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath)
-
- # __init__: default without a name
-
- def testDefaultLayerNoName(self):
- # get the glyph set
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("public.foregound", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- writer = UFOWriter(self.ufoPath)
-
- # __init__: default with a name
-
- def testDefaultLayerName(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "layercontents.plist")
- os.remove(path)
- layerContents = [
- ("custom name", "glyphs"),
- ("layer 1", "glyphs.layer 1"),
- ("layer 2", "glyphs.layer 2")
- ]
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- writer = UFOWriter(self.ufoPath)
-
- # __init__: up convert 1 > 3
-
- def testUpConvert1To3(self):
- self.makeUFO(
- metaInfo=dict(creator="test", formatVersion=1),
- layerContents=dict()
- )
- writer = UFOWriter(self.ufoPath)
- writer.writeLayerContents(["public.default"])
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["public.default", "glyphs"]]
- self.assertEqual(expected, result)
-
- # __init__: up convert 2 > 3
-
- def testUpConvert2To3(self):
- self.makeUFO(
- metaInfo=dict(creator="test", formatVersion=2),
- layerContents=dict()
- )
- writer = UFOWriter(self.ufoPath)
- writer.writeLayerContents(["public.default"])
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["public.default", "glyphs"]]
- self.assertEqual(expected, result)
-
- # __init__: down convert 3 > 1
-
- def testDownConvert3To1(self):
- self.makeUFO()
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath, formatVersion=1)
-
- # __init__: down convert 3 > 2
-
- def testDownConvert3To2(self):
- self.makeUFO()
- self.assertRaises(UFOLibError, UFOWriter, self.ufoPath, formatVersion=2)
-
- # get glyph sets
-
- def testGetGlyphSets(self):
- self.makeUFO()
- # hack contents.plist
- path = os.path.join(self.ufoPath, "glyphs.layer 1", "contents.plist")
- with open(path, "wb") as f:
- plistlib.dump(dict(b="a.glif"), f)
- path = os.path.join(self.ufoPath, "glyphs.layer 2", "contents.plist")
- with open(path, "wb") as f:
- plistlib.dump(dict(c="a.glif"), f)
- # now test
- writer = UFOWriter(self.ufoPath)
- # default
- expected = ["a"]
- result = list(writer.getGlyphSet().keys())
- self.assertEqual(expected, result)
- # layer 1
- expected = ["b"]
- result = list(writer.getGlyphSet("layer 1", defaultLayer=False).keys())
- self.assertEqual(expected, result)
- # layer 2
- expected = ["c"]
- result = list(writer.getGlyphSet("layer 2", defaultLayer=False).keys())
- self.assertEqual(expected, result)
-
- def testGetGlyphSetNoContents(self):
- self.makeUFO()
- os.remove(os.path.join(self.ufoPath, "glyphs.layer 1", "contents.plist"))
-
- reader = UFOReader(self.ufoPath, validate=True)
- with self.assertRaises(GlifLibError):
- reader.getGlyphSet("layer 1")
-
- writer = UFOWriter(self.ufoPath, validate=True)
- with self.assertRaises(GlifLibError):
- writer.getGlyphSet("layer 1", defaultLayer=False, expectContentsFile=True)
-
- # There's a separate code path for < v3 UFOs.
- with open(os.path.join(self.ufoPath, "metainfo.plist"), "wb") as f:
- plistlib.dump(dict(creator="test", formatVersion=2), f)
- os.remove(os.path.join(self.ufoPath, "glyphs", "contents.plist"))
- writer = UFOWriter(self.ufoPath, validate=True, formatVersion=2)
- with self.assertRaises(GlifLibError):
- writer.getGlyphSet(expectContentsFile=True)
-
- # make a new font with two layers
-
- def testNewFontOneLayer(self):
- self.clearUFO()
- writer = UFOWriter(self.ufoPath)
- writer.getGlyphSet()
- writer.writeLayerContents(["public.default"])
- # directory
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["public.default", "glyphs"]]
- self.assertEqual(expected, result)
-
- def testNewFontThreeLayers(self):
- self.clearUFO()
- writer = UFOWriter(self.ufoPath)
- writer.getGlyphSet("layer 1", defaultLayer=False)
- writer.getGlyphSet()
- writer.getGlyphSet("layer 2", defaultLayer=False)
- writer.writeLayerContents(["layer 1", "public.default", "layer 2"])
- # directories
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["layer 1", "glyphs.layer 1"], ["public.default", "glyphs"], ["layer 2", "glyphs.layer 2"]]
- self.assertEqual(expected, result)
-
- # add a layer to an existing font
-
- def testAddLayerToExistingFont(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- writer.getGlyphSet("layer 3", defaultLayer=False)
- writer.writeLayerContents(["public.default", "layer 1", "layer 2", "layer 3"])
- # directories
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 3")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [['public.default', 'glyphs'], ['layer 1', 'glyphs.layer 1'], ['layer 2', 'glyphs.layer 2'], ["layer 3", "glyphs.layer 3"]]
- self.assertEqual(expected, result)
-
- # rename valid name
-
- def testRenameLayer(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- writer.renameGlyphSet("layer 1", "layer 3")
- writer.writeLayerContents(["public.default", "layer 3", "layer 2"])
- # directories
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- exists = os.path.exists(path)
- self.assertEqual(False, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 3")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [['public.default', 'glyphs'], ['layer 3', 'glyphs.layer 3'], ['layer 2', 'glyphs.layer 2']]
- self.assertEqual(expected, result)
-
- def testRenameLayerDefault(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- writer.renameGlyphSet("public.default", "layer xxx")
- writer.renameGlyphSet("layer 1", "layer 1", defaultLayer=True)
- writer.writeLayerContents(["layer xxx", "layer 1", "layer 2"])
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- exists = os.path.exists(path)
- self.assertEqual(False, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer xxx")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [['layer xxx', 'glyphs.layer xxx'], ['layer 1', 'glyphs'], ['layer 2', 'glyphs.layer 2']]
- self.assertEqual(expected, result)
-
- # rename duplicate name
-
- def testRenameLayerDuplicateName(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- self.assertRaises(UFOLibError, writer.renameGlyphSet, "layer 1", "layer 2")
-
- # rename unknown layer
-
- def testRenameLayerUnknownName(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- self.assertRaises(UFOLibError, writer.renameGlyphSet, "does not exist", "layer 2")
-
- # remove valid layer
-
- def testRemoveLayer(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- writer.deleteGlyphSet("layer 1")
- writer.writeLayerContents(["public.default", "layer 2"])
- # directories
- path = os.path.join(self.ufoPath, "glyphs")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- exists = os.path.exists(path)
- self.assertEqual(False, exists)
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- exists = os.path.exists(path)
- self.assertEqual(True, exists)
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["public.default", "glyphs"], ["layer 2", "glyphs.layer 2"]]
- self.assertEqual(expected, result)
-
- # remove default layer
-
- def testRemoveDefaultLayer(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- writer.deleteGlyphSet("public.default")
- writer.writeLayerContents(["layer 1", "layer 2"])
- # directories
- path = os.path.join(self.ufoPath, "glyphs")
- self.assertEqual(False, os.path.exists(path))
- path = os.path.join(self.ufoPath, "glyphs.layer 1")
- self.assertEqual(True, os.path.exists(path))
- path = os.path.join(self.ufoPath, "glyphs.layer 2")
- self.assertEqual(True, os.path.exists(path))
- # layer contents
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [["layer 1", "glyphs.layer 1"], ["layer 2", "glyphs.layer 2"]]
- self.assertEqual(expected, result)
-
- # remove unknown layer
-
- def testRemoveDefaultLayer2(self):
- self.makeUFO()
- writer = UFOWriter(self.ufoPath)
- self.assertRaises(UFOLibError, writer.deleteGlyphSet, "does not exist")
-
- def testWriteAsciiLayerOrder(self):
- self.makeUFO(
- layerContents=[
- ["public.default", "glyphs"],
- ["layer 1", "glyphs.layer 1"],
- ["layer 2", "glyphs.layer 2"],
- ]
- )
- writer = UFOWriter(self.ufoPath)
- writer.writeLayerContents(["public.default", "layer 2", "layer 1"])
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- expected = [
- ["public.default", "glyphs"],
- ["layer 2", "glyphs.layer 2"],
- ["layer 1", "glyphs.layer 1"],
- ]
- self.assertEqual(expected, result)
- for layerName, _ in result:
- assert isinstance(layerName, str)
# -----
# /data
@@ -4175,539 +4529,549 @@ class UFO3WriteLayersTestCase(unittest.TestCase):
class UFO3ReadDataTestCase(unittest.TestCase):
-
- def getFontPath(self):
- testdata = os.path.join(os.path.dirname(__file__), "testdata")
- return os.path.join(testdata, "UFO3-Read Data.ufo")
-
- def testUFOReaderDataDirectoryListing(self):
- reader = UFOReader(self.getFontPath())
- found = reader.getDataDirectoryListing()
- expected = [
- 'org.unifiedfontobject.directory/bar/lol.txt',
- 'org.unifiedfontobject.directory/foo.txt',
- 'org.unifiedfontobject.file.txt'
- ]
- self.assertEqual(set(found), set(expected))
-
- def testUFOReaderBytesFromPath(self):
- reader = UFOReader(self.getFontPath())
- found = reader.readBytesFromPath("data/org.unifiedfontobject.file.txt")
- expected = b"file.txt"
- self.assertEqual(found, expected)
- found = reader.readBytesFromPath("data/org.unifiedfontobject.directory/bar/lol.txt")
- expected = b"lol.txt"
- self.assertEqual(found, expected)
- found = reader.readBytesFromPath("data/org.unifiedfontobject.doesNotExist")
- expected = None
- self.assertEqual(found, expected)
-
- def testUFOReaderReadFileFromPath(self):
- reader = UFOReader(self.getFontPath())
- fileObject = reader.getReadFileForPath("data/org.unifiedfontobject.file.txt")
- self.assertNotEqual(fileObject, None)
- hasRead = hasattr(fileObject, "read")
- self.assertEqual(hasRead, True)
- fileObject.close()
- fileObject = reader.getReadFileForPath("data/org.unifiedfontobject.doesNotExist")
- self.assertEqual(fileObject, None)
-
- def testUFOReaderKernGroupDuplicatesRemoved(self):
- # Non-kerning group duplicates are kept
- # Kerning group duplicates are removed
- expected_groups = {
- "group1" : ["A"],
- "group2" : ["B", "C", "B"],
- "public.kern1.A" : ["A"],
- "public.kern2.B" : ["B", "A", "C"],
- }
- reader = UFOReader(self.getFontPath())
- groups = reader.readGroups()
- self.assertEqual(expected_groups, groups)
+ def getFontPath(self):
+ testdata = os.path.join(os.path.dirname(__file__), "testdata")
+ return os.path.join(testdata, "UFO3-Read Data.ufo")
+
+ def testUFOReaderDataDirectoryListing(self):
+ reader = UFOReader(self.getFontPath())
+ found = reader.getDataDirectoryListing()
+ expected = [
+ "org.unifiedfontobject.directory/bar/lol.txt",
+ "org.unifiedfontobject.directory/foo.txt",
+ "org.unifiedfontobject.file.txt",
+ ]
+ self.assertEqual(set(found), set(expected))
+
+ def testUFOReaderBytesFromPath(self):
+ reader = UFOReader(self.getFontPath())
+ found = reader.readBytesFromPath("data/org.unifiedfontobject.file.txt")
+ expected = b"file.txt"
+ self.assertEqual(found, expected)
+ found = reader.readBytesFromPath(
+ "data/org.unifiedfontobject.directory/bar/lol.txt"
+ )
+ expected = b"lol.txt"
+ self.assertEqual(found, expected)
+ found = reader.readBytesFromPath("data/org.unifiedfontobject.doesNotExist")
+ expected = None
+ self.assertEqual(found, expected)
+
+ def testUFOReaderReadFileFromPath(self):
+ reader = UFOReader(self.getFontPath())
+ fileObject = reader.getReadFileForPath("data/org.unifiedfontobject.file.txt")
+ self.assertNotEqual(fileObject, None)
+ hasRead = hasattr(fileObject, "read")
+ self.assertEqual(hasRead, True)
+ fileObject.close()
+ fileObject = reader.getReadFileForPath(
+ "data/org.unifiedfontobject.doesNotExist"
+ )
+ self.assertEqual(fileObject, None)
+
+ def testUFOReaderKernGroupDuplicatesRemoved(self):
+ # Non-kerning group duplicates are kept
+ # Kerning group duplicates are removed
+ expected_groups = {
+ "group1": ["A"],
+ "group2": ["B", "C", "B"],
+ "public.kern1.A": ["A"],
+ "public.kern2.B": ["B", "A", "C"],
+ }
+ reader = UFOReader(self.getFontPath())
+ groups = reader.readGroups()
+ self.assertEqual(expected_groups, groups)
class UFO3WriteDataTestCase(unittest.TestCase):
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.dstDir = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def tearDownUFO(self):
+ if os.path.exists(self.dstDir):
+ shutil.rmtree(self.dstDir)
+
+ def testUFOWriterWriteBytesToPath(self):
+ # basic file
+ path = "data/org.unifiedfontobject.writebytesbasicfile.txt"
+ testBytes = b"test"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeBytesToPath(path, testBytes)
+ path = os.path.join(self.dstDir, path)
+ self.assertEqual(os.path.exists(path), True)
+ with open(path, "rb") as f:
+ written = f.read()
+ self.assertEqual(testBytes, written)
+ self.tearDownUFO()
+ # basic file with unicode text
+ path = "data/org.unifiedfontobject.writebytesbasicunicodefile.txt"
+ text = b"t\xeb\xdft"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeBytesToPath(path, text)
+ path = os.path.join(self.dstDir, path)
+ self.assertEqual(os.path.exists(path), True)
+ with open(path, "rb") as f:
+ written = f.read()
+ self.assertEqual(text, written)
+ self.tearDownUFO()
+ # basic directory
+ path = "data/org.unifiedfontobject.writebytesdirectory/level1/level2/file.txt"
+ testBytes = b"test"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeBytesToPath(path, testBytes)
+ path = os.path.join(self.dstDir, path)
+ self.assertEqual(os.path.exists(path), True)
+ with open(path, "rb") as f:
+ written = f.read()
+ self.assertEqual(testBytes, written)
+ self.tearDownUFO()
+
+ def testUFOWriterWriteFileToPath(self):
+ # basic file
+ path = "data/org.unifiedfontobject.getwritefile.txt"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ fileObject = writer.getFileObjectForPath(path)
+ self.assertNotEqual(fileObject, None)
+ hasRead = hasattr(fileObject, "read")
+ self.assertEqual(hasRead, True)
+ fileObject.close()
+ self.tearDownUFO()
+
+ def testUFOWriterRemoveFile(self):
+ path1 = "data/org.unifiedfontobject.removefile/level1/level2/file1.txt"
+ path2 = "data/org.unifiedfontobject.removefile/level1/level2/file2.txt"
+ path3 = "data/org.unifiedfontobject.removefile/level1/file3.txt"
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.writeBytesToPath(path1, b"test")
+ writer.writeBytesToPath(path2, b"test")
+ writer.writeBytesToPath(path3, b"test")
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path1)), True)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), True)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
+ writer.removeFileForPath(path1)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path1)), False)
+ self.assertEqual(
+ os.path.exists(os.path.dirname(os.path.join(self.dstDir, path1))), True
+ )
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), True)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
+ writer.removeFileForPath(path2)
+ self.assertEqual(
+ os.path.exists(os.path.dirname(os.path.join(self.dstDir, path1))), False
+ )
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), False)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
+ writer.removeFileForPath(path3)
+ self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), False)
+ self.assertEqual(
+ os.path.exists(os.path.dirname(os.path.join(self.dstDir, path2))), False
+ )
+ self.assertEqual(
+ os.path.exists(
+ os.path.join(self.dstDir, "data/org.unifiedfontobject.removefile")
+ ),
+ False,
+ )
+ self.assertRaises(
+ UFOLibError,
+ writer.removeFileForPath,
+ path="data/org.unifiedfontobject.doesNotExist.txt",
+ )
+ self.tearDownUFO()
+
+ def testUFOWriterCopy(self):
+ sourceDir = self.dstDir.replace(".ufo", "") + "-copy source" + ".ufo"
+ dataPath = "data/org.unifiedfontobject.copy/level1/level2/file1.txt"
+ writer = UFOWriter(sourceDir, formatVersion=3)
+ writer.writeBytesToPath(dataPath, b"test")
+ # copy a file
+ reader = UFOReader(sourceDir)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ writer.copyFromReader(reader, dataPath, dataPath)
+ path = os.path.join(self.dstDir, dataPath)
+ self.assertEqual(os.path.exists(path), True)
+ self.tearDownUFO()
+ # copy a directory
+ reader = UFOReader(sourceDir)
+ writer = UFOWriter(self.dstDir, formatVersion=3)
+ p = "data/org.unifiedfontobject.copy"
+ writer.copyFromReader(reader, p, p)
+ path = os.path.join(self.dstDir, dataPath)
+ self.assertEqual(os.path.exists(path), True)
+ self.tearDownUFO()
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.dstDir = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def tearDownUFO(self):
- if os.path.exists(self.dstDir):
- shutil.rmtree(self.dstDir)
-
- def testUFOWriterWriteBytesToPath(self):
- # basic file
- path = "data/org.unifiedfontobject.writebytesbasicfile.txt"
- testBytes = b"test"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeBytesToPath(path, testBytes)
- path = os.path.join(self.dstDir, path)
- self.assertEqual(os.path.exists(path), True)
- with open(path, "rb") as f:
- written = f.read()
- self.assertEqual(testBytes, written)
- self.tearDownUFO()
- # basic file with unicode text
- path = "data/org.unifiedfontobject.writebytesbasicunicodefile.txt"
- text = b"t\xeb\xdft"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeBytesToPath(path, text)
- path = os.path.join(self.dstDir, path)
- self.assertEqual(os.path.exists(path), True)
- with open(path, "rb") as f:
- written = f.read()
- self.assertEqual(text, written)
- self.tearDownUFO()
- # basic directory
- path = "data/org.unifiedfontobject.writebytesdirectory/level1/level2/file.txt"
- testBytes = b"test"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeBytesToPath(path, testBytes)
- path = os.path.join(self.dstDir, path)
- self.assertEqual(os.path.exists(path), True)
- with open(path, "rb") as f:
- written = f.read()
- self.assertEqual(testBytes, written)
- self.tearDownUFO()
-
- def testUFOWriterWriteFileToPath(self):
- # basic file
- path = "data/org.unifiedfontobject.getwritefile.txt"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- fileObject = writer.getFileObjectForPath(path)
- self.assertNotEqual(fileObject, None)
- hasRead = hasattr(fileObject, "read")
- self.assertEqual(hasRead, True)
- fileObject.close()
- self.tearDownUFO()
-
- def testUFOWriterRemoveFile(self):
- path1 = "data/org.unifiedfontobject.removefile/level1/level2/file1.txt"
- path2 = "data/org.unifiedfontobject.removefile/level1/level2/file2.txt"
- path3 = "data/org.unifiedfontobject.removefile/level1/file3.txt"
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.writeBytesToPath(path1, b"test")
- writer.writeBytesToPath(path2, b"test")
- writer.writeBytesToPath(path3, b"test")
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path1)), True)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), True)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
- writer.removeFileForPath(path1)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path1)), False)
- self.assertEqual(os.path.exists(os.path.dirname(os.path.join(self.dstDir, path1))), True)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), True)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
- writer.removeFileForPath(path2)
- self.assertEqual(os.path.exists(os.path.dirname(os.path.join(self.dstDir, path1))), False)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path2)), False)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), True)
- writer.removeFileForPath(path3)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, path3)), False)
- self.assertEqual(os.path.exists(os.path.dirname(os.path.join(self.dstDir, path2))), False)
- self.assertEqual(os.path.exists(os.path.join(self.dstDir, "data/org.unifiedfontobject.removefile")), False)
- self.assertRaises(UFOLibError, writer.removeFileForPath, path="data/org.unifiedfontobject.doesNotExist.txt")
- self.tearDownUFO()
-
- def testUFOWriterCopy(self):
- sourceDir = self.dstDir.replace(".ufo", "") + "-copy source" + ".ufo"
- dataPath = "data/org.unifiedfontobject.copy/level1/level2/file1.txt"
- writer = UFOWriter(sourceDir, formatVersion=3)
- writer.writeBytesToPath(dataPath, b"test")
- # copy a file
- reader = UFOReader(sourceDir)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- writer.copyFromReader(reader, dataPath, dataPath)
- path = os.path.join(self.dstDir, dataPath)
- self.assertEqual(os.path.exists(path), True)
- self.tearDownUFO()
- # copy a directory
- reader = UFOReader(sourceDir)
- writer = UFOWriter(self.dstDir, formatVersion=3)
- p = "data/org.unifiedfontobject.copy"
- writer.copyFromReader(reader, p, p)
- path = os.path.join(self.dstDir, dataPath)
- self.assertEqual(os.path.exists(path), True)
- self.tearDownUFO()
# ---------------
# layerinfo.plist
# ---------------
-class TestLayerInfoObject:
- color = guidelines = lib = None
+class TestLayerInfoObject:
+ color = guidelines = lib = None
class UFO3ReadLayerInfoTestCase(unittest.TestCase):
-
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.ufoPath = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def makeUFO(self, formatVersion=3, layerInfo=None):
- self.clearUFO()
- if not os.path.exists(self.ufoPath):
- os.mkdir(self.ufoPath)
- # metainfo.plist
- metaInfo = dict(creator="test", formatVersion=formatVersion)
- path = os.path.join(self.ufoPath, "metainfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(metaInfo, f)
- # layercontents.plist
- layerContents = [("public.default", "glyphs")]
- path = os.path.join(self.ufoPath, "layercontents.plist")
- with open(path, "wb") as f:
- plistlib.dump(layerContents, f)
- # glyphs
- glyphsPath = os.path.join(self.ufoPath, "glyphs")
- os.mkdir(glyphsPath)
- contents = dict(a="a.glif")
- path = os.path.join(glyphsPath, "contents.plist")
- with open(path, "wb") as f:
- plistlib.dump(contents, f)
- path = os.path.join(glyphsPath, "a.glif")
- with open(path, "w") as f:
- f.write(" ")
- # layerinfo.plist
- if layerInfo is None:
- layerInfo = dict(
- color="0,0,0,1",
- lib={"foo" : "bar"}
- )
- path = os.path.join(glyphsPath, "layerinfo.plist")
- with open(path, "wb") as f:
- plistlib.dump(layerInfo, f)
-
- def clearUFO(self):
- if os.path.exists(self.ufoPath):
- shutil.rmtree(self.ufoPath)
-
- def testValidLayerInfo(self):
- self.makeUFO()
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- info = TestLayerInfoObject()
- glyphSet.readLayerInfo(info)
- expectedColor = "0,0,0,1"
- self.assertEqual(expectedColor, info.color)
- expectedLib = {"foo": "bar"}
- self.assertEqual(expectedLib, info.lib)
-
- def testMissingLayerInfo(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
- os.remove(path)
- # read
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- info = TestLayerInfoObject()
- glyphSet.readLayerInfo(info)
- self.assertEqual(None, info.color)
- self.assertEqual(None, info.guidelines)
- self.assertEqual(None, info.lib)
-
- def testBogusLayerInfo(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
- os.remove(path)
- with open(path, "w") as f:
- f.write("test")
- # read
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- info = TestLayerInfoObject()
- self.assertRaises(UFOLibError, glyphSet.readLayerInfo, info)
-
- def testInvalidFormatLayerInfo(self):
- self.makeUFO()
- path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
- info = [("color", "0,0,0,0")]
- with open(path, "wb") as f:
- plistlib.dump(info, f)
- # read
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- info = TestLayerInfoObject()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, info)
-
- def testColor(self):
- ## not a string
- info = {}
- info["color"] = 1
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## not enough commas
- info = {}
- info["color"] = "1 0, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1 0 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1 0 0 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## not enough parts
- info = {}
- info["color"] = ", 0, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, , 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, 0, , 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, 0, 0, "
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = ", , , "
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## not a number in all positions
- info = {}
- info["color"] = "r, 1, 1, 1"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, g, 1, 1"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, 1, b, 1"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "1, 1, 1, a"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## too many parts
- info = {}
- info["color"] = "1, 0, 0, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## < 0 in each position
- info = {}
- info["color"] = "-1, 0, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, -1, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, 0, -1, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, 0, 0, -1"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- ## > 1 in each position
- info = {}
- info["color"] = "2, 0, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, 2, 0, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, 0, 2, 0"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
- info = {}
- info["color"] = "0, 0, 0, 2"
- self.makeUFO(layerInfo=info)
- reader = UFOReader(self.ufoPath, validate=True)
- glyphSet = reader.getGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.ufoPath = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def makeUFO(self, formatVersion=3, layerInfo=None):
+ self.clearUFO()
+ if not os.path.exists(self.ufoPath):
+ os.mkdir(self.ufoPath)
+ # metainfo.plist
+ metaInfo = dict(creator="test", formatVersion=formatVersion)
+ path = os.path.join(self.ufoPath, "metainfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(metaInfo, f)
+ # layercontents.plist
+ layerContents = [("public.default", "glyphs")]
+ path = os.path.join(self.ufoPath, "layercontents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(layerContents, f)
+ # glyphs
+ glyphsPath = os.path.join(self.ufoPath, "glyphs")
+ os.mkdir(glyphsPath)
+ contents = dict(a="a.glif")
+ path = os.path.join(glyphsPath, "contents.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(contents, f)
+ path = os.path.join(glyphsPath, "a.glif")
+ with open(path, "w") as f:
+ f.write(" ")
+ # layerinfo.plist
+ if layerInfo is None:
+ layerInfo = dict(color="0,0,0,1", lib={"foo": "bar"})
+ path = os.path.join(glyphsPath, "layerinfo.plist")
+ with open(path, "wb") as f:
+ plistlib.dump(layerInfo, f)
+
+ def clearUFO(self):
+ if os.path.exists(self.ufoPath):
+ shutil.rmtree(self.ufoPath)
+
+ def testValidLayerInfo(self):
+ self.makeUFO()
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ info = TestLayerInfoObject()
+ glyphSet.readLayerInfo(info)
+ expectedColor = "0,0,0,1"
+ self.assertEqual(expectedColor, info.color)
+ expectedLib = {"foo": "bar"}
+ self.assertEqual(expectedLib, info.lib)
+
+ def testMissingLayerInfo(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
+ os.remove(path)
+ # read
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ info = TestLayerInfoObject()
+ glyphSet.readLayerInfo(info)
+ self.assertEqual(None, info.color)
+ self.assertEqual(None, info.guidelines)
+ self.assertEqual(None, info.lib)
+
+ def testBogusLayerInfo(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
+ os.remove(path)
+ with open(path, "w") as f:
+ f.write("test")
+ # read
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ info = TestLayerInfoObject()
+ self.assertRaises(UFOLibError, glyphSet.readLayerInfo, info)
+
+ def testInvalidFormatLayerInfo(self):
+ self.makeUFO()
+ path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
+ info = [("color", "0,0,0,0")]
+ with open(path, "wb") as f:
+ plistlib.dump(info, f)
+ # read
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ info = TestLayerInfoObject()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, info)
+
+ def testColor(self):
+ ## not a string
+ info = {}
+ info["color"] = 1
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## not enough commas
+ info = {}
+ info["color"] = "1 0, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1 0 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1 0 0 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## not enough parts
+ info = {}
+ info["color"] = ", 0, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, , 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, 0, , 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, 0, 0, "
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = ", , , "
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## not a number in all positions
+ info = {}
+ info["color"] = "r, 1, 1, 1"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, g, 1, 1"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, 1, b, 1"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "1, 1, 1, a"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## too many parts
+ info = {}
+ info["color"] = "1, 0, 0, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## < 0 in each position
+ info = {}
+ info["color"] = "-1, 0, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, -1, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, 0, -1, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, 0, 0, -1"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ ## > 1 in each position
+ info = {}
+ info["color"] = "2, 0, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, 2, 0, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, 0, 2, 0"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
+ info = {}
+ info["color"] = "0, 0, 0, 2"
+ self.makeUFO(layerInfo=info)
+ reader = UFOReader(self.ufoPath, validate=True)
+ glyphSet = reader.getGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.readLayerInfo, TestLayerInfoObject())
class UFO3WriteLayerInfoTestCase(unittest.TestCase):
-
- def setUp(self):
- self.tempDir = tempfile.mktemp()
- os.mkdir(self.tempDir)
- self.ufoPath = os.path.join(self.tempDir, "test.ufo")
-
- def tearDown(self):
- shutil.rmtree(self.tempDir)
-
- def makeGlyphSet(self):
- self.clearUFO()
- writer = UFOWriter(self.ufoPath)
- return writer.getGlyphSet()
-
- def clearUFO(self):
- if os.path.exists(self.ufoPath):
- shutil.rmtree(self.ufoPath)
-
- def testValidWrite(self):
- expected = dict(
- color="0,0,0,1",
- lib={"foo" : "bar"}
- )
- info = TestLayerInfoObject()
- info.color = expected["color"]
- info.lib = expected["lib"]
- glyphSet = self.makeGlyphSet()
- glyphSet.writeLayerInfo(info)
- path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
- with open(path, "rb") as f:
- result = plistlib.load(f)
- self.assertEqual(expected, result)
-
- def testColor(self):
- ## not a string
- info = TestLayerInfoObject()
- info.color = 1
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## not enough commas
- info = TestLayerInfoObject()
- info.color = "1 0, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1 0 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1 0 0 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## not enough parts
- info = TestLayerInfoObject()
- info.color = ", 0, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, , 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, 0, , 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, 0, 0, "
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = ", , , "
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## not a number in all positions
- info = TestLayerInfoObject()
- info.color = "r, 1, 1, 1"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, g, 1, 1"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, 1, b, 1"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "1, 1, 1, a"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## too many parts
- info = TestLayerInfoObject()
- info.color = "1, 0, 0, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## < 0 in each position
- info = TestLayerInfoObject()
- info.color = "-1, 0, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, -1, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, 0, -1, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, 0, 0, -1"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- ## > 1 in each position
- info = TestLayerInfoObject()
- info.color = "2, 0, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, 2, 0, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, 0, 2, 0"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
- info = TestLayerInfoObject()
- info.color = "0, 0, 0, 2"
- glyphSet = self.makeGlyphSet()
- self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ def setUp(self):
+ self.tempDir = tempfile.mktemp()
+ os.mkdir(self.tempDir)
+ self.ufoPath = os.path.join(self.tempDir, "test.ufo")
+
+ def tearDown(self):
+ shutil.rmtree(self.tempDir)
+
+ def makeGlyphSet(self):
+ self.clearUFO()
+ writer = UFOWriter(self.ufoPath)
+ return writer.getGlyphSet()
+
+ def clearUFO(self):
+ if os.path.exists(self.ufoPath):
+ shutil.rmtree(self.ufoPath)
+
+ def testValidWrite(self):
+ expected = dict(color="0,0,0,1", lib={"foo": "bar"})
+ info = TestLayerInfoObject()
+ info.color = expected["color"]
+ info.lib = expected["lib"]
+ glyphSet = self.makeGlyphSet()
+ glyphSet.writeLayerInfo(info)
+ path = os.path.join(self.ufoPath, "glyphs", "layerinfo.plist")
+ with open(path, "rb") as f:
+ result = plistlib.load(f)
+ self.assertEqual(expected, result)
+
+ def testColor(self):
+ ## not a string
+ info = TestLayerInfoObject()
+ info.color = 1
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## not enough commas
+ info = TestLayerInfoObject()
+ info.color = "1 0, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1 0 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1 0 0 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## not enough parts
+ info = TestLayerInfoObject()
+ info.color = ", 0, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, , 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, 0, , 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, 0, 0, "
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = ", , , "
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## not a number in all positions
+ info = TestLayerInfoObject()
+ info.color = "r, 1, 1, 1"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, g, 1, 1"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, 1, b, 1"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "1, 1, 1, a"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## too many parts
+ info = TestLayerInfoObject()
+ info.color = "1, 0, 0, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## < 0 in each position
+ info = TestLayerInfoObject()
+ info.color = "-1, 0, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, -1, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, 0, -1, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, 0, 0, -1"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ ## > 1 in each position
+ info = TestLayerInfoObject()
+ info.color = "2, 0, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, 2, 0, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, 0, 2, 0"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)
+ info = TestLayerInfoObject()
+ info.color = "0, 0, 0, 2"
+ glyphSet = self.makeGlyphSet()
+ self.assertRaises(GlifLibError, glyphSet.writeLayerInfo, info)