summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-08-12 20:39:09 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-08-12 20:39:09 (GMT)
commit389dec8bcf776cd60aa6abaea3d98dc904203b2d (patch)
treec8fedfc1f6620c1e05ba59d253bfa3e60959d6d3 /Lib/test
parentd6cbd34aadd9647c5c7e15e75ed224717567410c (diff)
downloadcpython-389dec8bcf776cd60aa6abaea3d98dc904203b2d.zip
cpython-389dec8bcf776cd60aa6abaea3d98dc904203b2d.tar.gz
cpython-389dec8bcf776cd60aa6abaea3d98dc904203b2d.tar.bz2
Issue #18585: Add :func:`textwrap.shorten` to collapse and truncate a piece of text to a given length.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_textwrap.py68
1 files changed, 59 insertions, 9 deletions
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py
index c86f5cf..20b7655 100644
--- a/Lib/test/test_textwrap.py
+++ b/Lib/test/test_textwrap.py
@@ -9,9 +9,8 @@
#
import unittest
-from test import support
-from textwrap import TextWrapper, wrap, fill, dedent, indent
+from textwrap import TextWrapper, wrap, fill, dedent, indent, shorten
class BaseTestCase(unittest.TestCase):
@@ -43,6 +42,10 @@ class BaseTestCase(unittest.TestCase):
"\nexpected %r\n"
"but got %r" % (expect, result))
+ def check_shorten(self, text, width, expect, **kwargs):
+ result = shorten(text, width, **kwargs)
+ self.check(result, expect)
+
class WrapTestCase(BaseTestCase):
@@ -777,12 +780,59 @@ class IndentTestCase(unittest.TestCase):
self.assertEqual(indent(text, prefix, predicate), expect)
-def test_main():
- support.run_unittest(WrapTestCase,
- LongWordTestCase,
- IndentTestCases,
- DedentTestCase,
- IndentTestCase)
+class ShortenTestCase(BaseTestCase):
+
+ def test_simple(self):
+ # Simple case: just words, spaces, and a bit of punctuation
+ text = "Hello there, how are you this fine day? I'm glad to hear it!"
+
+ self.check_shorten(text, 18, "Hello there, (...)")
+ self.check_shorten(text, len(text), text)
+ self.check_shorten(text, len(text) - 1,
+ "Hello there, how are you this fine day? "
+ "I'm glad to (...)")
+
+ def test_placeholder(self):
+ text = "Hello there, how are you this fine day? I'm glad to hear it!"
+
+ self.check_shorten(text, 17, "Hello there,$$", placeholder='$$')
+ self.check_shorten(text, 18, "Hello there, how$$", placeholder='$$')
+ self.check_shorten(text, 18, "Hello there, $$", placeholder=' $$')
+ self.check_shorten(text, len(text), text, placeholder='$$')
+ self.check_shorten(text, len(text) - 1,
+ "Hello there, how are you this fine day? "
+ "I'm glad to hear$$", placeholder='$$')
+
+ def test_empty_string(self):
+ self.check_shorten("", 6, "")
+
+ def test_whitespace(self):
+ # Whitespace collapsing
+ text = """
+ This is a paragraph that already has
+ line breaks and \t tabs too."""
+ self.check_shorten(text, 62,
+ "This is a paragraph that already has line "
+ "breaks and tabs too.")
+ self.check_shorten(text, 61,
+ "This is a paragraph that already has line "
+ "breaks and (...)")
+
+ self.check_shorten("hello world! ", 12, "hello world!")
+ self.check_shorten("hello world! ", 11, "hello (...)")
+ # The leading space is trimmed from the placeholder
+ # (it would be ugly otherwise).
+ self.check_shorten("hello world! ", 10, "(...)")
+
+ def test_width_too_small_for_placeholder(self):
+ wrapper = TextWrapper(width=8)
+ wrapper.shorten("x" * 20, placeholder="(......)")
+ with self.assertRaises(ValueError):
+ wrapper.shorten("x" * 20, placeholder="(.......)")
+
+ def test_first_word_too_long_but_placeholder_fits(self):
+ self.check_shorten("Helloo", 5, "(...)")
+
if __name__ == '__main__':
- test_main()
+ unittest.main()