1#!/usr/bin/env python 2# 3# This file is part of pySerial - Cross platform serial port support for Python 4# (C) 2015 Chris Liechti <[email protected]> 5# 6# SPDX-License-Identifier: BSD-3-Clause 7"""\ 8Test RS485 related functionality. 9""" 10 11import unittest 12import serial 13import serial.rs485 14 15# on which port should the tests be performed: 16PORT = 'loop://' 17 18 19class Test_RS485_settings(unittest.TestCase): 20 """Test RS485 related functionality""" 21 22 def setUp(self): 23 # create a closed serial port 24 self.s = serial.serial_for_url(PORT, do_not_open=True) 25 26 def tearDown(self): 27 self.s.close() 28 29 def test_enable_RS485(self): 30 # XXX open() port - but will result in fail for most HW... 31 #~ self.s.open() 32 self.assertEqual(self.s._rs485_mode, None, 'RS485 is disabled by default') 33 self.assertEqual(self.s.rs485_mode, None, 'RS485 is disabled by default') 34 self.s.rs485_mode = serial.rs485.RS485Settings() 35 self.assertTrue(self.s._rs485_mode is not None, 'RS485 is enabled') 36 self.assertTrue(self.s.rs485_mode is not None, 'RS485 is enabled') 37 self.s.rs485_mode = None 38 self.assertEqual(self.s._rs485_mode, None, 'RS485 is disabled again') 39 self.assertEqual(self.s.rs485_mode, None, 'RS485 is disabled again') 40 41 42class Test_RS485_class(unittest.TestCase): 43 """Test RS485 class""" 44 45 def setUp(self): 46 if not isinstance(serial.serial_for_url(PORT), serial.Serial): 47 raise unittest.SkipTest("RS485 test only compatible with real serial port") 48 self.s = serial.rs485.RS485(PORT, timeout=1) 49 50 def tearDown(self): 51 self.s.close() 52 53 def test_RS485_class(self): 54 self.s.rs485_mode = serial.rs485.RS485Settings() 55 self.s.write(b'hello') 56 self.assertEqual(self.s.read(5), b'hello') 57 58 59if __name__ == '__main__': 60 import sys 61 sys.stdout.write(__doc__) 62 if len(sys.argv) > 1: 63 PORT = sys.argv[1] 64 sys.stdout.write("Testing port: {!r}\n".format(PORT)) 65 sys.argv[1:] = ['-v'] 66 # When this module is executed from the command-line, it runs all its tests 67 unittest.main() 68