78 lines
1.3 KiB
Python
78 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""winpty wrapper tests."""
|
|
|
|
# yapf: disable
|
|
|
|
# Standard library imports
|
|
import os
|
|
|
|
# Third party imports
|
|
from flaky import flaky
|
|
from winpty.winpty_wrapper import PTY, PY2
|
|
from winpty.ptyprocess import which
|
|
import pytest
|
|
|
|
|
|
# yapf: enable
|
|
|
|
CMD = which('cmd')
|
|
if PY2:
|
|
CMD = unicode(CMD) # noqa
|
|
|
|
|
|
@pytest.fixture(scope='module')
|
|
def pty_fixture():
|
|
def _pty_factory():
|
|
pty = PTY(80, 25)
|
|
pty.spawn(CMD)
|
|
return pty
|
|
return _pty_factory
|
|
|
|
|
|
@flaky(max_runs=4, min_passes=1)
|
|
def test_read(pty_fixture):
|
|
pty = pty_fixture()
|
|
loc = os.getcwd()
|
|
line = ''
|
|
while loc not in line:
|
|
line += pty.read().decode('utf-8')
|
|
assert loc in line
|
|
pty.close()
|
|
del pty
|
|
|
|
|
|
def test_write(pty_fixture):
|
|
pty = pty_fixture()
|
|
line = pty.read()
|
|
while len(line) < 10:
|
|
line = pty.read()
|
|
|
|
text = u'Eggs, ham and spam ünicode'
|
|
pty.write(text)
|
|
|
|
line = u''
|
|
while text not in line:
|
|
line += pty.read().decode('utf-8')
|
|
|
|
assert text in line
|
|
|
|
pty.close()
|
|
del pty
|
|
|
|
|
|
def test_isalive(pty_fixture):
|
|
pty = pty_fixture()
|
|
pty.write(u'exit\r\n')
|
|
|
|
text = u'exit'
|
|
line = u''
|
|
while text not in line:
|
|
line += pty.read().decode('utf-8')
|
|
|
|
while pty.isalive():
|
|
pty.read()
|
|
continue
|
|
|
|
assert not pty.isalive()
|
|
pty.close()
|
|
del pty
|