from pyac import loads
from pyac import NotEnoughData
from tests.strategies import any_st
+from tests.strategies import everything_st
from tests.strategies import junk_st
class TestList(TestCase):
- def test_encode_empty(self) -> None:
+ @given(junk_st)
+ def test_empty(self, junk: bytes) -> None:
encoded = dumps([])
self.assertSequenceEqual(encoded, b"\x08\x00")
+ decoded, tail = loads(encoded + junk)
+ self.assertEqual(decoded, [])
+ self.assertSequenceEqual(tail, junk)
- @given(lists(any_st, max_size=4))
- def test_encode_non_empty(self, test_list: List) -> None:
+ @given(lists(everything_st, max_size=4), junk_st)
+ def test_symmetric(self, test_list: List, junk: bytes) -> None:
encoded = dumps(test_list)
self.assertSequenceEqual(
- encoded, b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00"
+ encoded,
+ b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00",
)
-
- def test_decode_empty(self) -> None:
- encoded = b"\x08\x00"
- decoded, tail = loads(encoded)
- self.assertEqual(decoded, [])
- self.assertSequenceEqual(tail, b"")
-
- @given(lists(any_st, max_size=4), junk_st)
- def test_decode_non_empty(self, test_list: List, junk: bytes) -> None:
- encoded = b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00" + junk
- decoded, tail = loads(encoded)
+ decoded, tail = loads(encoded + junk)
self.assertEqual(decoded, test_list)
self.assertSequenceEqual(tail, junk)
- @given(lists(any_st, max_size=4))
+ @given(lists(any_st, max_size=2))
def test_no_eoc(self, test_list: List) -> None:
encoded = dumps(test_list)[:-1]
with self.assertRaises(NotEnoughData) as err:
+from typing import Any
+from typing import Mapping
from unittest import TestCase
from hypothesis import given
class TestMap(TestCase):
- @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4))
- def test_encode(self, test_map):
+ @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4), junk_st)
+ def test_symmetric(self, test_map: Mapping[str, Any], junk: bytes):
encoded = dumps(test_map)
expected = (
b"\x09" +
b"\x00"
)
self.assertSequenceEqual(encoded, expected)
-
- @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4), junk_st)
- def test_decode(self, test_map, junk):
- encoded = (
- b"\x09" +
- b"".join(
- [
- b"".join([dumps(key), dumps(test_map[key])])
- for key in sorted(test_map.keys(), key=lambda x: [len(x), x])
- ]
- ) +
- b"\x00" +
- junk
- )
- decoded, tail = loads(encoded)
+ decoded, tail = loads(encoded + junk)
self.assertEqual(decoded, test_map)
self.assertSequenceEqual(tail, junk)