112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
|
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()
|
||
|
|