from fontTools.voltLib.error import VoltLibError
from fontTools.voltLib.lexer import Lexer
import unittest


def lex(s):
    return [(typ, tok) for (typ, tok, _) in Lexer(s, "test.vtp")]


class LexerTest(unittest.TestCase):
    def __init__(self, methodName):
        unittest.TestCase.__init__(self, methodName)

    def test_empty(self):
        self.assertEqual(lex(""), [])
        self.assertEqual(lex("\t"), [])

    def test_string(self):
        self.assertEqual(
            lex('"foo" "bar"'), [(Lexer.STRING, "foo"), (Lexer.STRING, "bar")]
        )
        self.assertRaises(VoltLibError, lambda: lex('"foo\n bar"'))

    def test_name(self):
        self.assertEqual(
            lex("DEF_FOO bar.alt1"), [(Lexer.NAME, "DEF_FOO"), (Lexer.NAME, "bar.alt1")]
        )

    def test_number(self):
        self.assertEqual(lex("123 -456"), [(Lexer.NUMBER, 123), (Lexer.NUMBER, -456)])


if __name__ == "__main__":
    import sys

    sys.exit(unittest.main())
