summaryrefslogtreecommitdiff
path: root/misc/pylib/robofab/test/test_RInfoRF.py
blob: 3a87470330f2947c757857259edab42c545e1de8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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()