|
1 | 1 | # coding: utf8 |
2 | 2 | from __future__ import unicode_literals |
3 | 3 | import itertools |
4 | | -import string |
5 | 4 | import os |
| 5 | +import pydoc |
| 6 | +import string |
6 | 7 | import sys |
7 | 8 | from contextlib import contextmanager |
8 | 9 |
|
@@ -136,6 +137,43 @@ def test_formatted_docstring(self): |
136 | 137 | 'Also has side effects']) |
137 | 138 | self.assertFSArraysEqualIgnoringFormatting(actual, expected) |
138 | 139 |
|
| 140 | + def test_unicode_docstrings(self): |
| 141 | + "A bit of a special case in Python 2" |
| 142 | + # issue 653 |
| 143 | + |
| 144 | + def foo(): |
| 145 | + u"åß∂ƒ" |
| 146 | + |
| 147 | + actual = replpainter.formatted_docstring( |
| 148 | + foo.__doc__, 40, config=setup_config()) |
| 149 | + expected = fsarray([u'åß∂ƒ']) |
| 150 | + self.assertFSArraysEqualIgnoringFormatting(actual, expected) |
| 151 | + |
| 152 | + def test_nonsense_docstrings(self): |
| 153 | + for docstring in [123, {}, [], ]: |
| 154 | + try: |
| 155 | + replpainter.formatted_docstring( |
| 156 | + docstring, 40, config=setup_config()) |
| 157 | + except Exception: |
| 158 | + self.fail('bad docstring caused crash: {!r}'.format(docstring)) |
| 159 | + |
| 160 | + def test_weird_boto_docstrings(self): |
| 161 | + # Boto does something like this. |
| 162 | + # botocore: botocore/docs/docstring.py |
| 163 | + class WeirdDocstring(str): |
| 164 | + # a mighty hack. See botocore/docs/docstring.py |
| 165 | + def expandtabs(self, tabsize=8): |
| 166 | + return u'asdfåß∂ƒ'.expandtabs(tabsize) |
| 167 | + |
| 168 | + def foo(): |
| 169 | + pass |
| 170 | + |
| 171 | + foo.__doc__ = WeirdDocstring() |
| 172 | + wd = pydoc.getdoc(foo) |
| 173 | + actual = replpainter.formatted_docstring(wd, 40, config=setup_config()) |
| 174 | + expected = fsarray([u'asdfåß∂ƒ']) |
| 175 | + self.assertFSArraysEqualIgnoringFormatting(actual, expected) |
| 176 | + |
139 | 177 | def test_paint_lasts_events(self): |
140 | 178 | actual = replpainter.paint_last_events(4, 100, ['a', 'b', 'c'], |
141 | 179 | config=setup_config()) |
|
0 commit comments