2015-08-01 12:35:22 +02:00
|
|
|
from __future__ import print_function, division, absolute_import
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
from fontTools.feaLib.lexer import LexerError
|
|
|
|
from fontTools.feaLib.parser import Parser, ParserError
|
|
|
|
from fontTools.misc.py23 import *
|
|
|
|
import codecs
|
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import sys
|
|
|
|
import tempfile
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
class ParserTest(unittest.TestCase):
|
2015-08-01 14:33:06 +02:00
|
|
|
def __init__(self, methodName):
|
|
|
|
unittest.TestCase.__init__(self, methodName)
|
|
|
|
# Python 3 renamed assertRaisesRegexp to assertRaisesRegex,
|
|
|
|
# and fires deprecation warnings if a program uses the old name.
|
|
|
|
if not hasattr(self, "assertRaisesRegex"):
|
|
|
|
self.assertRaisesRegex = self.assertRaisesRegexp
|
|
|
|
|
2015-08-01 12:35:22 +02:00
|
|
|
def test_languagesystem(self):
|
2015-08-01 14:49:19 +02:00
|
|
|
[langsys] = self.parse("languagesystem latn DEU;").statements
|
|
|
|
self.assertEqual(langsys.script, "latn")
|
|
|
|
self.assertEqual(langsys.language, "DEU ")
|
2015-08-01 14:33:06 +02:00
|
|
|
self.assertRaisesRegex(
|
2015-08-01 12:35:22 +02:00
|
|
|
ParserError, "Expected ';'",
|
|
|
|
self.parse, "languagesystem latn DEU")
|
2015-08-01 14:33:06 +02:00
|
|
|
self.assertRaisesRegex(
|
2015-08-01 12:35:22 +02:00
|
|
|
ParserError, "longer than 4 characters",
|
|
|
|
self.parse, "languagesystem foobar DEU")
|
2015-08-01 14:33:06 +02:00
|
|
|
self.assertRaisesRegex(
|
2015-08-01 12:35:22 +02:00
|
|
|
ParserError, "longer than 4 characters",
|
|
|
|
self.parse, "languagesystem latn FOOBAR")
|
|
|
|
|
|
|
|
def test_roundtrip(self):
|
|
|
|
self.roundtrip("mini.fea")
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.tempdir = None
|
|
|
|
self.num_tempfiles = 0
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
if self.tempdir:
|
|
|
|
shutil.rmtree(self.tempdir)
|
|
|
|
|
|
|
|
def parse(self, text):
|
|
|
|
if not self.tempdir:
|
|
|
|
self.tempdir = tempfile.mkdtemp()
|
|
|
|
self.num_tempfiles += 1
|
|
|
|
path = os.path.join(self.tempdir, "tmp%d.fea" % self.num_tempfiles)
|
|
|
|
with codecs.open(path, "wb", "utf-8") as outfile:
|
|
|
|
outfile.write(text)
|
|
|
|
return Parser(path).parse()
|
|
|
|
|
|
|
|
def roundtrip(self, testfile):
|
|
|
|
buffer1, buffer2 = StringIO(), StringIO()
|
2015-08-01 14:49:19 +02:00
|
|
|
Parser(ParserTest.getpath(testfile)).parse().write(buffer1, os.linesep)
|
2015-08-01 12:35:22 +02:00
|
|
|
text1 = buffer1.getvalue().decode("utf-8")
|
2015-08-01 14:49:19 +02:00
|
|
|
self.parse(text1).write(buffer2, os.linesep)
|
2015-08-01 12:35:22 +02:00
|
|
|
text2 = buffer2.getvalue().decode("utf-8")
|
|
|
|
self.assertEqual(text1, text2)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def getpath(testfile):
|
|
|
|
path, _ = os.path.split(__file__)
|
|
|
|
return os.path.join(path, "testdata", testfile)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
unittest.main()
|