def test_pyattribute(app): text = (".. py:class:: Class\n" "\n" " .. py:attribute:: attr\n" " :type: str\n" " :value: ''\n") domain = app.env.get_domain('py') doctree = restructuredtext.parse(app, text) assert_node(doctree, (addnodes.index, [ desc, ([desc_signature, ([desc_annotation, "class "], [desc_name, "Class"]) ], [desc_content, (addnodes.index, desc)]) ])) assert_node(doctree[1][1][0], addnodes.index, entries=[('single', 'attr (Class attribute)', 'Class.attr', '', None)]) assert_node(doctree[1][1][1], ([ desc_signature, ([desc_name, "attr"], [desc_annotation, ": str" ], [desc_annotation, " = ''"]) ], [desc_content, ()])) assert 'Class.attr' in domain.objects assert domain.objects['Class.attr'] == ('index', 'attribute')
def test_glossary_comment2(app): text = (".. glossary::\n" "\n" " term1\n" " description\n" "\n" " .. term2\n" " term3\n" " description\n" " description\n") doctree = restructuredtext.parse(app, text) assert_node(doctree, ( [glossary, definition_list, ([definition_list_item, ([term, ("term1", index)], definition)], [definition_list_item, ([term, ("term3", index)], definition)])], )) assert_node(doctree[0][0][0][1], [nodes.definition, nodes.paragraph, "description"]) assert_node(doctree[0][0][1][1], [nodes.definition, nodes.paragraph, ("description\n" "description")])
def test_js_function(app): text = ".. js:function:: sum(a, b)" doctree = restructuredtext.parse(app, text) assert_node(doctree, (addnodes.index, [ desc, ([ desc_signature, ([desc_name, ([desc_sig_name, "sum"])], desc_parameterlist) ], [desc_content, ()]) ])) assert_node(doctree[1][0][1], [ desc_parameterlist, ([desc_parameter, ([desc_sig_name, "a"])], [desc_parameter, ([desc_sig_name, "b"])]) ]) assert_node(doctree[0], addnodes.index, entries=[("single", "sum() (built-in function)", "sum", "", None)]) assert_node(doctree[1], addnodes.desc, domain="js", objtype="function", noindex=False)
def test_autodoc_typehints_description_for_invalid_node(app): text = ".. py:function:: hello; world" restructuredtext.parse(app, text) # raises no error
def test_pymethod_options(app): text = (".. py:class:: Class\n" "\n" " .. py:method:: meth1\n" " .. py:method:: meth2\n" " :classmethod:\n" " .. py:method:: meth3\n" " :staticmethod:\n" " .. py:method:: meth4\n" " :async:\n" " .. py:method:: meth5\n" " :property:\n" " .. py:method:: meth6\n" " :abstractmethod:\n") domain = app.env.get_domain('py') doctree = restructuredtext.parse(app, text) assert_node(doctree, (addnodes.index, [desc, ([desc_signature, ([desc_annotation, "class "], [desc_name, "Class"])], [desc_content, (addnodes.index, desc, addnodes.index, desc, addnodes.index, desc, addnodes.index, desc, addnodes.index, desc, addnodes.index, desc)])])) # method assert_node(doctree[1][1][0], addnodes.index, entries=[('single', 'meth1() (Class method)', 'Class.meth1', '', None)]) assert_node(doctree[1][1][1], ([desc_signature, ([desc_name, "meth1"], [desc_parameterlist, ()])], [desc_content, ()])) assert 'Class.meth1' in domain.objects assert domain.objects['Class.meth1'] == ('index', 'method') # :classmethod: assert_node(doctree[1][1][2], addnodes.index, entries=[('single', 'meth2() (Class class method)', 'Class.meth2', '', None)]) assert_node(doctree[1][1][3], ([desc_signature, ([desc_annotation, "classmethod "], [desc_name, "meth2"], [desc_parameterlist, ()])], [desc_content, ()])) assert 'Class.meth2' in domain.objects assert domain.objects['Class.meth2'] == ('index', 'method') # :staticmethod: assert_node(doctree[1][1][4], addnodes.index, entries=[('single', 'meth3() (Class static method)', 'Class.meth3', '', None)]) assert_node(doctree[1][1][5], ([desc_signature, ([desc_annotation, "static "], [desc_name, "meth3"], [desc_parameterlist, ()])], [desc_content, ()])) assert 'Class.meth3' in domain.objects assert domain.objects['Class.meth3'] == ('index', 'method') # :async: assert_node(doctree[1][1][6], addnodes.index, entries=[('single', 'meth4() (Class method)', 'Class.meth4', '', None)]) assert_node(doctree[1][1][7], ([desc_signature, ([desc_annotation, "async "], [desc_name, "meth4"], [desc_parameterlist, ()])], [desc_content, ()])) assert 'Class.meth4' in domain.objects assert domain.objects['Class.meth4'] == ('index', 'method') # :property: assert_node(doctree[1][1][8], addnodes.index, entries=[('single', 'meth5() (Class property)', 'Class.meth5', '', None)]) assert_node(doctree[1][1][9], ([desc_signature, ([desc_annotation, "property "], [desc_name, "meth5"])], [desc_content, ()])) assert 'Class.meth5' in domain.objects assert domain.objects['Class.meth5'] == ('index', 'method') # :abstractmethod: assert_node(doctree[1][1][10], addnodes.index, entries=[('single', 'meth6() (Class method)', 'Class.meth6', '', None)]) assert_node(doctree[1][1][11], ([desc_signature, ([desc_annotation, "abstract "], [desc_name, "meth6"], [desc_parameterlist, ()])], [desc_content, ()])) assert 'Class.meth6' in domain.objects assert domain.objects['Class.meth6'] == ('index', 'method')
def test_glossary_conflicted_labels(app): text = (".. _term-foo:\n" ".. glossary::\n" "\n" " foo\n") restructuredtext.parse(app, text) objects = list(app.env.get_domain("std").get_objects()) assert ("foo", "foo", "term", "index", "term-0", -1) in objects
def test_glossary_alphanumeric(app): text = (".. glossary::\n" "\n" " 1\n" " /\n") restructuredtext.parse(app, text) objects = list(app.env.get_domain("std").get_objects()) assert ("1", "1", "term", "index", "term-1", -1) in objects assert ("/", "/", "term", "index", "term-0", -1) in objects
def test_glossary(app): text = (".. glossary::\n" "\n" " term1\n" " TERM2\n" " description\n" "\n" " term3 : classifier\n" " description\n" " description\n" "\n" " term4 : class1 : class2\n" " description\n") # doctree doctree = restructuredtext.parse(app, text) assert_node(doctree, ( [glossary, definition_list, ([definition_list_item, ([term, ("term1", index)], [term, ("TERM2", index)], definition)], [definition_list_item, ([term, ("term3", index)], definition)], [definition_list_item, ([term, ("term4", index)], definition)])], )) assert_node(doctree[0][0][0][0][1], entries=[("single", "term1", "term-term1", "main", None)]) assert_node(doctree[0][0][0][1][1], entries=[("single", "TERM2", "term-TERM2", "main", None)]) assert_node(doctree[0][0][0][2], [definition, nodes.paragraph, "description"]) assert_node(doctree[0][0][1][0][1], entries=[("single", "term3", "term-term3", "main", "classifier")]) assert_node(doctree[0][0][1][1], [definition, nodes.paragraph, ("description\n" "description")]) assert_node(doctree[0][0][2][0][1], entries=[("single", "term4", "term-term4", "main", "class1")]) assert_node(doctree[0][0][2][1], [nodes.definition, nodes.paragraph, "description"]) # index domain = app.env.get_domain("std") objects = list(domain.get_objects()) assert ("term1", "term1", "term", "index", "term-term1", -1) in objects assert ("TERM2", "TERM2", "term", "index", "term-TERM2", -1) in objects assert ("term3", "term3", "term", "index", "term-term3", -1) in objects assert ("term4", "term4", "term", "index", "term-term4", -1) in objects # term reference (case sensitive) refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term1', pending_xref(), nodes.paragraph()) assert_node(refnode, nodes.reference, refid="term-term1") # term reference (case insensitive) refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term2', pending_xref(), nodes.paragraph()) assert_node(refnode, nodes.reference, refid="term-TERM2")