blob: 6606ff7bf743bfaba0d5cdd95bafd395dace8c2d [file] [log] [blame]
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +02001#!/usr/bin/env python
2#
3# This file is part of pySerial - Cross platform serial port support for Python
Chris Liechtia7db97c2016-05-10 23:46:38 +02004# (C) 2016 Chris Liechti <cliechti@gmx.net>
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +02005#
6# SPDX-License-Identifier: BSD-3-Clause
7"""
8Test PTY related functionality.
9"""
10
11import os
12import sys
Chris Liechtia7db97c2016-05-10 23:46:38 +020013
14try:
15 import pty
16except ImportError:
17 pty = None
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +020018import unittest
19import serial
20
Chris Liechti7bd42702017-03-10 20:04:32 +010021DATA = b'Hello\n'
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +020022
Chris Liechtia7db97c2016-05-10 23:46:38 +020023@unittest.skipIf(pty is None, "pty module not supported on platform")
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +020024class Test_Pty_Serial_Open(unittest.TestCase):
25 """Test PTY serial open"""
26
27 def setUp(self):
28 # Open PTY
29 self.master, self.slave = pty.openpty()
30
Chris Liechti508d8422017-03-10 02:06:36 +010031 def test_pty_serial_open_slave(self):
32 with serial.Serial(os.ttyname(self.slave), timeout=1) as slave:
33 pass # OK
34
35 def test_pty_serial_write(self):
Chris Liechti88e10642017-03-09 23:56:19 +010036 with serial.Serial(os.ttyname(self.slave), timeout=1) as slave:
37 with os.fdopen(self.master, "wb") as fd:
38 fd.write(DATA)
39 fd.flush()
40 out = slave.read(len(DATA))
41 self.assertEqual(DATA, out)
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +020042
Chris Liechti508d8422017-03-10 02:06:36 +010043 def test_pty_serial_read(self):
44 with serial.Serial(os.ttyname(self.slave), timeout=1) as slave:
45 with os.fdopen(self.master, "rb") as fd:
46 slave.write(DATA)
47 slave.flush()
48 out = fd.read(len(DATA))
49 self.assertEqual(DATA, out)
Miguel Sánchez de León Peque8eb2fd82016-05-08 15:37:14 +020050
51if __name__ == '__main__':
52 sys.stdout.write(__doc__)
53 # When this module is executed from the command-line, it runs all its tests
54 unittest.main()