diff options
Diffstat (limited to 'test/test_timeout_class.py')
-rw-r--r-- | test/test_timeout_class.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/test/test_timeout_class.py b/test/test_timeout_class.py new file mode 100644 index 0000000..37c38b1 --- /dev/null +++ b/test/test_timeout_class.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# +# This file is part of pySerial - Cross platform serial port support for Python +# (C) 2016 Chris Liechti <cliechti@gmx.net> +# +# SPDX-License-Identifier: BSD-3-Clause +""" +Test Timeout helper class. +""" +import sys +import unittest +import time +from serial import serialutil + + +class TestTimeoutClass(unittest.TestCase): + """Test the Timeout class""" + + def test_simple_timeout(self): + """Test simple timeout""" + t = serialutil.Timeout(2) + self.assertFalse(t.expired()) + self.assertTrue(t.time_left() > 0) + time.sleep(2.1) + self.assertTrue(t.expired()) + self.assertEqual(t.time_left(), 0) + + def test_non_blocking(self): + """Test nonblocking case (0)""" + t = serialutil.Timeout(0) + self.assertTrue(t.is_non_blocking) + self.assertFalse(t.is_infinite) + self.assertTrue(t.expired()) + + def test_blocking(self): + """Test no timeout (None)""" + t = serialutil.Timeout(None) + self.assertFalse(t.is_non_blocking) + self.assertTrue(t.is_infinite) + #~ self.assertFalse(t.expired()) + + def test_changing_clock(self): + """Test recovery from chaning clock""" + class T(serialutil.Timeout): + def TIME(self): + return test_time + test_time = 1000 + t = T(10) + self.assertEqual(t.target_time, 1010) + self.assertFalse(t.expired()) + self.assertTrue(t.time_left() > 0) + test_time = 100 # clock jumps way back + self.assertTrue(t.time_left() > 0) + self.assertTrue(t.time_left() <= 10) + self.assertEqual(t.target_time, 110) + test_time = 10000 # jump way forward + self.assertEqual(t.time_left(), 0) # if will expire immediately + + +if __name__ == '__main__': + sys.stdout.write(__doc__) + if len(sys.argv) > 1: + PORT = sys.argv[1] + sys.argv[1:] = ['-v'] + # When this module is executed from the command-line, it runs all its tests + unittest.main() |