2002-08-22 15:37:50 -03:00
|
|
|
#
|
|
|
|
# Test script for the textwrap module.
|
|
|
|
#
|
|
|
|
# Original tests written by Greg Ward <gward@python.net>.
|
|
|
|
# Converted to PyUnit by Peter Hansen <peter@engcorp.com>.
|
|
|
|
# Currently maintained by Greg Ward.
|
|
|
|
#
|
|
|
|
# $Id$
|
|
|
|
#
|
|
|
|
|
2002-08-22 15:11:10 -03:00
|
|
|
import unittest
|
2002-08-22 15:35:49 -03:00
|
|
|
from test import test_support
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
from textwrap import TextWrapper, wrap, fill
|
|
|
|
|
|
|
|
|
|
|
|
class WrapperTestCase(unittest.TestCase):
|
|
|
|
'''Parent class with utility methods for textwrap tests.'''
|
|
|
|
|
|
|
|
def show(self, textin):
|
|
|
|
if isinstance(textin, list):
|
|
|
|
result = []
|
|
|
|
for i in range(len(textin)):
|
|
|
|
result.append(" %d: %r" % (i, textin[i]))
|
|
|
|
result = '\n'.join(result)
|
|
|
|
elif isinstance(textin, (str, unicode)):
|
|
|
|
result = " %s\n" % repr(textin)
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def check(self, result, expect):
|
|
|
|
self.assertEquals(result, expect,
|
|
|
|
'Expected:\n%s\nbut got:\n%s' % (
|
|
|
|
self.show(result), self.show(expect)))
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
def check_wrap (self, text, width, expect):
|
|
|
|
result = wrap(text, width)
|
|
|
|
self.check(result, expect)
|
|
|
|
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
class WrapTestCase(WrapperTestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.wrapper = TextWrapper(width=45, fix_sentence_endings=True)
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_simple(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Simple case: just words, spaces, and a bit of punctuation.'''
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = "Hello there, how are you this fine day? I'm glad to hear it!"
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
self.check_wrap(text, 12,
|
|
|
|
["Hello there,",
|
|
|
|
"how are you",
|
|
|
|
"this fine",
|
|
|
|
"day? I'm",
|
|
|
|
"glad to hear",
|
|
|
|
"it!"])
|
|
|
|
self.check_wrap(text, 42,
|
|
|
|
["Hello there, how are you this fine day?",
|
|
|
|
"I'm glad to hear it!"])
|
|
|
|
self.check_wrap(text, 80, [text])
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_whitespace(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Whitespace munging and end-of-sentence detection.'''
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = """\
|
2002-08-22 15:11:10 -03:00
|
|
|
This is a paragraph that already has
|
|
|
|
line breaks. But some of its lines are much longer than the others,
|
|
|
|
so it needs to be wrapped.
|
|
|
|
Some lines are \ttabbed too.
|
|
|
|
What a mess!
|
|
|
|
"""
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
expect = ["This is a paragraph that already has line",
|
|
|
|
"breaks. But some of its lines are much",
|
|
|
|
"longer than the others, so it needs to be",
|
|
|
|
"wrapped. Some lines are tabbed too. What a",
|
|
|
|
"mess!"]
|
|
|
|
|
|
|
|
result = self.wrapper.wrap(text)
|
2002-08-22 15:11:10 -03:00
|
|
|
self.check(result, expect)
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
result = self.wrapper.fill(text)
|
2002-08-22 15:11:10 -03:00
|
|
|
self.check(result, '\n'.join(expect))
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_wrap_short(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Wrapping to make short lines longer.'''
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = "This is a\nshort paragraph."
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
self.check_wrap(text, 20, ["This is a short",
|
|
|
|
"paragraph."])
|
|
|
|
self.check_wrap(text, 40, ["This is a short paragraph."])
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_hyphenated(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Test breaking hyphenated words.'''
|
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = ("this-is-a-useful-feature-for-"
|
|
|
|
"reformatting-posts-from-tim-peters'ly")
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
self.check_wrap(text, 40,
|
|
|
|
["this-is-a-useful-feature-for-",
|
|
|
|
"reformatting-posts-from-tim-peters'ly"])
|
|
|
|
self.check_wrap(text, 41,
|
|
|
|
["this-is-a-useful-feature-for-",
|
|
|
|
"reformatting-posts-from-tim-peters'ly"])
|
|
|
|
self.check_wrap(text, 42,
|
|
|
|
["this-is-a-useful-feature-for-reformatting-",
|
|
|
|
"posts-from-tim-peters'ly"])
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
|
|
|
|
def test_split(self):
|
|
|
|
'''Ensure that the standard _split() method works as advertised
|
2002-08-22 15:35:49 -03:00
|
|
|
in the comments.'''
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = "Hello there -- you goof-ball, use the -b option!"
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
result = self.wrapper._split(text)
|
2002-08-22 15:11:10 -03:00
|
|
|
self.check(result,
|
|
|
|
["Hello", " ", "there", " ", "--", " ", "you", " ", "goof-",
|
|
|
|
"ball,", " ", "use", " ", "the", " ", "-b", " ", "option!"])
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_funky_punc(self):
|
|
|
|
'''Wrap text with long words and lots of punctuation.'''
|
2002-08-22 15:11:10 -03:00
|
|
|
|
2002-08-22 15:55:38 -03:00
|
|
|
text = '''
|
2002-08-22 15:11:10 -03:00
|
|
|
Did you say "supercalifragilisticexpialidocious?"
|
|
|
|
How *do* you spell that odd word, anyways?
|
|
|
|
'''
|
2002-08-22 15:55:38 -03:00
|
|
|
self.check_wrap(text, 30,
|
|
|
|
['Did you say "supercalifragilis',
|
|
|
|
'ticexpialidocious?" How *do*',
|
|
|
|
'you spell that odd word,',
|
|
|
|
'anyways?'])
|
|
|
|
self.check_wrap(text, 50,
|
|
|
|
['Did you say "supercalifragilisticexpialidocious?"',
|
|
|
|
'How *do* you spell that odd word, anyways?'])
|
2002-08-22 15:11:10 -03:00
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_long_words(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Test with break_long_words disabled.'''
|
2002-08-22 15:55:38 -03:00
|
|
|
text = '''
|
2002-08-22 15:11:10 -03:00
|
|
|
Did you say "supercalifragilisticexpialidocious?"
|
|
|
|
How *do* you spell that odd word, anyways?
|
|
|
|
'''
|
|
|
|
self.wrapper.break_long_words = 0
|
|
|
|
self.wrapper.width = 30
|
2002-08-22 15:55:38 -03:00
|
|
|
expect = ['Did you say',
|
|
|
|
'"supercalifragilisticexpialidocious?"',
|
|
|
|
'How *do* you spell that odd',
|
|
|
|
'word, anyways?'
|
|
|
|
]
|
|
|
|
result = self.wrapper.wrap(text)
|
2002-08-22 15:11:10 -03:00
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
# Same thing with kwargs passed to standalone wrap() function.
|
2002-08-22 15:55:38 -03:00
|
|
|
result = wrap(text, width=30, break_long_words=0)
|
2002-08-22 15:11:10 -03:00
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IndentTestCases(WrapperTestCase):
|
|
|
|
|
|
|
|
# called before each test method
|
|
|
|
def setUp(self):
|
|
|
|
self.testString = '''\
|
|
|
|
This paragraph will be filled, first without any indentation,
|
|
|
|
and then with some (including a hanging indent).'''
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_fill(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Test the fill() method.'''
|
|
|
|
|
|
|
|
expect = '''\
|
|
|
|
This paragraph will be filled, first
|
|
|
|
without any indentation, and then with
|
|
|
|
some (including a hanging indent).'''
|
|
|
|
|
|
|
|
result = fill(self.testString, 40)
|
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_initial_indent(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Test initial_indent parameter.'''
|
|
|
|
|
|
|
|
expect = [
|
|
|
|
" This paragraph will be filled,",
|
|
|
|
"first without any indentation, and then",
|
|
|
|
"with some (including a hanging indent)."]
|
|
|
|
|
|
|
|
result = wrap(self.testString, 40, initial_indent=" ")
|
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
expect = '''\
|
|
|
|
This paragraph will be filled,
|
|
|
|
first without any indentation, and then
|
|
|
|
with some (including a hanging indent).'''
|
|
|
|
|
|
|
|
result = fill(self.testString, 40, initial_indent=" ")
|
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_subsequent_indent(self):
|
2002-08-22 15:11:10 -03:00
|
|
|
'''Test subsequent_indent parameter.'''
|
|
|
|
|
|
|
|
expect = '''\
|
|
|
|
* This paragraph will be filled, first
|
|
|
|
without any indentation, and then
|
|
|
|
with some (including a hanging
|
|
|
|
indent).'''
|
|
|
|
|
|
|
|
result = fill(self.testString, 40, initial_indent=" * ",
|
|
|
|
subsequent_indent=" ")
|
|
|
|
self.check(result, expect)
|
|
|
|
|
|
|
|
|
2002-08-22 15:35:49 -03:00
|
|
|
def test_main():
|
|
|
|
suite = unittest.TestSuite()
|
|
|
|
suite.addTest(unittest.makeSuite(WrapTestCase))
|
|
|
|
suite.addTest(unittest.makeSuite(IndentTestCases))
|
|
|
|
test_support.run_suite(suite)
|
|
|
|
|
2002-08-22 15:11:10 -03:00
|
|
|
if __name__ == '__main__':
|
2002-08-22 15:35:49 -03:00
|
|
|
test_main()
|