Example #1
0
	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 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 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()
Example #4
0
	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()
Example #5
0
 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 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()
Example #7
0
 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()
Example #8
0
	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 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()
Example #10
0
	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()
 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()
	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 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()
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()
Example #16
0
"""
Remove overlap on all glyphs in a .ufo font.

This script sis more than a little silly, but it
demonstrates how objectsRF and objectsFL can
work hand in hand.
"""

from robofab.objects.objectsRF import OpenFont
from robofab.objects.objectsFL import NewFont
from robofab.interface.all.dialogs import ProgressBar

ufoFont = OpenFont(note="Select a .ufo")
if ufoFont:
	bar = ProgressBar('Removing Overlap...', len(ufoFont))
	flFont = NewFont()
	flGlyph = flFont.newGlyph('OverlapRemover')
	for ufoGlyph in ufoFont:
		flPen = flGlyph.getPointPen()
		ufoGlyph.drawPoints(flPen)
		flGlyph.removeOverlap()
		ufoPen = ufoGlyph.getPointPen()
		ufoGlyph.clear()
		flGlyph.drawPoints(ufoPen)
		flGlyph.clear()
		bar.tick()
	flFont.close(save=0)
	bar.close()
	ufoFont.save(doProgress=True)
Example #17
0
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()
Example #18
0
 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
Example #19
0
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()