summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorcliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2009-08-10 22:29:54 +0000
committercliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2009-08-10 22:29:54 +0000
commit43f350a154b2225cead284ac25a94c5c0b6d4a76 (patch)
treec7b79183a30ad30f1cf795719eac344db5000721 /examples
parent84d50f88f6e32e598df5b02753b6f49bd3e737ee (diff)
downloadpyserial-43f350a154b2225cead284ac25a94c5c0b6d4a76.tar.gz
move test scripts to separate test directory
git-svn-id: http://svn.code.sf.net/p/pyserial/code/trunk/pyserial@334 f19166aa-fa4f-0410-85c2-fa1106f25c8a
Diffstat (limited to 'examples')
-rw-r--r--examples/run_all_tests.py46
-rw-r--r--examples/test.py230
-rw-r--r--examples/test_advanced.py181
-rw-r--r--examples/test_high_load.py77
-rw-r--r--examples/test_iolib.py79
5 files changed, 0 insertions, 613 deletions
diff --git a/examples/run_all_tests.py b/examples/run_all_tests.py
deleted file mode 100644
index b4a954d..0000000
--- a/examples/run_all_tests.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#! /usr/bin/env python
-
-"""\
-UnitTest runner. This one searches for all files named test_*.py and collects
-all test cases from these files. Finally it runs all tests and prints a
-summary.
-"""
-
-import unittest
-import sys
-import os
-import time
-
-# inject local copy to avoid testing the installed version instead of the
-# working copy
-sys.path.insert(0, '..')
-
-PORT = 'loop://'
-
-# find files and the tests in them
-mainsuite = unittest.TestSuite()
-for modulename in [os.path.splitext(x)[0]
- for x in os.listdir('.')
- if x != __file__ and x.startswith("test_") and x.endswith(".py")
-]:
- try:
- module = __import__(modulename)
- except ImportError:
- print "skipping %s" % modulename
- else:
- module.PORT = PORT
- testsuite = unittest.findTestCases(module)
- print "found %s tests in %r" % (testsuite.countTestCases(), modulename)
- mainsuite.addTest(testsuite)
-
-verbosity = 1
-if '-v' in sys.argv[1:]:
- verbosity = 2
-
-# run the collected tests
-testRunner = unittest.TextTestRunner(verbosity=verbosity)
-#~ testRunner = unittest.ConsoleTestRunner(verbosity=verbosity)
-result = testRunner.run(mainsuite)
-
-# set exit code accordingly to test results
-sys.exit(not result.wasSuccessful())
diff --git a/examples/test.py b/examples/test.py
deleted file mode 100644
index 6197bc3..0000000
--- a/examples/test.py
+++ /dev/null
@@ -1,230 +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-2009 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
-
-# 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([range(256)])
-else:
- def data(string): return string
- bytes_0to255 = ''.join([chr(x) for x in range(256)])
-
-
-def segments(data, size=16):
- for a in range(0, len(data), size):
- yield data[a:a+size]
-
-
-class Test4_Nonblocking(unittest.TestCase):
- """Test with timeouts"""
- timeout = 0
-
- def setUp(self):
- self.s = serial.serial_for_url(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 block in segments(bytes_0to255):
- length = len(block)
- self.s.write(block)
- # there might be a small delay until the character is ready (especially on win32)
- time.sleep(0.05)
- self.failUnlessEqual(self.s.inWaiting(), length, "expected exactly %d character for inWainting()" % length)
- self.failUnlessEqual(self.s.read(length), block)#, "expected a %r which was written before" % block)
- 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 and rfc2217)
- # 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=3):
- 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.serial.flush()
- 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_for_url(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_for_url(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 block in segments(bytes_0to255):
- length = len(block)
- self.s.write(block)
- # there might be a small delay until the character is ready (especially on win32 and rfc2217)
- time.sleep(0.05)
- self.failUnlessEqual(self.s.inWaiting(), length)#, "expected exactly %d character for inWainting()" % length)
- self.failUnlessEqual(self.s.read(length), block) #, "expected %r which was written before" % block)
- 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_for_url(PORT)
-
- def tearDown(self):
- self.s.close()
-
- def test1_RTS(self):
- """Test RTS/CTS"""
- self.s.setRTS(0)
- time.sleep(1.1)
- self.failUnless(not self.s.getCTS(), "CTS -> 0")
- self.s.setRTS(1)
- time.sleep(1.1)
- self.failUnless(self.s.getCTS(), "CTS -> 1")
-
- def test2_DTR(self):
- """Test DTR/DSR"""
- self.s.setDTR(0)
- time.sleep(1.1)
- self.failUnless(not self.s.getDSR(), "DSR -> 0")
- self.s.setDTR(1)
- time.sleep(1.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):
- # create an closed serial port
- self.s = serial.serial_for_url(PORT, do_not_open=True)
-
- 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"*200))
- 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()
diff --git a/examples/test_advanced.py b/examples/test_advanced.py
deleted file mode 100644
index 6c45006..0000000
--- a/examples/test_advanced.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-# needs at least python 2.2.3
-
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# (C) 2001-2003 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)2002 cliechti@gmx.net
-
-Intended to be run on different platforms, to ensure portability of
-the code.
-
-These tests open a serial port and change all the settings on the fly.
-If the port is really correctly configured cannot be determined - that
-would require external hardware or a null modem cable and an other
-serial port library... Thus it mainly tests that all features are
-correctly implemented and that the interface does what it should.
-
-"""
-
-import unittest
-import serial
-
-# on which port should the tests be performed:
-PORT = 0
-
-class Test_ChangeAttributes(unittest.TestCase):
- """Test with timeouts"""
-
- def setUp(self):
- # create a closed serial port
- self.s = serial.serial_for_url(PORT, do_not_open=True)
-
- def tearDown(self):
- self.s.close()
-
- def test_PortSetting(self):
- self.s.port = PORT
- # portstr has to be set
- if isinstance(PORT, str):
- self.failUnlessEqual(self.s.portstr.lower(), PORT.lower())
- else:
- self.failUnlessEqual(self.s.portstr, serial.device(PORT))
- # test internals
- self.failUnlessEqual(self.s._port, PORT)
- # test on the fly change
- self.s.open()
- self.failUnless(self.s.isOpen())
- try:
- self.s.port = 0
- except serial.SerialException: # port not available on system
- pass # can't test on this machine...
- else:
- self.failUnless(self.s.isOpen())
- self.failUnlessEqual(self.s.port, 0)
- self.failUnlessEqual(self.s.portstr, serial.device(0))
- try:
- self.s.port = 1
- except serial.SerialException: # port not available on system
- pass # can't test on this machine...
- else:
- self.failUnless(self.s.isOpen())
- self.failUnlessEqual(self.s.port, 1)
- self.failUnlessEqual(self.s.portstr, serial.device(1))
-
- def test_BaudrateSetting(self):
- self.s.port = PORT
- self.s.open()
- for baudrate in (300, 9600, 19200, 115200):
- self.s.baudrate = baudrate
- # test get method
- self.failUnlessEqual(self.s.baudrate, baudrate)
- # test internals
- self.failUnlessEqual(self.s._baudrate, baudrate)
- # test illegal values
- for illegal_value in (-300, -1, 'a', None):
- self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
-
- # skip this test as pyserial now tries to set even non standard baud rates.
- # therefore the test can not choose a value that fails on any system.
- def disabled_test_BaudrateSetting2(self):
- # test illegal values, depending on machine/port some of these may be valid...
- self.s.port = PORT
- self.s.open()
- for illegal_value in (500000, 576000, 921600, 92160):
- self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
-
- def test_BytesizeSetting(self):
- for bytesize in (5,6,7,8):
- self.s.bytesize = bytesize
- # test get method
- self.failUnlessEqual(self.s.bytesize, bytesize)
- # test internals
- self.failUnlessEqual(self.s._bytesize, bytesize)
- # test illegal values
- for illegal_value in (0, 1, 3, 4, 9, 10, 'a', None):
- self.failUnlessRaises(ValueError, self.s.setByteSize, illegal_value)
-
- def test_ParitySetting(self):
- for parity in (serial.PARITY_NONE, serial.PARITY_EVEN, serial.PARITY_ODD):
- self.s.parity = parity
- # test get method
- self.failUnlessEqual(self.s.parity, parity)
- # test internals
- self.failUnlessEqual(self.s._parity, parity)
- # test illegal values
- for illegal_value in (0, 57, 'a', None):
- self.failUnlessRaises(ValueError, self.s.setParity, illegal_value)
-
- def test_StopbitsSetting(self):
- for stopbits in (1, 2):
- self.s.stopbits = stopbits
- # test get method
- self.failUnlessEqual(self.s.stopbits, stopbits)
- # test internals
- self.failUnlessEqual(self.s._stopbits, stopbits)
- # test illegal values
- for illegal_value in (0, 3, 2.5, 57, 'a', None):
- self.failUnlessRaises(ValueError, self.s.setStopbits, illegal_value)
-
- def test_TimeoutSetting(self):
- for timeout in (None, 0, 1, 3.14159, 10, 1000, 3600):
- self.s.timeout = timeout
- # test get method
- self.failUnlessEqual(self.s.timeout, timeout)
- # test internals
- self.failUnlessEqual(self.s._timeout, timeout)
- # test illegal values
- for illegal_value in (-1, 'a'):
- self.failUnlessRaises(ValueError, self.s.setTimeout, illegal_value)
-
- def test_XonXoffSetting(self):
- for xonxoff in (True, False):
- self.s.xonxoff = xonxoff
- # test get method
- self.failUnlessEqual(self.s.xonxoff, xonxoff)
- # test internals
- self.failUnlessEqual(self.s._xonxoff, xonxoff)
- # no illegal values here, normal rules for the boolean value of an
- # object are used thus all objects have a truth value.
-
- def test_RtsCtsSetting(self):
- for rtscts in (True, False):
- self.s.rtscts = rtscts
- # test get method
- self.failUnlessEqual(self.s.rtscts, rtscts)
- # test internals
- self.failUnlessEqual(self.s._rtscts, rtscts)
- # no illegal values here, normal rules for the boolean value of an
- # object are used thus all objects have a truth value.
-
- # this test does not work anymore since serial_for_url that is used
- # now, already sets a port
- def disabled_test_UnconfiguredPort(self):
- # an unconfigured port cannot be opened
- self.failUnlessRaises(serial.SerialException, self.s.open)
-
- def test_PortOpenClose(self):
- self.s.port = PORT
- for i in range(3):
- # open the port and check flag
- self.failUnless(not self.s.isOpen())
- self.s.open()
- self.failUnless(self.s.isOpen())
- self.s.close()
- self.failUnless(not self.s.isOpen())
-
-
-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()
diff --git a/examples/test_high_load.py b/examples/test_high_load.py
deleted file mode 100644
index ab8aae2..0000000
--- a/examples/test_high_load.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-#Python Serial Port Extension for Win32, Linux, BSD, Jython
-#see __init__.py
-#
-#(C) 2001-2003 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)2002-2003 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 sys
-import serial
-
-# on which port should the tests be performed:
-PORT = 0
-BAUDRATE = 115200
-#~ BAUDRATE=9600
-
-if sys.version_info >= (2, 6):
- bytes_0to255 = bytes(range(256))
-else:
- bytes_0to255 = ''.join([chr(x) for x in range(256)])
-
-
-class TestHighLoad(unittest.TestCase):
- """Test sending and receiving large amount of data"""
-
- N = 16
- #~ N = 1
-
- def setUp(self):
- self.s = serial.serial_for_url(PORT, BAUDRATE, timeout=10)
-
- def tearDown(self):
- self.s.close()
-
- def test0_WriteReadLoopback(self):
- """Send big strings, write/read order."""
- for i in range(self.N):
- q = bytes_0to255
- self.s.write(q)
- self.failUnlessEqual(self.s.read(len(q)), q) # expected same which was written before
- self.failUnlessEqual(self.s.inWaiting(), 0) # expected empty buffer after all sent chars are read
-
- def test1_WriteWriteReadLoopback(self):
- """Send big strings, multiple write one read."""
- q = bytes_0to255
- for i in range(self.N):
- self.s.write(q)
- read = self.s.read(len(q)*self.N)
- self.failUnlessEqual(read, q*self.N, "expected what was written before. got %d bytes, expected %d" % (len(read), self.N*len(q)))
- self.failUnlessEqual(self.s.inWaiting(), 0) # "expected empty buffer after all sent chars are read")
-
-
-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()
diff --git a/examples/test_iolib.py b/examples/test_iolib.py
deleted file mode 100644
index d4e9315..0000000
--- a/examples/test_iolib.py
+++ /dev/null
@@ -1,79 +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-2009 cliechti@gmx.net
-
-Intended to be run on different platforms, to ensure portability of
-the code.
-
-This modules contains test for the interaction between Serial and the io
-library. This only works on Python 2.6+ that introduced the io library.
-
-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 sys
-
-if __name__ == '__main__' and sys.version_info < (2, 6):
- sys.stderr.write("""\
-==============================================================================
-WARNING: this test is intended for Python 2.6 and newer where the io library
-is available. This seems to be an older version of Python running.
-Continuing anyway...
-==============================================================================
-""")
-
-import io
-import serial
-
-# trick to make that this test run under 2.6 and 3.x without modification.
-# problem is, io library on 2.6 does NOT accept type 'str' and 3.x doesn't
-# like u'nicode' strings with the prefix and it is not providing an unicode
-# function ('str' is now what 'unicode' used to be)
-if sys.version_info >= (3, 0):
- def unicode(x): return x
-
-
-# on which port should the tests be performed:
-PORT = 0
-
-class Test_SerialAndIO(unittest.TestCase):
-
- def setUp(self):
- self.s = serial.serial_for_url(PORT, timeout=1)
- self.io = io.TextIOWrapper(io.BufferedRWPair(self.s, self.s))
-
- def tearDown(self):
- self.s.close()
-
- def test_hello_raw(self):
- self.io.write(unicode("hello\n"))
- self.io.flush() # it is buffering. required to get the data out
- hello = self.io.readline()
- self.failUnlessEqual(hello, unicode("hello\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()