diff options
author | rsiddharth <s@ricketyspace.net> | 2017-07-24 00:40:01 +0000 |
---|---|---|
committer | rsiddharth <s@ricketyspace.net> | 2017-07-24 00:40:01 +0000 |
commit | b5bc0fc9cbe3df899a12ec1bfe90bd8fa21ddd74 (patch) | |
tree | 87223c1645ba9c9f4c40a61ce152a79a57dd4af7 | |
parent | 40861fcbc949bf1f1835399f76e096192bccb319 (diff) |
md_tw.py: Add Text Wrap classes (derived from mistune' classes).
* md_tw.py (TWBlockLexer, TWInlineLexer, TWRenderer)
(TWMarkdown): New classes.
* tests/data/paragraphs-with-inline-wrapped.md: New file.
* tests/data/paragraphs-with-inline.md: New file.
* tests/data/paragraphs-wrapped.md: New file.
* tests/data/paragraphs.md: New file.
* tests/test_md_tw.py (TestTWBlockLexer, TestTWInlineLexer,
TestTWRenderer, TestTWMarkdown)
(TestTextWrapParagraphs): New test classes.
-rw-r--r-- | md_tw.py | 91 | ||||
-rw-r--r-- | tests/data/paragraphs-with-inline-wrapped.md | 62 | ||||
-rw-r--r-- | tests/data/paragraphs-with-inline.md | 47 | ||||
-rw-r--r-- | tests/data/paragraphs-wrapped.md | 60 | ||||
-rw-r--r-- | tests/data/paragraphs.md | 45 | ||||
-rw-r--r-- | tests/test_md_tw.py | 150 |
6 files changed, 454 insertions, 1 deletions
@@ -18,5 +18,96 @@ # along with markdown-textwrap (see COPYING). If not, see # <http://www.gnu.org/licenses/>. +import textwrap + +from mistune import BlockLexer, InlineLexer, Renderer, Markdown + + +class TWBlockLexer(BlockLexer): + """Text Wrap Block level lexer for block grammars.""" + + def __init__(self, rules=None, **kwargs): + super(TWBlockLexer, self).__init__(rules, **kwargs) + + self.default_rules = ['paragraph', 'text'] + + +class TWInlineLexer(InlineLexer): + """Text Wrap Inline level lexer for inline gramars.""" + + def __init__(self, renderer, rules=None, **kwargs): + super(TWInlineLexer, self).__init__(renderer, rules, **kwargs) + + # No inline rules. + self.default_rules = [] + + def output(self, text, rules=None): + # Don't parse inline text. + return text + + +class TWRenderer(Renderer): + """Text Wrap Renderer.""" + + def __init__(self, **kwargs): + super(TWRenderer, self).__init__(**kwargs) + + # Initalize textwrap.TextWrapper class + self.tw = textwrap.TextWrapper( + width=kwargs.get('tw_width', 72) + ) + + + def _tw_set_options(self, **kwargs): + """ + Set options for the local textwrap.TextWrapper instance. + """ + # Recognized options. + opts = [ + 'width', + 'initial_indent', + 'subsequent_indent', + 'drop_whitespace' + ] + + for opt, val in kwargs.items(): + if not opt in opts: + continue + + # Set option + setattr(self.tw, opt, val) + + + def _tw_fill(self, text, **kwargs): + """Wrap text. + """ + self._tw_set_options(**kwargs) + return self.tw.fill(text) + + + def paragraph(self, text): + return '\n{}\n'.format(self._tw_fill(text)) + + +class TWMarkdown(Markdown): + """Text Wrap Markdown parser. + """ + + def __init__(self, **kwargs): + renderer = TWRenderer(**kwargs) + + super(TWMarkdown, self).__init__( + renderer, + TWInlineLexer, + TWBlockLexer + ) + + def parse(self, text): + out = super(TWMarkdown, self).parse(text) + + # Strip newline at the beginning. + return out.lstrip('\n') + + def main(): print('USAGE: md_tw 72 file.md file2.md [...]') diff --git a/tests/data/paragraphs-with-inline-wrapped.md b/tests/data/paragraphs-with-inline-wrapped.md new file mode 100644 index 0000000..01761a4 --- /dev/null +++ b/tests/data/paragraphs-with-inline-wrapped.md @@ -0,0 +1,62 @@ +IPSUM dolor sit amet, consectetur adipiscing elit. Morbi aliquam felis +nec fermentum lobortis. Donec fringilla lorem non scelerisque volutpat. +Vestibulum eleifend commodo nulla sit amet commodo. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Proin hendrerit consectetur dui, non convallis enim bibendum non. +Curabitur elementum quam augue, ac ullamcorper felis faucibus nec. Proin +vestibulum risus *rutrum* nunc luctus aliquam at non tellus. Curabitur +congue, orci ut consectetur suscipit, ligula orci eleifend metus, ac +aliquam nisl orci a ligula. Aliquam aliquet mauris sed massa malesuada +lobortis. Aenean odio eros, eleifend at imperdiet nec, pulvinar vitae +dui. Ut ullamcorper ligula ligula, vitae egestas urna rutrum nec. Aenean +aliquet mi eget tincidunt pharetra. _Nam pellentesque enim et_ posuere +porttitor. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. + +PRETIUM velit, ut consectetur odio. Mauris ac mattis magna. Quisque +tempus nunc non gravida iaculis. Suspendisse sagittis justo nibh, a +dapibus [ligula scelerisque et. Suspendisse euismod sapien in velit +venenatis](http://autie.io), in consequat libero lobortis. Maecenas sem +purus, feugiat at dictum a, viverra eget metus. Phasellus aliquet nulla +eget pellentesque rutrum. Mauris ac porta ipsum. Aenean vel imperdiet +enim, sed egestas augue. + +TACULIS eros vehicula mauris vulputate molestie. Nulla non quam sit amet +ex sagittis gravida. Pellentesque at massa ac enim finibus egestas. +Morbi et tincidunt leo, sed laoreet neque. Duis in mollis lorem. Mauris +a interdum dui. Donec mattis nulla eu libero sollicitudin ornare. +Phasellus lobortis, mi [sit amet aliquam tempus][0], risus urna iaculis +ante, id sodales magna nulla non tellus. Nullam erat urna, molestie +malesuada lacinia eu, interdum sed eros. Pellentesque vestibulum mattis +nibh, ut commodo mi posuere a. Donec ornare neque at arcu condimentum +tempus. Pellentesque vehicula velit id mauris faucibus volutpat. Integer +sollicitudin sem nec nulla accumsan, vitae eleifend nibh venenatis. +Nulla ut rhoncus massa. + +[0]: https:///tem.us/blog/2110/after-singularity.html + +CURSUS id turpis hendrerit tincidunt. Nullam pulvinar odio vel nisi +dapibus sollicitudin. Maecenas et odio eget nisl pretium malesuada. Cras +ornare ipsum felis, pretium semper tortor finibus pellentesque. Sed +blandit tincidunt diam, quis venenatis metus pretium vitae. Praesent +gravida lectus sit amet metus mattis, sit amet interdum diam congue. +Quisque vel efficitur augue. Quisque ante velit, suscipit et nulla at, +condimentum egestas justo. Suspendisse suscipit mauris vitae egestas +hendrerit. Duis gravida maximus accumsan. Integer mollis imperdiet +tellus, et ornare dolor ultrices interdum. Integer tempus dapibus dolor, +sit amet viverra urna. Vestibulum ante ipsum primis in faucibus orci +luctus et ultrices posuere cubilia Curae; Vivamus vitae fermentum dui, +eu malesuada risus. Proin ut tincidunt nisl. + +VITAE scelerisque quam. Sed pharetra purus ac suscipit aliquet. In hac +habitasse platea dictumst. Etiam hendrerit diam porttitor nunc volutpat +blandit. Sed commodo libero orci, at tempor massa posuere vitae. Etiam +non felis lacus. Donec pulvinar, libero non elementum gravida, risus +erat hendrerit magna, eget faucibus eros dolor aliquet quam. Curabitur +sollicitudin dolor dui, venenatis rutrum diam vulputate a. Phasellus in +dignissim erat, vel porttitor ex. Nulla at magna metus. Maecenas +lobortis est sit amet ante luctus auctor. Etiam id tortor vel dui +pretium varius vel vitae elit. Sed augue elit, mattis sit amet nulla +fringilla, volutpat porttitor nulla. Suspendisse potenti. Praesent ac +mauris in ex gravida semper. Donec lacinia magna eget ipsum bibendum +mollis. diff --git a/tests/data/paragraphs-with-inline.md b/tests/data/paragraphs-with-inline.md new file mode 100644 index 0000000..5a215ba --- /dev/null +++ b/tests/data/paragraphs-with-inline.md @@ -0,0 +1,47 @@ +IPSUM dolor sit amet, consectetur adipiscing elit. Morbi aliquam felis nec fermentum lobortis. Donec +fringilla lorem non scelerisque volutpat. Vestibulum eleifend commodo nulla sit amet commodo. Class +aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin +hendrerit consectetur dui, non convallis enim bibendum non. Curabitur elementum quam augue, ac +ullamcorper felis faucibus nec. Proin vestibulum risus *rutrum* nunc luctus aliquam at non +tellus. Curabitur congue, orci ut consectetur suscipit, ligula orci eleifend metus, ac aliquam nisl +orci a ligula. Aliquam aliquet mauris sed massa malesuada lobortis. Aenean odio eros, eleifend at +imperdiet nec, pulvinar vitae dui. Ut ullamcorper ligula ligula, vitae egestas urna rutrum +nec. Aenean aliquet mi eget tincidunt pharetra. _Nam pellentesque enim et_ posuere +porttitor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis +egestas. + +PRETIUM velit, ut consectetur odio. Mauris ac mattis magna. Quisque tempus nunc non gravida +iaculis. Suspendisse sagittis justo nibh, a dapibus [ligula scelerisque +et. Suspendisse euismod sapien in velit venenatis](http://autie.io), in consequat libero +lobortis. Maecenas sem purus, feugiat at dictum a, viverra eget metus. Phasellus aliquet nulla eget +pellentesque rutrum. Mauris ac porta ipsum. Aenean vel imperdiet enim, sed egestas augue. + +TACULIS eros vehicula mauris vulputate molestie. Nulla non quam sit amet ex sagittis +gravida. Pellentesque at massa ac enim finibus egestas. Morbi et tincidunt leo, sed laoreet +neque. Duis in mollis lorem. Mauris a interdum dui. Donec mattis nulla eu libero sollicitudin +ornare. Phasellus lobortis, mi [sit amet aliquam tempus][0], risus urna iaculis ante, id sodales magna +nulla non tellus. Nullam erat urna, molestie malesuada lacinia eu, interdum sed eros. Pellentesque +vestibulum mattis nibh, ut commodo mi posuere a. Donec ornare neque at arcu condimentum +tempus. Pellentesque vehicula velit id mauris faucibus volutpat. Integer sollicitudin sem nec nulla +accumsan, vitae eleifend nibh venenatis. Nulla ut rhoncus massa. + +[0]: https:///tem.us/blog/2110/after-singularity.html + +CURSUS id turpis hendrerit tincidunt. Nullam pulvinar odio vel nisi dapibus sollicitudin. Maecenas +et odio eget nisl pretium malesuada. Cras ornare ipsum felis, pretium semper tortor finibus +pellentesque. Sed blandit tincidunt diam, quis venenatis metus pretium vitae. Praesent gravida +lectus sit amet metus mattis, sit amet interdum diam congue. Quisque vel efficitur augue. Quisque +ante velit, suscipit et nulla at, condimentum egestas justo. Suspendisse suscipit mauris vitae +egestas hendrerit. Duis gravida maximus accumsan. Integer mollis imperdiet tellus, et ornare dolor +ultrices interdum. Integer tempus dapibus dolor, sit amet viverra urna. Vestibulum ante ipsum primis +in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus vitae fermentum dui, eu malesuada +risus. Proin ut tincidunt nisl. + +VITAE scelerisque quam. Sed pharetra purus ac suscipit aliquet. In hac habitasse platea +dictumst. Etiam hendrerit diam porttitor nunc volutpat blandit. Sed commodo libero orci, at tempor +massa posuere vitae. Etiam non felis lacus. Donec pulvinar, libero non elementum gravida, risus erat +hendrerit magna, eget faucibus eros dolor aliquet quam. Curabitur sollicitudin dolor dui, venenatis +rutrum diam vulputate a. Phasellus in dignissim erat, vel porttitor ex. Nulla at magna +metus. Maecenas lobortis est sit amet ante luctus auctor. Etiam id tortor vel dui pretium varius vel +vitae elit. Sed augue elit, mattis sit amet nulla fringilla, volutpat porttitor nulla. Suspendisse +potenti. Praesent ac mauris in ex gravida semper. Donec lacinia magna eget ipsum bibendum mollis. diff --git a/tests/data/paragraphs-wrapped.md b/tests/data/paragraphs-wrapped.md new file mode 100644 index 0000000..75f102c --- /dev/null +++ b/tests/data/paragraphs-wrapped.md @@ -0,0 +1,60 @@ +IPSUM dolor sit amet, consectetur adipiscing elit. Morbi aliquam felis +nec fermentum lobortis. Donec fringilla lorem non scelerisque volutpat. +Vestibulum eleifend commodo nulla sit amet commodo. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Proin hendrerit consectetur dui, non convallis enim bibendum non. +Curabitur elementum quam augue, ac ullamcorper felis faucibus nec. Proin +vestibulum risus rutrum nunc luctus aliquam at non tellus. Curabitur +congue, orci ut consectetur suscipit, ligula orci eleifend metus, ac +aliquam nisl orci a ligula. Aliquam aliquet mauris sed massa malesuada +lobortis. Aenean odio eros, eleifend at imperdiet nec, pulvinar vitae +dui. Ut ullamcorper ligula ligula, vitae egestas urna rutrum nec. Aenean +aliquet mi eget tincidunt pharetra. Nam pellentesque enim et posuere +porttitor. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. + +PRETIUM velit, ut consectetur odio. Mauris ac mattis magna. Quisque +tempus nunc non gravida iaculis. Suspendisse sagittis justo nibh, a +dapibus ligula scelerisque et. Suspendisse euismod sapien in velit +venenatis, in consequat libero lobortis. Maecenas sem purus, feugiat at +dictum a, viverra eget metus. Phasellus aliquet nulla eget pellentesque +rutrum. Mauris ac porta ipsum. Aenean vel imperdiet enim, sed egestas +augue. + +TACULIS eros vehicula mauris vulputate molestie. Nulla non quam sit amet +ex sagittis gravida. Pellentesque at massa ac enim finibus egestas. +Morbi et tincidunt leo, sed laoreet neque. Duis in mollis lorem. Mauris +a interdum dui. Donec mattis nulla eu libero sollicitudin ornare. +Phasellus lobortis, mi sit amet aliquam tempus, risus urna iaculis ante, +id sodales magna nulla non tellus. Nullam erat urna, molestie malesuada +lacinia eu, interdum sed eros. Pellentesque vestibulum mattis nibh, ut +commodo mi posuere a. Donec ornare neque at arcu condimentum tempus. +Pellentesque vehicula velit id mauris faucibus volutpat. Integer +sollicitudin sem nec nulla accumsan, vitae eleifend nibh venenatis. +Nulla ut rhoncus massa. + +CURSUS id turpis hendrerit tincidunt. Nullam pulvinar odio vel nisi +dapibus sollicitudin. Maecenas et odio eget nisl pretium malesuada. Cras +ornare ipsum felis, pretium semper tortor finibus pellentesque. Sed +blandit tincidunt diam, quis venenatis metus pretium vitae. Praesent +gravida lectus sit amet metus mattis, sit amet interdum diam congue. +Quisque vel efficitur augue. Quisque ante velit, suscipit et nulla at, +condimentum egestas justo. Suspendisse suscipit mauris vitae egestas +hendrerit. Duis gravida maximus accumsan. Integer mollis imperdiet +tellus, et ornare dolor ultrices interdum. Integer tempus dapibus dolor, +sit amet viverra urna. Vestibulum ante ipsum primis in faucibus orci +luctus et ultrices posuere cubilia Curae; Vivamus vitae fermentum dui, +eu malesuada risus. Proin ut tincidunt nisl. + +VITAE scelerisque quam. Sed pharetra purus ac suscipit aliquet. In hac +habitasse platea dictumst. Etiam hendrerit diam porttitor nunc volutpat +blandit. Sed commodo libero orci, at tempor massa posuere vitae. Etiam +non felis lacus. Donec pulvinar, libero non elementum gravida, risus +erat hendrerit magna, eget faucibus eros dolor aliquet quam. Curabitur +sollicitudin dolor dui, venenatis rutrum diam vulputate a. Phasellus in +dignissim erat, vel porttitor ex. Nulla at magna metus. Maecenas +lobortis est sit amet ante luctus auctor. Etiam id tortor vel dui +pretium varius vel vitae elit. Sed augue elit, mattis sit amet nulla +fringilla, volutpat porttitor nulla. Suspendisse potenti. Praesent ac +mauris in ex gravida semper. Donec lacinia magna eget ipsum bibendum +mollis. diff --git a/tests/data/paragraphs.md b/tests/data/paragraphs.md new file mode 100644 index 0000000..88f3825 --- /dev/null +++ b/tests/data/paragraphs.md @@ -0,0 +1,45 @@ +IPSUM dolor sit amet, consectetur adipiscing elit. Morbi aliquam felis nec fermentum lobortis. Donec +fringilla lorem non scelerisque volutpat. Vestibulum eleifend commodo nulla sit amet commodo. Class +aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin +hendrerit consectetur dui, non convallis enim bibendum non. Curabitur elementum quam augue, ac +ullamcorper felis faucibus nec. Proin vestibulum risus rutrum nunc luctus aliquam at non +tellus. Curabitur congue, orci ut consectetur suscipit, ligula orci eleifend metus, ac aliquam nisl +orci a ligula. Aliquam aliquet mauris sed massa malesuada lobortis. Aenean odio eros, eleifend at +imperdiet nec, pulvinar vitae dui. Ut ullamcorper ligula ligula, vitae egestas urna rutrum +nec. Aenean aliquet mi eget tincidunt pharetra. Nam pellentesque enim et posuere +porttitor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis +egestas. + +PRETIUM velit, ut consectetur odio. Mauris ac mattis magna. Quisque tempus nunc non gravida +iaculis. Suspendisse sagittis justo nibh, a dapibus ligula scelerisque et. Suspendisse euismod +sapien in velit venenatis, in consequat libero lobortis. Maecenas sem purus, feugiat at dictum a, +viverra eget metus. Phasellus aliquet nulla eget pellentesque rutrum. Mauris ac porta ipsum. Aenean +vel imperdiet enim, sed egestas augue. + +TACULIS eros vehicula mauris vulputate molestie. Nulla non quam sit amet ex sagittis +gravida. Pellentesque at massa ac enim finibus egestas. Morbi et tincidunt leo, sed laoreet +neque. Duis in mollis lorem. Mauris a interdum dui. Donec mattis nulla eu libero sollicitudin +ornare. Phasellus lobortis, mi sit amet aliquam tempus, risus urna iaculis ante, id sodales magna +nulla non tellus. Nullam erat urna, molestie malesuada lacinia eu, interdum sed eros. Pellentesque +vestibulum mattis nibh, ut commodo mi posuere a. Donec ornare neque at arcu condimentum +tempus. Pellentesque vehicula velit id mauris faucibus volutpat. Integer sollicitudin sem nec nulla +accumsan, vitae eleifend nibh venenatis. Nulla ut rhoncus massa. + +CURSUS id turpis hendrerit tincidunt. Nullam pulvinar odio vel nisi dapibus sollicitudin. Maecenas +et odio eget nisl pretium malesuada. Cras ornare ipsum felis, pretium semper tortor finibus +pellentesque. Sed blandit tincidunt diam, quis venenatis metus pretium vitae. Praesent gravida +lectus sit amet metus mattis, sit amet interdum diam congue. Quisque vel efficitur augue. Quisque +ante velit, suscipit et nulla at, condimentum egestas justo. Suspendisse suscipit mauris vitae +egestas hendrerit. Duis gravida maximus accumsan. Integer mollis imperdiet tellus, et ornare dolor +ultrices interdum. Integer tempus dapibus dolor, sit amet viverra urna. Vestibulum ante ipsum primis +in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus vitae fermentum dui, eu malesuada +risus. Proin ut tincidunt nisl. + +VITAE scelerisque quam. Sed pharetra purus ac suscipit aliquet. In hac habitasse platea +dictumst. Etiam hendrerit diam porttitor nunc volutpat blandit. Sed commodo libero orci, at tempor +massa posuere vitae. Etiam non felis lacus. Donec pulvinar, libero non elementum gravida, risus erat +hendrerit magna, eget faucibus eros dolor aliquet quam. Curabitur sollicitudin dolor dui, venenatis +rutrum diam vulputate a. Phasellus in dignissim erat, vel porttitor ex. Nulla at magna +metus. Maecenas lobortis est sit amet ante luctus auctor. Etiam id tortor vel dui pretium varius vel +vitae elit. Sed augue elit, mattis sit amet nulla fringilla, volutpat porttitor nulla. Suspendisse +potenti. Praesent ac mauris in ex gravida semper. Donec lacinia magna eget ipsum bibendum mollis. diff --git a/tests/test_md_tw.py b/tests/test_md_tw.py index 7d9e4d9..d8a7f92 100644 --- a/tests/test_md_tw.py +++ b/tests/test_md_tw.py @@ -18,9 +18,13 @@ # along with markdown-textwrap (see COPYING). If not, see # <http://www.gnu.org/licenses/>. -from nose.tools import * +import textwrap + +from mistune import Renderer +from nose.tools import assert_equal from pkg_resources import resource_string, resource_filename +from md_tw import TWBlockLexer, TWInlineLexer, TWRenderer, TWMarkdown def _get_data(f): rs = resource_string(__name__, '/'.join(['data', f])) @@ -29,3 +33,147 @@ def _get_data(f): def _get_data_path(f): return resource_filename(__name__, '/'.join(['data', f])) + + +class TestTWBlockLexer(object): + + def setup(self): + self.bl = TWBlockLexer() + + + def test_default_rules_contents(self): + assert_equal(self.bl.default_rules, ['paragraph', 'text']) + + + def teardown(self): + pass + + +class TestTWInlineLexer(object): + + def setup(self): + renderer = Renderer() + self.il = TWInlineLexer(renderer) + + + def test_default_rules_contents(self): + assert_equal(self.il.default_rules, []) + + + def teardown(self): + pass + + +class TestTWRenderer(object): + + def setup(self): + pass + + + def test_tw_obj_with_default_width(self): + renderer = TWRenderer() + + # Check existence of textwrap.TexWrapper object. + assert isinstance(renderer.tw, textwrap.TextWrapper) + + # Check its width + assert_equal(renderer.tw.width, 72) + + + def test_tw_obj_with_custom_width(self): + renderer = TWRenderer(tw_width=80) + + # Check existence of textwrap.TexWrapper object. + assert isinstance(renderer.tw, textwrap.TextWrapper) + + # Check its width + assert_equal(renderer.tw.width, 80) + + + def test_tw_set_options_with_valid_opts(self): + renderer = TWRenderer() + + # Set valid options + renderer._tw_set_options( + width=80, + initial_indent='> ', + subsequent_indent=' ', + drop_whitespace=False) + + # Confirm options are set. + assert_equal(renderer.tw.width, 80) + assert_equal(renderer.tw.initial_indent, '> ') + assert_equal(renderer.tw.subsequent_indent, ' ') + assert_equal(renderer.tw.drop_whitespace, False) + + + def test_tw_set_options_with_invalid_opts(self): + renderer = TWRenderer() + + # Set invalid options + renderer._tw_set_options( + erase_bumps=True, + destroy_ampersands=False, + end_width='வருகிறேன்', + insert_between_paragraphs='time bombs') + + # Confirm options are not set. + assert_equal(getattr(renderer.tw, 'erase_bumps', None), None) + assert_equal(getattr(renderer.tw, 'destroy_ampersands', + None), None) + assert_equal(getattr(renderer.tw, 'end_width', None), None) + assert_equal(getattr(renderer.tw, 'insert_between_paragraphs', + None), None) + + + def teardown(self): + pass + + +class TestTWMarkdown(object): + + def setup(self): + self.md = TWMarkdown() + + + def test_renderer_obj(self): + assert isinstance(self.md.renderer, TWRenderer) + + + def test_inline_obj(self): + assert isinstance(self.md.inline, TWInlineLexer) + + + def test_block_obj(self): + assert isinstance(self.md.block, TWBlockLexer) + + + def teardown(self): + pass + + +class TestTextWrapParagraphs(object): + + def setup(self): + self.md = TWMarkdown() + + + def test_tw_plain_paragraphs(self): + txt = _get_data('paragraphs.md') + expected_wrapped_txt = _get_data('paragraphs-wrapped.md') + + wrapped_txt = self.md(txt) + assert_equal(wrapped_txt, expected_wrapped_txt) + + + def test_tw_paragraphs_with_inline(self): + txt = _get_data('paragraphs-with-inline.md') + expected_wrapped_txt = _get_data( + 'paragraphs-with-inline-wrapped.md') + + wrapped_txt = self.md(txt) + assert_equal(wrapped_txt, expected_wrapped_txt) + + + def teardown(self): + pass |