diff --git a/src/_pytest/_io/terminalwriter.py b/src/_pytest/_io/terminalwriter.py index 204222c88..4f22f5a7a 100644 --- a/src/_pytest/_io/terminalwriter.py +++ b/src/_pytest/_io/terminalwriter.py @@ -101,15 +101,14 @@ class TerminalWriter: """Return an estimate of the width so far in the current line.""" return get_line_width(self._current_line) - def markup(self, text: str, **kw: bool) -> str: - esc = [] - for name in kw: + def markup(self, text: str, **markup: bool) -> str: + for name in markup: if name not in self._esctable: raise ValueError("unknown markup: {!r}".format(name)) - if kw[name]: - esc.append(self._esctable[name]) - if esc and self.hasmarkup: - text = "".join("\x1b[%sm" % cod for cod in esc) + text + "\x1b[0m" + if self.hasmarkup: + esc = [self._esctable[name] for name, on in markup.items() if on] + if esc: + text = "".join("\x1b[%sm" % cod for cod in esc) + text + "\x1b[0m" return text def sep( @@ -117,7 +116,7 @@ class TerminalWriter: sepchar: str, title: Optional[str] = None, fullwidth: Optional[int] = None, - **kw: bool + **markup: bool ) -> None: if fullwidth is None: fullwidth = self.fullwidth @@ -147,9 +146,9 @@ class TerminalWriter: if len(line) + len(sepchar.rstrip()) <= fullwidth: line += sepchar.rstrip() - self.line(line, **kw) + self.line(line, **markup) - def write(self, msg: str, *, flush: bool = False, **kw: bool) -> None: + def write(self, msg: str, *, flush: bool = False, **markup: bool) -> None: if msg: current_line = msg.rsplit("\n", 1)[-1] if "\n" in msg: @@ -157,16 +156,14 @@ class TerminalWriter: else: self._current_line += current_line - if self.hasmarkup and kw: - markupmsg = self.markup(msg, **kw) - else: - markupmsg = msg - self._file.write(markupmsg) + msg = self.markup(msg, **markup) + + self._file.write(msg) if flush: self.flush() - def line(self, s: str = "", **kw: bool) -> None: - self.write(s, **kw) + def line(self, s: str = "", **markup: bool) -> None: + self.write(s, **markup) self.write("\n") def flush(self) -> None: diff --git a/testing/io/test_terminalwriter.py b/testing/io/test_terminalwriter.py index b3bd9cfae..0e9cdb64d 100644 --- a/testing/io/test_terminalwriter.py +++ b/testing/io/test_terminalwriter.py @@ -112,11 +112,13 @@ class TestTerminalWriter: assert line == "- aaaaaaaaaa -\n" @pytest.mark.skipif(sys.platform == "win32", reason="win32 has no native ansi") - def test_markup(self, tw) -> None: - for bold in (True, False): - for color in ("red", "green"): - text2 = tw.markup("hello", **{color: True, "bold": bold}) - assert text2.find("hello") != -1 + @pytest.mark.parametrize("bold", (True, False)) + @pytest.mark.parametrize("color", ("red", "green")) + def test_markup(self, tw, bold: bool, color: str) -> None: + text = tw.markup("hello", **{color: True, "bold": bold}) + assert "hello" in text + + def test_markup_bad(self, tw) -> None: with pytest.raises(ValueError): tw.markup("x", wronkw=3) with pytest.raises(ValueError):