diff options
Diffstat (limited to 'tests/test_domain_cpp.py')
-rw-r--r-- | tests/test_domain_cpp.py | 81 |
1 files changed, 74 insertions, 7 deletions
diff --git a/tests/test_domain_cpp.py b/tests/test_domain_cpp.py index cd5d760d8..fba5fdb42 100644 --- a/tests/test_domain_cpp.py +++ b/tests/test_domain_cpp.py @@ -786,11 +786,78 @@ def test_xref_parsing(): # raise DefinitionError("") +def filter_warnings(warning, file): + lines = warning.getvalue().split("\n"); + res = [l for l in lines if "domain-cpp" in l and "{}.rst".format(file) in l and + "WARNING: document isn't included in any toctree" not in l] + print("Filtered warnings for file '{}':".format(file)) + for w in res: + print(w) + return res + + +@pytest.mark.sphinx(testroot='domain-cpp', confoverrides={'nitpicky': True}) +def test_build_domain_cpp_multi_decl_lookup(app, status, warning): + app.builder.build_all() + ws = filter_warnings(warning, "lookup-key-overload") + assert len(ws) == 0 + + ws = filter_warnings(warning, "multi-decl-lookup") + assert len(ws) == 0 + + +@pytest.mark.sphinx(testroot='domain-cpp', confoverrides={'nitpicky': True}) +def test_build_domain_cpp_warn_template_param_qualified_name(app, status, warning): + app.builder.build_all() + ws = filter_warnings(warning, "warn-template-param-qualified-name") + assert len(ws) == 2 + assert "WARNING: cpp:type reference target not found: T::typeWarn" in ws[0] + assert "WARNING: cpp:type reference target not found: T::U::typeWarn" in ws[1] + + @pytest.mark.sphinx(testroot='domain-cpp') def test_build_domain_cpp_misuse_of_roles(app, status, warning): app.builder.build_all() - - # TODO: properly check for the warnings we expect + ws = filter_warnings(warning, "roles-targets-ok") + assert len(ws) == 0 + + ws = filter_warnings(warning, "roles-targets-warn") + # the roles that should be able to generate warnings: + allRoles = ['class', 'struct', 'union', 'func', 'member', 'var', 'type', 'concept', 'enum', 'enumerator'] + ok = [ # targetType, okRoles + ('class', ['class', 'struct', 'type']), + ('union', ['union', 'type']), + ('func', ['func', 'type']), + ('member', ['member', 'var']), + ('type', ['type']), + ('concept', ['concept']), + ('enum', ['type', 'enum']), + ('enumerator', ['enumerator']), + ('tParam', ['class', 'struct', 'union', 'func', 'member', 'var', 'type', 'concept', 'enum', 'enumerator', 'functionParam']), + ('functionParam', ['member', 'var']), + ] + warn = [] + for targetType, roles in ok: + txtTargetType = "function" if targetType == "func" else targetType + for r in allRoles: + if r not in roles: + warn.append("WARNING: cpp:{} targets a {} (".format(r, txtTargetType)) + warn = list(sorted(warn)) + for w in ws: + assert "targets a" in w + ws = [w[w.index("WARNING:"):] for w in ws] + ws = list(sorted(ws)) + print("Expected warnings:") + for w in warn: + print(w) + print("Actual warnings:") + for w in ws: + print(w) + + for i in range(min(len(warn), len(ws))): + assert ws[i].startswith(warn[i]) + + assert len(ws) == len(warn) @pytest.mark.skipif(docutils.__version_info__ < (0, 13), @@ -824,14 +891,14 @@ def test_build_domain_cpp_with_add_function_parentheses_is_True(app, status, war ] f = 'roles.html' - t = (app.outdir / f).text() + t = (app.outdir / f).read_text() for s in rolePatterns: check(s, t, f) for s in parenPatterns: check(s, t, f) f = 'any-role.html' - t = (app.outdir / f).text() + t = (app.outdir / f).read_text() for s in parenPatterns: check(s, t, f) @@ -867,14 +934,14 @@ def test_build_domain_cpp_with_add_function_parentheses_is_False(app, status, wa ] f = 'roles.html' - t = (app.outdir / f).text() + t = (app.outdir / f).read_text() for s in rolePatterns: check(s, t, f) for s in parenPatterns: check(s, t, f) f = 'any-role.html' - t = (app.outdir / f).text() + t = (app.outdir / f).read_text() for s in parenPatterns: check(s, t, f) @@ -884,7 +951,7 @@ def test_xref_consistency(app, status, warning): app.builder.build_all() test = 'xref_consistency.html' - output = (app.outdir / test).text() + output = (app.outdir / test).read_text() def classes(role, tag): pattern = (r'{role}-role:.*?' |