1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import py, re, sys
from rpython.tool.udir import udir
from rpython.tool.pytest.expecttest import ExpectTest
# tests here are run as snippets through a pexpected python subprocess
def setup_module(mod):
try:
import termios
mod.termios = termios
except ImportError:
py.test.skip("termios not found")
try:
import pexpect
except ImportError:
py.test.skip("pexpect not found")
fname = udir.join('expect_test.py')
fname.write('''
import termios
print str(termios.tcgetattr(2)[:-1])
''')
child = pexpect.spawn('python', [str(fname)], logfile=sys.stderr)
child.expect(pexpect.EOF)
mod.TCGETATTR = child.before[:-2]
child.close()
assert child.exitstatus == 0
class TestLLTermios(object):
def run(self, arg, expected):
import pexpect
child = pexpect.spawn(str(arg.builder.executable_name))
child.expect(re.escape(expected))
assert child.status is None
def test_tcgetattr(self):
from rpython.translator.c.test.test_genc import compile
from rpython.rlib import rtermios
def runs_tcgetattr():
tpl = list(rtermios.tcgetattr(2)[:-1])
return str(tpl)
fn = compile(runs_tcgetattr, [], backendopt=False)
self.run(fn, TCGETATTR)
def test_tcgetattr2(self):
from rpython.translator.c.test.test_genc import compile
from rpython.rlib import rtermios
import os, errno
def runs_tcgetattr():
fd = os.open('.', 0, 0777)
try:
rtermios.tcgetattr(fd)
except OSError as e:
assert e.errno == errno.ENOTTY
print "ok"
fn = compile(runs_tcgetattr, [], backendopt=False)
self.run(fn, "ok")
def test_tcsetattr(self):
# a test, which doesn't even check anything.
# I've got no idea how to test it to be honest :-(
from rpython.translator.c.test.test_genc import compile
from rpython.rlib import rtermios
import time
def runs_tcsetattr():
tp = rtermios.tcgetattr(2)
a, b, c, d, e, f, g = tp
rtermios.tcsetattr(2, rtermios.TCSANOW, (a, b, c, d, e, f, g))
time.sleep(.1)
tp = rtermios.tcgetattr(2)
assert tp[5] == f
print "ok"
fn = compile(runs_tcsetattr, [], backendopt=False)
self.run(fn, "ok")
def test_tcrest(self):
from rpython.translator.c.test.test_genc import compile
from rpython.rlib import rtermios
def runs_tcall():
rtermios.tcsendbreak(2, 0)
rtermios.tcdrain(2)
rtermios.tcflush(2, rtermios.TCIOFLUSH)
rtermios.tcflow(2, rtermios.TCOON)
print "ok"
fn = compile(runs_tcall, [], backendopt=False)
self.run(fn, "ok")
class TestTermios(ExpectTest):
def test_tcsetattr_icanon(self):
def f():
from rpython.rlib import rtermios
import termios
def check(fd, when, attributes):
count = len([i for i in attributes[-1] if isinstance(i, int)])
assert count == 2
termios.tcsetattr = check
attr = list(rtermios.tcgetattr(2))
attr[3] |= termios.ICANON
rtermios.tcsetattr(2, termios.TCSANOW, attr)
self.run_test(f)
|