]> Cypherpunks repositories - keks.git/commitdiff
Check that leapsecUTCAllow is propagated everywhere
authorSergey Matveev <stargrave@stargrave.org>
Wed, 4 Dec 2024 16:02:44 +0000 (19:02 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 4 Dec 2024 16:14:55 +0000 (19:14 +0300)
pyac/pyac.py
pyac/tests/test_map.py
pyac/tests/test_tai.py

index 5502d16e15c71929c34aa59d676a4c22647620d56801934d47f0c6f56b6371b4..67632438c8a2226672a5f74da7710d305d9bfb597d471838114f1476c00f12d2 100755 (executable)
@@ -362,7 +362,7 @@ def loads(v, sets=False, leapsecUTCAllow=False):
         ret = []
         v = v[1:]
         while True:
-            i, v = loads(v, sets=sets)
+            i, v = loads(v, sets=sets, leapsecUTCAllow=leapsecUTCAllow)
             if i == _EOC:
                 break
             ret.append(i)
@@ -382,7 +382,7 @@ def loads(v, sets=False, leapsecUTCAllow=False):
                 if len(k) == 0:
                     raise DecodeError("empty key")
                 raise DecodeError("unsorted keys")
-            i, v = loads(v, sets=sets)
+            i, v = loads(v, sets=sets, leapsecUTCAllow=leapsecUTCAllow)
             if i == _EOC:
                 raise DecodeError("unexpected EOC")
             ret[k] = i
index ef99fae8a89d4763a037cb366d96486d7758a16b05481cf46b6f6bffc6b1283d..0f3da4c4892b65e3cfdc713a3acc53624f5a2da25be08e39ab37193cea8c7296 100644 (file)
@@ -145,3 +145,9 @@ class TestSet(TestCase):
         with self.assertRaises(ValueError) as err:
             dumps(set((123,)))
         self.assertEqual(str(err.exception), "set can contain only strings")
+
+    def test_sets_are_passed_through_containers(self) -> None:
+        test = {"deep": [{"in map": [set(("foo", "bar"))]}]}
+        encoded = dumps(test)
+        decoded, tail = loads(encoded, sets=True)
+        self.assertEqual(decoded, test)
index a04220e9a161991ebf530bac868fcbf218e37ed4bc1430ad6e1d06277e87a6d6..ca7f0cd2b213415b7dd45de1c96cda953390ee05dddf65b714c51bd4f4b3ce4a 100644 (file)
@@ -20,6 +20,7 @@ from unittest import TestCase
 from hypothesis import given
 from hypothesis.strategies import datetimes
 
+from pyac import _byte
 from pyac import DecodeError
 from pyac import dumps
 from pyac import Leapsecs
@@ -90,6 +91,17 @@ class TestTAI64(TestCase):
             loads(bytes.fromhex("188000000065195F65"))
         self.assertEqual(str(err.exception), "reserved TAI64 value is in use")
 
+    def test_leapsecUTCAllow_is_passed_through_containers(self) -> None:
+        leaped = _byte(TagTAI64) + (Leapsecs[8] + TAI64Base).to_bytes(8, "big")
+        raw, _ = loads(leaped)
+        self.assertIsInstance(raw, Raw)
+        decoded, _ = loads(leaped, leapsecUTCAllow=True)
+        self.assertIsInstance(decoded, datetime)
+        decoded, _ = loads(dumps([raw]), leapsecUTCAllow=True)
+        self.assertIsInstance(decoded[0], datetime)
+        decoded, _ = loads(dumps({"try that": [raw]}), leapsecUTCAllow=True)
+        self.assertIsInstance(decoded["try that"][0], datetime)
+
 
 class TestTAI64N(TestCase):
     @given(datetimes(), junk_st)