| #!/usr/bin/env python |
| # |
| # This file is part of pySerial - Cross platform serial port support for Python |
| # (C) 2002-2015 Chris Liechti <[email protected]> |
| # |
| # SPDX-License-Identifier: BSD-3-Clause |
| """\ |
| Test the ability to get and set the settings with a dictionary. |
| |
| Part of pySerial (http://pyserial.sf.net) (C) 2002-2015 [email protected] |
| |
| """ |
| |
| import unittest |
| import serial |
| |
| # on which port should the tests be performed: |
| PORT = 'loop://' |
| |
| |
| SETTINGS = ('baudrate', 'bytesize', 'parity', 'stopbits', 'xonxoff', |
| 'dsrdtr', 'rtscts', 'timeout', 'write_timeout', 'inter_byte_timeout') |
| |
| |
| class Test_SettingsDict(unittest.TestCase): |
| """Test with settings dictionary""" |
| |
| def test_getsettings(self): |
| """the settings dict reflects the current settings""" |
| ser = serial.serial_for_url(PORT, do_not_open=True) |
| d = ser.get_settings() |
| for setting in SETTINGS: |
| self.assertEqual(getattr(ser, setting), d[setting]) |
| |
| def test_partial_settings(self): |
| """partial settings dictionaries are also accepted""" |
| ser = serial.serial_for_url(PORT, do_not_open=True) |
| d = ser.get_settings() |
| del d['baudrate'] |
| del d['bytesize'] |
| ser.apply_settings(d) |
| for setting in d: |
| self.assertEqual(getattr(ser, setting), d[setting]) |
| |
| def test_unknown_settings(self): |
| """unknown settings are ignored""" |
| ser = serial.serial_for_url(PORT, do_not_open=True) |
| d = ser.get_settings() |
| d['foobar'] = 'ignore me' |
| ser.apply_settings(d) |
| |
| def test_init_sets_the_correct_attrs(self): |
| """__init__ sets the fields that get_settings reads""" |
| for setting, value in ( |
| ('baudrate', 57600), |
| ('timeout', 7), |
| ('write_timeout', 12), |
| ('inter_byte_timeout', 15), |
| ('stopbits', serial.STOPBITS_TWO), |
| ('bytesize', serial.SEVENBITS), |
| ('parity', serial.PARITY_ODD), |
| ('xonxoff', True), |
| ('rtscts', True), |
| ('dsrdtr', True)): |
| kwargs = {'do_not_open': True, setting: value} |
| ser = serial.serial_for_url(PORT, **kwargs) |
| d = ser.get_settings() |
| self.assertEqual(getattr(ser, setting), value) |
| self.assertEqual(d[setting], value) |
| |
| |
| 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".format(PORT)) |
| sys.argv[1:] = ['-v'] |
| # When this module is executed from the command-line, it runs all its tests |
| unittest.main() |