summaryrefslogtreecommitdiff
path: root/misc/pylib/robofab/test
diff options
context:
space:
mode:
Diffstat (limited to 'misc/pylib/robofab/test')
-rwxr-xr-xmisc/pylib/robofab/test/__init__.py8
-rw-r--r--misc/pylib/robofab/test/runAll.py27
-rwxr-xr-xmisc/pylib/robofab/test/testSupport.py278
-rw-r--r--misc/pylib/robofab/test/test_RInfoFL.py111
-rw-r--r--misc/pylib/robofab/test/test_RInfoRF.py56
-rw-r--r--misc/pylib/robofab/test/test_dialogs.py218
-rw-r--r--misc/pylib/robofab/test/test_fontLabUFOReadWrite.py565
-rw-r--r--misc/pylib/robofab/test/test_glifLib.py150
-rw-r--r--misc/pylib/robofab/test/test_noneLabUFOReadWrite.py321
-rwxr-xr-xmisc/pylib/robofab/test/test_objectsFL.py54
-rwxr-xr-xmisc/pylib/robofab/test/test_objectsUFO.py203
-rwxr-xr-xmisc/pylib/robofab/test/test_pens.py149
-rw-r--r--misc/pylib/robofab/test/test_psHints.py110
-rw-r--r--misc/pylib/robofab/test/test_ufoLib.py1659
14 files changed, 0 insertions, 3909 deletions
diff --git a/misc/pylib/robofab/test/__init__.py b/misc/pylib/robofab/test/__init__.py
deleted file mode 100755
index f34415804..000000000
--- a/misc/pylib/robofab/test/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-"""Directory for unit tests.
-
-Modules here are typically named text_<something>.py, where <something> is
-usually a module name, for example "test_flPen.py", but it can also be the name
-of an area or concept to be tested, for example "test_drawing.py".
-
-Testmodules should use the unittest framework.
-"""
diff --git a/misc/pylib/robofab/test/runAll.py b/misc/pylib/robofab/test/runAll.py
deleted file mode 100644
index 28446a7b8..000000000
--- a/misc/pylib/robofab/test/runAll.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import os
-import glob
-import unittest
-
-import robofab.test
-
-if __name__ == "__main__":
- testDir = os.path.dirname(robofab.test.__file__)
- testFiles = glob.glob1(testDir, "test_*.py")
-
- loader = unittest.TestLoader()
- suites = []
- for fileName in testFiles:
- modName = "robofab.test." + fileName[:-3]
- print "importing", fileName
- try:
- mod = __import__(modName, {}, {}, ["*"])
- except ImportError:
- print "*** skipped", fileName
- continue
-
- suites.append(loader.loadTestsFromModule(mod))
-
- print "running tests..."
- testRunner = unittest.TextTestRunner(verbosity=0)
- testSuite = unittest.TestSuite(suites)
- testRunner.run(testSuite)
diff --git a/misc/pylib/robofab/test/testSupport.py b/misc/pylib/robofab/test/testSupport.py
deleted file mode 100755
index f7f96c9ff..000000000
--- a/misc/pylib/robofab/test/testSupport.py
+++ /dev/null
@@ -1,278 +0,0 @@
-"""Miscellaneous helpers for our test suite."""
-
-
-import sys
-import os
-import types
-import unittest
-
-
-def getDemoFontPath():
- """Return the path to Data/DemoFont.ufo/."""
- import robofab
- root = os.path.dirname(os.path.dirname(os.path.dirname(robofab.__file__)))
- return os.path.join(root, "Data", "DemoFont.ufo")
-
-
-def getDemoFontGlyphSetPath():
- """Return the path to Data/DemoFont.ufo/glyphs/."""
- return os.path.join(getDemoFontPath(), "glyphs")
-
-
-def _gatherTestCasesFromCallerByMagic():
- # UGLY magic: fetch TestClass subclasses from the globals of our
- # caller's caller.
- frame = sys._getframe(2)
- return _gatherTestCasesFromDict(frame.f_globals)
-
-
-def _gatherTestCasesFromDict(d):
- testCases = []
- for ob in d.values():
- if isinstance(ob, type) and issubclass(ob, unittest.TestCase):
- testCases.append(ob)
- return testCases
-
-
-def runTests(testCases=None, verbosity=1):
- """Run a series of tests."""
- if testCases is None:
- testCases = _gatherTestCasesFromCallerByMagic()
- loader = unittest.TestLoader()
- suites = []
- for testCase in testCases:
- suites.append(loader.loadTestsFromTestCase(testCase))
-
- testRunner = unittest.TextTestRunner(verbosity=verbosity)
- testSuite = unittest.TestSuite(suites)
- testRunner.run(testSuite)
-
-# font info values used by several tests
-
-fontInfoVersion1 = {
- "familyName" : "Some Font (Family Name)",
- "styleName" : "Regular (Style Name)",
- "fullName" : "Some Font-Regular (Postscript Full Name)",
- "fontName" : "SomeFont-Regular (Postscript Font Name)",
- "menuName" : "Some Font Regular (Style Map Family Name)",
- "fontStyle" : 64,
- "note" : "A note.",
- "versionMajor" : 1,
- "versionMinor" : 0,
- "year" : 2008,
- "copyright" : "Copyright Some Foundry.",
- "notice" : "Some Font by Some Designer for Some Foundry.",
- "trademark" : "Trademark Some Foundry",
- "license" : "License info for Some Foundry.",
- "licenseURL" : "http://somefoundry.com/license",
- "createdBy" : "Some Foundry",
- "designer" : "Some Designer",
- "designerURL" : "http://somedesigner.com",
- "vendorURL" : "http://somefoundry.com",
- "unitsPerEm" : 1000,
- "ascender" : 750,
- "descender" : -250,
- "capHeight" : 750,
- "xHeight" : 500,
- "defaultWidth" : 400,
- "slantAngle" : -12.5,
- "italicAngle" : -12.5,
- "widthName" : "Medium (normal)",
- "weightName" : "Medium",
- "weightValue" : 500,
- "fondName" : "SomeFont Regular (FOND Name)",
- "otFamilyName" : "Some Font (Preferred Family Name)",
- "otStyleName" : "Regular (Preferred Subfamily Name)",
- "otMacName" : "Some Font Regular (Compatible Full Name)",
- "msCharSet" : 0,
- "fondID" : 15000,
- "uniqueID" : 4000000,
- "ttVendor" : "SOME",
- "ttUniqueID" : "OpenType name Table Unique ID",
- "ttVersion" : "OpenType name Table Version",
-}
-
-fontInfoVersion2 = {
- "familyName" : "Some Font (Family Name)",
- "styleName" : "Regular (Style Name)",
- "styleMapFamilyName" : "Some Font Regular (Style Map Family Name)",
- "styleMapStyleName" : "regular",
- "versionMajor" : 1,
- "versionMinor" : 0,
- "year" : 2008,
- "copyright" : "Copyright Some Foundry.",
- "trademark" : "Trademark Some Foundry",
- "unitsPerEm" : 1000,
- "descender" : -250,
- "xHeight" : 500,
- "capHeight" : 750,
- "ascender" : 750,
- "italicAngle" : -12.5,
- "note" : "A note.",
- "openTypeHeadCreated" : "2000/01/01 00:00:00",
- "openTypeHeadLowestRecPPEM" : 10,
- "openTypeHeadFlags" : [0, 1],
- "openTypeHheaAscender" : 750,
- "openTypeHheaDescender" : -250,
- "openTypeHheaLineGap" : 200,
- "openTypeHheaCaretSlopeRise" : 1,
- "openTypeHheaCaretSlopeRun" : 0,
- "openTypeHheaCaretOffset" : 0,
- "openTypeNameDesigner" : "Some Designer",
- "openTypeNameDesignerURL" : "http://somedesigner.com",
- "openTypeNameManufacturer" : "Some Foundry",
- "openTypeNameManufacturerURL" : "http://somefoundry.com",
- "openTypeNameLicense" : "License info for Some Foundry.",
- "openTypeNameLicenseURL" : "http://somefoundry.com/license",
- "openTypeNameVersion" : "OpenType name Table Version",
- "openTypeNameUniqueID" : "OpenType name Table Unique ID",
- "openTypeNameDescription" : "Some Font by Some Designer for Some Foundry.",
- "openTypeNamePreferredFamilyName" : "Some Font (Preferred Family Name)",
- "openTypeNamePreferredSubfamilyName" : "Regular (Preferred Subfamily Name)",
- "openTypeNameCompatibleFullName" : "Some Font Regular (Compatible Full Name)",
- "openTypeNameSampleText" : "Sample Text for Some Font.",
- "openTypeNameWWSFamilyName" : "Some Font (WWS Family Name)",
- "openTypeNameWWSSubfamilyName" : "Regular (WWS Subfamily Name)",
- "openTypeOS2WidthClass" : 5,
- "openTypeOS2WeightClass" : 500,
- "openTypeOS2Selection" : [3],
- "openTypeOS2VendorID" : "SOME",
- "openTypeOS2Panose" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
- "openTypeOS2FamilyClass" : [1, 1],
- "openTypeOS2UnicodeRanges" : [0, 1],
- "openTypeOS2CodePageRanges" : [0, 1],
- "openTypeOS2TypoAscender" : 750,
- "openTypeOS2TypoDescender" : -250,
- "openTypeOS2TypoLineGap" : 200,
- "openTypeOS2WinAscent" : 750,
- "openTypeOS2WinDescent" : -250,
- "openTypeOS2Type" : [],
- "openTypeOS2SubscriptXSize" : 200,
- "openTypeOS2SubscriptYSize" : 400,
- "openTypeOS2SubscriptXOffset" : 0,
- "openTypeOS2SubscriptYOffset" : -100,
- "openTypeOS2SuperscriptXSize" : 200,
- "openTypeOS2SuperscriptYSize" : 400,
- "openTypeOS2SuperscriptXOffset" : 0,
- "openTypeOS2SuperscriptYOffset" : 200,
- "openTypeOS2StrikeoutSize" : 20,
- "openTypeOS2StrikeoutPosition" : 300,
- "openTypeVheaVertTypoAscender" : 750,
- "openTypeVheaVertTypoDescender" : -250,
- "openTypeVheaVertTypoLineGap" : 200,
- "openTypeVheaCaretSlopeRise" : 0,
- "openTypeVheaCaretSlopeRun" : 1,
- "openTypeVheaCaretOffset" : 0,
- "postscriptFontName" : "SomeFont-Regular (Postscript Font Name)",
- "postscriptFullName" : "Some Font-Regular (Postscript Full Name)",
- "postscriptSlantAngle" : -12.5,
- "postscriptUniqueID" : 4000000,
- "postscriptUnderlineThickness" : 20,
- "postscriptUnderlinePosition" : -200,
- "postscriptIsFixedPitch" : False,
- "postscriptBlueValues" : [500, 510],
- "postscriptOtherBlues" : [-250, -260],
- "postscriptFamilyBlues" : [500, 510],
- "postscriptFamilyOtherBlues" : [-250, -260],
- "postscriptStemSnapH" : [100, 120],
- "postscriptStemSnapV" : [80, 90],
- "postscriptBlueFuzz" : 1,
- "postscriptBlueShift" : 7,
- "postscriptBlueScale" : 0.039625,
- "postscriptForceBold" : True,
- "postscriptDefaultWidthX" : 400,
- "postscriptNominalWidthX" : 400,
- "postscriptWeightName" : "Medium",
- "postscriptDefaultCharacter" : ".notdef",
- "postscriptWindowsCharacterSet" : 1,
- "macintoshFONDFamilyID" : 15000,
- "macintoshFONDName" : "SomeFont Regular (FOND Name)",
-}
-
-expectedFontInfo1To2Conversion = {
- "familyName" : "Some Font (Family Name)",
- "styleMapFamilyName" : "Some Font Regular (Style Map Family Name)",
- "styleMapStyleName" : "regular",
- "styleName" : "Regular (Style Name)",
- "unitsPerEm" : 1000,
- "ascender" : 750,
- "capHeight" : 750,
- "xHeight" : 500,
- "descender" : -250,
- "italicAngle" : -12.5,
- "versionMajor" : 1,
- "versionMinor" : 0,
- "year" : 2008,
- "copyright" : "Copyright Some Foundry.",
- "trademark" : "Trademark Some Foundry",
- "note" : "A note.",
- "macintoshFONDFamilyID" : 15000,
- "macintoshFONDName" : "SomeFont Regular (FOND Name)",
- "openTypeNameCompatibleFullName" : "Some Font Regular (Compatible Full Name)",
- "openTypeNameDescription" : "Some Font by Some Designer for Some Foundry.",
- "openTypeNameDesigner" : "Some Designer",
- "openTypeNameDesignerURL" : "http://somedesigner.com",
- "openTypeNameLicense" : "License info for Some Foundry.",
- "openTypeNameLicenseURL" : "http://somefoundry.com/license",
- "openTypeNameManufacturer" : "Some Foundry",
- "openTypeNameManufacturerURL" : "http://somefoundry.com",
- "openTypeNamePreferredFamilyName" : "Some Font (Preferred Family Name)",
- "openTypeNamePreferredSubfamilyName": "Regular (Preferred Subfamily Name)",
- "openTypeNameCompatibleFullName" : "Some Font Regular (Compatible Full Name)",
- "openTypeNameUniqueID" : "OpenType name Table Unique ID",
- "openTypeNameVersion" : "OpenType name Table Version",
- "openTypeOS2VendorID" : "SOME",
- "openTypeOS2WeightClass" : 500,
- "openTypeOS2WidthClass" : 5,
- "postscriptDefaultWidthX" : 400,
- "postscriptFontName" : "SomeFont-Regular (Postscript Font Name)",
- "postscriptFullName" : "Some Font-Regular (Postscript Full Name)",
- "postscriptSlantAngle" : -12.5,
- "postscriptUniqueID" : 4000000,
- "postscriptWeightName" : "Medium",
- "postscriptWindowsCharacterSet" : 1
-}
-
-expectedFontInfo2To1Conversion = {
- "familyName" : "Some Font (Family Name)",
- "menuName" : "Some Font Regular (Style Map Family Name)",
- "fontStyle" : 64,
- "styleName" : "Regular (Style Name)",
- "unitsPerEm" : 1000,
- "ascender" : 750,
- "capHeight" : 750,
- "xHeight" : 500,
- "descender" : -250,
- "italicAngle" : -12.5,
- "versionMajor" : 1,
- "versionMinor" : 0,
- "copyright" : "Copyright Some Foundry.",
- "trademark" : "Trademark Some Foundry",
- "note" : "A note.",
- "fondID" : 15000,
- "fondName" : "SomeFont Regular (FOND Name)",
- "fullName" : "Some Font Regular (Compatible Full Name)",
- "notice" : "Some Font by Some Designer for Some Foundry.",
- "designer" : "Some Designer",
- "designerURL" : "http://somedesigner.com",
- "license" : "License info for Some Foundry.",
- "licenseURL" : "http://somefoundry.com/license",
- "createdBy" : "Some Foundry",
- "vendorURL" : "http://somefoundry.com",
- "otFamilyName" : "Some Font (Preferred Family Name)",
- "otStyleName" : "Regular (Preferred Subfamily Name)",
- "otMacName" : "Some Font Regular (Compatible Full Name)",
- "ttUniqueID" : "OpenType name Table Unique ID",
- "ttVersion" : "OpenType name Table Version",
- "ttVendor" : "SOME",
- "weightValue" : 500,
- "widthName" : "Medium (normal)",
- "defaultWidth" : 400,
- "fontName" : "SomeFont-Regular (Postscript Font Name)",
- "fullName" : "Some Font-Regular (Postscript Full Name)",
- "slantAngle" : -12.5,
- "uniqueID" : 4000000,
- "weightName" : "Medium",
- "msCharSet" : 0,
- "year" : 2008
-}
diff --git a/misc/pylib/robofab/test/test_RInfoFL.py b/misc/pylib/robofab/test/test_RInfoFL.py
deleted file mode 100644
index bfbd13477..000000000
--- a/misc/pylib/robofab/test/test_RInfoFL.py
+++ /dev/null
@@ -1,111 +0,0 @@
-import unittest
-from cStringIO import StringIO
-import sys
-from robofab import ufoLib
-from robofab.objects.objectsFL import NewFont
-from robofab.test.testSupport import fontInfoVersion1, fontInfoVersion2
-
-
-class RInfoRFTestCase(unittest.TestCase):
-
- def testRoundTripVersion2(self):
- font = NewFont()
- infoObject = font.info
- for attr, value in fontInfoVersion2.items():
- if attr in infoObject._ufoToFLAttrMapping and infoObject._ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
- continue
- setattr(infoObject, attr, value)
- newValue = getattr(infoObject, attr)
- self.assertEqual((attr, newValue), (attr, value))
- font.close()
-
- def testVersion2UnsupportedSet(self):
- saveStderr = sys.stderr
- saveStdout = sys.stdout
- tempStderr = StringIO()
- sys.stderr = tempStderr
- sys.stdout = tempStderr
- font = NewFont()
- infoObject = font.info
- requiredWarnings = []
- try:
- for attr, value in fontInfoVersion2.items():
- if attr in infoObject._ufoToFLAttrMapping and infoObject._ufoToFLAttrMapping[attr]["nakedAttribute"] is not None:
- continue
- setattr(infoObject, attr, value)
- s = "The attribute %s is not supported by FontLab." % attr
- requiredWarnings.append((attr, s))
- finally:
- sys.stderr = saveStderr
- sys.stdout = saveStdout
- tempStderr = tempStderr.getvalue()
- for attr, line in requiredWarnings:
- self.assertEquals((attr, line in tempStderr), (attr, True))
- font.close()
-
- def testVersion2UnsupportedGet(self):
- saveStderr = sys.stderr
- saveStdout = sys.stdout
- tempStderr = StringIO()
- sys.stderr = tempStderr
- sys.stdout = tempStderr
- font = NewFont()
- infoObject = font.info
- requiredWarnings = []
- try:
- for attr, value in fontInfoVersion2.items():
- if attr in infoObject._ufoToFLAttrMapping and infoObject._ufoToFLAttrMapping[attr]["nakedAttribute"] is not None:
- continue
- getattr(infoObject, attr, value)
- s = "The attribute %s is not supported by FontLab." % attr
- requiredWarnings.append((attr, s))
- finally:
- sys.stderr = saveStderr
- sys.stdout = saveStdout
- tempStderr = tempStderr.getvalue()
- for attr, line in requiredWarnings:
- self.assertEquals((attr, line in tempStderr), (attr, True))
- font.close()
-
- def testRoundTripVersion1(self):
- font = NewFont()
- infoObject = font.info
- for attr, value in fontInfoVersion1.items():
- if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
- setattr(infoObject, attr, value)
- for attr, expectedValue in fontInfoVersion1.items():
- if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
- value = getattr(infoObject, attr)
- self.assertEqual((attr, expectedValue), (attr, value))
- font.close()
-
- def testVersion1DeprecationRoundTrip(self):
- saveStderr = sys.stderr
- saveStdout = sys.stdout
- tempStderr = StringIO()
- sys.stderr = tempStderr
- sys.stdout = tempStderr
- font = NewFont()
- infoObject = font.info
- requiredWarnings = []
- try:
- for attr, value in fontInfoVersion1.items():
- if attr in ufoLib.deprecatedFontInfoAttributesVersion2:
- setattr(infoObject, attr, value)
- v = getattr(infoObject, attr)
- self.assertEquals((attr, value), (attr, v))
- s = "DeprecationWarning: The %s attribute has been deprecated." % attr
- requiredWarnings.append((attr, s))
- finally:
- sys.stderr = saveStderr
- sys.stdout = saveStdout
- tempStderr = tempStderr.getvalue()
- for attr, line in requiredWarnings:
- self.assertEquals((attr, line in tempStderr), (attr, True))
- font.close()
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
-
diff --git a/misc/pylib/robofab/test/test_RInfoRF.py b/misc/pylib/robofab/test/test_RInfoRF.py
deleted file mode 100644
index 3a8747033..000000000
--- a/misc/pylib/robofab/test/test_RInfoRF.py
+++ /dev/null
@@ -1,56 +0,0 @@
-import unittest
-from cStringIO import StringIO
-import sys
-from robofab import ufoLib
-from robofab.objects.objectsRF import RInfo
-from robofab.test.testSupport import fontInfoVersion1, fontInfoVersion2
-
-
-class RInfoRFTestCase(unittest.TestCase):
-
- def testRoundTripVersion2(self):
- infoObject = RInfo()
- for attr, value in fontInfoVersion2.items():
- setattr(infoObject, attr, value)
- newValue = getattr(infoObject, attr)
- self.assertEqual((attr, newValue), (attr, value))
-
- def testRoundTripVersion1(self):
- infoObject = RInfo()
- for attr, value in fontInfoVersion1.items():
- if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
- setattr(infoObject, attr, value)
- for attr, expectedValue in fontInfoVersion1.items():
- if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
- value = getattr(infoObject, attr)
- self.assertEqual((attr, expectedValue), (attr, value))
-
- def testVersion1DeprecationRoundTrip(self):
- """
- unittest doesn't catch warnings in self.assertRaises,
- so some hackery is required to catch the warnings
- that are raised when setting deprecated attributes.
- """
- saveStderr = sys.stderr
- tempStderr = StringIO()
- sys.stderr = tempStderr
- infoObject = RInfo()
- requiredWarnings = []
- try:
- for attr, value in fontInfoVersion1.items():
- if attr in ufoLib.deprecatedFontInfoAttributesVersion2:
- setattr(infoObject, attr, value)
- v = getattr(infoObject, attr)
- self.assertEquals((attr, value), (attr, v))
- s = "DeprecationWarning: The %s attribute has been deprecated." % attr
- requiredWarnings.append((attr, s))
- finally:
- sys.stderr = saveStderr
- tempStderr = tempStderr.getvalue()
- for attr, line in requiredWarnings:
- self.assertEquals((attr, line in tempStderr), (attr, True))
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_dialogs.py b/misc/pylib/robofab/test/test_dialogs.py
deleted file mode 100644
index c296a6bd7..000000000
--- a/misc/pylib/robofab/test/test_dialogs.py
+++ /dev/null
@@ -1,218 +0,0 @@
-import robofab.interface.all.dialogs
-reload(robofab.interface.all.dialogs)
-from robofab.interface.all.dialogs import *
-
-import unittest
-
-
-__all__ = [
- "AskString", #x
- "AskYesNoCancel", #x
- "FindGlyph",
- "GetFile", #x
- "GetFolder", #x
- "GetFileOrFolder", #x
- "Message", #x
- "OneList",
- "PutFile", #x
- "SearchList",
- "SelectFont",
- "SelectGlyph",
- "TwoChecks",
- "TwoFields",
- "ProgressBar",
-]
-
-class DialogRunner(object):
- def __init__(self):
- prompt = "The prompt for %s."
- message = "The message for %s."
- title = "The title for %s."
- informativeText = "The informative text for %s."
- fileTypes = ['ufo']
- fileName = "The_filename.txt"
-
- self.fonts = fonts = [self.makeTestFont(n) for n in range(4)]
-
- t = "AskString"
- try:
- print "About to try", t
- print "\t>>>", AskString(
- message=prompt%t,
- value='',
- title=title%t
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "AskYesNoCancel"
- try:
- print "About to try", t
- print "\t>>>", AskYesNoCancel(
- message=prompt%t+" default set to 0",
- title=title%t,
- default=0,
- informativeText=informativeText%t
- )
- print "\t>>>", AskYesNoCancel(
- message=prompt%t+" default set to 1",
- title=title%t,
- default=1,
- informativeText=informativeText%t
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "GetFile"
- try:
- print "About to try", t
- print "\t>>>", GetFile(
- message=message%t+" Only fileTypes "+`fileTypes`,
- title=title%t,
- directory=None,
- fileName=fileName,
- allowsMultipleSelection=False,
- fileTypes=fileTypes
- )
- print "\t>>>", GetFile(
- message=message%t+" All filetypes, allow multiple selection.",
- title=title%t,
- directory=None,
- fileName=fileName,
- allowsMultipleSelection=True,
- fileTypes=None
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "GetFolder"
- try:
- print "About to try", t
- print "\t>>>", GetFolder(
- message=message%t,
- title=title%t,
- directory=None,
- allowsMultipleSelection=False
- )
- print "\t>>>", GetFolder(
- message=message%t + " Allow multiple selection.",
- title=title%t,
- directory=None,
- allowsMultipleSelection=True
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "GetFileOrFolder"
- try:
- print "About to try", t
- print "\t>>>", GetFileOrFolder(
- message=message%t+" Only fileTypes "+`fileTypes`,
- title=title%t,
- directory=None,
- fileName=fileName,
- allowsMultipleSelection=False,
- fileTypes=fileTypes
- )
- print "\t>>>", GetFileOrFolder(
- message=message%t + " Allow multiple selection.",
- title=title%t,
- directory=None,
- fileName=fileName,
- allowsMultipleSelection=True,
- fileTypes=None
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "Message"
- try:
- print "About to try", t
- print "\t>>>", Message(
- message=message%t,
- title=title%t,
- informativeText=informativeText%t
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- t = "PutFile"
- try:
- print "About to try", t
- print "\t>>>", PutFile(
- message=message%t,
- fileName=fileName,
- )
- except NotImplementedError:
- print t, "is not implemented."
-
- # t = "SelectFont"
- # try:
- #print "About to try", t
- # print "\t>>>", SelectFont(
- # message=message%t,
- # title=title%t,
- # allFonts=fonts,
- # )
- # except NotImplementedError:
- # print t, "is not implemented."
-
- # t = 'SelectGlyph'
- # try:
- #print "About to try", t
- # print "\t>>>", SelectGlyph(
- # font=fonts[0],
- # message=message%t,
- # title=title%t,
- # )
- # except NotImplementedError:
- # print t, "is not implemented."
-
- print 'No more tests.'
-
- def makeTestFont(self, number):
- from robofab.objects.objectsRF import RFont as _RFont
- f = _RFont()
- f.info.familyName = "TestFamily"
- f.info.styleName = "weight%d"%number
- f.info.postscriptFullName = "%s %s"%(f.info.familyName, f.info.styleName)
- # make some glyphs
- for name in ['A', 'B', 'C']:
- g = f.newGlyph(name)
- pen = g.getPen()
- pen.moveTo((0,0))
- pen.lineTo((500, 0))
- pen.lineTo((500, 800))
- pen.lineTo((0, 800))
- pen.closePath()
- return f
-
-
-class DialogTests(unittest.TestCase):
- def setUp(self):
- from robofab.interface.all.dialogs import test
- test()
-
- def tearDown(self):
- pass
-
- def testDialogs(self):
- import robofab.interface.all.dialogs
- dialogModuleName = robofab.interface.all.dialogs.platformApplicationModuleName
- application = robofab.interface.all.dialogs.application
-
- if application is None and dialogModuleName == "dialogs_mac_vanilla":
- # in vanilla, but not in a host application, run with executeVanillaTest
- print
- print "I'm running these tests with executeVanillaTest"
- from vanilla.test.testTools import executeVanillaTest
- executeVanillaTest(DialogRunner)
- else:
- print
- print "I'm running these tests natively in"
- DialogRunner()
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_fontLabUFOReadWrite.py b/misc/pylib/robofab/test/test_fontLabUFOReadWrite.py
deleted file mode 100644
index 91c072d26..000000000
--- a/misc/pylib/robofab/test/test_fontLabUFOReadWrite.py
+++ /dev/null
@@ -1,565 +0,0 @@
-import os
-import shutil
-import unittest
-import tempfile
-from robofab.plistlib import readPlist
-import robofab
-from robofab.ufoLib import UFOReader, UFOWriter
-from robofab.test.testSupport import fontInfoVersion2, expectedFontInfo1To2Conversion
-from robofab.objects.objectsFL import NewFont, OpenFont
-
-vfbPath = os.path.dirname(robofab.__file__)
-vfbPath = os.path.dirname(vfbPath)
-vfbPath = os.path.dirname(vfbPath)
-vfbPath = os.path.join(vfbPath, "TestData", "TestFont1.vfb")
-
-ufoPath1 = os.path.dirname(robofab.__file__)
-ufoPath1 = os.path.dirname(ufoPath1)
-ufoPath1 = os.path.dirname(ufoPath1)
-ufoPath1 = os.path.join(ufoPath1, "TestData", "TestFont1 (UFO1).ufo")
-ufoPath2 = ufoPath1.replace("TestFont1 (UFO1).ufo", "TestFont1 (UFO2).ufo")
-
-
-expectedFormatVersion1Features = """@myClass = [A B];
-
-feature liga {
- sub A A by b;
-} liga;
-"""
-
-# robofab should remove these from the lib after a load.
-removeFromFormatVersion1Lib = [
- "org.robofab.opentype.classes",
- "org.robofab.opentype.features",
- "org.robofab.opentype.featureorder",
- "org.robofab.postScriptHintData"
-]
-
-
-class ReadUFOFormatVersion1TestCase(unittest.TestCase):
-
- def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False):
- self.font = NewFont()
- self.ufoPath = ufoPath1
- self.font.readUFO(ufoPath1, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures)
- self.font.update()
-
- def tearDownFont(self):
- self.font.close()
- self.font = None
-
- def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True):
- reader = UFOReader(self.ufoPath)
- results = {}
- if doInfo:
- infoMatches = True
- info = self.font.info
- for attr, expectedValue in expectedFontInfo1To2Conversion.items():
- writtenValue = getattr(info, attr)
- if expectedValue != writtenValue:
- infoMatches = False
- break
- results["info"]= infoMatches
- if doKerning:
- kerning = self.font.kerning.asDict()
- expectedKerning = reader.readKerning()
- results["kerning"] = expectedKerning == kerning
- if doGroups:
- groups = dict(self.font.groups)
- expectedGroups = reader.readGroups()
- results["groups"] = expectedGroups == groups
- if doFeatures:
- features = self.font.features.text
- expectedFeatures = expectedFormatVersion1Features
- # FontLab likes to add lines to the features, so skip blank lines.
- features = [line for line in features.splitlines() if line]
- expectedFeatures = [line for line in expectedFeatures.splitlines() if line]
- results["features"] = expectedFeatures == features
- if doLib:
- lib = dict(self.font.lib)
- expectedLib = reader.readLib()
- for key in removeFromFormatVersion1Lib:
- if key in expectedLib:
- del expectedLib[key]
- results["lib"] = expectedLib == lib
- return results
-
- def testFull(self):
- self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont(doInfo=True)
- otherResults = self.compareToUFO(doInfo=False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- info = self.font.info
- for attr, expectedValue in expectedFontInfo1To2Conversion.items():
- writtenValue = getattr(info, attr)
- self.assertEqual((attr, expectedValue), (attr, writtenValue))
- self.tearDownFont()
-
- def testFeatures(self):
- self.setUpFont(doFeatures=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testKerning(self):
- self.setUpFont(doKerning=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testGroups(self):
- self.setUpFont(doGroups=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testLib(self):
- self.setUpFont(doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-class ReadUFOFormatVersion2TestCase(unittest.TestCase):
-
- def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False):
- self.font = NewFont()
- self.ufoPath = ufoPath2
- self.font.readUFO(ufoPath2, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures)
- self.font.update()
-
- def tearDownFont(self):
- self.font.close()
- self.font = None
-
- def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True):
- reader = UFOReader(self.ufoPath)
- results = {}
- if doInfo:
- infoMatches = True
- info = self.font.info
- for attr, expectedValue in fontInfoVersion2.items():
- # cheat by skipping attrs that aren't supported
- if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
- continue
- writtenValue = getattr(info, attr)
- if expectedValue != writtenValue:
- infoMatches = False
- break
- results["info"]= infoMatches
- if doKerning:
- kerning = self.font.kerning.asDict()
- expectedKerning = reader.readKerning()
- results["kerning"] = expectedKerning == kerning
- if doGroups:
- groups = dict(self.font.groups)
- expectedGroups = reader.readGroups()
- results["groups"] = expectedGroups == groups
- if doFeatures:
- features = self.font.features.text
- expectedFeatures = reader.readFeatures()
- results["features"] = expectedFeatures == features
- if doLib:
- lib = dict(self.font.lib)
- expectedLib = reader.readLib()
- results["lib"] = expectedLib == lib
- return results
-
- def testFull(self):
- self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont(doInfo=True)
- otherResults = self.compareToUFO(doInfo=False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- info = self.font.info
- for attr, expectedValue in fontInfoVersion2.items():
- # cheat by skipping attrs that aren't supported
- if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
- continue
- writtenValue = getattr(info, attr)
- self.assertEqual((attr, expectedValue), (attr, writtenValue))
- self.tearDownFont()
-
- def testFeatures(self):
- self.setUpFont(doFeatures=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testKerning(self):
- self.setUpFont(doKerning=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testGroups(self):
- self.setUpFont(doGroups=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testLib(self):
- self.setUpFont(doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-class WriteUFOFormatVersion1TestCase(unittest.TestCase):
-
- def setUpFont(self, doInfo=False, doKerning=False, doGroups=False):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- self.font = OpenFont(vfbPath)
- self.font.writeUFO(self.dstDir, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, formatVersion=1)
- self.font.close()
-
- def tearDownFont(self):
- shutil.rmtree(self.dstDir)
-
- def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True):
- readerExpected = UFOReader(ufoPath1)
- readerWritten = UFOReader(self.dstDir)
- results = {}
- if doInfo:
- matches = True
- expectedPath = os.path.join(ufoPath1, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- for attr, expectedValue in expected.items():
- if expectedValue != written[attr]:
- matches = False
- break
- results["info"] = matches
- if doKerning:
- matches = True
- expectedPath = os.path.join(ufoPath1, "kerning.plist")
- writtenPath = os.path.join(self.dstDir, "kerning.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["kerning"] = matches
- if doGroups:
- matches = True
- expectedPath = os.path.join(ufoPath1, "groups.plist")
- writtenPath = os.path.join(self.dstDir, "groups.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["groups"] = matches
- if doFeatures:
- matches = True
- featuresPath = os.path.join(self.dstDir, "features.fea")
- libPath = os.path.join(self.dstDir, "lib.plist")
- if os.path.exists(featuresPath):
- matches = False
- else:
- fontLib = readPlist(libPath)
- writtenText = [fontLib.get("org.robofab.opentype.classes", "")]
- features = fontLib.get("org.robofab.opentype.features", {})
- featureOrder= fontLib.get("org.robofab.opentype.featureorder", [])
- for featureName in featureOrder:
- writtenText.append(features.get(featureName, ""))
- writtenText = "\n".join(writtenText)
- # FontLab likes to add lines to the features, so skip blank lines.
- expectedText = [line for line in expectedFormatVersion1Features.splitlines() if line]
- writtenText = [line for line in writtenText.splitlines() if line]
- matches = "\n".join(expectedText) == "\n".join(writtenText)
- results["features"] = matches
- if doLib:
- matches = True
- expectedPath = os.path.join(ufoPath1, "lib.plist")
- writtenPath = os.path.join(self.dstDir, "lib.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- # the test file doesn't have the glyph order
- # so purge it from the written
- writtenLib = readPlist(writtenPath)
- del writtenLib["org.robofab.glyphOrder"]
- matches = readPlist(expectedPath) == writtenLib
- results["lib"] = matches
- return results
-
- def testFull(self):
- self.setUpFont(doInfo=True, doKerning=True, doGroups=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont(doInfo=True)
- otherResults = self.compareToUFO(doInfo=False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- expectedPath = os.path.join(ufoPath1, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- for attr, expectedValue in expected.items():
- self.assertEqual((attr, expectedValue), (attr, written[attr]))
- self.tearDownFont()
-
- def testFeatures(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], True)
- self.tearDownFont()
-
- def testKerning(self):
- self.setUpFont(doKerning=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], False)
- self.tearDownFont()
-
- def testGroups(self):
- self.setUpFont(doGroups=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], True)
- self.tearDownFont()
-
- def testLib(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-
-class WriteUFOFormatVersion2TestCase(unittest.TestCase):
-
- def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- self.font = OpenFont(vfbPath)
- self.font.writeUFO(self.dstDir, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures)
- self.font.close()
-
- def tearDownFont(self):
- shutil.rmtree(self.dstDir)
-
- def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True):
- readerExpected = UFOReader(ufoPath2)
- readerWritten = UFOReader(self.dstDir)
- results = {}
- if doInfo:
- matches = True
- expectedPath = os.path.join(ufoPath2, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- dummyFont = NewFont()
- _ufoToFLAttrMapping = dict(dummyFont.info._ufoToFLAttrMapping)
- dummyFont.close()
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- for attr, expectedValue in expected.items():
- # cheat by skipping attrs that aren't supported
- if _ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
- continue
- if expectedValue != written[attr]:
- matches = False
- break
- results["info"] = matches
- if doKerning:
- matches = True
- expectedPath = os.path.join(ufoPath2, "kerning.plist")
- writtenPath = os.path.join(self.dstDir, "kerning.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["kerning"] = matches
- if doGroups:
- matches = True
- expectedPath = os.path.join(ufoPath2, "groups.plist")
- writtenPath = os.path.join(self.dstDir, "groups.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["groups"] = matches
- if doFeatures:
- matches = True
- expectedPath = os.path.join(ufoPath2, "features.fea")
- writtenPath = os.path.join(self.dstDir, "features.fea")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- f = open(expectedPath, "r")
- expectedText = f.read()
- f.close()
- f = open(writtenPath, "r")
- writtenText = f.read()
- f.close()
- # FontLab likes to add lines to the features, so skip blank lines.
- expectedText = [line for line in expectedText.splitlines() if line]
- writtenText = [line for line in writtenText.splitlines() if line]
- matches = "\n".join(expectedText) == "\n".join(writtenText)
- results["features"] = matches
- if doLib:
- matches = True
- expectedPath = os.path.join(ufoPath2, "lib.plist")
- writtenPath = os.path.join(self.dstDir, "lib.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- # the test file doesn't have the glyph order
- # so purge it from the written
- writtenLib = readPlist(writtenPath)
- del writtenLib["org.robofab.glyphOrder"]
- matches = readPlist(expectedPath) == writtenLib
- results["lib"] = matches
- return results
-
- def testFull(self):
- self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont(doInfo=True)
- otherResults = self.compareToUFO(doInfo=False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- expectedPath = os.path.join(ufoPath2, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- dummyFont = NewFont()
- _ufoToFLAttrMapping = dict(dummyFont.info._ufoToFLAttrMapping)
- dummyFont.close()
- for attr, expectedValue in expected.items():
- # cheat by skipping attrs that aren't supported
- if _ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
- continue
- self.assertEqual((attr, expectedValue), (attr, written[attr]))
- self.tearDownFont()
-
- def testFeatures(self):
- self.setUpFont(doFeatures=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testKerning(self):
- self.setUpFont(doKerning=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testGroups(self):
- self.setUpFont(doGroups=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], False)
- self.tearDownFont()
-
- def testLib(self):
- self.setUpFont(doLib=True)
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], False)
- self.assertEqual(otherResults["kerning"], False)
- self.assertEqual(otherResults["groups"], False)
- self.assertEqual(otherResults["features"], False)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_glifLib.py b/misc/pylib/robofab/test/test_glifLib.py
deleted file mode 100644
index 13eca3a6a..000000000
--- a/misc/pylib/robofab/test/test_glifLib.py
+++ /dev/null
@@ -1,150 +0,0 @@
-import os
-import tempfile
-import shutil
-import unittest
-
-from robofab.test.testSupport import getDemoFontGlyphSetPath
-from robofab.glifLib import GlyphSet, glyphNameToFileName, READ_MODE
-from robofab.tools.glyphNameSchemes import glyphNameToShortFileName
-
-
-GLYPHSETDIR = getDemoFontGlyphSetPath()
-
-
-class GlyphSetTests(unittest.TestCase):
-
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def testRoundTrip(self):
- srcDir = GLYPHSETDIR
- dstDir = self.dstDir
- src = GlyphSet(srcDir)
- dst = GlyphSet(dstDir)
- for glyphName in src.keys():
- g = src[glyphName]
- g.drawPoints(None) # load attrs
- dst.writeGlyph(glyphName, g, g.drawPoints)
- # compare raw file data:
- for glyphName in src.keys():
- fileName = src.contents[glyphName]
- org = file(os.path.join(srcDir, fileName), READ_MODE).read()
- new = file(os.path.join(dstDir, fileName), READ_MODE).read()
- self.assertEqual(org, new, "%r .glif file differs after round tripping" % glyphName)
-
- def testRebuildContents(self):
- gset = GlyphSet(GLYPHSETDIR)
- contents = gset.contents
- gset.rebuildContents()
- self.assertEqual(contents, gset.contents)
-
- def testReverseContents(self):
- gset = GlyphSet(GLYPHSETDIR)
- d = {}
- for k, v in gset.getReverseContents().items():
- d[v] = k
- org = {}
- for k, v in gset.contents.items():
- org[k] = v.lower()
- self.assertEqual(d, org)
-
- def testReverseContents2(self):
- src = GlyphSet(GLYPHSETDIR)
- dst = GlyphSet(self.dstDir)
- dstMap = dst.getReverseContents()
- self.assertEqual(dstMap, {})
- for glyphName in src.keys():
- g = src[glyphName]
- g.drawPoints(None) # load attrs
- dst.writeGlyph(glyphName, g, g.drawPoints)
- self.assertNotEqual(dstMap, {})
- srcMap = dict(src.getReverseContents()) # copy
- self.assertEqual(dstMap, srcMap)
- del srcMap["a.glif"]
- dst.deleteGlyph("a")
- self.assertEqual(dstMap, srcMap)
-
- def testCustomFileNamingScheme(self):
- def myGlyphNameToFileName(glyphName, glyphSet):
- return "prefix" + glyphNameToFileName(glyphName, glyphSet)
- src = GlyphSet(GLYPHSETDIR)
- dst = GlyphSet(self.dstDir, myGlyphNameToFileName)
- for glyphName in src.keys():
- g = src[glyphName]
- g.drawPoints(None) # load attrs
- dst.writeGlyph(glyphName, g, g.drawPoints)
- d = {}
- for k, v in src.contents.items():
- print k, v
- d[k] = "prefix" + v
- self.assertEqual(d, dst.contents)
-
- def testGetUnicodes(self):
- src = GlyphSet(GLYPHSETDIR)
- unicodes = src.getUnicodes()
- for glyphName in src.keys():
- g = src[glyphName]
- g.drawPoints(None) # load attrs
- if not hasattr(g, "unicodes"):
- self.assertEqual(unicodes[glyphName], [])
- else:
- self.assertEqual(g.unicodes, unicodes[glyphName])
-
-
-class FileNameTests(unittest.TestCase):
-
- def testDefaultFileNameScheme(self):
- self.assertEqual(glyphNameToFileName("a", None), "a.glif")
- self.assertEqual(glyphNameToFileName("A", None), "A_.glif")
- self.assertEqual(glyphNameToFileName("Aring", None), "Aring_.glif")
- self.assertEqual(glyphNameToFileName("F_A_B", None), "F__A__B_.glif")
- self.assertEqual(glyphNameToFileName("A.alt", None), "A_.alt.glif")
- self.assertEqual(glyphNameToFileName("A.Alt", None), "A_.Alt_.glif")
- self.assertEqual(glyphNameToFileName(".notdef", None), "_notdef.glif")
- self.assertEqual(glyphNameToFileName("T_H", None), "T__H_.glif")
- self.assertEqual(glyphNameToFileName("T_h", None), "T__h.glif")
- self.assertEqual(glyphNameToFileName("t_h", None), "t_h.glif")
- self.assertEqual(glyphNameToFileName('F_F_I', None), "F__F__I_.glif")
- self.assertEqual(glyphNameToFileName('f_f_i', None), "f_f_i.glif")
-
-
- def testShortFileNameScheme(self):
- print "testShortFileNameScheme"
- self.assertEqual(glyphNameToShortFileName("a", None), "a.glif")
- self.assertEqual(glyphNameToShortFileName("A", None), "A_.glif")
- self.assertEqual(glyphNameToShortFileName("aE", None), "aE_.glif")
- self.assertEqual(glyphNameToShortFileName("AE", None), "A_E_.glif")
- self.assertEqual(glyphNameToShortFileName("a.alt", None), "a_alt.glif")
- self.assertEqual(glyphNameToShortFileName("A.alt", None), "A__alt.glif")
- self.assertEqual(glyphNameToShortFileName("a.alt#swash", None), "a_alt_swash.glif")
- self.assertEqual(glyphNameToShortFileName("A.alt", None), "A__alt.glif")
- self.assertEqual(glyphNameToShortFileName(".notdef", None), "_notdef.glif")
- self.assertEqual(glyphNameToShortFileName("f_f_i", None), "f_f_i.glif")
- self.assertEqual(glyphNameToShortFileName("F_F_I", None), "F__F__I_.glif")
- self.assertEqual(glyphNameToShortFileName("acircumflexdieresis.swash.alt1", None), "acircumflexdieresi0cfc8352.glif")
- self.assertEqual(glyphNameToShortFileName("acircumflexdieresis.swash.alt2", None), "acircumflexdieresi95f5d2e8.glif")
- self.assertEqual(glyphNameToShortFileName("Acircumflexdieresis.swash.alt1", None), "A_circumflexdieresed24fb56.glif")
- self.assertEqual(glyphNameToShortFileName("F#weight0.800_width0.425", None), "F__weight0_800_width0_425.glif")
- self.assertEqual(glyphNameToShortFileName("F#weight0.83245511_width0.425693567", None), "F__weight0_8324551c9a4143c.glif")
- self.assertEqual(len(glyphNameToShortFileName("F#weight0.83245511_width0.425693567", None)), 31)
-
- def testShortFileNameScheme_clashes(self):
- # test for the condition in code.robofab.com ticket #5
- name1 = glyphNameToShortFileName('Adieresis', None)
- name2 = glyphNameToShortFileName('a_dieresis', None)
- self.assertNotEqual(name1, name2)
- name1 = glyphNameToShortFileName('AE', None)
- name2 = glyphNameToShortFileName('aE', None)
- self.assertNotEqual(name1, name2)
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- import sys
- if len(sys.argv) > 1 and os.path.isdir(sys.argv[-1]):
- GLYPHSETDIR = sys.argv.pop()
- runTests()
diff --git a/misc/pylib/robofab/test/test_noneLabUFOReadWrite.py b/misc/pylib/robofab/test/test_noneLabUFOReadWrite.py
deleted file mode 100644
index 36dcc0582..000000000
--- a/misc/pylib/robofab/test/test_noneLabUFOReadWrite.py
+++ /dev/null
@@ -1,321 +0,0 @@
-import os
-import shutil
-import unittest
-import tempfile
-from robofab.plistlib import readPlist
-import robofab
-from robofab.test.testSupport import fontInfoVersion2, expectedFontInfo1To2Conversion, expectedFontInfo2To1Conversion
-from robofab.objects.objectsRF import NewFont, OpenFont
-from robofab.ufoLib import UFOReader
-
-ufoPath1 = os.path.dirname(robofab.__file__)
-ufoPath1 = os.path.dirname(ufoPath1)
-ufoPath1 = os.path.dirname(ufoPath1)
-ufoPath1 = os.path.join(ufoPath1, "TestData", "TestFont1 (UFO1).ufo")
-ufoPath2 = ufoPath1.replace("TestFont1 (UFO1).ufo", "TestFont1 (UFO2).ufo")
-
-# robofab should remove these from the lib after a load.
-removeFromFormatVersion1Lib = [
- "org.robofab.opentype.classes",
- "org.robofab.opentype.features",
- "org.robofab.opentype.featureorder",
- "org.robofab.postScriptHintData"
-]
-
-
-class ReadUFOFormatVersion1TestCase(unittest.TestCase):
-
- def setUpFont(self):
- self.font = OpenFont(ufoPath1)
- self.font.update()
-
- def tearDownFont(self):
- self.font.close()
- self.font = None
-
- def compareToUFO(self, doInfo=True):
- reader = UFOReader(ufoPath1)
- results = {}
- # info
- infoMatches = True
- info = self.font.info
- for attr, expectedValue in expectedFontInfo1To2Conversion.items():
- writtenValue = getattr(info, attr)
- if expectedValue != writtenValue:
- infoMatches = False
- break
- results["info"]= infoMatches
- # kerning
- kerning = self.font.kerning.asDict()
- expectedKerning = reader.readKerning()
- results["kerning"] = expectedKerning == kerning
- # groups
- groups = dict(self.font.groups)
- expectedGroups = reader.readGroups()
- results["groups"] = expectedGroups == groups
- # features
- features = self.font.features.text
- f = open(os.path.join(ufoPath2, "features.fea"), "r")
- expectedFeatures = f.read()
- f.close()
- match = True
- features = [line for line in features.splitlines() if line]
- expectedFeatures = [line for line in expectedFeatures.splitlines() if line]
- if expectedFeatures != features or reader.readFeatures() != "":
- match = False
- results["features"] = match
- # lib
- lib = dict(self.font.lib)
- expectedLib = reader.readLib()
- for key in removeFromFormatVersion1Lib:
- if key in expectedLib:
- del expectedLib[key]
- results["lib"] = expectedLib == lib
- return results
-
- def testFull(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont()
- info = self.font.info
- for attr, expectedValue in expectedFontInfo1To2Conversion.items():
- writtenValue = getattr(info, attr)
- self.assertEqual((attr, expectedValue), (attr, writtenValue))
- self.tearDownFont()
-
-
-class ReadUFOFormatVersion2TestCase(unittest.TestCase):
-
- def setUpFont(self):
- self.font = OpenFont(ufoPath2)
- self.font.update()
-
- def tearDownFont(self):
- self.font.close()
- self.font = None
-
- def compareToUFO(self, doInfo=True):
- reader = UFOReader(ufoPath2)
- results = {}
- # info
- infoMatches = True
- info = self.font.info
- for attr, expectedValue in fontInfoVersion2.items():
- writtenValue = getattr(info, attr)
- if expectedValue != writtenValue:
- infoMatches = False
- break
- results["info"]= infoMatches
- # kerning
- kerning = self.font.kerning.asDict()
- expectedKerning = reader.readKerning()
- results["kerning"] = expectedKerning == kerning
- # groups
- groups = dict(self.font.groups)
- expectedGroups = reader.readGroups()
- results["groups"] = expectedGroups == groups
- # features
- features = self.font.features.text
- expectedFeatures = reader.readFeatures()
- results["features"] = expectedFeatures == features
- # lib
- lib = dict(self.font.lib)
- expectedLib = reader.readLib()
- results["lib"] = expectedLib == lib
- return results
-
- def testFull(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
- def testInfo(self):
- self.setUpFont()
- info = self.font.info
- for attr, expectedValue in fontInfoVersion2.items():
- writtenValue = getattr(info, attr)
- self.assertEqual((attr, expectedValue), (attr, writtenValue))
- self.tearDownFont()
-
-
-class WriteUFOFormatVersion1TestCase(unittest.TestCase):
-
- def setUpFont(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- self.font = OpenFont(ufoPath2)
- self.font.save(self.dstDir, formatVersion=1)
-
- def tearDownFont(self):
- shutil.rmtree(self.dstDir)
-
- def compareToUFO(self):
- readerExpected = UFOReader(ufoPath1)
- readerWritten = UFOReader(self.dstDir)
- results = {}
- # info
- matches = True
- expectedPath = os.path.join(ufoPath1, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- for attr, expectedValue in expected.items():
- if expectedValue != written.get(attr):
- matches = False
- break
- results["info"] = matches
- # kerning
- matches = True
- expectedPath = os.path.join(ufoPath1, "kerning.plist")
- writtenPath = os.path.join(self.dstDir, "kerning.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["kerning"] = matches
- # groups
- matches = True
- expectedPath = os.path.join(ufoPath1, "groups.plist")
- writtenPath = os.path.join(self.dstDir, "groups.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["groups"] = matches
- # features
- matches = True
- expectedPath = os.path.join(ufoPath1, "features.fea")
- writtenPath = os.path.join(self.dstDir, "features.fea")
- if os.path.exists(writtenPath):
- matches = False
- results["features"] = matches
- # lib
- matches = True
- expectedPath = os.path.join(ufoPath1, "lib.plist")
- writtenPath = os.path.join(self.dstDir, "lib.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- writtenLib = readPlist(writtenPath)
- matches = readPlist(expectedPath) == writtenLib
- results["lib"] = matches
- return results
-
- def testFull(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-class WriteUFOFormatVersion2TestCase(unittest.TestCase):
-
- def setUpFont(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- self.font = OpenFont(ufoPath2)
- self.font.save(self.dstDir)
-
- def tearDownFont(self):
- shutil.rmtree(self.dstDir)
-
- def compareToUFO(self):
- readerExpected = UFOReader(ufoPath2)
- readerWritten = UFOReader(self.dstDir)
- results = {}
- # info
- matches = True
- expectedPath = os.path.join(ufoPath2, "fontinfo.plist")
- writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- expected = readPlist(expectedPath)
- written = readPlist(writtenPath)
- for attr, expectedValue in expected.items():
- if expectedValue != written[attr]:
- matches = False
- break
- results["info"] = matches
- # kerning
- matches = True
- expectedPath = os.path.join(ufoPath2, "kerning.plist")
- writtenPath = os.path.join(self.dstDir, "kerning.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["kerning"] = matches
- # groups
- matches = True
- expectedPath = os.path.join(ufoPath2, "groups.plist")
- writtenPath = os.path.join(self.dstDir, "groups.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- matches = readPlist(expectedPath) == readPlist(writtenPath)
- results["groups"] = matches
- # features
- matches = True
- expectedPath = os.path.join(ufoPath2, "features.fea")
- writtenPath = os.path.join(self.dstDir, "features.fea")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- f = open(expectedPath, "r")
- expectedText = f.read()
- f.close()
- f = open(writtenPath, "r")
- writtenText = f.read()
- f.close()
- # FontLab likes to add lines to the features, so skip blank lines.
- expectedText = [line for line in expectedText.splitlines() if line]
- writtenText = [line for line in writtenText.splitlines() if line]
- matches = "\n".join(expectedText) == "\n".join(writtenText)
- results["features"] = matches
- # lib
- matches = True
- expectedPath = os.path.join(ufoPath2, "lib.plist")
- writtenPath = os.path.join(self.dstDir, "lib.plist")
- if not os.path.exists(writtenPath):
- matches = False
- else:
- writtenLib = readPlist(writtenPath)
- matches = readPlist(expectedPath) == writtenLib
- results["lib"] = matches
- return results
-
- def testFull(self):
- self.setUpFont()
- otherResults = self.compareToUFO()
- self.assertEqual(otherResults["info"], True)
- self.assertEqual(otherResults["kerning"], True)
- self.assertEqual(otherResults["groups"], True)
- self.assertEqual(otherResults["features"], True)
- self.assertEqual(otherResults["lib"], True)
- self.tearDownFont()
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_objectsFL.py b/misc/pylib/robofab/test/test_objectsFL.py
deleted file mode 100755
index 948897097..000000000
--- a/misc/pylib/robofab/test/test_objectsFL.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""This test suite for various FontLab-specific tests."""
-
-
-import FL # needed to quickly raise ImportError if run outside of FL
-
-
-import os
-import tempfile
-import unittest
-
-from robofab.world import NewFont
-from robofab.test.testSupport import getDemoFontPath, getDemoFontGlyphSetPath
-from robofab.tools.glifImport import importAllGlifFiles
-from robofab.pens.digestPen import DigestPointPen
-from robofab.pens.adapterPens import SegmentToPointPen
-
-
-def getDigests(font):
- digests = {}
- for glyphName in font.keys():
- pen = DigestPointPen()
- font[glyphName].drawPoints(pen)
- digests[glyphName] = pen.getDigest()
- return digests
-
-
-class FLTestCase(unittest.TestCase):
-
- def testUFOVersusGlifImport(self):
- font = NewFont()
- font.readUFO(getDemoFontPath(), doProgress=False)
- d1 = getDigests(font)
- font.close(False)
- font = NewFont()
- importAllGlifFiles(font.naked(), getDemoFontGlyphSetPath(), doProgress=False)
- d2 = getDigests(font)
- self.assertEqual(d1, d2)
- font.close(False)
-
- def testTwoUntitledFonts(self):
- font1 = NewFont()
- font2 = NewFont()
- font1.unitsPerEm = 1024
- font2.unitsPerEm = 2048
- self.assertNotEqual(font1.unitsPerEm, font2.unitsPerEm)
- font1.update()
- font2.update()
- font1.close(False)
- font2.close(False)
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_objectsUFO.py b/misc/pylib/robofab/test/test_objectsUFO.py
deleted file mode 100755
index c974a121c..000000000
--- a/misc/pylib/robofab/test/test_objectsUFO.py
+++ /dev/null
@@ -1,203 +0,0 @@
-"""This test suite for ufo glyph methods"""
-
-
-import unittest
-import os
-import tempfile
-import shutil
-
-from robofab.objects.objectsRF import RFont
-from robofab.test.testSupport import getDemoFontPath
-from robofab.pens.digestPen import DigestPointPen
-from robofab.pens.adapterPens import SegmentToPointPen, FabToFontToolsPenAdapter
-
-
-class ContourMethodsTestCase(unittest.TestCase):
-
- def setUp(self):
- self.font = RFont(getDemoFontPath())
-
- def testReverseContour(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- for contour in glyph:
- contour.reverseContour()
- contour.reverseContour()
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after reversing twice" % glyph.name)
-
- def testStartSegment(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- for contour in glyph:
- contour.setStartSegment(2)
- contour.setStartSegment(-2)
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after seting start segment twice" % glyph.name)
-
- def testAppendSegment(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- for contour in glyph:
- contour.insertSegment(2, "curve", [(100, 100), (200, 200), (300, 300)])
- contour.removeSegment(2)
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after inserting and removing segment" % glyph.name)
-
-
-class GlyphsMethodsTestCase(ContourMethodsTestCase):
-
- def testCopyGlyph(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- copy = glyph.copy()
- pen = DigestPointPen()
- copy.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after copying" % glyph.name)
- self.assertEqual(glyph.lib, copy.lib, "%r's lib not the same after copying" % glyph.name)
- self.assertEqual(glyph.width, copy.width, "%r's width not the same after copying" % glyph.name)
- self.assertEqual(glyph.unicodes, copy.unicodes, "%r's unicodes not the same after copying" % glyph.name)
-
- def testMoveGlyph(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- glyph.move((100, 200))
- glyph.move((-100, -200))
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after moving twice" % glyph.name)
-
- def testScaleGlyph(self):
- for glyph in self.font:
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest1 = pen.getDigest()
- glyph.scale((2, 2))
- glyph.scale((.5, .5))
- pen = DigestPointPen()
- glyph.drawPoints(pen)
- digest2 = pen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same after scaling twice" % glyph.name)
-
- def testSegmentPenInterface(self):
- for glyph in self.font:
- digestPen = DigestPointPen(ignoreSmoothAndName=True)
- pen = SegmentToPointPen(digestPen)
- glyph.draw(pen)
- digest1 = digestPen.getDigest()
- digestPen = DigestPointPen(ignoreSmoothAndName=True)
- glyph.drawPoints(digestPen)
- digest2 = digestPen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same for gl.draw() and gl.drawPoints()" % glyph.name)
-
- def testFabPenCompatibility(self):
- for glyph in self.font:
- digestPen = DigestPointPen(ignoreSmoothAndName=True)
- pen = FabToFontToolsPenAdapter(SegmentToPointPen(digestPen))
- glyph.draw(pen)
- digest1 = digestPen.getDigest()
- digestPen = DigestPointPen(ignoreSmoothAndName=True)
- glyph.drawPoints(digestPen)
- digest2 = digestPen.getDigest()
- self.assertEqual(digest1, digest2, "%r not the same for gl.draw() and gl.drawPoints()" % glyph.name)
-
- def testComponentTransformations(self):
- from robofab.objects.objectsRF import RComponent
- name = "baseGlyphName"
- c = RComponent(name, transform=(1,0,0,1,0,0))
- # get values
- assert c.baseGlyph == "baseGlyphName"
- assert c.transformation == c.transformation
- assert c.scale == (1,1)
- assert c.offset == (0,0)
- # set values
- c.offset = (12,34)
- assert c.transformation == (1, 0, 0, 1, 12, 34)
- c.offset = (0,0)
- assert c.transformation == (1,0,0,1,0,0)
- c.scale = (12,34)
- assert c.transformation == (12, 0, 0, 34, 0, 0)
-
-
-class SaveTestCase(ContourMethodsTestCase):
-
- def testSaveAs(self):
- path = tempfile.mktemp(".ufo")
- try:
- keys1 = self.font.keys()
- self.font.save(path)
- keys2 = self.font.keys()
- keys1.sort()
- keys2.sort()
- self.assertEqual(keys1, keys2)
- self.assertEqual(self.font.path, path)
- font2 = RFont(path)
- keys3 = font2.keys()
- keys3.sort()
- self.assertEqual(keys1, keys3)
- finally:
- if os.path.exists(path):
- shutil.rmtree(path)
-
- def testSaveAs2(self):
- path = tempfile.mktemp(".ufo")
- # copy a glyph
- self.font["X"] = self.font["a"].copy()
-# self.assertEqual(self.font["X"].name, "X")
- # remove a glyph
- self.font.removeGlyph("a")
- keys1 = self.font.keys()
- try:
- self.font.save(path)
- self.assertEqual(self.font.path, path)
- keys2 = self.font.keys()
- keys1.sort()
- keys2.sort()
- self.assertEqual(keys1, keys2)
- font2 = RFont(path)
- keys3 = font2.keys()
- keys3.sort()
- self.assertEqual(keys1, keys3)
- finally:
- if os.path.exists(path):
- shutil.rmtree(path)
-
- def testCustomFileNameScheme(self):
- path = tempfile.mktemp(".ufo")
- libKey = "org.robofab.glyphNameToFileNameFuncName"
- self.font.lib[libKey] = "robofab.test.test_objectsUFO.testGlyphNameToFileName"
- try:
- self.font.save(path)
- self.assertEqual(os.path.exists(os.path.join(path,
- "glyphs", "test_a.glif")), True)
- finally:
- if os.path.exists(path):
- shutil.rmtree(path)
-
-
-def testGlyphNameToFileName(glyphName, glyphSet):
- from robofab.glifLib import glyphNameToFileName
- return "test_" + glyphNameToFileName(glyphName, glyphSet)
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_pens.py b/misc/pylib/robofab/test/test_pens.py
deleted file mode 100755
index a2a773cb2..000000000
--- a/misc/pylib/robofab/test/test_pens.py
+++ /dev/null
@@ -1,149 +0,0 @@
-"""This test suite test general Pen stuff, it should not contain
-FontLab-specific code.
-"""
-
-import unittest
-
-from robofab.pens.digestPen import DigestPointPen
-from robofab.pens.adapterPens import SegmentToPointPen, PointToSegmentPen
-from robofab.pens.adapterPens import GuessSmoothPointPen
-from robofab.pens.reverseContourPointPen import ReverseContourPointPen
-from robofab.test.testSupport import getDemoFontGlyphSetPath
-from robofab.glifLib import GlyphSet
-
-
-class TestShapes:
-
- # Collection of test shapes. It's probably better to add these as
- # glyphs to the demo font.
-
- def square(pen):
- # a simple square as a closed path (100, 100, 600, 600)
- pen.beginPath()
- pen.addPoint((100, 100), "line")
- pen.addPoint((100, 600), "line")
- pen.addPoint((600, 600), "line")
- pen.addPoint((600, 100), "line")
- pen.endPath()
- square = staticmethod(square)
-
- def onCurveLessQuadShape(pen):
- pen.beginPath()
- pen.addPoint((100, 100))
- pen.addPoint((100, 600))
- pen.addPoint((600, 600))
- pen.addPoint((600, 100))
- pen.endPath()
- onCurveLessQuadShape = staticmethod(onCurveLessQuadShape)
-
- def openPath(pen):
- # a simple square as a closed path (100, 100, 600, 600)
- pen.beginPath()
- pen.addPoint((100, 100), "move")
- pen.addPoint((100, 600), "line")
- pen.addPoint((600, 600), "line")
- pen.addPoint((600, 100), "line")
- pen.endPath()
- openPath = staticmethod(openPath)
-
- def circle(pen):
- pen.beginPath()
- pen.addPoint((0, 500), "curve")
- pen.addPoint((0, 800))
- pen.addPoint((200, 1000))
- pen.addPoint((500, 1000), "curve")
- pen.addPoint((800, 1000))
- pen.addPoint((1000, 800))
- pen.addPoint((1000, 500), "curve")
- pen.addPoint((1000, 200))
- pen.addPoint((800, 0))
- pen.addPoint((500, 0), "curve")
- pen.addPoint((200, 0))
- pen.addPoint((0, 200))
- pen.endPath()
- circle = staticmethod(circle)
-
-
-class RoundTripTestCase(unittest.TestCase):
-
- def _doTest(self, shapeFunc, shapeName):
- pen = DigestPointPen(ignoreSmoothAndName=True)
- shapeFunc(pen)
- digest1 = pen.getDigest()
-
- digestPen = DigestPointPen(ignoreSmoothAndName=True)
- pen = PointToSegmentPen(SegmentToPointPen(digestPen))
- shapeFunc(pen)
- digest2 = digestPen.getDigest()
- self.assertEqual(digest1, digest2, "%r failed round tripping" % shapeName)
-
- def testShapes(self):
- for name in dir(TestShapes):
- if name[0] != "_":
- self._doTest(getattr(TestShapes, name), name)
-
- def testShapesFromGlyphSet(self):
- glyphSet = GlyphSet(getDemoFontGlyphSetPath())
- for name in glyphSet.keys():
- self._doTest(glyphSet[name].drawPoints, name)
-
- def testGuessSmoothPen(self):
- glyphSet = GlyphSet(getDemoFontGlyphSetPath())
- for name in glyphSet.keys():
- digestPen = DigestPointPen()
- glyphSet[name].drawPoints(digestPen)
- digest1 = digestPen.getDigest()
- digestPen = DigestPointPen()
- pen = GuessSmoothPointPen(digestPen)
- glyphSet[name].drawPoints(pen)
- digest2 = digestPen.getDigest()
- self.assertEqual(digest1, digest2)
-
-
-class ReverseContourTestCase(unittest.TestCase):
-
- def testReverseContourClosedPath(self):
- digestPen = DigestPointPen()
- TestShapes.square(digestPen)
- d1 = digestPen.getDigest()
- digestPen = DigestPointPen()
- pen = ReverseContourPointPen(digestPen)
- pen.beginPath()
- pen.addPoint((100, 100), "line")
- pen.addPoint((600, 100), "line")
- pen.addPoint((600, 600), "line")
- pen.addPoint((100, 600), "line")
- pen.endPath()
- d2 = digestPen.getDigest()
- self.assertEqual(d1, d2)
-
- def testReverseContourOpenPath(self):
- digestPen = DigestPointPen()
- TestShapes.openPath(digestPen)
- d1 = digestPen.getDigest()
- digestPen = DigestPointPen()
- pen = ReverseContourPointPen(digestPen)
- pen.beginPath()
- pen.addPoint((600, 100), "move")
- pen.addPoint((600, 600), "line")
- pen.addPoint((100, 600), "line")
- pen.addPoint((100, 100), "line")
- pen.endPath()
- d2 = digestPen.getDigest()
- self.assertEqual(d1, d2)
-
- def testReversContourFromGlyphSet(self):
- glyphSet = GlyphSet(getDemoFontGlyphSetPath())
- digestPen = DigestPointPen()
- glyphSet["testglyph1"].drawPoints(digestPen)
- digest1 = digestPen.getDigest()
- digestPen = DigestPointPen()
- pen = ReverseContourPointPen(digestPen)
- glyphSet["testglyph1.reversed"].drawPoints(pen)
- digest2 = digestPen.getDigest()
- self.assertEqual(digest1, digest2)
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()
diff --git a/misc/pylib/robofab/test/test_psHints.py b/misc/pylib/robofab/test/test_psHints.py
deleted file mode 100644
index 991e9d9cc..000000000
--- a/misc/pylib/robofab/test/test_psHints.py
+++ /dev/null
@@ -1,110 +0,0 @@
-def test():
- """
- # some tests for the ps Hints operations
- >>> from robofab.world import RFont, RGlyph
- >>> g = RGlyph()
- >>> g.psHints.isEmpty()
- True
-
- >>> h = RGlyph()
- >>> i = g + h
- >>> i.psHints.isEmpty()
- True
-
- >>> i = g - h
- >>> i.psHints.isEmpty()
- True
-
- >>> i = g * 2
- >>> i.psHints.isEmpty()
- True
-
- >>> i = g / 2
- >>> i.psHints.isEmpty()
- True
-
- >>> g.psHints.vHints = [(100, 50), (200, 50)]
- >>> g.psHints.hHints = [(100, 50), (200, 5)]
-
- >>> not g.psHints.isEmpty()
- True
-
- >>> gc = g.copy()
- >>> gc.psHints.asDict() == g.psHints.asDict()
- True
-
- # multiplication
- >>> v = g.psHints * 2
- >>> v.asDict() == {'vHints': [[200, 100], [400, 100]], 'hHints': [[200, 100], [400, 10]]}
- True
-
- # division
- >>> v = g.psHints / 2
- >>> v.asDict() == {'vHints': [[50.0, 25.0], [100.0, 25.0]], 'hHints': [[50.0, 25.0], [100.0, 2.5]]}
- True
-
- # multiplication with x, y, factor
- # vertically oriented values should respond different
- >>> v = g.psHints * (.5, 10)
- >>> v.asDict() == {'vHints': [[1000, 500], [2000, 500]], 'hHints': [[50.0, 25.0], [100.0, 2.5]]}
- True
-
- # division with x, y, factor
- # vertically oriented values should respond different
- >>> v = g.psHints / (.5, 10)
- >>> v.asDict() == {'vHints': [[10.0, 5.0], [20.0, 5.0]], 'hHints': [[200.0, 100.0], [400.0, 10.0]]}
- True
-
- # rounding to integer
- >>> v = g.psHints / 2
- >>> v.round()
- >>> v.asDict() == {'vHints': [(50, 25), (100, 25)], 'hHints': [(50, 25), (100, 3)]}
- True
-
- # "ps hint values calculating with a glyph"
- # ps hint values as part of glyphmath operations.
- # multiplication
- >>> h = g * 10
- >>> h.psHints.asDict() == {'vHints': [[1000, 500], [2000, 500]], 'hHints': [[1000, 500], [2000, 50]]}
- True
-
- # division
- >>> h = g / 2
- >>> h.psHints.asDict() == {'vHints': [[50.0, 25.0], [100.0, 25.0]], 'hHints': [[50.0, 25.0], [100.0, 2.5]]}
- True
-
- # x, y factor multiplication
- >>> h = g * (.5, 10)
- >>> h.psHints.asDict() == {'vHints': [[1000, 500], [2000, 500]], 'hHints': [[50.0, 25.0], [100.0, 2.5]]}
- True
-
- # x, y factor division
- >>> h = g / (.5, 10)
- >>> h.psHints.asDict() == {'vHints': [[10.0, 5.0], [20.0, 5.0]], 'hHints': [[200.0, 100.0], [400.0, 10.0]]}
- True
-
- # "font ps hint values"
- >>> f = RFont()
- >>> f.psHints.isEmpty()
- True
-
- >>> f.psHints.blueScale = .5
- >>> f.psHints.blueShift = 1
- >>> f.psHints.blueFuzz = 1
- >>> f.psHints.forceBold = True
- >>> f.psHints.hStems = (100, 90)
- >>> f.psHints.vStems = (500, 10)
-
- >>> not f.psHints.isEmpty()
- True
-
- >>> f.insertGlyph(g, name="new")
- <RGlyph for None.new>
- >>> f["new"].psHints.asDict() == g.psHints.asDict()
- True
- """
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
-
diff --git a/misc/pylib/robofab/test/test_ufoLib.py b/misc/pylib/robofab/test/test_ufoLib.py
deleted file mode 100644
index e1da807bb..000000000
--- a/misc/pylib/robofab/test/test_ufoLib.py
+++ /dev/null
@@ -1,1659 +0,0 @@
-import os
-import shutil
-import unittest
-import tempfile
-from plistlib import writePlist, readPlist
-from robofab.ufoLib import UFOReader, UFOWriter, UFOLibError, \
- convertUFOFormatVersion1ToFormatVersion2, convertUFOFormatVersion2ToFormatVersion1
-from robofab.test.testSupport import fontInfoVersion1, fontInfoVersion2, expectedFontInfo1To2Conversion, expectedFontInfo2To1Conversion
-
-
-# the format version 1 lib.plist contains some data
-# that these tests shouldn't be concerned about.
-removeFromFormatVersion1Lib = [
- "org.robofab.opentype.classes",
- "org.robofab.opentype.features",
- "org.robofab.opentype.featureorder",
- "org.robofab.postScriptHintData"
-]
-
-
-class TestInfoObject(object): pass
-
-
-class ReadFontInfoVersion1TestCase(unittest.TestCase):
-
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- metaInfo = {
- "creator": "test",
- "formatVersion": 1
- }
- path = os.path.join(self.dstDir, "metainfo.plist")
- writePlist(metaInfo, path)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def _writeInfoToPlist(self, info):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- writePlist(info, path)
-
- def testRead(self):
- originalData = dict(fontInfoVersion1)
- self._writeInfoToPlist(originalData)
- infoObject = TestInfoObject()
- reader = UFOReader(self.dstDir)
- reader.readInfo(infoObject)
- for attr in dir(infoObject):
- if attr not in fontInfoVersion2:
- continue
- originalValue = fontInfoVersion2[attr]
- readValue = getattr(infoObject, attr)
- self.assertEqual(originalValue, readValue)
-
- def testFontStyleConversion(self):
- fontStyle1To2 = {
- 64 : "regular",
- 1 : "italic",
- 32 : "bold",
- 33 : "bold italic"
- }
- for old, new in fontStyle1To2.items():
- info = dict(fontInfoVersion1)
- info["fontStyle"] = old
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- infoObject = TestInfoObject()
- reader.readInfo(infoObject)
- self.assertEqual(new, infoObject.styleMapStyleName)
-
- def testWidthNameConversion(self):
- widthName1To2 = {
- "Ultra-condensed" : 1,
- "Extra-condensed" : 2,
- "Condensed" : 3,
- "Semi-condensed" : 4,
- "Medium (normal)" : 5,
- "Semi-expanded" : 6,
- "Expanded" : 7,
- "Extra-expanded" : 8,
- "Ultra-expanded" : 9
- }
- for old, new in widthName1To2.items():
- info = dict(fontInfoVersion1)
- info["widthName"] = old
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- infoObject = TestInfoObject()
- reader.readInfo(infoObject)
- self.assertEqual(new, infoObject.openTypeOS2WidthClass)
-
-
-class ReadFontInfoVersion2TestCase(unittest.TestCase):
-
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
- metaInfo = {
- "creator": "test",
- "formatVersion": 2
- }
- path = os.path.join(self.dstDir, "metainfo.plist")
- writePlist(metaInfo, path)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def _writeInfoToPlist(self, info):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- writePlist(info, path)
-
- def testRead(self):
- originalData = dict(fontInfoVersion2)
- self._writeInfoToPlist(originalData)
- infoObject = TestInfoObject()
- reader = UFOReader(self.dstDir)
- reader.readInfo(infoObject)
- readData = {}
- for attr in fontInfoVersion2.keys():
- readData[attr] = getattr(infoObject, attr)
- self.assertEqual(originalData, readData)
-
- def testGenericRead(self):
- # familyName
- info = dict(fontInfoVersion2)
- info["familyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleName
- info = dict(fontInfoVersion2)
- info["styleName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleMapFamilyName
- info = dict(fontInfoVersion2)
- info["styleMapFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # styleMapStyleName
- ## not a string
- info = dict(fontInfoVersion2)
- info["styleMapStyleName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion2)
- info["styleMapStyleName"] = "REGULAR"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # versionMajor
- info = dict(fontInfoVersion2)
- info["versionMajor"] = "1"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # versionMinor
- info = dict(fontInfoVersion2)
- info["versionMinor"] = "0"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # copyright
- info = dict(fontInfoVersion2)
- info["copyright"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # trademark
- info = dict(fontInfoVersion2)
- info["trademark"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # unitsPerEm
- info = dict(fontInfoVersion2)
- info["unitsPerEm"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # descender
- info = dict(fontInfoVersion2)
- info["descender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # xHeight
- info = dict(fontInfoVersion2)
- info["xHeight"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # capHeight
- info = dict(fontInfoVersion2)
- info["capHeight"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # ascender
- info = dict(fontInfoVersion2)
- info["ascender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # italicAngle
- info = dict(fontInfoVersion2)
- info["italicAngle"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testHeadRead(self):
- # openTypeHeadCreated
- ## not a string
- info = dict(fontInfoVersion2)
- info["openTypeHeadCreated"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## invalid format
- info = dict(fontInfoVersion2)
- info["openTypeHeadCreated"] = "2000-Jan-01 00:00:00"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHeadLowestRecPPEM
- info = dict(fontInfoVersion2)
- info["openTypeHeadLowestRecPPEM"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHeadFlags
- info = dict(fontInfoVersion2)
- info["openTypeHeadFlags"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testHheaRead(self):
- # openTypeHheaAscender
- info = dict(fontInfoVersion2)
- info["openTypeHheaAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaDescender
- info = dict(fontInfoVersion2)
- info["openTypeHheaDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaLineGap
- info = dict(fontInfoVersion2)
- info["openTypeHheaLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretSlopeRise
- info = dict(fontInfoVersion2)
- info["openTypeHheaCaretSlopeRise"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretSlopeRun
- info = dict(fontInfoVersion2)
- info["openTypeHheaCaretSlopeRun"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeHheaCaretOffset
- info = dict(fontInfoVersion2)
- info["openTypeHheaCaretOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testNameRead(self):
- # openTypeNameDesigner
- info = dict(fontInfoVersion2)
- info["openTypeNameDesigner"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameDesignerURL
- info = dict(fontInfoVersion2)
- info["openTypeNameDesignerURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameManufacturer
- info = dict(fontInfoVersion2)
- info["openTypeNameManufacturer"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameManufacturerURL
- info = dict(fontInfoVersion2)
- info["openTypeNameManufacturerURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameLicense
- info = dict(fontInfoVersion2)
- info["openTypeNameLicense"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameLicenseURL
- info = dict(fontInfoVersion2)
- info["openTypeNameLicenseURL"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameVersion
- info = dict(fontInfoVersion2)
- info["openTypeNameVersion"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameUniqueID
- info = dict(fontInfoVersion2)
- info["openTypeNameUniqueID"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameDescription
- info = dict(fontInfoVersion2)
- info["openTypeNameDescription"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNamePreferredFamilyName
- info = dict(fontInfoVersion2)
- info["openTypeNamePreferredFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNamePreferredSubfamilyName
- info = dict(fontInfoVersion2)
- info["openTypeNamePreferredSubfamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameCompatibleFullName
- info = dict(fontInfoVersion2)
- info["openTypeNameCompatibleFullName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameSampleText
- info = dict(fontInfoVersion2)
- info["openTypeNameSampleText"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameWWSFamilyName
- info = dict(fontInfoVersion2)
- info["openTypeNameWWSFamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeNameWWSSubfamilyName
- info = dict(fontInfoVersion2)
- info["openTypeNameWWSSubfamilyName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testOS2Read(self):
- # openTypeOS2WidthClass
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2WidthClass"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out or range
- info = dict(fontInfoVersion2)
- info["openTypeOS2WidthClass"] = 15
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WeightClass
- info = dict(fontInfoVersion2)
- ## not an int
- info["openTypeOS2WeightClass"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info["openTypeOS2WeightClass"] = -50
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Selection
- info = dict(fontInfoVersion2)
- info["openTypeOS2Selection"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2VendorID
- info = dict(fontInfoVersion2)
- info["openTypeOS2VendorID"] = 1234
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Panose
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too few values
- info = dict(fontInfoVersion2)
- info["openTypeOS2Panose"] = [0, 1, 2, 3]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- info["openTypeOS2Panose"] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2FamilyClass
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2FamilyClass"] = [1, str(1)]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too few values
- info = dict(fontInfoVersion2)
- info["openTypeOS2FamilyClass"] = [1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- info["openTypeOS2FamilyClass"] = [1, 1, 1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion2)
- info["openTypeOS2FamilyClass"] = [1, 201]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2UnicodeRanges
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2UnicodeRanges"] = ["0"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion2)
- info["openTypeOS2UnicodeRanges"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2CodePageRanges
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2CodePageRanges"] = ["0"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion2)
- info["openTypeOS2CodePageRanges"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoAscender
- info = dict(fontInfoVersion2)
- info["openTypeOS2TypoAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoDescender
- info = dict(fontInfoVersion2)
- info["openTypeOS2TypoDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2TypoLineGap
- info = dict(fontInfoVersion2)
- info["openTypeOS2TypoLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WinAscent
- info = dict(fontInfoVersion2)
- info["openTypeOS2WinAscent"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2WinDescent
- info = dict(fontInfoVersion2)
- info["openTypeOS2WinDescent"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2Type
- ## not an int
- info = dict(fontInfoVersion2)
- info["openTypeOS2Type"] = ["1"]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- ## out of range
- info = dict(fontInfoVersion2)
- info["openTypeOS2Type"] = [-1]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptXSize
- info = dict(fontInfoVersion2)
- info["openTypeOS2SubscriptXSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptYSize
- info = dict(fontInfoVersion2)
- info["openTypeOS2SubscriptYSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptXOffset
- info = dict(fontInfoVersion2)
- info["openTypeOS2SubscriptXOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SubscriptYOffset
- info = dict(fontInfoVersion2)
- info["openTypeOS2SubscriptYOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptXSize
- info = dict(fontInfoVersion2)
- info["openTypeOS2SuperscriptXSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptYSize
- info = dict(fontInfoVersion2)
- info["openTypeOS2SuperscriptYSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptXOffset
- info = dict(fontInfoVersion2)
- info["openTypeOS2SuperscriptXOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2SuperscriptYOffset
- info = dict(fontInfoVersion2)
- info["openTypeOS2SuperscriptYOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2StrikeoutSize
- info = dict(fontInfoVersion2)
- info["openTypeOS2StrikeoutSize"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeOS2StrikeoutPosition
- info = dict(fontInfoVersion2)
- info["openTypeOS2StrikeoutPosition"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testVheaRead(self):
- # openTypeVheaVertTypoAscender
- info = dict(fontInfoVersion2)
- info["openTypeVheaVertTypoAscender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaVertTypoDescender
- info = dict(fontInfoVersion2)
- info["openTypeVheaVertTypoDescender"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaVertTypoLineGap
- info = dict(fontInfoVersion2)
- info["openTypeVheaVertTypoLineGap"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretSlopeRise
- info = dict(fontInfoVersion2)
- info["openTypeVheaCaretSlopeRise"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretSlopeRun
- info = dict(fontInfoVersion2)
- info["openTypeVheaCaretSlopeRun"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # openTypeVheaCaretOffset
- info = dict(fontInfoVersion2)
- info["openTypeVheaCaretOffset"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testFONDRead(self):
- # macintoshFONDFamilyID
- info = dict(fontInfoVersion2)
- info["macintoshFONDFamilyID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # macintoshFONDName
- info = dict(fontInfoVersion2)
- info["macintoshFONDName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
-
- def testPostscriptRead(self):
- # postscriptFontName
- info = dict(fontInfoVersion2)
- info["postscriptFontName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptFullName
- info = dict(fontInfoVersion2)
- info["postscriptFullName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptSlantAngle
- info = dict(fontInfoVersion2)
- info["postscriptSlantAngle"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, info=TestInfoObject())
- # postscriptUniqueID
- info = dict(fontInfoVersion2)
- info["postscriptUniqueID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptUnderlineThickness
- info = dict(fontInfoVersion2)
- info["postscriptUnderlineThickness"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptUnderlinePosition
- info = dict(fontInfoVersion2)
- info["postscriptUnderlinePosition"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptIsFixedPitch
- info = dict(fontInfoVersion2)
- info["postscriptIsFixedPitch"] = 2
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueValues
- ## not a list
- info = dict(fontInfoVersion2)
- info["postscriptBlueValues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion2)
- info["postscriptBlueValues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptOtherBlues
- ## not a list
- info = dict(fontInfoVersion2)
- info["postscriptOtherBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion2)
- info["postscriptOtherBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptFamilyBlues
- ## not a list
- info = dict(fontInfoVersion2)
- info["postscriptFamilyBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion2)
- info["postscriptFamilyBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptFamilyOtherBlues
- ## not a list
- info = dict(fontInfoVersion2)
- info["postscriptFamilyOtherBlues"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## uneven value count
- info = dict(fontInfoVersion2)
- info["postscriptFamilyOtherBlues"] = [500]
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptStemSnapH
- ## not list
- info = dict(fontInfoVersion2)
- info["postscriptStemSnapH"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptStemSnapV
- ## not list
- info = dict(fontInfoVersion2)
- info["postscriptStemSnapV"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- ## too many values
- info = dict(fontInfoVersion2)
- 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)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueFuzz
- info = dict(fontInfoVersion2)
- info["postscriptBlueFuzz"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueShift
- info = dict(fontInfoVersion2)
- info["postscriptBlueShift"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptBlueScale
- info = dict(fontInfoVersion2)
- info["postscriptBlueScale"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptForceBold
- info = dict(fontInfoVersion2)
- info["postscriptForceBold"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptDefaultWidthX
- info = dict(fontInfoVersion2)
- info["postscriptDefaultWidthX"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptNominalWidthX
- info = dict(fontInfoVersion2)
- info["postscriptNominalWidthX"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptWeightName
- info = dict(fontInfoVersion2)
- info["postscriptWeightName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptDefaultCharacter
- info = dict(fontInfoVersion2)
- info["postscriptDefaultCharacter"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # postscriptWindowsCharacterSet
- info = dict(fontInfoVersion2)
- info["postscriptWindowsCharacterSet"] = -1
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # macintoshFONDFamilyID
- info = dict(fontInfoVersion2)
- info["macintoshFONDFamilyID"] = "abc"
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
- # macintoshFONDName
- info = dict(fontInfoVersion2)
- info["macintoshFONDName"] = 123
- self._writeInfoToPlist(info)
- reader = UFOReader(self.dstDir)
- self.assertRaises(UFOLibError, reader.readInfo, TestInfoObject())
-
-
-class WriteFontInfoVersion1TestCase(unittest.TestCase):
-
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def makeInfoObject(self):
- infoObject = TestInfoObject()
- for attr, value in fontInfoVersion2.items():
- setattr(infoObject, attr, value)
- return infoObject
-
- def readPlist(self):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- return readPlist(path)
-
- def testWrite(self):
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir, formatVersion=1)
- writer.writeInfo(infoObject)
- writtenData = self.readPlist()
- for attr, originalValue in fontInfoVersion1.items():
- newValue = writtenData[attr]
- self.assertEqual(newValue, originalValue)
-
- def testFontStyleConversion(self):
- fontStyle1To2 = {
- 64 : "regular",
- 1 : "italic",
- 32 : "bold",
- 33 : "bold italic"
- }
- for old, new in fontStyle1To2.items():
- infoObject = self.makeInfoObject()
- infoObject.styleMapStyleName = new
- writer = UFOWriter(self.dstDir, formatVersion=1)
- writer.writeInfo(infoObject)
- writtenData = self.readPlist()
- self.assertEqual(writtenData["fontStyle"], old)
-
- def testWidthNameConversion(self):
- widthName1To2 = {
- "Ultra-condensed" : 1,
- "Extra-condensed" : 2,
- "Condensed" : 3,
- "Semi-condensed" : 4,
- "Medium (normal)" : 5,
- "Semi-expanded" : 6,
- "Expanded" : 7,
- "Extra-expanded" : 8,
- "Ultra-expanded" : 9
- }
- for old, new in widthName1To2.items():
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WidthClass = new
- writer = UFOWriter(self.dstDir, formatVersion=1)
- writer.writeInfo(infoObject)
- writtenData = self.readPlist()
- self.assertEqual(writtenData["widthName"], old)
-
-
-class WriteFontInfoVersion2TestCase(unittest.TestCase):
-
- def setUp(self):
- self.dstDir = tempfile.mktemp()
- os.mkdir(self.dstDir)
-
- def tearDown(self):
- shutil.rmtree(self.dstDir)
-
- def makeInfoObject(self):
- infoObject = TestInfoObject()
- for attr, value in fontInfoVersion2.items():
- setattr(infoObject, attr, value)
- return infoObject
-
- def readPlist(self):
- path = os.path.join(self.dstDir, "fontinfo.plist")
- return readPlist(path)
-
- def testWrite(self):
- infoObject = self.makeInfoObject()
- writer = UFOWriter(self.dstDir)
- writer.writeInfo(infoObject)
- writtenData = self.readPlist()
- for attr, originalValue in fontInfoVersion2.items():
- newValue = writtenData[attr]
- self.assertEqual(newValue, originalValue)
-
- def testGenericWrite(self):
- # familyName
- infoObject = self.makeInfoObject()
- infoObject.familyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # styleName
- infoObject = self.makeInfoObject()
- infoObject.styleName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # styleMapFamilyName
- infoObject = self.makeInfoObject()
- infoObject.styleMapFamilyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # styleMapStyleName
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.styleMapStyleName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.styleMapStyleName = "REGULAR"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # versionMajor
- infoObject = self.makeInfoObject()
- infoObject.versionMajor = "1"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # versionMinor
- infoObject = self.makeInfoObject()
- infoObject.versionMinor = "0"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # copyright
- infoObject = self.makeInfoObject()
- infoObject.copyright = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # trademark
- infoObject = self.makeInfoObject()
- infoObject.trademark = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # unitsPerEm
- infoObject = self.makeInfoObject()
- infoObject.unitsPerEm = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # descender
- infoObject = self.makeInfoObject()
- infoObject.descender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # xHeight
- infoObject = self.makeInfoObject()
- infoObject.xHeight = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # capHeight
- infoObject = self.makeInfoObject()
- infoObject.capHeight = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # ascender
- infoObject = self.makeInfoObject()
- infoObject.ascender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # italicAngle
- infoObject = self.makeInfoObject()
- infoObject.italicAngle = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testHeadWrite(self):
- # openTypeHeadCreated
- ## not a string
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadCreated = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## invalid format
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadCreated = "2000-Jan-01 00:00:00"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHeadLowestRecPPEM
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadLowestRecPPEM = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHeadFlags
- infoObject = self.makeInfoObject()
- infoObject.openTypeHeadFlags = [-1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testHheaWrite(self):
- # openTypeHheaAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaAscender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHheaDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaDescender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHheaLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaLineGap = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHheaCaretSlopeRise
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretSlopeRise = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHheaCaretSlopeRun
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretSlopeRun = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeHheaCaretOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeHheaCaretOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testNameWrite(self):
- # openTypeNameDesigner
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDesigner = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameDesignerURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDesignerURL = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameManufacturer
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameManufacturer = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameManufacturerURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameManufacturerURL = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameLicense
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameLicense = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameLicenseURL
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameLicenseURL = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameVersion
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameVersion = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameUniqueID
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameUniqueID = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameDescription
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameDescription = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNamePreferredFamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNamePreferredFamilyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNamePreferredSubfamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNamePreferredSubfamilyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameCompatibleFullName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameCompatibleFullName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameSampleText
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameSampleText = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameWWSFamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameWWSFamilyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeNameWWSSubfamilyName
- infoObject = self.makeInfoObject()
- infoObject.openTypeNameWWSSubfamilyName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testOS2Write(self):
- # openTypeOS2WidthClass
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WidthClass = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out or range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WidthClass = 15
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2WeightClass
- infoObject = self.makeInfoObject()
- ## not an int
- infoObject.openTypeOS2WeightClass = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject.openTypeOS2WeightClass = -50
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2Selection
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Selection = [-1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2VendorID
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2VendorID = 1234
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2Panose
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, str(9)]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## too few values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Panose = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2FamilyClass
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [0, str(1)]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## too few values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## too many values
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1, 1, 1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2FamilyClass = [1, 20]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2UnicodeRanges
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2UnicodeRanges = ["0"]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2UnicodeRanges = [-1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2CodePageRanges
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2CodePageRanges = ["0"]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2CodePageRanges = [-1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2TypoAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoAscender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2TypoDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoDescender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2TypoLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2TypoLineGap = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2WinAscent
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinAscent = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2WinDescent
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2WinDescent = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2Type
- ## not an int
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Type = ["1"]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## out of range
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2Type = [-1]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SubscriptXSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptXSize = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SubscriptYSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptYSize = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SubscriptXOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptXOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SubscriptYOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SubscriptYOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SuperscriptXSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptXSize = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SuperscriptYSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptYSize = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SuperscriptXOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptXOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2SuperscriptYOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2SuperscriptYOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2StrikeoutSize
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2StrikeoutSize = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeOS2StrikeoutPosition
- infoObject = self.makeInfoObject()
- infoObject.openTypeOS2StrikeoutPosition = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testVheaWrite(self):
- # openTypeVheaVertTypoAscender
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoAscender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeVheaVertTypoDescender
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoDescender = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeVheaVertTypoLineGap
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaVertTypoLineGap = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeVheaCaretSlopeRise
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretSlopeRise = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeVheaCaretSlopeRun
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretSlopeRun = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # openTypeVheaCaretOffset
- infoObject = self.makeInfoObject()
- infoObject.openTypeVheaCaretOffset = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testFONDWrite(self):
- # macintoshFONDFamilyID
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDFamilyID = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # macintoshFONDName
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
- def testPostscriptWrite(self):
- # postscriptFontName
- infoObject = self.makeInfoObject()
- infoObject.postscriptFontName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptFullName
- infoObject = self.makeInfoObject()
- infoObject.postscriptFullName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptSlantAngle
- infoObject = self.makeInfoObject()
- infoObject.postscriptSlantAngle = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptUniqueID
- infoObject = self.makeInfoObject()
- infoObject.postscriptUniqueID = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptUnderlineThickness
- infoObject = self.makeInfoObject()
- infoObject.postscriptUnderlineThickness = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptUnderlinePosition
- infoObject = self.makeInfoObject()
- infoObject.postscriptUnderlinePosition = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptIsFixedPitch
- infoObject = self.makeInfoObject()
- infoObject.postscriptIsFixedPitch = 2
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptBlueValues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueValues = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueValues = [500]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptOtherBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptOtherBlues = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptOtherBlues = [500]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptFamilyBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyBlues = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyBlues = [500]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptFamilyOtherBlues
- ## not a list
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyOtherBlues = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## uneven value count
- infoObject = self.makeInfoObject()
- infoObject.postscriptFamilyOtherBlues = [500]
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptStemSnapH
- ## not list
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapH = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptStemSnapV
- ## not list
- infoObject = self.makeInfoObject()
- infoObject.postscriptStemSnapV = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- ## 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)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptBlueFuzz
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueFuzz = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptBlueShift
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueShift = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptBlueScale
- infoObject = self.makeInfoObject()
- infoObject.postscriptBlueScale = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptForceBold
- infoObject = self.makeInfoObject()
- infoObject.postscriptForceBold = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptDefaultWidthX
- infoObject = self.makeInfoObject()
- infoObject.postscriptDefaultWidthX = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptNominalWidthX
- infoObject = self.makeInfoObject()
- infoObject.postscriptNominalWidthX = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptWeightName
- infoObject = self.makeInfoObject()
- infoObject.postscriptWeightName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptDefaultCharacter
- infoObject = self.makeInfoObject()
- infoObject.postscriptDefaultCharacter = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # postscriptWindowsCharacterSet
- infoObject = self.makeInfoObject()
- infoObject.postscriptWindowsCharacterSet = -1
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # macintoshFONDFamilyID
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDFamilyID = "abc"
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
- # macintoshFONDName
- infoObject = self.makeInfoObject()
- infoObject.macintoshFONDName = 123
- writer = UFOWriter(self.dstDir)
- self.assertRaises(UFOLibError, writer.writeInfo, info=infoObject)
-
-
-
-
-class ConversionFunctionsTestCase(unittest.TestCase):
-
- def tearDown(self):
- path = self.getFontPath("TestFont1 (UFO1) converted.ufo")
- if os.path.exists(path):
- shutil.rmtree(path)
- path = self.getFontPath("TestFont1 (UFO2) converted.ufo")
- if os.path.exists(path):
- shutil.rmtree(path)
-
- def getFontPath(self, fileName):
- import robofab
- path = os.path.dirname(robofab.__file__)
- path = os.path.dirname(path)
- path = os.path.dirname(path)
- path = os.path.join(path, "TestData", fileName)
- return path
-
- def compareFileStructures(self, path1, path2, expectedInfoData, testFeatures):
- # result
- metainfoPath1 = os.path.join(path1, "metainfo.plist")
- fontinfoPath1 = os.path.join(path1, "fontinfo.plist")
- kerningPath1 = os.path.join(path1, "kerning.plist")
- groupsPath1 = os.path.join(path1, "groups.plist")
- libPath1 = os.path.join(path1, "lib.plist")
- featuresPath1 = os.path.join(path1, "features.plist")
- glyphsPath1 = os.path.join(path1, "glyphs")
- glyphsPath1_contents = os.path.join(glyphsPath1, "contents.plist")
- glyphsPath1_A = os.path.join(glyphsPath1, "A_.glif")
- glyphsPath1_B = os.path.join(glyphsPath1, "B_.glif")
- # expected result
- metainfoPath2 = os.path.join(path2, "metainfo.plist")
- fontinfoPath2 = os.path.join(path2, "fontinfo.plist")
- kerningPath2 = os.path.join(path2, "kerning.plist")
- groupsPath2 = os.path.join(path2, "groups.plist")
- libPath2 = os.path.join(path2, "lib.plist")
- featuresPath2 = os.path.join(path2, "features.plist")
- glyphsPath2 = os.path.join(path2, "glyphs")
- glyphsPath2_contents = os.path.join(glyphsPath2, "contents.plist")
- glyphsPath2_A = os.path.join(glyphsPath2, "A_.glif")
- glyphsPath2_B = os.path.join(glyphsPath2, "B_.glif")
- # look for existence
- self.assertEqual(os.path.exists(metainfoPath1), True)
- self.assertEqual(os.path.exists(fontinfoPath1), True)
- self.assertEqual(os.path.exists(kerningPath1), True)
- self.assertEqual(os.path.exists(groupsPath1), True)
- self.assertEqual(os.path.exists(libPath1), True)
- self.assertEqual(os.path.exists(glyphsPath1), True)
- self.assertEqual(os.path.exists(glyphsPath1_contents), True)
- self.assertEqual(os.path.exists(glyphsPath1_A), True)
- self.assertEqual(os.path.exists(glyphsPath1_B), True)
- if testFeatures:
- self.assertEqual(os.path.exists(featuresPath1), True)
- # look for aggrement
- data1 = readPlist(metainfoPath1)
- data2 = readPlist(metainfoPath2)
- self.assertEqual(data1, data2)
- data1 = readPlist(fontinfoPath1)
- self.assertEqual(sorted(data1.items()), sorted(expectedInfoData.items()))
- data1 = readPlist(kerningPath1)
- data2 = readPlist(kerningPath2)
- self.assertEqual(data1, data2)
- data1 = readPlist(groupsPath1)
- data2 = readPlist(groupsPath2)
- self.assertEqual(data1, data2)
- data1 = readPlist(libPath1)
- data2 = readPlist(libPath2)
- if "UFO1" in libPath1:
- for key in removeFromFormatVersion1Lib:
- if key in data1:
- del data1[key]
- if "UFO1" in libPath2:
- for key in removeFromFormatVersion1Lib:
- if key in data2:
- del data2[key]
- self.assertEqual(data1, data2)
- data1 = readPlist(glyphsPath1_contents)
- data2 = readPlist(glyphsPath2_contents)
- self.assertEqual(data1, data2)
- data1 = readPlist(glyphsPath1_A)
- data2 = readPlist(glyphsPath2_A)
- self.assertEqual(data1, data2)
- data1 = readPlist(glyphsPath1_B)
- data2 = readPlist(glyphsPath2_B)
- self.assertEqual(data1, data2)
-
- def test1To2(self):
- path1 = self.getFontPath("TestFont1 (UFO1).ufo")
- path2 = self.getFontPath("TestFont1 (UFO1) converted.ufo")
- path3 = self.getFontPath("TestFont1 (UFO2).ufo")
- convertUFOFormatVersion1ToFormatVersion2(path1, path2)
- self.compareFileStructures(path2, path3, expectedFontInfo1To2Conversion, False)
-
- def test2To1(self):
- path1 = self.getFontPath("TestFont1 (UFO2).ufo")
- path2 = self.getFontPath("TestFont1 (UFO2) converted.ufo")
- path3 = self.getFontPath("TestFont1 (UFO1).ufo")
- convertUFOFormatVersion2ToFormatVersion1(path1, path2)
- self.compareFileStructures(path2, path3, expectedFontInfo2To1Conversion, False)
-
-
-if __name__ == "__main__":
- from robofab.test.testSupport import runTests
- runTests()