#! /usr/bin/env python # Python Serial Port Extension for Win32, Linux, BSD, Jython # see __init__.py # # (C) 2010 Chris Liechti <cliechti@gmx.net> # this is distributed under a free software license, see license.txt """\ Some tests for the serial module. Part of pyserial (http://pyserial.sf.net) (C)2010 cliechti@gmx.net Intended to be run on different platforms, to ensure portability of the code. For all these tests a simple hardware is required. Loopback HW adapter: Shortcut these pin pairs: TX <-> RX RTS <-> CTS DTR <-> DSR On a 9 pole DSUB these are the pins (2-3) (4-6) (7-8) """ import unittest import threading import time import sys import serial #~ print serial.VERSION # on which port should the tests be performed: PORT = 0 if sys.version_info >= (3, 0): def data(string): return bytes(string, 'latin1') else: def data(string): return string class Test_Readline(unittest.TestCase): """Test readline function""" def setUp(self): self.s = serial.serial_for_url(PORT, timeout=1) def tearDown(self): self.s.close() def test_readline(self): """Test readline method""" self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x31, 0x0a])) self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x32, 0x0a])) self.failUnlessEqual(self.s.readline(), serial.to_bytes([0x33, 0x0a])) # this time we will get a timeout self.failUnlessEqual(self.s.readline(), serial.to_bytes([])) def test_readlines(self): """Test readlines method""" self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) self.failUnlessEqual( self.s.readlines(), [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] ) def test_xreadlines(self): """Test xreadlines method (skipped for io based systems)""" if hasattr(self.s, 'xreadlines'): self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) self.failUnlessEqual( list(self.s.xreadlines()), [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] ) def test_for_in(self): """Test for line in s""" self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a])) lines = [] for line in self.s: lines.append(line) self.failUnlessEqual( lines, [serial.to_bytes([0x31, 0x0a]), serial.to_bytes([0x32, 0x0a]), serial.to_bytes([0x33, 0x0a])] ) def test_alternate_eol(self): """Test readline with alternative eol settings (skipped for io based systems)""" if hasattr(self.s, 'xreadlines'): # test if it is our FileLike base class self.s.write(serial.to_bytes("no\rno\nyes\r\n")) self.failUnlessEqual( self.s.readline(eol=serial.to_bytes("\r\n")), serial.to_bytes("no\rno\nyes\r\n")) if __name__ == '__main__': import sys sys.stdout.write(__doc__) if len(sys.argv) > 1: PORT = sys.argv[1] sys.stdout.write("Testing port: %r\n" % PORT) sys.argv[1:] = ['-v'] # When this module is executed from the command-line, it runs all its tests unittest.main()