jnikula / hawkmoth

Hawkmoth - Sphinx Autodoc for C

Home Page:https://jnikula.github.io/hawkmoth/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Test failures on Fedora linux (Clang 16)

bkmgit opened this issue · comments

The package builds, but there seem to be problems running the tests. For example:

+ cd hawkmoth-0.15.0
+ pushd test
~/build/BUILD/hawkmoth-0.15.0/test ~/build/BUILD/hawkmoth-0.15.0
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection '
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1  '
+ PATH=/builddir/build/BUILDROOT/python-hawkmoth-0.15.0-1.fc40.noarch/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
+ PYTHONPATH=/builddir/build/BUILDROOT/python-hawkmoth-0.15.0-1.fc40.noarch/usr/lib/python3.12/site-packages:/builddir/build/BUILDROOT/python-hawkmoth-0.15.0-1.fc40.noarch/usr/lib/python3.12/site-packages
+ PYTHONDONTWRITEBYTECODE=1
+ PYTEST_ADDOPTS=' --ignore=/builddir/build/BUILD/hawkmoth-0.15.0/.pyproject-builddir'
+ PYTEST_XDIST_AUTO_NUM_WORKERS=5
+ /usr/bin/pytest -k test_cli .
============================= test session starts ==============================
platform linux -- Python 3.12.0, pytest-7.4.2, pluggy-1.2.0
rootdir: /builddir/build/BUILD/hawkmoth-0.15.0/test
configfile: pytest.ini
plugins: xdist-3.3.1
collected 264 items / 198 deselected / 66 selected
test_cli.py ssssss....F..x..FFF...ssssss.F....F..x...FFFF....s.sssssss.s [ 90%]
.s..s.                                                                   [100%]
=================================== FAILURES ===================================
_______________________________ test_cli[c/enum] _______________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bf9888>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5b93dc8>
capsys = <_pytest.capture.CaptureFixture object at 0xf5b93300>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bf9888>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. c:enum:... Another.\n\n' == '\n.. c:enum:... Another.\n\n'
E         Skipping 137 identical leading characters in diff, use -v to show
E         -  c:enum:: @anonymous_ef849cb791c3c921354e4b05dcefedfa
E         +  c:enum:: enum (unnamed at /builddir/build/BUILD/hawkmoth-0.15.0/test/c/enum.c:18:1)
E           
E              Anonymous enum.
E           
E           ...
E         
E         ...Full output truncated (9 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
______________________________ test_cli[c/struct] ______________________________
testcase = <test.test_cli.CliTestcase object at 0xf5beb210>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5b5c828>
capsys = <_pytest.capture.CaptureFixture object at 0xf5b5c5e8>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5beb210>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. c:struc...er bar 2.\n\n' == '\n.. c:struc...er bar 2.\n\n'
E         Skipping 599 identical leading characters in diff, use -v to show
E         - :struct:: @anonymous_7bf120438d254a91e1275b973de6a0eb
E         + :struct:: struct (unnamed at /builddir/build/BUILD/hawkmoth-0.15.0/test/c/struct.c:39:1)
E           
E              Anonymous struct documentation.
E           
E           ...
E         
E         ...Full output truncated (36 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
___________________________ test_cli[c/typedef-enum] ___________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bee690>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5bc5a20>
capsys = <_pytest.capture.CaptureFixture object at 0xf5bc5978>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bee690>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. c:enum:...umeration\n\n' == '\n.. c:enum:...umeration\n\n'
E         Skipping 102 identical leading characters in diff, use -v to show
E         -  c:enum:: @anonymous_90372874a3c8c25dccf983612f39e93f
E         +  c:enum:: unnamed_t
E           
E              unnamed typedeffed enum
E           
E           ...
E         
E         ...Full output truncated (4 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
__________________________ test_cli[c/typedef-struct] __________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bdb510>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf662f8e8>
capsys = <_pytest.capture.CaptureFixture object at 0xf5d6cf48>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bdb510>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. c:struc...ed member\n\n' == '\n.. c:struc...ed member\n\n'
E         Skipping 100 identical leading characters in diff, use -v to show
E         - :struct:: @anonymous_7f9a1d628cd33f3227f3fcdc3a405aa6
E         + :struct:: typedef_struct
E           
E              unnamed typedeffed struct
E           
E           ...
E         
E         ...Full output truncated (4 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
_____________________________ test_cli[cpp/class] ______________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bee5d0>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5d1f210>
capsys = <_pytest.capture.CaptureFixture object at 0xf5d1f438>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bee5d0>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:cla...  Member.\n\n' == '\n.. cpp:cla...  Member.\n\n'
E         Skipping 2538 identical leading characters in diff, use -v to show
E         - p:class:: @anonymous_8f3f3775b6f196ec9d9cdbdbd61fc9b3
E         + p:class:: (unnamed class at /builddir/build/BUILD/hawkmoth-0.15.0/test/cpp/class.cpp:98:1)
E           
E              Anonymous class.
E           
E           ...
E         
E         ...Full output truncated (4 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
______________________________ test_cli[cpp/enum] ______________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bfde58>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5d16c00>
capsys = <_pytest.capture.CaptureFixture object at 0xf5d16558>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bfde58>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:enu... Another.\n\n' == '\n.. cpp:enu... Another.\n\n'
E         Skipping 145 identical leading characters in diff, use -v to show
E         - pp:enum:: @anonymous_ef849cb791c3c921354e4b05dcefedfa
E         + pp:enum:: (unnamed enum at /builddir/build/BUILD/hawkmoth-0.15.0/test/cpp/../c/enum.c:18:1)
E           
E              Anonymous enum.
E           
E           ...
E         
E         ...Full output truncated (9 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
_____________________________ test_cli[cpp/struct] _____________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bfd7f8>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5d29888>
capsys = <_pytest.capture.CaptureFixture object at 0xf5d29d98>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bfd7f8>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:str...er bar 2.\n\n' == '\n.. cpp:str...er bar 2.\n\n'
E         Skipping 657 identical leading characters in diff, use -v to show
E         - :struct:: @anonymous_7bf120438d254a91e1275b973de6a0eb
E         + :struct:: (unnamed struct at /builddir/build/BUILD/hawkmoth-0.15.0/test/cpp/../c/struct.c:39:1)
E           
E              Anonymous struct documentation.
E           
E           ...
E         
E         ...Full output truncated (36 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
____________________________ test_cli[cpp/template] ____________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bfdb70>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5cadb40>
capsys = <_pytest.capture.CaptureFixture object at 0xf5cadbb8>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bfdb70>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:cla... in case.\n\n' == '\n.. cpp:cla... in case.\n\n'
E         Skipping 580 identical leading characters in diff, use -v to show
E         - <template<typename T, class C, char V> class who> inception_foo
E         - 
E         -    Templated templated class. Puny compilers / standards don't allow further
E         -    recursion.
E         - 
E         - ...
E         
E         ...Full output truncated (24 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
__________________________ test_cli[cpp/typedef-enum] __________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bee600>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf5bc5b58>
capsys = <_pytest.capture.CaptureFixture object at 0xf5bc50f0>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bee600>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:enu...umeration\n\n' == '\n.. cpp:enu...umeration\n\n'
E         Skipping 108 identical leading characters in diff, use -v to show
E         - pp:enum:: @anonymous_90372874a3c8c25dccf983612f39e93f
E         + pp:enum:: unnamed_t
E           
E              unnamed typedeffed enum
E           
E           ...
E         
E         ...Full output truncated (4 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
_________________________ test_cli[cpp/typedef-struct] _________________________
testcase = <test.test_cli.CliTestcase object at 0xf5bfdb40>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xf66d6510>
capsys = <_pytest.capture.CaptureFixture object at 0xf66d6ae0>
    @pytest.mark.full
    @pytest.mark.parametrize('testcase', _get_cli_testcases(testenv.testdir),
                             ids=testenv.get_testid)
    def test_cli(testcase, monkeypatch, capsys):
        testcase.set_monkeypatch(monkeypatch)
        testcase.set_capsys(capsys)
>       testcase.run_test()
test_cli.py:99: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <test.test_cli.CliTestcase object at 0xf5bfdb40>
    def run_test(self):
        if self.options.get('expected-failure'):
            pytest.xfail()
    
        output_docs, output_errors = self.get_output()
        expect_docs, expect_errors = self.get_expected()
    
        assert output_docs, 'empty output'
        assert expect_docs, 'empty expected'
>       assert output_docs == expect_docs
E       AssertionError: assert '\n.. cpp:str...ed member\n\n' == '\n.. cpp:str...ed member\n\n'
E         Skipping 113 identical leading characters in diff, use -v to show
E         - :struct:: @anonymous_7f9a1d628cd33f3227f3fcdc3a405aa6
E         + :struct:: typedef_struct
E           
E              unnamed typedeffed struct
E           
E           ...
E         
E         ...Full output truncated (4 lines hidden), use '-vv' to show
testenv.py:110: AssertionError
=========================== short test summary info ============================
FAILED test_cli.py::test_cli[c/enum] - AssertionError: assert '\n.. c:enum:.....
FAILED test_cli.py::test_cli[c/struct] - AssertionError: assert '\n.. c:struc...
FAILED test_cli.py::test_cli[c/typedef-enum] - AssertionError: assert '\n.. c...
FAILED test_cli.py::test_cli[c/typedef-struct] - AssertionError: assert '\n.....
FAILED test_cli.py::test_cli[cpp/class] - AssertionError: assert '\n.. cpp:cl...
FAILED test_cli.py::test_cli[cpp/enum] - AssertionError: assert '\n.. cpp:enu...
FAILED test_cli.py::test_cli[cpp/struct] - AssertionError: assert '\n.. cpp:s...
FAILED test_cli.py::test_cli[cpp/template] - AssertionError: assert '\n.. cpp...
FAILED test_cli.py::test_cli[cpp/typedef-enum] - AssertionError: assert '\n.....
FAILED test_cli.py::test_cli[cpp/typedef-struct] - AssertionError: assert '\n...
===== 10 failed, 31 passed, 23 skipped, 198 deselected, 2 xfailed in 2.96s =====
RPM build errors:
error: Bad exit status from /var/tmp/rpm-tmp.5zl8UL (%check)
    Bad exit status from /var/tmp/rpm-tmp.5zl8UL (%check)
Child return code was: 1
EXCEPTION: [Error('Command failed: \n # /usr/bin/systemd-nspawn -q -M 244a2a50253245f59c12af9603f24146 -D /var/lib/mock/f40-build-45994645-5481349/root -a -u mockbuild --capability=cap_ipc_lock --bind=/tmp/mock-resolv.omd44l2t:/etc/resolv.conf --bind=/dev/btrfs-control --bind=/dev/mapper/control --bind=/dev/fuse --bind=/dev/loop-control --bind=/dev/loop0 --bind=/dev/loop1 --bind=/dev/loop2 --bind=/dev/loop3 --bind=/dev/loop4 --bind=/dev/loop5 --bind=/dev/loop6 --bind=/dev/loop7 --bind=/dev/loop8 --bind=/dev/loop9 --bind=/dev/loop10 --bind=/dev/loop11 --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/builddir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin \'--setenv=PROMPT_COMMAND=printf "\\033]0;<mock-chroot>\\007"\' \'--setenv=PS1=<mock-chroot> \\s-\\v\\$ \' --setenv=LANG=C.UTF-8 --resolv-conf=off bash --login -c \'/usr/bin/rpmbuild -ba --noprep --noclean --target noarch --nodeps /builddir/build/SPECS/hawkmoth.spec\'\n', 1)]
Traceback (most recent call last):
  File "/usr/lib/python3.11/site-packages/mockbuild/trace_decorator.py", line 93, in trace
    result = func(*args, **kw)
             ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/mockbuild/util.py", line 597, in do_with_status
    raise exception.Error("Command failed: \n # %s\n%s" % (cmd_pretty(command, env), output), child.returncode)
mockbuild.exception.Error: Command failed: 

Full build log https://kojipkgs.fedoraproject.org//work/tasks/3405/107213405/build.log

Thanks for the report! I suspect a change in clang 16 is the cause here. Is that what you have?

Would you have a chance to test #190 to see if it fixes the issue, please?

After setting up Fedora 37 (clang 15) and Fedora 38 (clang 16) in containers, it seems clear this is caused by changes in clang, and #190 is not enough to fix everything.

Unfortunately, I'm also hitting issues with Fedora 37 and current Hawkmoth master, specifically commit ef6ef91 ("test: add tests for stdbool _Bool/bool fixups"). The test suite does not find stdbool.h on Fedora, although it works fine on Debian.

Unfortunately, I'm also hitting issues with Fedora 37 and current Hawkmoth master, specifically commit ef6ef91 ("test: add tests for stdbool _Bool/bool fixups"). The test suite does not find stdbool.h on Fedora, although it works fine on Debian.

Added separate issue #193 for this part.

Updated #190 to actually fix the issue.

Thanks for the updates.

Applying all three changes in #190 , #192 and #194 on Fedora 38, tests pass, though a few warnings

$ pytest
=================================================================== test session starts ===================================================================
platform linux -- Python 3.11.5, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/fedora/hawkmoth
collected 264 items                                                                                                                                       

test/test_cautodoc.py .............x.......................x.........................................x.......................x..................... [ 47%]
.......                                                                                                                                             [ 50%]
test/test_cli.py ssssss.......x........ssssss.........x...........s.sssssss.s.s..s.                                                                 [ 75%]
test/test_parser.py .............x.......................x............................                                                              [100%]

==================================================================== warnings summary =====================================================================
test/test_cautodoc.py:95
  /home/fedora/hawkmoth/test/test_cautodoc.py:95: PytestUnknownMarkWarning: Unknown pytest.mark.full - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.full

test/test_cli.py:93
  /home/fedora/hawkmoth/test/test_cli.py:93: PytestUnknownMarkWarning: Unknown pytest.mark.full - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.full

test/test_cautodoc.py::test_directive_text[c/autoenum]
  /usr/lib/python3.11/site-packages/sphinx/util/images.py:4: DeprecationWarning: 'imghdr' is deprecated and slated for removal in Python 3.13
    import imghdr

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================================= 233 passed, 23 skipped, 8 xfailed, 3 warnings in 34.86s =================================================

I don't know if we should do something special to make the plain pytest work, but I usually run make test or pytest test and that takes care of the first two warnings.

The third originates from Sphinx I think.

That does reduce the number of warnings.

$ python3 -m pytest test
================================== test session starts ==================================
platform linux -- Python 3.11.5, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/fedora/hawkmoth/test, configfile: pytest.ini
collected 264 items                                                                     

test/test_cautodoc.py .............x.......................x..................... [ 22%]
....................x.......................x............................         [ 50%]
test/test_cli.py ssssss.......x........ssssss.........x...........s.sssssss.s.s.. [ 74%]
s.                                                                                [ 75%]
test/test_parser.py .............x.......................x....................... [ 98%]
.....                                                                             [100%]

=================================== warnings summary ====================================
test_cautodoc.py::test_directive_text[c/autoenum]
  /usr/lib/python3.11/site-packages/sphinx/util/images.py:4: DeprecationWarning: 'imghdr' is deprecated and slated for removal in Python 3.13
    import imghdr

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================ 233 passed, 23 skipped, 8 xfailed, 1 warning in 34.22s =================

Thanks.

Yes, last warning is due to sphinx and not related to hawkmoth.

All fixes merged, closing.

#199 should additionally fix the pytest warnings PytestUnknownMarkWarning: Unknown pytest.mark.full with a "plain" pytest run.

Again, thanks for the report!

0.16.0 is released.

Thanks.