1 import os
2 import unittest
3 from test.support.import_helper import import_module
4
5 termios = import_module('termios')
6 tty = import_module('tty')
7
8
9 @unittest.skipUnless(hasattr(os, 'openpty'), "need os.openpty()")
10 class ESC[4;38;5;81mTestTty(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
11
12 def setUp(self):
13 master_fd, self.fd = os.openpty()
14 self.addCleanup(os.close, master_fd)
15 self.stream = self.enterContext(open(self.fd, 'wb', buffering=0))
16 self.fd = self.stream.fileno()
17 self.mode = termios.tcgetattr(self.fd)
18 self.addCleanup(termios.tcsetattr, self.fd, termios.TCSANOW, self.mode)
19 self.addCleanup(termios.tcsetattr, self.fd, termios.TCSAFLUSH, self.mode)
20
21 def check_cbreak(self, mode):
22 self.assertEqual(mode[3] & termios.ECHO, 0)
23 self.assertEqual(mode[3] & termios.ICANON, 0)
24 self.assertEqual(mode[6][termios.VMIN], 1)
25 self.assertEqual(mode[6][termios.VTIME], 0)
26
27 def check_raw(self, mode):
28 self.assertEqual(mode[0] & termios.ICRNL, 0)
29 self.check_cbreak(mode)
30 self.assertEqual(mode[0] & termios.ISTRIP, 0)
31 self.assertEqual(mode[0] & termios.ICRNL, 0)
32 self.assertEqual(mode[1] & termios.OPOST, 0)
33 self.assertEqual(mode[2] & termios.PARENB, termios.CS8 & termios.PARENB)
34 self.assertEqual(mode[2] & termios.CSIZE, termios.CS8 & termios.CSIZE)
35 self.assertEqual(mode[2] & termios.CS8, termios.CS8)
36 self.assertEqual(mode[3] & termios.ECHO, 0)
37 self.assertEqual(mode[3] & termios.ICANON, 0)
38 self.assertEqual(mode[3] & termios.ISIG, 0)
39 self.assertEqual(mode[6][termios.VMIN], 1)
40 self.assertEqual(mode[6][termios.VTIME], 0)
41
42 def test_setraw(self):
43 tty.setraw(self.fd)
44 mode = termios.tcgetattr(self.fd)
45 self.check_raw(mode)
46 tty.setraw(self.fd, termios.TCSANOW)
47 tty.setraw(self.stream)
48 tty.setraw(fd=self.fd, when=termios.TCSANOW)
49
50 def test_setcbreak(self):
51 tty.setcbreak(self.fd)
52 mode = termios.tcgetattr(self.fd)
53 self.check_cbreak(mode)
54 tty.setcbreak(self.fd, termios.TCSANOW)
55 tty.setcbreak(self.stream)
56 tty.setcbreak(fd=self.fd, when=termios.TCSANOW)
57
58
59 if __name__ == '__main__':
60 unittest.main()