Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testresult: correctly apply verbose word markup and avoid crash #12472

Merged
merged 5 commits into from
Jul 1, 2024

Commits on Jul 1, 2024

  1. testresult: correctly apply verbose word markup and avoid crash

    The following snippet would have resulted in crash on multiple places since
    `_get_verbose_word` expects only string, not a tuple.
    
    ```python
        @pytest.hookimpl(tryfirst=True)
        def pytest_report_teststatus(report: pytest.CollectReport | pytest.TestReport, config: pytest.Config):
            if report.when == "call":
                return ("error", "A",  ("AVC", {"bold": True, "red": True}))
    
            return None
    ```
    
    ```
    Traceback (most recent call last):
      File "/home/pbrezina/workspace/sssd/.venv/bin/pytest", line 8, in <module>
        sys.exit(console_main())
                 ^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/config/__init__.py", line 207, in console_main
        code = main()
               ^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/config/__init__.py", line 179, in main
        ret: Union[ExitCode, int] = config.hook.pytest_cmdline_main(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_hooks.py", line 513, in __call__
        return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_manager.py", line 120, in _hookexec
        return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 139, in _multicall
        raise exception.with_traceback(exception.__traceback__)
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 103, in _multicall
        res = hook_impl.function(*args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/main.py", line 333, in pytest_cmdline_main
        return wrap_session(config, _main)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/main.py", line 321, in wrap_session
        config.hook.pytest_sessionfinish(
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_hooks.py", line 513, in __call__
        return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_manager.py", line 120, in _hookexec
        return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 139, in _multicall
        raise exception.with_traceback(exception.__traceback__)
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 122, in _multicall
        teardown.throw(exception)  # type: ignore[union-attr]
        ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/logging.py", line 872, in pytest_sessionfinish
        return (yield)
                ^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 124, in _multicall
        teardown.send(result)  # type: ignore[union-attr]
        ^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/terminal.py", line 899, in pytest_sessionfinish
        self.config.hook.pytest_terminal_summary(
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_hooks.py", line 513, in __call__
        return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_manager.py", line 120, in _hookexec
        return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 139, in _multicall
        raise exception.with_traceback(exception.__traceback__)
      File "/home/pbrezina/workspace/sssd/.venv/lib64/python3.11/site-packages/pluggy/_callers.py", line 124, in _multicall
        teardown.send(result)  # type: ignore[union-attr]
        ^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/terminal.py", line 923, in pytest_terminal_summary
        self.short_test_summary()
      File "/home/pbrezina/workspace/pytest/src/_pytest/terminal.py", line 1272, in short_test_summary
        action(lines)
      File "/home/pbrezina/workspace/pytest/src/_pytest/terminal.py", line 1205, in show_simple
        line = _get_line_with_reprcrash_message(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/terminal.py", line 1429, in _get_line_with_reprcrash_message
        word = tw.markup(verbose_word, **word_markup)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/pbrezina/workspace/pytest/src/_pytest/_io/terminalwriter.py", line 114, in markup
        text = "".join(f"\x1b[{cod}m" for cod in esc) + text + "\x1b[0m"
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
    TypeError: can only concatenate str (not "tuple") to str
    ```
    
    Signed-off-by: Pavel Březina <[email protected]>
    pbrezina committed Jul 1, 2024
    Configuration menu
    Copy the full SHA
    41ca4dd View commit details
    Browse the repository at this point in the history
  2. Update src/_pytest/reports.py

    nicoddemus authored and pbrezina committed Jul 1, 2024
    Configuration menu
    Copy the full SHA
    269ded1 View commit details
    Browse the repository at this point in the history
  3. [pre-commit.ci] auto fixes from pre-commit.com hooks

    for more information, see https://pre-commit.ci
    pre-commit-ci[bot] authored and pbrezina committed Jul 1, 2024
    Configuration menu
    Copy the full SHA
    2c1ed50 View commit details
    Browse the repository at this point in the history
  4. Update src/_pytest/reports.py

    nicoddemus authored and pbrezina committed Jul 1, 2024
    Configuration menu
    Copy the full SHA
    201ed9f View commit details
    Browse the repository at this point in the history
  5. Update src/_pytest/reports.py

    nicoddemus authored and pbrezina committed Jul 1, 2024
    Configuration menu
    Copy the full SHA
    f502f1d View commit details
    Browse the repository at this point in the history