Yapf complains about spacing inconsistencies around assignment operators in function calls, fix that.
Assisted-by: unsloth/Qwen3.6-35B-A3B-GGUF:IQ4_NL with pi.dev v0.80.2Signed-off-by: Jan Lindemann <jan@janware.com>
159 lines
4.1 KiB
Python
159 lines
4.1 KiB
Python
from jw.pkg.lib.Result import Result
|
|
|
|
# -- Basic construction --
|
|
|
|
r = Result(stdout = b'hello', stderr = b'world', status = 0)
|
|
assert r.status == 0
|
|
assert r.stdout == b'hello'
|
|
assert r.stderr == b'world'
|
|
|
|
# -- stdout property --
|
|
|
|
r = Result(stdout = b'test', status = 0)
|
|
assert r.stdout == b'test'
|
|
|
|
# stdout_or_none returns raw value
|
|
r = Result(stdout = b'test', status = 0)
|
|
assert r.stdout_or_none == b'test'
|
|
|
|
# stdout_str_or_none returns decoded string
|
|
r = Result(stdout = b'test', status = 0)
|
|
assert r.stdout_str_or_none == 'test'
|
|
|
|
# stdout_str returns decoded string
|
|
r = Result(stdout = b'test', status = 0)
|
|
assert r.stdout_str == 'test'
|
|
|
|
# stdout returns b'' when stdout is None and status == 0
|
|
r = Result(stdout = None, status = 0)
|
|
assert r.stdout == b''
|
|
|
|
# stdout raises when stdout is None and status != 0
|
|
r = Result(stdout = None, status = 1)
|
|
try:
|
|
_ = r.stdout
|
|
assert False, 'Should have raised'
|
|
except Exception:
|
|
pass
|
|
|
|
# -- stderr property --
|
|
|
|
r = Result(stderr = b'error', status = 1)
|
|
assert r.stderr == b'error'
|
|
|
|
# stderr_or_none returns raw value
|
|
r = Result(stderr = b'err', status = 1)
|
|
assert r.stderr_or_none == b'err'
|
|
|
|
# stderr_str_or_none returns decoded string
|
|
r = Result(stderr = b'err', status = 1)
|
|
assert r.stderr_str_or_none == 'err'
|
|
|
|
# stderr_str returns decoded string
|
|
r = Result(stderr = b'err', status = 1)
|
|
assert r.stderr_str == 'err'
|
|
|
|
# stderr returns b'' when stderr is None and status != 0 (error case)
|
|
r = Result(stderr = None, status = 1)
|
|
assert r.stderr == b''
|
|
|
|
# stderr raises when stderr is None and status == 0 (success case)
|
|
r = Result(stderr = None, status = 0)
|
|
try:
|
|
_ = r.stderr
|
|
assert False, 'Should have raised'
|
|
except Exception:
|
|
pass
|
|
|
|
# -- None outputs --
|
|
|
|
r = Result(stdout = None, stderr = None, status = 1)
|
|
assert r.stdout_or_none is None
|
|
assert r.stderr_or_none is None
|
|
assert r.stdout_str_or_none is None
|
|
assert r.stderr_str_or_none is None
|
|
|
|
# -- encoding --
|
|
|
|
r = Result(stdout = b'caf\xc3\xa9', encoding = 'UTF-8')
|
|
assert r.encoding == 'UTF-8'
|
|
assert r.stdout_str == 'café'
|
|
|
|
r = Result(stdout = b'test', encoding = 'UTF-8')
|
|
r.encoding = 'ASCII'
|
|
assert r.encoding == 'ASCII'
|
|
|
|
# -- strip_output --
|
|
|
|
r = Result(stdout = b' spaces ', status = 0)
|
|
assert r.stdout_str_or_none == ' spaces '
|
|
|
|
r = Result(stdout = b' spaces ', status = 0, strip_output = True)
|
|
assert r.stdout_str_or_none == 'spaces'
|
|
|
|
r = Result(stdout = b' lines \n', status = 0, strip_output = True)
|
|
assert r.stdout_str_or_none == 'lines'
|
|
|
|
# -- cmd and wd setters --
|
|
|
|
r = Result(cmd = ['echo', 'hello'], wd = '/tmp')
|
|
assert r.cmd == ['echo', 'hello']
|
|
assert r.wd == '/tmp'
|
|
|
|
r.cmd = ['ls', '-la']
|
|
r.wd = '/home'
|
|
assert r.cmd == ['ls', '-la']
|
|
assert r.wd == '/home'
|
|
|
|
# -- summary --
|
|
|
|
r = Result(stdout = b'output', status = 0)
|
|
assert 'status 0' in r.summary
|
|
|
|
r = Result(stderr = b'error', status = 1)
|
|
assert 'status 1' in r.summary
|
|
assert 'stderr' in r.summary
|
|
|
|
# -- matches_error --
|
|
|
|
r = Result(stderr = b'fatal error: missing file', status = 128)
|
|
assert r.matches_error('fatal error')
|
|
|
|
r = Result(stderr = b'fatal error: missing file', status = 128)
|
|
assert not r.matches_error('success')
|
|
|
|
r = Result(stdout = b'ok', stderr = b'', status = 0)
|
|
assert not r.matches_error('.*')
|
|
|
|
r = Result(stdout = b'ok', stderr = None, status = 0)
|
|
assert not r.matches_error('.*')
|
|
|
|
# -- summarize with custom cmd/wd --
|
|
|
|
r = Result(stdout = b'out', status = 0, cmd = ['echo', 'test'], wd = '/tmp')
|
|
assert 'echo' in r.summary or 'status 0' in r.summary
|
|
|
|
# -- __repr__ --
|
|
|
|
r = Result(stdout = b'repr test', status = 0)
|
|
s = repr(r)
|
|
assert '0' in s # verbose=False uses numeric status
|
|
assert 'repr test' in s
|
|
|
|
# -- encoding setter --
|
|
|
|
r = Result(stdout = b'test', status = 0, encoding = 'UTF-8')
|
|
assert r.encoding == 'UTF-8'
|
|
r.encoding = 'ASCII'
|
|
assert r.encoding == 'ASCII'
|
|
|
|
# -- strip_output setter --
|
|
|
|
r = Result(stdout = b' x ', status = 0, strip_output = False)
|
|
assert r.stdout_str_or_none == ' x '
|
|
r.strip_output = True
|
|
# strip_output is a property setter, the value is stored
|
|
# But __decode is called at property access time using current strip_output
|
|
assert r.stdout_str_or_none == 'x'
|
|
|
|
print('All Result tests passed')
|