blob: 5ff4bcca296084a3e601ae422a976ef4b00d546f [file] [log] [blame]
Greg Ward3dc94e12002-08-22 18:37:50 +00001#
2# Test script for the textwrap module.
3#
4# Original tests written by Greg Ward <gward@python.net>.
5# Converted to PyUnit by Peter Hansen <peter@engcorp.com>.
6# Currently maintained by Greg Ward.
7#
8# $Id$
9#
10
Greg Ward90c0b072002-08-22 18:11:10 +000011import unittest
Greg Wardf6765782002-08-22 18:35:49 +000012from test import test_support
Greg Ward90c0b072002-08-22 18:11:10 +000013
Greg Ward9e082f42003-05-08 01:58:26 +000014from textwrap import TextWrapper, wrap, fill, dedent
Greg Ward90c0b072002-08-22 18:11:10 +000015
16
Greg Ward13c53c62002-08-22 18:57:26 +000017class BaseTestCase(unittest.TestCase):
Greg Ward90c0b072002-08-22 18:11:10 +000018 '''Parent class with utility methods for textwrap tests.'''
19
20 def show(self, textin):
21 if isinstance(textin, list):
22 result = []
23 for i in range(len(textin)):
24 result.append(" %d: %r" % (i, textin[i]))
25 result = '\n'.join(result)
Raymond Hettinger7a70ea42003-09-17 05:50:59 +000026 elif isinstance(textin, basestring):
Greg Ward90c0b072002-08-22 18:11:10 +000027 result = " %s\n" % repr(textin)
28 return result
29
30
31 def check(self, result, expect):
Guido van Rossum327af772002-08-22 20:13:47 +000032 self.assertEquals(result, expect,
Greg Ward9ad15a32002-08-22 19:47:27 +000033 'expected:\n%s\nbut got:\n%s' % (
34 self.show(expect), self.show(result)))
Greg Ward90c0b072002-08-22 18:11:10 +000035
Guido van Rossumeb287a22002-10-02 15:47:32 +000036 def check_wrap(self, text, width, expect, **kwargs):
37 result = wrap(text, width, **kwargs)
Greg Wardee413842002-08-22 18:55:38 +000038 self.check(result, expect)
39
Greg Wardd1a72a02002-10-31 16:11:18 +000040 def check_split(self, text, expect):
41 result = self.wrapper._split(text)
Greg Ward715debd2002-08-22 21:16:25 +000042 self.assertEquals(result, expect,
43 "\nexpected %r\n"
44 "but got %r" % (expect, result))
45
Greg Ward90c0b072002-08-22 18:11:10 +000046
Greg Ward13c53c62002-08-22 18:57:26 +000047class WrapTestCase(BaseTestCase):
Greg Ward90c0b072002-08-22 18:11:10 +000048
Greg Ward90c0b072002-08-22 18:11:10 +000049 def setUp(self):
Greg Wardf0ba7642004-05-13 01:53:10 +000050 self.wrapper = TextWrapper(width=45)
Greg Ward90c0b072002-08-22 18:11:10 +000051
Greg Wardf6765782002-08-22 18:35:49 +000052 def test_simple(self):
Guido van Rossum327af772002-08-22 20:13:47 +000053 # Simple case: just words, spaces, and a bit of punctuation
Greg Ward90c0b072002-08-22 18:11:10 +000054
Greg Wardee413842002-08-22 18:55:38 +000055 text = "Hello there, how are you this fine day? I'm glad to hear it!"
Greg Ward90c0b072002-08-22 18:11:10 +000056
Greg Wardee413842002-08-22 18:55:38 +000057 self.check_wrap(text, 12,
58 ["Hello there,",
59 "how are you",
60 "this fine",
61 "day? I'm",
62 "glad to hear",
63 "it!"])
64 self.check_wrap(text, 42,
65 ["Hello there, how are you this fine day?",
66 "I'm glad to hear it!"])
67 self.check_wrap(text, 80, [text])
Greg Ward90c0b072002-08-22 18:11:10 +000068
69
Greg Wardf6765782002-08-22 18:35:49 +000070 def test_whitespace(self):
Guido van Rossum327af772002-08-22 20:13:47 +000071 # Whitespace munging and end-of-sentence detection
Greg Ward90c0b072002-08-22 18:11:10 +000072
Greg Wardee413842002-08-22 18:55:38 +000073 text = """\
Greg Ward90c0b072002-08-22 18:11:10 +000074This is a paragraph that already has
75line breaks. But some of its lines are much longer than the others,
76so it needs to be wrapped.
77Some lines are \ttabbed too.
78What a mess!
79"""
80
Greg Wardee413842002-08-22 18:55:38 +000081 expect = ["This is a paragraph that already has line",
82 "breaks. But some of its lines are much",
83 "longer than the others, so it needs to be",
84 "wrapped. Some lines are tabbed too. What a",
85 "mess!"]
Greg Ward90c0b072002-08-22 18:11:10 +000086
Greg Wardf0ba7642004-05-13 01:53:10 +000087 wrapper = TextWrapper(45, fix_sentence_endings=True)
88 result = wrapper.wrap(text)
Greg Ward90c0b072002-08-22 18:11:10 +000089 self.check(result, expect)
90
Greg Wardf0ba7642004-05-13 01:53:10 +000091 result = wrapper.fill(text)
Greg Ward90c0b072002-08-22 18:11:10 +000092 self.check(result, '\n'.join(expect))
93
Greg Wardf0ba7642004-05-13 01:53:10 +000094 def test_fix_sentence_endings(self):
95 wrapper = TextWrapper(60, fix_sentence_endings=True)
Greg Ward90c0b072002-08-22 18:11:10 +000096
Greg Wardf0ba7642004-05-13 01:53:10 +000097 # SF #847346: ensure that fix_sentence_endings=True does the
98 # right thing even on input short enough that it doesn't need to
99 # be wrapped.
100 text = "A short line. Note the single space."
101 expect = ["A short line. Note the single space."]
102 self.check(wrapper.wrap(text), expect)
103
104 # Test some of the hairy end cases that _fix_sentence_endings()
105 # is supposed to handle (the easy stuff is tested in
106 # test_whitespace() above).
107 text = "Well, Doctor? What do you think?"
108 expect = ["Well, Doctor? What do you think?"]
109 self.check(wrapper.wrap(text), expect)
110
111 text = "Well, Doctor?\nWhat do you think?"
112 self.check(wrapper.wrap(text), expect)
113
114 text = 'I say, chaps! Anyone for "tennis?"\nHmmph!'
115 expect = ['I say, chaps! Anyone for "tennis?" Hmmph!']
116 self.check(wrapper.wrap(text), expect)
117
118 wrapper.width = 20
119 expect = ['I say, chaps!', 'Anyone for "tennis?"', 'Hmmph!']
120 self.check(wrapper.wrap(text), expect)
121
122 text = 'And she said, "Go to hell!"\nCan you believe that?'
123 expect = ['And she said, "Go to',
124 'hell!" Can you',
125 'believe that?']
126 self.check(wrapper.wrap(text), expect)
127
128 wrapper.width = 60
129 expect = ['And she said, "Go to hell!" Can you believe that?']
130 self.check(wrapper.wrap(text), expect)
131
Greg Wardf6765782002-08-22 18:35:49 +0000132 def test_wrap_short(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000133 # Wrapping to make short lines longer
Greg Ward90c0b072002-08-22 18:11:10 +0000134
Greg Wardee413842002-08-22 18:55:38 +0000135 text = "This is a\nshort paragraph."
Greg Ward90c0b072002-08-22 18:11:10 +0000136
Greg Wardee413842002-08-22 18:55:38 +0000137 self.check_wrap(text, 20, ["This is a short",
138 "paragraph."])
139 self.check_wrap(text, 40, ["This is a short paragraph."])
Greg Ward90c0b072002-08-22 18:11:10 +0000140
141
Guido van Rossumeb287a22002-10-02 15:47:32 +0000142 def test_wrap_short_1line(self):
143 # Test endcases
144
145 text = "This is a short line."
146
147 self.check_wrap(text, 30, ["This is a short line."])
148 self.check_wrap(text, 30, ["(1) This is a short line."],
149 initial_indent="(1) ")
150
151
Greg Wardf6765782002-08-22 18:35:49 +0000152 def test_hyphenated(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000153 # Test breaking hyphenated words
Greg Ward90c0b072002-08-22 18:11:10 +0000154
Greg Wardee413842002-08-22 18:55:38 +0000155 text = ("this-is-a-useful-feature-for-"
156 "reformatting-posts-from-tim-peters'ly")
Greg Ward90c0b072002-08-22 18:11:10 +0000157
Greg Wardee413842002-08-22 18:55:38 +0000158 self.check_wrap(text, 40,
159 ["this-is-a-useful-feature-for-",
160 "reformatting-posts-from-tim-peters'ly"])
161 self.check_wrap(text, 41,
162 ["this-is-a-useful-feature-for-",
163 "reformatting-posts-from-tim-peters'ly"])
164 self.check_wrap(text, 42,
165 ["this-is-a-useful-feature-for-reformatting-",
166 "posts-from-tim-peters'ly"])
Greg Ward90c0b072002-08-22 18:11:10 +0000167
Greg Ward9ad15a32002-08-22 19:47:27 +0000168 def test_em_dash(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000169 # Test text with em-dashes
Greg Ward9ad15a32002-08-22 19:47:27 +0000170 text = "Em-dashes should be written -- thus."
171 self.check_wrap(text, 25,
172 ["Em-dashes should be",
173 "written -- thus."])
174
175 # Probe the boundaries of the properly written em-dash,
176 # ie. " -- ".
177 self.check_wrap(text, 29,
178 ["Em-dashes should be written",
179 "-- thus."])
180 expect = ["Em-dashes should be written --",
181 "thus."]
182 self.check_wrap(text, 30, expect)
183 self.check_wrap(text, 35, expect)
184 self.check_wrap(text, 36,
185 ["Em-dashes should be written -- thus."])
Guido van Rossum327af772002-08-22 20:13:47 +0000186
Greg Ward9ad15a32002-08-22 19:47:27 +0000187 # The improperly written em-dash is handled too, because
188 # it's adjacent to non-whitespace on both sides.
189 text = "You can also do--this or even---this."
190 expect = ["You can also do",
191 "--this or even",
192 "---this."]
193 self.check_wrap(text, 15, expect)
194 self.check_wrap(text, 16, expect)
195 expect = ["You can also do--",
196 "this or even---",
197 "this."]
198 self.check_wrap(text, 17, expect)
199 self.check_wrap(text, 19, expect)
200 expect = ["You can also do--this or even",
201 "---this."]
202 self.check_wrap(text, 29, expect)
203 self.check_wrap(text, 31, expect)
204 expect = ["You can also do--this or even---",
205 "this."]
206 self.check_wrap(text, 32, expect)
207 self.check_wrap(text, 35, expect)
208
209 # All of the above behaviour could be deduced by probing the
210 # _split() method.
211 text = "Here's an -- em-dash and--here's another---and another!"
Greg Ward9ad15a32002-08-22 19:47:27 +0000212 expect = ["Here's", " ", "an", " ", "--", " ", "em-", "dash", " ",
213 "and", "--", "here's", " ", "another", "---",
214 "and", " ", "another!"]
Greg Wardd1a72a02002-10-31 16:11:18 +0000215 self.check_split(text, expect)
Greg Ward90c0b072002-08-22 18:11:10 +0000216
Greg Wardc6edb372002-08-22 21:27:05 +0000217 text = "and then--bam!--he was gone"
218 expect = ["and", " ", "then", "--", "bam!", "--",
219 "he", " ", "was", " ", "gone"]
Greg Wardd1a72a02002-10-31 16:11:18 +0000220 self.check_split(text, expect)
Greg Wardc6edb372002-08-22 21:27:05 +0000221
222
Greg Ward34f995b2002-08-22 21:10:07 +0000223 def test_unix_options (self):
224 # Test that Unix-style command-line options are wrapped correctly.
225 # Both Optik (OptionParser) and Docutils rely on this behaviour!
226
227 text = "You should use the -n option, or --dry-run in its long form."
228 self.check_wrap(text, 20,
229 ["You should use the",
230 "-n option, or --dry-",
231 "run in its long",
232 "form."])
233 self.check_wrap(text, 21,
234 ["You should use the -n",
235 "option, or --dry-run",
236 "in its long form."])
237 expect = ["You should use the -n option, or",
238 "--dry-run in its long form."]
239 self.check_wrap(text, 32, expect)
240 self.check_wrap(text, 34, expect)
241 self.check_wrap(text, 35, expect)
242 self.check_wrap(text, 38, expect)
243 expect = ["You should use the -n option, or --dry-",
244 "run in its long form."]
245 self.check_wrap(text, 39, expect)
246 self.check_wrap(text, 41, expect)
247 expect = ["You should use the -n option, or --dry-run",
248 "in its long form."]
249 self.check_wrap(text, 42, expect)
250
Greg Ward24a1c9c2002-08-22 21:12:54 +0000251 # Again, all of the above can be deduced from _split().
252 text = "the -n option, or --dry-run or --dryrun"
Greg Ward24a1c9c2002-08-22 21:12:54 +0000253 expect = ["the", " ", "-n", " ", "option,", " ", "or", " ",
254 "--dry-", "run", " ", "or", " ", "--dryrun"]
Greg Wardd1a72a02002-10-31 16:11:18 +0000255 self.check_split(text, expect)
256
257 def test_funky_hyphens (self):
258 # Screwy edge cases cooked up by David Goodger. All reported
259 # in SF bug #596434.
260 self.check_split("what the--hey!", ["what", " ", "the", "--", "hey!"])
261 self.check_split("what the--", ["what", " ", "the--"])
262 self.check_split("what the--.", ["what", " ", "the--."])
263 self.check_split("--text--.", ["--text--."])
264
Greg Wardcc55cb92003-05-07 01:19:22 +0000265 # When I first read bug #596434, this is what I thought David
266 # was talking about. I was wrong; these have always worked
267 # fine. The real problem is tested in test_funky_parens()
268 # below...
Greg Wardd1a72a02002-10-31 16:11:18 +0000269 self.check_split("--option", ["--option"])
270 self.check_split("--option-opt", ["--option-", "opt"])
Greg Wardcc55cb92003-05-07 01:19:22 +0000271 self.check_split("foo --option-opt bar",
272 ["foo", " ", "--option-", "opt", " ", "bar"])
273
274 def test_funky_parens (self):
275 # Second part of SF bug #596434: long option strings inside
276 # parentheses.
277 self.check_split("foo (--option) bar",
278 ["foo", " ", "(--option)", " ", "bar"])
279
280 # Related stuff -- make sure parens work in simpler contexts.
281 self.check_split("foo (bar) baz",
282 ["foo", " ", "(bar)", " ", "baz"])
283 self.check_split("blah (ding dong), wubba",
284 ["blah", " ", "(ding", " ", "dong),",
285 " ", "wubba"])
Greg Ward24a1c9c2002-08-22 21:12:54 +0000286
Greg Ward24cbbcb2002-12-09 16:27:15 +0000287 def test_initial_whitespace(self):
288 # SF bug #622849 reported inconsistent handling of leading
289 # whitespace; let's test that a bit, shall we?
290 text = " This is a sentence with leading whitespace."
291 self.check_wrap(text, 50,
292 [" This is a sentence with leading whitespace."])
293 self.check_wrap(text, 30,
294 [" This is a sentence with", "leading whitespace."])
295
Greg Wardc7e3c5e2002-12-09 16:32:41 +0000296 def test_unicode(self):
297 # *Very* simple test of wrapping Unicode strings. I'm sure
298 # there's more to it than this, but let's at least make
299 # sure textwrap doesn't crash on Unicode input!
300 text = u"Hello there, how are you today?"
301 self.check_wrap(text, 50, [u"Hello there, how are you today?"])
302 self.check_wrap(text, 20, [u"Hello there, how are", "you today?"])
303 olines = self.wrapper.wrap(text)
304 assert isinstance(olines, list) and isinstance(olines[0], unicode)
305 otext = self.wrapper.fill(text)
306 assert isinstance(otext, unicode)
307
Greg Ward90c0b072002-08-22 18:11:10 +0000308 def test_split(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000309 # Ensure that the standard _split() method works as advertised
310 # in the comments
Greg Ward90c0b072002-08-22 18:11:10 +0000311
Greg Wardee413842002-08-22 18:55:38 +0000312 text = "Hello there -- you goof-ball, use the -b option!"
Greg Ward90c0b072002-08-22 18:11:10 +0000313
Greg Wardee413842002-08-22 18:55:38 +0000314 result = self.wrapper._split(text)
Greg Ward90c0b072002-08-22 18:11:10 +0000315 self.check(result,
316 ["Hello", " ", "there", " ", "--", " ", "you", " ", "goof-",
317 "ball,", " ", "use", " ", "the", " ", "-b", " ", "option!"])
318
Greg Ward49128572003-05-07 00:54:42 +0000319 def test_bad_width(self):
320 # Ensure that width <= 0 is caught.
321 text = "Whatever, it doesn't matter."
322 self.assertRaises(ValueError, wrap, text, 0)
323 self.assertRaises(ValueError, wrap, text, -1)
324
Greg Ward90c0b072002-08-22 18:11:10 +0000325
Greg Wardfd030e42002-08-22 19:02:37 +0000326class LongWordTestCase (BaseTestCase):
327 def setUp(self):
328 self.wrapper = TextWrapper()
Greg Ward24cbbcb2002-12-09 16:27:15 +0000329 self.text = '''\
Greg Ward90c0b072002-08-22 18:11:10 +0000330Did you say "supercalifragilisticexpialidocious?"
331How *do* you spell that odd word, anyways?
332'''
Greg Wardfd030e42002-08-22 19:02:37 +0000333
334 def test_break_long(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000335 # Wrap text with long words and lots of punctuation
Greg Wardfd030e42002-08-22 19:02:37 +0000336
337 self.check_wrap(self.text, 30,
Greg Wardee413842002-08-22 18:55:38 +0000338 ['Did you say "supercalifragilis',
339 'ticexpialidocious?" How *do*',
340 'you spell that odd word,',
341 'anyways?'])
Greg Wardfd030e42002-08-22 19:02:37 +0000342 self.check_wrap(self.text, 50,
Greg Wardee413842002-08-22 18:55:38 +0000343 ['Did you say "supercalifragilisticexpialidocious?"',
344 'How *do* you spell that odd word, anyways?'])
Greg Ward90c0b072002-08-22 18:11:10 +0000345
Raymond Hettingerc11dbcd2003-08-30 14:43:55 +0000346 # SF bug 797650. Prevent an infinite loop by making sure that at
347 # least one character gets split off on every pass.
348 self.check_wrap('-'*10+'hello', 10,
349 ['----------',
350 ' h',
351 ' e',
352 ' l',
353 ' l',
354 ' o'],
355 subsequent_indent = ' '*15)
Greg Ward90c0b072002-08-22 18:11:10 +0000356
Guido van Rossum327af772002-08-22 20:13:47 +0000357 def test_nobreak_long(self):
358 # Test with break_long_words disabled
Greg Ward90c0b072002-08-22 18:11:10 +0000359 self.wrapper.break_long_words = 0
360 self.wrapper.width = 30
Greg Wardee413842002-08-22 18:55:38 +0000361 expect = ['Did you say',
362 '"supercalifragilisticexpialidocious?"',
363 'How *do* you spell that odd',
364 'word, anyways?'
Guido van Rossum327af772002-08-22 20:13:47 +0000365 ]
Greg Wardfd030e42002-08-22 19:02:37 +0000366 result = self.wrapper.wrap(self.text)
Greg Ward90c0b072002-08-22 18:11:10 +0000367 self.check(result, expect)
368
369 # Same thing with kwargs passed to standalone wrap() function.
Greg Wardfd030e42002-08-22 19:02:37 +0000370 result = wrap(self.text, width=30, break_long_words=0)
Greg Ward90c0b072002-08-22 18:11:10 +0000371 self.check(result, expect)
372
373
Greg Ward13c53c62002-08-22 18:57:26 +0000374class IndentTestCases(BaseTestCase):
Greg Ward90c0b072002-08-22 18:11:10 +0000375
376 # called before each test method
377 def setUp(self):
Greg Wardf69d3c92002-08-22 19:06:45 +0000378 self.text = '''\
Greg Ward90c0b072002-08-22 18:11:10 +0000379This paragraph will be filled, first without any indentation,
380and then with some (including a hanging indent).'''
381
382
Greg Wardf6765782002-08-22 18:35:49 +0000383 def test_fill(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000384 # Test the fill() method
Greg Ward90c0b072002-08-22 18:11:10 +0000385
386 expect = '''\
387This paragraph will be filled, first
388without any indentation, and then with
389some (including a hanging indent).'''
390
Greg Wardf69d3c92002-08-22 19:06:45 +0000391 result = fill(self.text, 40)
Greg Ward90c0b072002-08-22 18:11:10 +0000392 self.check(result, expect)
393
394
Greg Wardf6765782002-08-22 18:35:49 +0000395 def test_initial_indent(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000396 # Test initial_indent parameter
Greg Ward90c0b072002-08-22 18:11:10 +0000397
Greg Wardf69d3c92002-08-22 19:06:45 +0000398 expect = [" This paragraph will be filled,",
399 "first without any indentation, and then",
400 "with some (including a hanging indent)."]
401 result = wrap(self.text, 40, initial_indent=" ")
Greg Ward90c0b072002-08-22 18:11:10 +0000402 self.check(result, expect)
403
Greg Wardf69d3c92002-08-22 19:06:45 +0000404 expect = "\n".join(expect)
405 result = fill(self.text, 40, initial_indent=" ")
Greg Ward90c0b072002-08-22 18:11:10 +0000406 self.check(result, expect)
407
408
Greg Wardf6765782002-08-22 18:35:49 +0000409 def test_subsequent_indent(self):
Guido van Rossum327af772002-08-22 20:13:47 +0000410 # Test subsequent_indent parameter
Greg Ward90c0b072002-08-22 18:11:10 +0000411
412 expect = '''\
413 * This paragraph will be filled, first
414 without any indentation, and then
415 with some (including a hanging
416 indent).'''
417
Greg Wardf69d3c92002-08-22 19:06:45 +0000418 result = fill(self.text, 40,
419 initial_indent=" * ", subsequent_indent=" ")
Greg Ward90c0b072002-08-22 18:11:10 +0000420 self.check(result, expect)
421
422
Greg Ward9e082f42003-05-08 01:58:26 +0000423# Despite the similar names, DedentTestCase is *not* the inverse
424# of IndentTestCase!
425class DedentTestCase(unittest.TestCase):
426
427 def test_dedent_nomargin(self):
428 # No lines indented.
429 text = "Hello there.\nHow are you?\nOh good, I'm glad."
430 self.assertEquals(dedent(text), text)
431
432 # Similar, with a blank line.
433 text = "Hello there.\n\nBoo!"
434 self.assertEquals(dedent(text), text)
435
436 # Some lines indented, but overall margin is still zero.
437 text = "Hello there.\n This is indented."
438 self.assertEquals(dedent(text), text)
439
440 # Again, add a blank line.
441 text = "Hello there.\n\n Boo!\n"
442 self.assertEquals(dedent(text), text)
443
444 def test_dedent_even(self):
445 # All lines indented by two spaces.
446 text = " Hello there.\n How are ya?\n Oh good."
447 expect = "Hello there.\nHow are ya?\nOh good."
448 self.assertEquals(dedent(text), expect)
449
450 # Same, with blank lines.
451 text = " Hello there.\n\n How are ya?\n Oh good.\n"
452 expect = "Hello there.\n\nHow are ya?\nOh good.\n"
453 self.assertEquals(dedent(text), expect)
454
455 # Now indent one of the blank lines.
456 text = " Hello there.\n \n How are ya?\n Oh good.\n"
457 expect = "Hello there.\n\nHow are ya?\nOh good.\n"
458 self.assertEquals(dedent(text), expect)
459
460 def test_dedent_uneven(self):
461 # Lines indented unevenly.
462 text = '''\
463 def foo():
464 while 1:
465 return foo
466 '''
467 expect = '''\
468def foo():
469 while 1:
470 return foo
471'''
472 self.assertEquals(dedent(text), expect)
473
474 # Uneven indentation with a blank line.
475 text = " Foo\n Bar\n\n Baz\n"
476 expect = "Foo\n Bar\n\n Baz\n"
477 self.assertEquals(dedent(text), expect)
478
479 # Uneven indentation with a whitespace-only line.
480 text = " Foo\n Bar\n \n Baz\n"
481 expect = "Foo\n Bar\n\n Baz\n"
482 self.assertEquals(dedent(text), expect)
483
484
485
Greg Wardf6765782002-08-22 18:35:49 +0000486def test_main():
Greg Ward9e082f42003-05-08 01:58:26 +0000487 test_support.run_unittest(WrapTestCase,
488 LongWordTestCase,
489 IndentTestCases,
490 DedentTestCase)
Greg Wardf6765782002-08-22 18:35:49 +0000491
Greg Ward90c0b072002-08-22 18:11:10 +0000492if __name__ == '__main__':
Greg Wardf6765782002-08-22 18:35:49 +0000493 test_main()