mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Refactor C tests
This commit is contained in:
@@ -112,7 +112,7 @@ def check(name, input, idDict, output=None, key=None, asTextOutput=None):
|
||||
asTextOutput + ';' if asTextOutput is not None else None)
|
||||
|
||||
|
||||
def test_expressions():
|
||||
def test_domain_c_ast_expressions():
|
||||
def exprCheck(expr, output=None):
|
||||
class Config:
|
||||
c_id_attributes = ["id_attr"]
|
||||
@@ -269,7 +269,7 @@ def test_expressions():
|
||||
exprCheck('a or_eq 5')
|
||||
|
||||
|
||||
def test_type_definitions():
|
||||
def test_domain_c_ast_type_definitions():
|
||||
check('type', "{key}T", {1: "T"})
|
||||
|
||||
check('type', "{key}bool *b", {1: 'b'}, key='typedef')
|
||||
@@ -290,7 +290,7 @@ def test_type_definitions():
|
||||
{1: 'gpio_callback_t'}, key='typedef')
|
||||
|
||||
|
||||
def test_macro_definitions():
|
||||
def test_domain_c_ast_macro_definitions():
|
||||
check('macro', 'M', {1: 'M'})
|
||||
check('macro', 'M()', {1: 'M'})
|
||||
check('macro', 'M(arg)', {1: 'M'})
|
||||
@@ -306,7 +306,7 @@ def test_macro_definitions():
|
||||
check('macro', 'M(arg1, arg2..., arg3)', {1: 'M'})
|
||||
|
||||
|
||||
def test_member_definitions():
|
||||
def test_domain_c_ast_member_definitions():
|
||||
check('member', 'void a', {1: 'a'})
|
||||
check('member', '_Bool a', {1: 'a'})
|
||||
check('member', 'bool a', {1: 'a'})
|
||||
@@ -364,7 +364,7 @@ def test_member_definitions():
|
||||
check('member', 'int b : 3', {1: 'b'})
|
||||
|
||||
|
||||
def test_function_definitions():
|
||||
def test_domain_c_ast_function_definitions():
|
||||
check('function', 'void f()', {1: 'f'})
|
||||
check('function', 'void f(int)', {1: 'f'})
|
||||
check('function', 'void f(int i)', {1: 'f'})
|
||||
@@ -424,29 +424,29 @@ def test_function_definitions():
|
||||
check('function', 'void f(void (*p)(int, double), int i)', {1: 'f'})
|
||||
|
||||
|
||||
def test_nested_name():
|
||||
def test_domain_c_ast_nested_name():
|
||||
check('struct', '{key}.A', {1: "A"})
|
||||
check('struct', '{key}.A.B', {1: "A.B"})
|
||||
check('function', 'void f(.A a)', {1: "f"})
|
||||
check('function', 'void f(.A.B a)', {1: "f"})
|
||||
|
||||
|
||||
def test_struct_definitions():
|
||||
def test_domain_c_ast_struct_definitions():
|
||||
check('struct', '{key}A', {1: 'A'})
|
||||
|
||||
|
||||
def test_union_definitions():
|
||||
def test_domain_c_ast_union_definitions():
|
||||
check('union', '{key}A', {1: 'A'})
|
||||
|
||||
|
||||
def test_enum_definitions():
|
||||
def test_domain_c_ast_enum_definitions():
|
||||
check('enum', '{key}A', {1: 'A'})
|
||||
|
||||
check('enumerator', '{key}A', {1: 'A'})
|
||||
check('enumerator', '{key}A = 42', {1: 'A'})
|
||||
|
||||
|
||||
def test_anon_definitions():
|
||||
def test_domain_c_ast_anon_definitions():
|
||||
check('struct', '@a', {1: "@a"}, asTextOutput='struct [anonymous]')
|
||||
check('union', '@a', {1: "@a"}, asTextOutput='union [anonymous]')
|
||||
check('enum', '@a', {1: "@a"}, asTextOutput='enum [anonymous]')
|
||||
@@ -454,7 +454,7 @@ def test_anon_definitions():
|
||||
check('struct', '@a.A', {1: "@a.A"}, asTextOutput='struct [anonymous].A')
|
||||
|
||||
|
||||
def test_initializers():
|
||||
def test_domain_c_ast_initializers():
|
||||
idsMember = {1: 'v'}
|
||||
idsFunction = {1: 'f'}
|
||||
# no init
|
||||
@@ -473,7 +473,7 @@ def test_initializers():
|
||||
# TODO: designator-list
|
||||
|
||||
|
||||
def test_attributes():
|
||||
def test_domain_c_ast_attributes():
|
||||
# style: C++
|
||||
check('member', '[[]] int f', {1: 'f'})
|
||||
check('member', '[ [ ] ] int f', {1: 'f'},
|
||||
@@ -566,14 +566,14 @@ def extract_role_links(app, filename):
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_domain_c(app, status, warning):
|
||||
def test_domain_c_build(app, status, warning):
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "index")
|
||||
assert len(ws) == 0
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_domain_c_namespace(app, status, warning):
|
||||
def test_domain_c_build_namespace(app, status, warning):
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "namespace")
|
||||
assert len(ws) == 0
|
||||
@@ -583,7 +583,7 @@ def test_build_domain_c_namespace(app, status, warning):
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_domain_c_anon_dup_decl(app, status, warning):
|
||||
def test_domain_c_build_anon_dup_decl(app, status, warning):
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "anon-dup-decl")
|
||||
assert len(ws) == 2
|
||||
@@ -592,7 +592,7 @@ def test_build_domain_c_anon_dup_decl(app, status, warning):
|
||||
|
||||
|
||||
@pytest.mark.sphinx(confoverrides={'nitpicky': True})
|
||||
def test_build_domain_c_semicolon(app, warning):
|
||||
def test_domain_c_build_semicolon(app, warning):
|
||||
text = """
|
||||
.. c:member:: int member;
|
||||
.. c:var:: int var;
|
||||
@@ -611,7 +611,7 @@ def test_build_domain_c_semicolon(app, warning):
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_function_param_target(app, warning):
|
||||
def test_domain_c_build_function_param_target(app, warning):
|
||||
# the anchor for function parameters should be the function
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "function_param_target")
|
||||
@@ -624,14 +624,14 @@ def test_build_function_param_target(app, warning):
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_ns_lookup(app, warning):
|
||||
def test_domain_c_build_ns_lookup(app, warning):
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "ns_lookup")
|
||||
assert len(ws) == 0
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c', confoverrides={'nitpicky': True})
|
||||
def test_build_field_role(app, status, warning):
|
||||
def test_domain_c_build_field_role(app, status, warning):
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "field-role")
|
||||
assert len(ws) == 0
|
||||
@@ -645,49 +645,8 @@ def _get_obj(app, queryName):
|
||||
return (queryName, "not", "found")
|
||||
|
||||
|
||||
def test_cfunction(app):
|
||||
text = (".. c:function:: PyObject* "
|
||||
"PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)")
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="function",
|
||||
domain="c", objtype="function", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyType_GenericAlloc')
|
||||
assert entry == ('index', 'c.PyType_GenericAlloc', 'function')
|
||||
|
||||
|
||||
def test_cmember(app):
|
||||
text = ".. c:member:: PyObject* PyTypeObject.tp_bases"
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="member",
|
||||
domain="c", objtype="member", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyTypeObject.tp_bases')
|
||||
assert entry == ('index', 'c.PyTypeObject.tp_bases', 'member')
|
||||
|
||||
|
||||
def test_cvar(app):
|
||||
text = ".. c:var:: PyObject* PyClass_Type"
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="var",
|
||||
domain="c", objtype="var", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyClass_Type')
|
||||
assert entry == ('index', 'c.PyClass_Type', 'member')
|
||||
|
||||
|
||||
def test_noindexentry(app):
|
||||
text = (".. c:function:: void f()\n"
|
||||
".. c:function:: void g()\n"
|
||||
" :noindexentry:\n")
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree, (addnodes.index, desc, addnodes.index, desc))
|
||||
assert_node(doctree[0], addnodes.index, entries=[('single', 'f (C function)', 'c.f', '', None)])
|
||||
assert_node(doctree[2], addnodes.index, entries=[])
|
||||
|
||||
|
||||
@pytest.mark.sphinx(testroot='domain-c-intersphinx', confoverrides={'nitpicky': True})
|
||||
def test_intersphinx(tempdir, app, status, warning):
|
||||
def test_domain_c_build_intersphinx(tempdir, app, status, warning):
|
||||
# a splitting of test_ids_vs_tags0 into the primary directives in a remote project,
|
||||
# and then the references in the test project
|
||||
origSource = """\
|
||||
@@ -735,3 +694,44 @@ _var c:member 1 index.html#c.$ -
|
||||
app.builder.build_all()
|
||||
ws = filter_warnings(warning, "index")
|
||||
assert len(ws) == 0
|
||||
|
||||
|
||||
def test_domain_c_parse_cfunction(app):
|
||||
text = (".. c:function:: PyObject* "
|
||||
"PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)")
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="function",
|
||||
domain="c", objtype="function", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyType_GenericAlloc')
|
||||
assert entry == ('index', 'c.PyType_GenericAlloc', 'function')
|
||||
|
||||
|
||||
def test_domain_c_parse_cmember(app):
|
||||
text = ".. c:member:: PyObject* PyTypeObject.tp_bases"
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="member",
|
||||
domain="c", objtype="member", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyTypeObject.tp_bases')
|
||||
assert entry == ('index', 'c.PyTypeObject.tp_bases', 'member')
|
||||
|
||||
|
||||
def test_domain_c_parse_cvar(app):
|
||||
text = ".. c:var:: PyObject* PyClass_Type"
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree[1], addnodes.desc, desctype="var",
|
||||
domain="c", objtype="var", noindex=False)
|
||||
|
||||
entry = _get_obj(app, 'PyClass_Type')
|
||||
assert entry == ('index', 'c.PyClass_Type', 'member')
|
||||
|
||||
|
||||
def test_domain_c_parse_noindexentry(app):
|
||||
text = (".. c:function:: void f()\n"
|
||||
".. c:function:: void g()\n"
|
||||
" :noindexentry:\n")
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree, (addnodes.index, desc, addnodes.index, desc))
|
||||
assert_node(doctree[0], addnodes.index, entries=[('single', 'f (C function)', 'c.f', '', None)])
|
||||
assert_node(doctree[2], addnodes.index, entries=[])
|
||||
|
||||
Reference in New Issue
Block a user