diff options
author | Benji York <benji@benjiyork.com> | 2011-10-03 16:07:03 -0400 |
---|---|---|
committer | Benji York <benji@benjiyork.com> | 2011-10-03 16:07:03 -0400 |
commit | 409fcfa99e9a82833fd00b65072e4e742716ae7b (patch) | |
tree | fd3aa314352fe0baee710d0de57ed4ff8baff096 /tests/test_util.py | |
parent | f83a828ec5ff775cd313213385d4bce06efda8e6 (diff) | |
download | pygments-409fcfa99e9a82833fd00b65072e4e742716ae7b.tar.gz |
make_analysator can now handle TypeErrors
Diffstat (limited to 'tests/test_util.py')
-rw-r--r-- | tests/test_util.py | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/tests/test_util.py b/tests/test_util.py index 0876cf70..d887b3e6 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -13,6 +13,12 @@ import os from pygments import util +class FakeLexer(object): + def analyse(text): + return float(text) + analyse = util.make_analysator(analyse) + + class UtilTest(unittest.TestCase): def test_getoptions(self): @@ -53,12 +59,40 @@ class UtilTest(unittest.TestCase): self.assertEquals(util.docstring_headline(f1), "docstring headline") self.assertEquals(util.docstring_headline(f2), "docstring headline") - def test_analysator(self): + def test_analysator_returns_float(self): + # If an analysator wrapped by make_analysator returns a floating point + # number, then that number will be returned by the wrapper. + self.assertEquals(FakeLexer.analyse('0.5'), 0.5) + + def test_analysator_returns_boolean(self): + # If an analysator wrapped by make_analysator returns a boolean value, + # then the wrapper will return 1.0 if the boolean was True or 0.0 if + # it was False. + self.assertEquals(FakeLexer.analyse(True), 1.0) + self.assertEquals(FakeLexer.analyse(False), 0.0) + + def test_analysator_raises_exception(self): + # If an analysator wrapped by make_analysator raises an exception, + # then the wrapper will return 0.0. + class ErrorLexer(object): + def analyse(text): + raise RuntimeError('something bad happened') + analyse = util.make_analysator(analyse) + self.assertEquals(FakeLexer.analyse(''), 0.0) + + def test_analysator_value_error(self): + # When converting the analysator's return value to a float a + # ValueError may occur. If that happens 0.0 is returned instead. + self.assertEquals(FakeLexer.analyse('bad input'), 0.0) + + def test_analysator_type_error(self): + # When converting the analysator's return value to a float a + # TypeError may occur. If that happens 0.0 is returned instead. class X(object): def analyse(text): - return 0.5 + return float(text) analyse = util.make_analysator(analyse) - self.assertEquals(X.analyse(''), 0.5) + self.assertEquals(X.analyse(None), 0.0) def test_shebang_matches(self): self.assert_(util.shebang_matches('#!/usr/bin/env python', r'python(2\.\d)?')) |