mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-04-22 02:23:48 +00:00
160 lines
3.5 KiB
Python
160 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""winpty wrapper tests."""
|
|
|
|
# Standard library imports
|
|
import os
|
|
import time
|
|
|
|
# Third party imports
|
|
from winpty import PTY, WinptyError
|
|
from winpty.enums import Backend
|
|
from winpty.ptyprocess import which
|
|
import pytest
|
|
|
|
|
|
CMD = which('cmd').lower()
|
|
|
|
|
|
def pty_factory(backend):
|
|
if os.environ.get('CI_RUNNING', None) == '1':
|
|
if backend == Backend.ConPTY:
|
|
os.environ['CONPTY_CI'] = '1'
|
|
elif backend == Backend.WinPTY:
|
|
os.environ.pop('CONPTY_CI', None)
|
|
|
|
@pytest.fixture(scope='function')
|
|
def pty_fixture():
|
|
pty = PTY(80, 20, backend=backend)
|
|
# loc = bytes(os.getcwd(), 'utf8')
|
|
assert pty.spawn(CMD)
|
|
time.sleep(0.3)
|
|
return pty
|
|
return pty_fixture
|
|
|
|
|
|
conpty_provider = pty_factory(Backend.ConPTY)
|
|
winpty_provider = pty_factory(Backend.WinPTY)
|
|
|
|
|
|
@pytest.fixture(scope='module', params=['WinPTY', 'ConPTY'])
|
|
def pty_fixture(request):
|
|
backend = request.param
|
|
if os.environ.get('CI_RUNNING', None) == '1':
|
|
if backend == 'ConPTY':
|
|
os.environ['CI'] = '1'
|
|
os.environ['CONPTY_CI'] = '1'
|
|
if backend == 'WinPTY':
|
|
os.environ.pop('CI', None)
|
|
os.environ.pop('CONPTY_CI', None)
|
|
|
|
backend = getattr(Backend, backend)
|
|
def _pty_factory():
|
|
pty = PTY(80, 25, backend=backend)
|
|
assert pty.spawn(CMD)
|
|
time.sleep(0.3)
|
|
return pty
|
|
return _pty_factory
|
|
|
|
|
|
|
|
# @pytest.fixture(scope='function', params=[
|
|
# pytest.lazy_fixture('conpty_provider'),
|
|
# pytest.lazy_fixture('winpty_provider')])
|
|
# def pty_fixture(request):
|
|
# pty = request.param
|
|
# return pty
|
|
|
|
|
|
def test_read(pty_fixture, capsys):
|
|
pty = pty_fixture()
|
|
loc = os.getcwd()
|
|
readline = ''
|
|
|
|
with capsys.disabled():
|
|
start_time = time.time()
|
|
while loc not in readline:
|
|
if time.time() - start_time > 5:
|
|
break
|
|
readline += pty.read()
|
|
assert loc in readline or 'cmd' in readline
|
|
del pty
|
|
|
|
|
|
def test_write(pty_fixture):
|
|
pty = pty_fixture()
|
|
line = pty.read()
|
|
|
|
str_text = 'Eggs, ham and spam ünicode'
|
|
# text = bytes(str_text, 'utf-8')
|
|
num_bytes = pty.write(str_text)
|
|
|
|
line = ''
|
|
start_time = time.time()
|
|
while str_text not in line:
|
|
if time.time() - start_time > 5:
|
|
break
|
|
line += pty.read()
|
|
|
|
assert str_text in line
|
|
del pty
|
|
|
|
|
|
def test_isalive(pty_fixture):
|
|
pty = pty_fixture()
|
|
pty.write('exit\r\n')
|
|
|
|
text = 'exit'
|
|
line = ''
|
|
while text not in line:
|
|
try:
|
|
line += pty.read()
|
|
except Exception:
|
|
break
|
|
|
|
while pty.isalive():
|
|
try:
|
|
pty.read()
|
|
# continue
|
|
except Exception:
|
|
break
|
|
|
|
assert not pty.isalive()
|
|
del pty
|
|
|
|
|
|
# def test_agent_spawn_fail(pty_fixture):
|
|
# pty = pty_fixture
|
|
# try:
|
|
# pty.spawn(CMD)
|
|
# assert False
|
|
# except WinptyError:
|
|
# pass
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'backend_name,backend',
|
|
[("ConPTY", Backend.ConPTY), ('WinPTY', Backend.WinPTY)])
|
|
def test_pty_create_size_fail(backend_name, backend):
|
|
try:
|
|
PTY(80, -25, backend=backend)
|
|
assert False
|
|
except WinptyError:
|
|
pass
|
|
|
|
|
|
def test_agent_resize_fail(pty_fixture):
|
|
pty = pty_fixture()
|
|
try:
|
|
pty.set_size(-80, 70)
|
|
assert False
|
|
except WinptyError:
|
|
pass
|
|
finally:
|
|
del pty
|
|
|
|
|
|
def test_agent_resize(pty_fixture):
|
|
pty = pty_fixture()
|
|
pty.set_size(80, 70)
|
|
del pty
|