diff options
author | Greg Ward <gward@python.net> | 2002-08-22 18:11:10 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2002-08-22 18:11:10 (GMT) |
commit | 90c0b071ed0245a3716c27ae2476ae2b6d889ffb (patch) | |
tree | 1529d6e72012a65c339784344216e0527954f90d /Lib/test/test_textwrap.py | |
parent | dbfb12148d59933273d9bf68cb0cbe5486b1ca61 (diff) | |
download | cpython-90c0b071ed0245a3716c27ae2476ae2b6d889ffb.zip cpython-90c0b071ed0245a3716c27ae2476ae2b6d889ffb.tar.gz cpython-90c0b071ed0245a3716c27ae2476ae2b6d889ffb.tar.bz2 |
Test script for the textwrap module. Kindly provided by Peter Hansen
<peter@engcorp.com> based on a test script that's been kicking around my
home directory for a couple of months now and only saw the light of day
because I included it when I sent textwrap.py to python-dev for review.
Diffstat (limited to 'Lib/test/test_textwrap.py')
-rw-r--r-- | Lib/test/test_textwrap.py | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py new file mode 100644 index 0000000..0074d3f --- /dev/null +++ b/Lib/test/test_textwrap.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python + +import unittest + +# import item under test +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))) + + + +# Note: a new TestCase instance is created before running each +# test method. +class WrapTestCase(WrapperTestCase): + + # called before each test method + def setUp(self): + self.wrapper = TextWrapper(width=45, fix_sentence_endings=True) + + + # Note: any methods that start with "test" are called automatically + # by the unittest framework. + + def testSimpleCases(self): + '''Simple case: just words, spaces, and a bit of punctuation.''' + + t = "Hello there, how are you this fine day? I'm glad to hear it!" + + # bizarre formatting intended to increase maintainability + subcases = [ + ( (t, 12), [ + "Hello there,", + "how are you", + "this fine", + "day? I'm", + "glad to hear", + "it!" + ] ), + ( (t, 42), [ + "Hello there, how are you this fine day?", + "I'm glad to hear it!" + ] ), + ( (t, 80), [ + t + ] ), + ] + + for test, expect in subcases: + result = wrap(*test) + self.check(result, expect) + + + def testWhitespace(self): + '''Whitespace munging and end-of-sentence detection.''' + + t = """\ +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! +""" + + # bizarre formatting intended to increase maintainability + 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(t) + self.check(result, expect) + + result = self.wrapper.fill(t) + self.check(result, '\n'.join(expect)) + + + def testWrappingShortToLong(self): + '''Wrapping to make short lines longer.''' + + t = "This is a\nshort paragraph." + + # bizarre formatting intended to increase maintainability + subcases = [ + ( (t, 20), [ + "This is a short", + "paragraph." + ] ), + ( (t, 40), [ + "This is a short paragraph." + ] ), + ] + + for test, expect in subcases: + result = wrap(*test) + self.check(result, expect) + + + def testHyphenated(self): + '''Test breaking hyphenated words.''' + + t = "this-is-a-useful-feature-for-reformatting-posts-from-tim-peters'ly" + + subcases = [ + ( (t, 40), [ + "this-is-a-useful-feature-for-", + "reformatting-posts-from-tim-peters'ly" + ] ), + ( (t, 41), [ + "this-is-a-useful-feature-for-", + "reformatting-posts-from-tim-peters'ly" + ] ), + ( (t, 42), [ + "this-is-a-useful-feature-for-reformatting-", + "posts-from-tim-peters'ly" + ] ), + ] + + for test, expect in subcases: + result = wrap(*test) + self.check(result, expect) + + + def test_split(self): + '''Ensure that the standard _split() method works as advertised + in the comments (don't you hate it when code and comments diverge?).''' + + t = "Hello there -- you goof-ball, use the -b option!" + + result = self.wrapper._split(t) + self.check(result, + ["Hello", " ", "there", " ", "--", " ", "you", " ", "goof-", + "ball,", " ", "use", " ", "the", " ", "-b", " ", "option!"]) + + + def testPoppins(self): + '''Please rename this test based on its purpose.''' + + t = ''' +Did you say "supercalifragilisticexpialidocious?" +How *do* you spell that odd word, anyways? +''' + # bizarre formatting intended to increase maintainability + subcases = [ + ( (t, 30), [ + 'Did you say "supercalifragilis', + 'ticexpialidocious?" How *do*', + 'you spell that odd word,', + 'anyways?' + ] ), + ( (t, 50), [ + 'Did you say "supercalifragilisticexpialidocious?"', + 'How *do* you spell that odd word, anyways?' + ] ), + ] + + for test, expect in subcases: + result = wrap(*test) + self.check(result, expect) + + + def testBreakLongWordsOff(self): + '''Test with break_long_words disabled.''' + t = ''' +Did you say "supercalifragilisticexpialidocious?" +How *do* you spell that odd word, anyways? +''' + self.wrapper.break_long_words = 0 + self.wrapper.width = 30 + result = self.wrapper.wrap(t) + expect = [ + 'Did you say', + '"supercalifragilisticexpialidocious?"', + 'How *do* you spell that odd', + 'word, anyways?' + ] + self.check(result, expect) + + # Same thing with kwargs passed to standalone wrap() function. + result = wrap(t, width=30, break_long_words=0) + 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).''' + + + def testFill(self): + '''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) + + + def testInitialIndent(self): + '''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) + + + def testSubsequentIndent(self): + '''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) + + +if __name__ == '__main__': + unittest.main()
\ No newline at end of file |