From aae373860b5c5cbb40f126bf5acb9693dc577c4a Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 29 Jul 2014 21:34:58 -0400 Subject: Refactor markdown.extensions.Extension.__init__() As pointed out in #325, setting up Extension configs is kind of a mess. Some places pass a list of tuples on initialization, others a dict. And sometimes they're passed as an arg, othertimes a kwarg. Addiitonaly, the docs are just as inconsistant. This refactor addresses all those sinerios with tests included. The existing extensions still need refactored. But the fact that their tests still pass means we havn't broken third party extensions either. This refactor also introduces a new API, which is the prefered method going forward. All docs should be updated to match. Whereas previously one might do: ```python MyExtension(configs={'key': 'foo', 'otherkey': 'bar'}) ``` This can now be done: ```python MyExtension(key='foo', otherkey='bar') ``` Of course, the old way still works for backward compatability. But that means the `configs` keyword has special status and cannot be used for another purpose. --- tests/test_extensions.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/test_extensions.py b/tests/test_extensions.py index 8cd6c31..e763576 100644 --- a/tests/test_extensions.py +++ b/tests/test_extensions.py @@ -15,12 +15,17 @@ class TestExtensionClass(unittest.TestCase): """ Test markdown.extensions.Extension. """ def setUp(self): - self.ext = markdown.extensions.Extension(configs={'foo':['bar', 'Description of foo']}) + class TestExtension(markdown.extensions.Extension): + config = {'foo': ['bar', 'Description of foo']} + + self.ext = TestExtension() + self.ExtKlass = TestExtension def testGetConfig(self): self.assertEqual(self.ext.getConfig('foo'), 'bar') def testGetConfigDefault(self): + self.assertEqual(self.ext.getConfig('baz'), '') self.assertEqual(self.ext.getConfig('baz', default='missing'), 'missing') def testGetConfigs(self): @@ -33,6 +38,30 @@ class TestExtensionClass(unittest.TestCase): self.ext.setConfig('foo', 'baz') self.assertEqual(self.ext.getConfigs(), {'foo': 'baz'}) + def testSetConfigWithBadKey(self): + # self.ext.setConfig('bad', 'baz) ==> KeyError + self.assertRaises(KeyError, self.ext.setConfig, 'bad', 'baz') + + def testConfigAsArgListOnInit(self): + ext = self.ExtKlass([('foo', 'baz')]) + self.assertEqual(ext.getConfigs(), {'foo': 'baz'}) + + def testConfigAsArgDictOnInit(self): + ext = self.ExtKlass({'foo': 'baz'}) + self.assertEqual(ext.getConfigs(), {'foo': 'baz'}) + + def testConfigAsKwargListOnInit(self): + ext = self.ExtKlass(configs=[('foo', 'baz')]) + self.assertEqual(ext.getConfigs(), {'foo': 'baz'}) + + def testConfigAsKwargDictOnInit(self): + ext = self.ExtKlass(configs={'foo': 'baz'}) + self.assertEqual(ext.getConfigs(), {'foo': 'baz'}) + + def testConfigAsKwargsOnInit(self): + ext = self.ExtKlass(foo='baz') + self.assertEqual(ext.getConfigs(), {'foo': 'baz'}) + class TestAbbr(unittest.TestCase): """ Test abbr extension. """ -- cgit v1.2.3