blob: 34b807b291ceaeec4c8f1a18c7a2d0a71e66283a [file] [log] [blame]
cliechtif7bc3bf2010-07-21 15:47:21 +00001#! /usr/bin/env python
cliechtif7bc3bf2010-07-21 15:47:21 +00002#
Chris Liechti7c032f12015-10-27 23:02:00 +01003# This file is part of pySerial - Cross platform serial port support for Python
4# (C) 2010-2015 Chris Liechti <cliechti@gmx.net>
5#
6# SPDX-License-Identifier: BSD-3-Clause
cliechtif7bc3bf2010-07-21 15:47:21 +00007"""\
8Some tests for the serial module.
9Part of pyserial (http://pyserial.sf.net) (C)2010 cliechti@gmx.net
10
11Intended to be run on different platforms, to ensure portability of
12the code.
13
14For all these tests a simple hardware is required.
15Loopback HW adapter:
16Shortcut these pin pairs:
17 TX <-> RX
18 RTS <-> CTS
19 DTR <-> DSR
20
21On a 9 pole DSUB these are the pins (2-3) (4-6) (7-8)
22"""
23
24import unittest
cliechtif7bc3bf2010-07-21 15:47:21 +000025import sys
26import serial
27
28#~ print serial.VERSION
29
30# on which port should the tests be performed:
Chris Liechti73ff15c2016-10-08 21:06:58 +020031PORT = 'loop://'
cliechtif7bc3bf2010-07-21 15:47:21 +000032
33if sys.version_info >= (3, 0):
34 def data(string):
35 return bytes(string, 'latin1')
36else:
Chris Liechti8e37ba92016-02-03 01:22:22 +010037 def data(string):
38 return string
cliechtif7bc3bf2010-07-21 15:47:21 +000039
40
41class Test_Readline(unittest.TestCase):
42 """Test readline function"""
43
44 def setUp(self):
45 self.s = serial.serial_for_url(PORT, timeout=1)
46
47 def tearDown(self):
48 self.s.close()
49
50 def test_readline(self):
51 """Test readline method"""
cliechtie30868d2013-10-16 15:35:11 +000052 self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
Chris Liechtidedd3b72015-12-11 20:44:22 +010053 self.assertEqual(self.s.readline(), serial.to_bytes([0x31, 0x0a]))
54 self.assertEqual(self.s.readline(), serial.to_bytes([0x32, 0x0a]))
55 self.assertEqual(self.s.readline(), serial.to_bytes([0x33, 0x0a]))
cliechtif7bc3bf2010-07-21 15:47:21 +000056 # this time we will get a timeout
Chris Liechtidedd3b72015-12-11 20:44:22 +010057 self.assertEqual(self.s.readline(), serial.to_bytes([]))
cliechtif7bc3bf2010-07-21 15:47:21 +000058
59 def test_readlines(self):
60 """Test readlines method"""
cliechtie30868d2013-10-16 15:35:11 +000061 self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
Chris Liechtidedd3b72015-12-11 20:44:22 +010062 self.assertEqual(
cliechtif7bc3bf2010-07-21 15:47:21 +000063 self.s.readlines(),
cliechtie30868d2013-10-16 15:35:11 +000064 [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])]
cliechtif7bc3bf2010-07-21 15:47:21 +000065 )
66
67 def test_xreadlines(self):
68 """Test xreadlines method (skipped for io based systems)"""
69 if hasattr(self.s, 'xreadlines'):
cliechtie30868d2013-10-16 15:35:11 +000070 self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
Chris Liechtidedd3b72015-12-11 20:44:22 +010071 self.assertEqual(
cliechtif7bc3bf2010-07-21 15:47:21 +000072 list(self.s.xreadlines()),
cliechtie30868d2013-10-16 15:35:11 +000073 [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])]
cliechtif7bc3bf2010-07-21 15:47:21 +000074 )
75
76 def test_for_in(self):
77 """Test for line in s"""
cliechtie30868d2013-10-16 15:35:11 +000078 self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
cliechtif7bc3bf2010-07-21 15:47:21 +000079 lines = []
80 for line in self.s:
81 lines.append(line)
Chris Liechtidedd3b72015-12-11 20:44:22 +010082 self.assertEqual(
cliechtif7bc3bf2010-07-21 15:47:21 +000083 lines,
cliechtie30868d2013-10-16 15:35:11 +000084 [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])]
cliechtif7bc3bf2010-07-21 15:47:21 +000085 )
86
87 def test_alternate_eol(self):
88 """Test readline with alternative eol settings (skipped for io based systems)"""
Chris Liechti8e37ba92016-02-03 01:22:22 +010089 if hasattr(self.s, 'xreadlines'): # test if it is our FileLike base class
cliechtif7bc3bf2010-07-21 15:47:21 +000090 self.s.write(serial.to_bytes("no\rno\nyes\r\n"))
Chris Liechtidedd3b72015-12-11 20:44:22 +010091 self.assertEqual(
cliechtif7bc3bf2010-07-21 15:47:21 +000092 self.s.readline(eol=serial.to_bytes("\r\n")),
93 serial.to_bytes("no\rno\nyes\r\n"))
94
95
96if __name__ == '__main__':
97 import sys
98 sys.stdout.write(__doc__)
99 if len(sys.argv) > 1:
100 PORT = sys.argv[1]
Chris Liechti3debab22016-06-20 22:52:22 +0200101 sys.stdout.write("Testing port: {!r}\n".format(PORT))
cliechtif7bc3bf2010-07-21 15:47:21 +0000102 sys.argv[1:] = ['-v']
103 # When this module is executed from the command-line, it runs all its tests
104 unittest.main()