Skip to content

Commit 442518c

Browse files
committed
setupterm: improve error msg, encode non-bytes
`termstr` is always passed as `None`, which results in it being looked up from the `$TERM` environment variable. This might be absent though, e.g. within tox when not used in `passenv`.
1 parent b3138ab commit 442518c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

pyrepl/_minimal_curses.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@ def _find_clib():
5252

5353
@builtinify
5454
def setupterm(termstr, fd):
55+
if termstr is not None:
56+
if not isinstance(termstr, bytes):
57+
termstr = termstr.encode()
5558
err = ctypes.c_int(0)
5659
result = clib.setupterm(termstr, fd, ctypes.byref(err))
5760
if result == ERR:
58-
raise error("setupterm() failed (err=%d)" % err.value)
61+
raise error("setupterm(%r, %d) failed (err=%d)" % (
62+
termstr, fd, err.value))
5963

6064

6165
@builtinify

testing/test_curses.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import pytest
2+
from pyrepl.curses import setupterm
3+
import pyrepl
4+
5+
6+
def test_setupterm(monkeypatch):
7+
assert setupterm(None, 0) is None
8+
9+
with pytest.raises(
10+
pyrepl._minimal_curses.error,
11+
match=r"setupterm\(b?'term_does_not_exist', 0\) failed \(err=0\)",
12+
):
13+
setupterm("term_does_not_exist", 0)
14+
15+
monkeypatch.setenv('TERM', 'xterm')
16+
assert setupterm(None, 0) is None
17+
18+
monkeypatch.delenv('TERM')
19+
with pytest.raises(
20+
pyrepl._minimal_curses.error,
21+
match=r"setupterm\(None, 0\) failed \(err=-1\)",
22+
):
23+
setupterm(None, 0)

0 commit comments

Comments
 (0)