sphinx/tests/test_util/test_util_docstrings.py
2024-11-22 21:54:26 +00:00

85 lines
2.8 KiB
Python

"""Test sphinx.util.docstrings."""
from __future__ import annotations
from sphinx.util.docstrings import (
prepare_commentdoc,
prepare_docstring,
separate_metadata,
)
def test_separate_metadata():
# metadata only
text = ':meta foo: bar\n:meta baz:\n'
docstring, metadata = separate_metadata(text)
assert docstring == ''
assert metadata == {'foo': 'bar', 'baz': ''}
# non metadata field list item
text = ':meta foo: bar\n:param baz:\n'
docstring, metadata = separate_metadata(text)
assert docstring == ':param baz:\n'
assert metadata == {'foo': 'bar'}
# field_list like text following just after paragraph is not a field_list
text = 'blah blah blah\n:meta foo: bar\n:meta baz:\n'
docstring, metadata = separate_metadata(text)
assert docstring == text
assert metadata == {}
# field_list like text following after blank line is a field_list
text = 'blah blah blah\n\n:meta foo: bar\n:meta baz:\n'
docstring, metadata = separate_metadata(text)
assert docstring == 'blah blah blah\n\n'
assert metadata == {'foo': 'bar', 'baz': ''}
# non field_list item breaks field_list
text = ':meta foo: bar\nblah blah blah\n:meta baz:\n'
docstring, metadata = separate_metadata(text)
assert docstring == 'blah blah blah\n:meta baz:\n'
assert metadata == {'foo': 'bar'}
def test_prepare_docstring():
docstring = """multiline docstring
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua::
Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
"""
assert prepare_docstring(docstring) == [
'multiline docstring',
'',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit,',
'sed do eiusmod tempor incididunt ut labore et dolore magna',
'aliqua::',
'',
' Ut enim ad minim veniam, quis nostrud exercitation',
' ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'',
]
docstring = """
multiline docstring with leading empty lines
"""
assert prepare_docstring(docstring) == [
'multiline docstring with leading empty lines',
'',
]
docstring = 'single line docstring'
assert prepare_docstring(docstring) == ['single line docstring', '']
def test_prepare_commentdoc():
assert prepare_commentdoc('hello world') == []
assert prepare_commentdoc('#: hello world') == ['hello world', '']
assert prepare_commentdoc('#: hello world') == [' hello world', '']
assert prepare_commentdoc('#: hello\n#: world\n') == ['hello', 'world', '']