From f4ed6b5a85346e0add561fa5b8af9649e8a1a7df Mon Sep 17 00:00:00 2001 From: Sascha Brawer Date: Sat, 1 Aug 2015 10:24:44 +0200 Subject: [PATCH] Make pretty error messages for LexerError --- Lib/fontTools/feaLib/lexer.py | 8 ++++++++ Lib/fontTools/feaLib/lexer_test.py | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/Lib/fontTools/feaLib/lexer.py b/Lib/fontTools/feaLib/lexer.py index d38210ff5..b544378eb 100644 --- a/Lib/fontTools/feaLib/lexer.py +++ b/Lib/fontTools/feaLib/lexer.py @@ -9,6 +9,14 @@ class LexerError(Exception): Exception.__init__(self, message) self.location = location + def __str__(self): + message = Exception.__str__(self) + if self.location: + path, line, column = self.location + return "%s:%d:%d: %s" % (path, line, column, message) + else: + return message + class Lexer(object): NUMBER = "NUMBER" diff --git a/Lib/fontTools/feaLib/lexer_test.py b/Lib/fontTools/feaLib/lexer_test.py index 6c095fc1f..6fa3d42f0 100644 --- a/Lib/fontTools/feaLib/lexer_test.py +++ b/Lib/fontTools/feaLib/lexer_test.py @@ -9,6 +9,16 @@ def lex(s): return [(typ, tok) for (typ, tok, _) in Lexer(s, "test.fea")] +class LexerErrorTest(unittest.TestCase): + def test_str(self): + err = LexerError("Squeak!", ("foo.fea", 23, 42)) + self.assertEqual(str(err), "foo.fea:23:42: Squeak!") + + def test_str_nolocation(self): + err = LexerError("Squeak!", None) + self.assertEqual(str(err), "Squeak!") + + class LexerTest(unittest.TestCase): def test_empty(self): self.assertEqual(lex(""), [])