diff options
author | Diego Elio Pettenò <flameeyes@flameeyes.eu> | 2018-01-01 12:51:23 +0100 |
---|---|---|
committer | Diego Elio Pettenò <flameeyes@flameeyes.eu> | 2018-01-01 12:51:23 +0100 |
commit | cfbf51d6a090626accfc8437f5bd586112178a34 (patch) | |
tree | 1fdabfbc3a7d52331eee506a4975d83f233b28b6 /test/test_construct_extras.py | |
parent | otultraeasy: rewrite using construct for parsing. (diff) | |
download | glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar.gz glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar.bz2 glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar.lz glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar.xz glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.tar.zst glucometerutils-cfbf51d6a090626accfc8437f5bd586112178a34.zip |
Diffstat (limited to 'test/test_construct_extras.py')
-rw-r--r-- | test/test_construct_extras.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/test/test_construct_extras.py b/test/test_construct_extras.py new file mode 100644 index 0000000..faccabf --- /dev/null +++ b/test/test_construct_extras.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +"""Tests for the common routines.""" + +__author__ = 'Diego Elio Pettenò' +__email__ = 'flameeyes@flameeyes.eu' +__copyright__ = 'Copyright © 2018, Diego Elio Pettenò' +__license__ = 'MIT' + +import datetime +import os +import sys +import unittest + +import construct + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from glucometerutils.support import construct_extras + + +_TEST_DATE1 = datetime.datetime(1970, 1, 2, 0, 0) +_TEST_DATE2 = datetime.datetime(1971, 1, 1, 0, 0) +_TEST_DATE3 = datetime.datetime(1970, 1, 1, 0, 0) + +_NEW_EPOCH = 31536000 # datetime.datetime(1971, 1, 1, 0, 0) + +class TestTimestamp(unittest.TestCase): + + def test_build_unix_epoch(self): + self.assertEqual( + construct_extras.Timestamp(construct.Int32ul).build(_TEST_DATE1), + b'\x80\x51\x01\x00') + + def test_parse_unix_epoch(self): + self.assertEqual( + construct_extras.Timestamp(construct.Int32ul).parse( + b'\x803\xe1\x01'), + _TEST_DATE2) + + def test_build_custom_epoch(self): + self.assertEqual( + construct_extras.Timestamp( + construct.Int32ul, epoch=_NEW_EPOCH).build(_TEST_DATE2), + b'\x00\x00\x00\x00') + + def test_parse_custom_epoch(self): + self.assertEqual( + construct_extras.Timestamp( + construct.Int32ul, epoch=_NEW_EPOCH).parse( + b'\x00\x00\x00\x00'), + _TEST_DATE2) + + def test_build_custom_epoch_negative_failure(self): + with self.assertRaises(construct.core.FieldError): + construct_extras.Timestamp( + construct.Int32ul, epoch=_NEW_EPOCH).build(_TEST_DATE1) + + def test_build_custom_epoch_negative_success(self): + self.assertEqual( + construct_extras.Timestamp( + construct.Int32sl, epoch=_NEW_EPOCH).build(_TEST_DATE1), + b'\x00\x1e\x20\xfe') + + def test_build_varint(self): + self.assertEqual( + construct_extras.Timestamp(construct.VarInt).build(_TEST_DATE3), + b'\x00') + + def test_invalid_value(self): + with self.assertRaises(AssertionError): + construct_extras.Timestamp(construct.Int32ul).build('foo') + + +if __name__ == '__main__': + unittest.main() |