pypy /rpython/rtyper/module/test/test_ll_termios.py

Language Python Lines 106
MD5 Hash d05d8e2283e42693d8d9a5f7632a5bc8 Estimated Cost $2,131 (why?)
Repository https://bitbucket.org/bwesterb/pypy View Raw File View Project SPDX
  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
104
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)])
    child.logfile = sys.stderr
    x = child.wait()
    assert x == 0
    mod.TCGETATTR = child.readlines()[0][:-2]

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, 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.rtyper.module import ll_termios
        import termios, time
        def runs_tcall():
            termios.tcsendbreak(2, 0)
            termios.tcdrain(2)
            termios.tcflush(2, termios.TCIOFLUSH)
            termios.tcflow(2, termios.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)
Back to Top