cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 2 | # |
Chris Liechti | 7c032f1 | 2015-10-27 23:02:00 +0100 | [diff] [blame^] | 3 | # 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 |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 7 | """\ |
| 8 | Some tests for the serial module. |
| 9 | Part of pyserial (http://pyserial.sf.net) (C)2010 cliechti@gmx.net |
| 10 | |
| 11 | Intended to be run on different platforms, to ensure portability of |
| 12 | the code. |
| 13 | |
| 14 | For all these tests a simple hardware is required. |
| 15 | Loopback HW adapter: |
| 16 | Shortcut these pin pairs: |
| 17 | TX <-> RX |
| 18 | RTS <-> CTS |
| 19 | DTR <-> DSR |
| 20 | |
| 21 | On a 9 pole DSUB these are the pins (2-3) (4-6) (7-8) |
| 22 | """ |
| 23 | |
| 24 | import unittest |
| 25 | import threading |
| 26 | import time |
| 27 | import sys |
| 28 | import serial |
| 29 | |
| 30 | #~ print serial.VERSION |
| 31 | |
| 32 | # on which port should the tests be performed: |
| 33 | PORT = 0 |
| 34 | |
| 35 | if sys.version_info >= (3, 0): |
| 36 | def data(string): |
| 37 | return bytes(string, 'latin1') |
| 38 | else: |
| 39 | def data(string): return string |
| 40 | |
| 41 | |
| 42 | |
| 43 | class Test_Readline(unittest.TestCase): |
| 44 | """Test readline function""" |
| 45 | |
| 46 | def setUp(self): |
| 47 | self.s = serial.serial_for_url(PORT, timeout=1) |
| 48 | |
| 49 | def tearDown(self): |
| 50 | self.s.close() |
| 51 | |
| 52 | def test_readline(self): |
| 53 | """Test readline method""" |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 54 | self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) |
| 55 | self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x31, 0x0a])) |
| 56 | self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x32, 0x0a])) |
| 57 | self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x33, 0x0a])) |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 58 | # this time we will get a timeout |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 59 | self.failUnlessEqual(self.s.readline(), serial.to_bytes([])) |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 60 | |
| 61 | def test_readlines(self): |
| 62 | """Test readlines method""" |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 63 | self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 64 | self.failUnlessEqual( |
| 65 | self.s.readlines(), |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 66 | [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 67 | ) |
| 68 | |
| 69 | def test_xreadlines(self): |
| 70 | """Test xreadlines method (skipped for io based systems)""" |
| 71 | if hasattr(self.s, 'xreadlines'): |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 72 | self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 73 | self.failUnlessEqual( |
| 74 | list(self.s.xreadlines()), |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 75 | [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 76 | ) |
| 77 | |
| 78 | def test_for_in(self): |
| 79 | """Test for line in s""" |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 80 | self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 81 | lines = [] |
| 82 | for line in self.s: |
| 83 | lines.append(line) |
| 84 | self.failUnlessEqual( |
| 85 | lines, |
cliechti | e30868d | 2013-10-16 15:35:11 +0000 | [diff] [blame] | 86 | [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] |
cliechti | f7bc3bf | 2010-07-21 15:47:21 +0000 | [diff] [blame] | 87 | ) |
| 88 | |
| 89 | def test_alternate_eol(self): |
| 90 | """Test readline with alternative eol settings (skipped for io based systems)""" |
| 91 | if hasattr(self.s, 'xreadlines'): # test if it is our FileLike base class |
| 92 | self.s.write(serial.to_bytes("no\rno\nyes\r\n")) |
| 93 | self.failUnlessEqual( |
| 94 | self.s.readline(eol=serial.to_bytes("\r\n")), |
| 95 | serial.to_bytes("no\rno\nyes\r\n")) |
| 96 | |
| 97 | |
| 98 | if __name__ == '__main__': |
| 99 | import sys |
| 100 | sys.stdout.write(__doc__) |
| 101 | if len(sys.argv) > 1: |
| 102 | PORT = sys.argv[1] |
| 103 | sys.stdout.write("Testing port: %r\n" % PORT) |
| 104 | sys.argv[1:] = ['-v'] |
| 105 | # When this module is executed from the command-line, it runs all its tests |
| 106 | unittest.main() |