diff options
author | Waylan Limberg <waylan@gmail.com> | 2010-07-22 15:39:05 -0400 |
---|---|---|
committer | Waylan Limberg <waylan@gmail.com> | 2010-07-22 15:39:05 -0400 |
commit | 3edf722ca617291cd4804a10801e2fce385aa13b (patch) | |
tree | cf2805e27e6f434a27ea22d0d1bdfaf3a9d127cc | |
parent | de949d2af47b9a094ace82ed64f810aaff7d3ac7 (diff) | |
download | markdown-3edf722ca617291cd4804a10801e2fce385aa13b.tar.gz markdown-3edf722ca617291cd4804a10801e2fce385aa13b.tar.bz2 markdown-3edf722ca617291cd4804a10801e2fce385aa13b.zip |
Added logging imports to markdown.extensions which were missed in recent reorg. Also added tests to make sure erros and warnings are raised where they should be.
-rw-r--r-- | markdown/extensions/__init__.py | 2 | ||||
-rw-r--r-- | tests/test_apis.py | 75 |
2 files changed, 77 insertions, 0 deletions
diff --git a/markdown/extensions/__init__.py b/markdown/extensions/__init__.py index 1964bfc..14e0911 100644 --- a/markdown/extensions/__init__.py +++ b/markdown/extensions/__init__.py @@ -1,3 +1,5 @@ +from markdown.md_logging import message +from logging import DEBUG, INFO, WARN, ERROR, CRITICAL """ Extensions diff --git a/tests/test_apis.py b/tests/test_apis.py index 0c81585..e420c2a 100644 --- a/tests/test_apis.py +++ b/tests/test_apis.py @@ -10,7 +10,12 @@ Tests of the various APIs with the python markdown lib. import unittest from doctest import DocTestSuite import os +import sys +import types import markdown +from markdown.md_logging import MarkdownException, MarkdownWarning +from logging import DEBUG, INFO, WARN, ERROR, CRITICAL +import warnings class TestMarkdownBasics(unittest.TestCase): """ Tests basics of the Markdown class. """ @@ -210,3 +215,73 @@ class TestOrderedDict(unittest.TestCase): [('first', 'This'), ('fourth', 'self'), ('third', 'a'), ('fifth', 'test')]) +class TestErrors(unittest.TestCase): + """ Test Error Reporting. """ + + def setUp(self): + # Set warnings to be raised as errors + warnings.simplefilter('error') + + def tearDown(self): + # Reset warning behavior back to default + warnings.simplefilter('default') + + def testMessageWarn(self): + """ Test message WARN. """ + self.assertRaises(MarkdownWarning, markdown.md_logging.message, + WARN, 'This should raise a MardownWarning') + + def testMessageError(self): + """ Test message ERROR. """ + self.assertRaises(MarkdownException, markdown.md_logging.message, + ERROR, 'This should raise a MarkdownException') + + def testNonUnicodeSource(self): + """ Test falure on non-unicode source text. """ + source = "foo".encode('utf-16') + self.assertRaises(MarkdownException, markdown.markdown, source) + + def testBadOutputFormat(self): + """ Test failure on bad output_format. """ + self.assertRaises(MarkdownException, + markdown.Markdown, output_format='invalid') + + def testLoadExtensionFailure(self): + """ Test failure of an extension to load. """ + self.assertRaises(MarkdownWarning, + markdown.extensions.load_extension, 'non_existant_ext') + + def testLoadBadExtension(self): + """ Test loading of an Extension with no makeExtension function. """ + _create_fake_extension(name='fake', has_factory_func=False) + self.assertRaises(MarkdownException, + markdown.extensions.load_extension, 'fake') + + def testNonExtension(self): + """ Test loading a non Extension object as an extension. """ + _create_fake_extension(name='fake', is_wrong_type=True) + self.assertRaises(MarkdownException, + markdown.Markdown, extensions=['fake']) + + def testBaseExtention(self): + """ Test that the base Extension class will raise NotImplemented. """ + _create_fake_extension(name='fake') + self.assertRaises(MarkdownException, + markdown.Markdown, extensions=['fake']) + + +def _create_fake_extension(name, has_factory_func=True, is_wrong_type=False): + """ Create a fake extension module for testing. """ + mod_name = '_'.join(['mdx', name]) + ext_mod = types.ModuleType(mod_name) + def makeExtension(configs=None): + if is_wrong_type: + return object + else: + return markdown.extensions.Extension(configs=configs) + if has_factory_func: + ext_mod.makeExtension = makeExtension + # Warning: this brute forces the extenson module onto the system. Either + # this needs to be specificly overriden or a new python session needs to + # be started to get rid of this. This should be ok in a testing context. + sys.modules[mod_name] = ext_mod |