1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
"""This file tests the source code provided by the documentation.
See
- doctest documentation: https://docs.python.org/3/library/doctest.html
- Issue 443: https://github.com/collective/icalendar/issues/443
This file should be tests, too:
>>> print("Hello World!")
Hello World!
"""
import doctest
import importlib
import pathlib
import sys
import pytest
HERE = pathlib.Path(__file__).parent
PROJECT_PATH = HERE.parent
PYTHON_FILES = list(PROJECT_PATH.rglob("*.py"))
MODULE_NAMES = [
"recurring_ical_events",
]
@pytest.mark.parametrize("module_name", MODULE_NAMES)
def test_docstring_of_python_file(module_name):
"""This test runs doctest on the Python module."""
module = importlib.import_module(module_name)
test_result = doctest.testmod(module, name=module_name)
assert test_result.failed == 0, f"{test_result.failed} errors in {module_name}"
# This collection needs to exclude .tox and other subdirectories
DOCUMENT_PATHS = [PROJECT_PATH / "README.rst"]
@pytest.mark.parametrize("document", DOCUMENT_PATHS)
def test_documentation_file(document, env_for_doctest):
"""This test runs doctest on a documentation file.
functions are also replaced to work.
"""
test_result = doctest.testfile(
str(document),
module_relative=False,
globs=env_for_doctest,
raise_on_error=False,
)
assert test_result.failed == 0, f"{test_result.failed} errors in {document.name}"
def test_can_import_zoneinfo(env_for_doctest): # noqa: ARG001
"""Allow importing zoneinfo for tests."""
assert "zoneinfo" in sys.modules
|