Merge pull request #2101 from wheerd/doctest-encoding
Added doctest encoding command line option
This commit is contained in:
commit
669332b7e0
1
AUTHORS
1
AUTHORS
|
@ -86,6 +86,7 @@ Lukas Bednar
|
||||||
Luke Murphy
|
Luke Murphy
|
||||||
Maciek Fijalkowski
|
Maciek Fijalkowski
|
||||||
Maho
|
Maho
|
||||||
|
Manuel Krebber
|
||||||
Marc Schlaich
|
Marc Schlaich
|
||||||
Marcin Bachry
|
Marcin Bachry
|
||||||
Mark Abramowitz
|
Mark Abramowitz
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
New Features
|
New Features
|
||||||
------------
|
------------
|
||||||
|
|
||||||
*
|
* Added an ini option ``doctest_encoding`` to specify which encoding to use for doctest files.
|
||||||
|
Thanks `@wheerd`_ for the PR (`#2101`_).
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
@ -38,11 +39,13 @@ Changes
|
||||||
.. _@davidszotten: https://github.com/davidszotten
|
.. _@davidszotten: https://github.com/davidszotten
|
||||||
.. _@fushi: https://github.com/fushi
|
.. _@fushi: https://github.com/fushi
|
||||||
.. _@mattduck: https://github.com/mattduck
|
.. _@mattduck: https://github.com/mattduck
|
||||||
|
.. _@wheerd: https://github.com/wheerd
|
||||||
|
|
||||||
.. _#1512: https://github.com/pytest-dev/pytest/issues/1512
|
.. _#1512: https://github.com/pytest-dev/pytest/issues/1512
|
||||||
.. _#1874: https://github.com/pytest-dev/pytest/pull/1874
|
.. _#1874: https://github.com/pytest-dev/pytest/pull/1874
|
||||||
.. _#1952: https://github.com/pytest-dev/pytest/pull/1952
|
.. _#1952: https://github.com/pytest-dev/pytest/pull/1952
|
||||||
.. _#2013: https://github.com/pytest-dev/pytest/issues/2013
|
.. _#2013: https://github.com/pytest-dev/pytest/issues/2013
|
||||||
|
.. _#2101: https://github.com/pytest-dev/pytest/pull/2101
|
||||||
|
|
||||||
|
|
||||||
3.0.5.dev0
|
3.0.5.dev0
|
||||||
|
|
|
@ -25,6 +25,7 @@ DOCTEST_REPORT_CHOICES = (
|
||||||
def pytest_addoption(parser):
|
def pytest_addoption(parser):
|
||||||
parser.addini('doctest_optionflags', 'option flags for doctests',
|
parser.addini('doctest_optionflags', 'option flags for doctests',
|
||||||
type="args", default=["ELLIPSIS"])
|
type="args", default=["ELLIPSIS"])
|
||||||
|
parser.addini("doctest_encoding", 'encoding used for doctest files', default="utf-8")
|
||||||
group = parser.getgroup("collect")
|
group = parser.getgroup("collect")
|
||||||
group.addoption("--doctest-modules",
|
group.addoption("--doctest-modules",
|
||||||
action="store_true", default=False,
|
action="store_true", default=False,
|
||||||
|
@ -162,7 +163,6 @@ def get_optionflags(parent):
|
||||||
flag_acc |= flag_lookup_table[flag]
|
flag_acc |= flag_lookup_table[flag]
|
||||||
return flag_acc
|
return flag_acc
|
||||||
|
|
||||||
|
|
||||||
class DoctestTextfile(pytest.Module):
|
class DoctestTextfile(pytest.Module):
|
||||||
obj = None
|
obj = None
|
||||||
|
|
||||||
|
@ -171,7 +171,8 @@ class DoctestTextfile(pytest.Module):
|
||||||
|
|
||||||
# inspired by doctest.testfile; ideally we would use it directly,
|
# inspired by doctest.testfile; ideally we would use it directly,
|
||||||
# but it doesn't support passing a custom checker
|
# but it doesn't support passing a custom checker
|
||||||
text = self.fspath.read()
|
encoding = self.config.getini("doctest_encoding")
|
||||||
|
text = self.fspath.read_text(encoding)
|
||||||
filename = str(self.fspath)
|
filename = str(self.fspath)
|
||||||
name = self.fspath.basename
|
name = self.fspath.basename
|
||||||
globs = {'__name__': '__main__'}
|
globs = {'__name__': '__main__'}
|
||||||
|
|
|
@ -471,7 +471,7 @@ class Testdir:
|
||||||
if not hasattr(self, '_olddir'):
|
if not hasattr(self, '_olddir'):
|
||||||
self._olddir = old
|
self._olddir = old
|
||||||
|
|
||||||
def _makefile(self, ext, args, kwargs):
|
def _makefile(self, ext, args, kwargs, encoding="utf-8"):
|
||||||
items = list(kwargs.items())
|
items = list(kwargs.items())
|
||||||
if args:
|
if args:
|
||||||
source = py.builtin._totext("\n").join(
|
source = py.builtin._totext("\n").join(
|
||||||
|
@ -490,7 +490,7 @@ class Testdir:
|
||||||
|
|
||||||
source_unicode = "\n".join([my_totext(line) for line in source.lines])
|
source_unicode = "\n".join([my_totext(line) for line in source.lines])
|
||||||
source = py.builtin._totext(source_unicode)
|
source = py.builtin._totext(source_unicode)
|
||||||
content = source.strip().encode("utf-8") # + "\n"
|
content = source.strip().encode(encoding) # + "\n"
|
||||||
#content = content.rstrip() + "\n"
|
#content = content.rstrip() + "\n"
|
||||||
p.write(content, "wb")
|
p.write(content, "wb")
|
||||||
if ret is None:
|
if ret is None:
|
||||||
|
|
|
@ -11,6 +11,19 @@ can change the pattern by issuing::
|
||||||
on the command line. Since version ``2.9``, ``--doctest-glob``
|
on the command line. Since version ``2.9``, ``--doctest-glob``
|
||||||
can be given multiple times in the command-line.
|
can be given multiple times in the command-line.
|
||||||
|
|
||||||
|
.. versionadded:: 3.1
|
||||||
|
|
||||||
|
You can specify the encoding that will be used for those doctest files
|
||||||
|
using the ``doctest_encoding`` ini option:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
# content of pytest.ini
|
||||||
|
[pytest]
|
||||||
|
doctest_encoding = latin1
|
||||||
|
|
||||||
|
The default encoding is UTF-8.
|
||||||
|
|
||||||
You can also trigger running of doctests
|
You can also trigger running of doctests
|
||||||
from docstrings in all python modules (including regular
|
from docstrings in all python modules (including regular
|
||||||
python test modules)::
|
python test modules)::
|
||||||
|
|
|
@ -129,6 +129,33 @@ class TestDoctests:
|
||||||
'*1 passed*',
|
'*1 passed*',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
' test_string, encoding',
|
||||||
|
[
|
||||||
|
(u'foo', 'ascii'),
|
||||||
|
(u'öäü', 'latin1'),
|
||||||
|
(u'öäü', 'utf-8')
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_encoding(self, testdir, test_string, encoding):
|
||||||
|
"""Test support for doctest_encoding ini option.
|
||||||
|
"""
|
||||||
|
testdir.makeini("""
|
||||||
|
[pytest]
|
||||||
|
doctest_encoding={0}
|
||||||
|
""".format(encoding))
|
||||||
|
doctest = u"""
|
||||||
|
>>> u"{0}"
|
||||||
|
{1}
|
||||||
|
""".format(test_string, repr(test_string))
|
||||||
|
testdir._makefile(".txt", [doctest], {}, encoding=encoding)
|
||||||
|
|
||||||
|
result = testdir.runpytest()
|
||||||
|
|
||||||
|
result.stdout.fnmatch_lines([
|
||||||
|
'*1 passed*',
|
||||||
|
])
|
||||||
|
|
||||||
def test_doctest_unexpected_exception(self, testdir):
|
def test_doctest_unexpected_exception(self, testdir):
|
||||||
testdir.maketxtfile("""
|
testdir.maketxtfile("""
|
||||||
>>> i = 0
|
>>> i = 0
|
||||||
|
|
Loading…
Reference in New Issue