summaryrefslogtreecommitdiffstats
path: root/test/test_construct_extras.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_construct_extras.py')
-rw-r--r--test/test_construct_extras.py75
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()