summaryrefslogtreecommitdiff
path: root/pyserial/examples/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyserial/examples/test.py')
-rw-r--r--pyserial/examples/test.py216
1 files changed, 0 insertions, 216 deletions
diff --git a/pyserial/examples/test.py b/pyserial/examples/test.py
deleted file mode 100644
index 666275f..0000000
--- a/pyserial/examples/test.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#! /usr/bin/env python
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# (C) 2001-2008 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)2001-2008 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, threading, time
-import sys
-import serial
-
-# on which port should the tests be performed:
-PORT=0
-
-if sys.version_info >= (3, 0):
- def data(string):
- return bytes(string, 'latin1')
- bytes_0to255 = [bytes([x]) for x in range(256)]
-else:
- def data(string): return string
- bytes_0to255 = [chr(x) for x in range(256)]
-
-
-class Test4_Nonblocking(unittest.TestCase):
- """Test with timeouts"""
- timeout = 0
-
- def setUp(self):
- self.s = serial.Serial(PORT, timeout=self.timeout)
-
- def tearDown(self):
- self.s.close()
-
- def test0_Messy(self):
- """NonBlocking (timeout=0)"""
- # this is only here to write out the message in verbose mode
- # because Test3 and Test4 print the same messages
-
- def test1_ReadEmpty(self):
- """timeout: After port open, the input buffer must be empty"""
- self.failUnlessEqual(self.s.read(1), data(''), "expected empty buffer")
-
- def test2_Loopback(self):
- """timeout: each sent character should return (binary test).
- this is also a test for the binary capability of a port."""
- for c in bytes_0to255:
- self.s.write(c)
- # there might be a small delay until the character is ready (especially on win32)
- time.sleep(0.02)
- self.failUnlessEqual(self.s.inWaiting(), 1, "expected exactly one character for inWainting()")
- self.failUnlessEqual(self.s.read(1), c, "expected a '%s' which was written before" % c)
- self.failUnlessEqual(self.s.read(1), data(''), "expected empty buffer after all sent chars are read")
-
- def test2_LoopbackTimeout(self):
- """timeout: test the timeout/immediate return.
- partial results should be returned."""
- self.s.write(data("HELLO"))
- time.sleep(0.1) # there might be a small delay until the character is ready (especially on win32)
- # read more characters as are available to run in the timeout
- self.failUnlessEqual(self.s.read(10), data('HELLO'), "expected the 'HELLO' which was written before")
- self.failUnlessEqual(self.s.read(1), data(''), "expected empty buffer after all sent chars are read")
-
-
-class Test3_Timeout(Test4_Nonblocking):
- """Same tests as the NonBlocking ones but this time with timeout"""
- timeout = 1
-
- def test0_Messy(self):
- """Blocking (timeout=1)"""
- # this is only here to write out the message in verbose mode
- # because Test3 and Test4 print the same messages
-
-class SendEvent(threading.Thread):
- def __init__(self, serial, delay=1):
- threading.Thread.__init__(self)
- self.serial = serial
- self.delay = delay
- self.x = threading.Event()
- self.stopped = 0
- self.start()
-
- def run(self):
- time.sleep(self.delay)
- if not self.stopped:
- self.serial.write(data("E"))
- self.x.set()
-
- def isSet(self):
- return self.x.isSet()
-
- def stop(self):
- self.stopped = 1
- self.x.wait()
-
-class Test1_Forever(unittest.TestCase):
- """Tests a port with no timeout. These tests require that a
- character is sent after some time to stop the test, this is done
- through the SendEvent class and the Loopback HW."""
- def setUp(self):
- self.s = serial.Serial(PORT, timeout=None)
- self.event = SendEvent(self.s)
-
- def tearDown(self):
- self.event.stop()
- self.s.close()
-
- def test2_ReadEmpty(self):
- """no timeout: after port open, the input buffer must be empty (read).
- a character is sent after some time to terminate the test (SendEvent)."""
- c = self.s.read(1)
- if not (self.event.isSet() and c == data('E')):
- self.fail("expected marker")
-
-class Test2_Forever(unittest.TestCase):
- """Tests a port with no timeout"""
- def setUp(self):
- self.s = serial.Serial(PORT, timeout=None)
-
- def tearDown(self):
- self.s.close()
-
- def test1_inWaitingEmpty(self):
- """no timeout: after port open, the input buffer must be empty (inWaiting)"""
- self.failUnlessEqual(self.s.inWaiting(), 0, "expected empty buffer")
-
- def test2_Loopback(self):
- """no timeout: each sent character should return (binary test).
- this is also a test for the binary capability of a port."""
- for c in bytes_0to255:
- self.s.write(c)
- # there might be a small delay until the character is ready (especially on win32)
- time.sleep(0.02)
- self.failUnlessEqual(self.s.inWaiting(), 1, "expected exactly one character for inWainting()")
- self.failUnlessEqual(self.s.read(1), c, "expected an '%s' which was written before" % c)
- self.failUnlessEqual(self.s.inWaiting(), 0, "expected empty buffer after all sent chars are read")
-
-
-class Test0_DataWires(unittest.TestCase):
- """Test modem control lines"""
- def setUp(self):
- self.s = serial.Serial(PORT)
-
- def tearDown(self):
- self.s.close()
-
- def test1_RTS(self):
- """Test RTS/CTS"""
- self.s.setRTS(0)
- time.sleep(0.1)
- self.failUnless(not self.s.getCTS(), "CTS -> 0")
- self.s.setRTS(1)
- time.sleep(0.1)
- self.failUnless(self.s.getCTS(), "CTS -> 1")
-
- def test2_DTR(self):
- """Test DTR/DSR"""
- self.s.setDTR(0)
- time.sleep(0.1)
- self.failUnless(not self.s.getDSR(), "DSR -> 0")
- self.s.setDTR(1)
- time.sleep(0.1)
- self.failUnless(self.s.getDSR(), "DSR -> 1")
-
- def test3_RI(self):
- """Test RI"""
- self.failUnless(not self.s.getRI(), "RI -> 0")
-
-class Test_MoreTimeouts(unittest.TestCase):
- """Test with timeouts"""
- def setUp(self):
- self.s = serial.Serial() # create an closed serial port
-
- def tearDown(self):
- self.s.close()
-
- def test_WriteTimeout(self):
- """Test write() timeout."""
- # use xonxoff setting and the loop-back adapter to switch traffic on hold
- self.s.port = PORT
- self.s.writeTimeout = 1
- self.s.xonxoff = 1
- self.s.open()
- self.s.write(serial.XOFF)
- time.sleep(0.5) # some systems need a little delay so that they can react on XOFF
- t1 = time.time()
- self.failUnlessRaises(serial.SerialTimeoutException, self.s.write, data("timeout please"*100))
- t2 = time.time()
- self.failUnless( 0.9 <= (t2-t1) < 2.1, "Timeout not in the given interval (%s)" % (t2-t1))
-
-
-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()