From: Sergey Matveev Date: Sat, 30 Nov 2024 18:35:15 +0000 (+0300) Subject: Combine encode/decode tests X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1d4264b259735f5bb92c4809d7d0de630d94aad5898cbef0a6321c34077166be;p=keks.git Combine encode/decode tests Because output data of the encode test is the input for the decode one. Actually tests separation could be useful to determine where we are failing, but verbose assertEqual failed message will show exactly where we failed (either during encode or decode). --- diff --git a/pyac/tests/test_list.py b/pyac/tests/test_list.py index 20ae090..820e974 100644 --- a/pyac/tests/test_list.py +++ b/pyac/tests/test_list.py @@ -8,35 +8,31 @@ from pyac import dumps 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: diff --git a/pyac/tests/test_map.py b/pyac/tests/test_map.py index fd7692a..f7d482e 100644 --- a/pyac/tests/test_map.py +++ b/pyac/tests/test_map.py @@ -1,3 +1,5 @@ +from typing import Any +from typing import Mapping from unittest import TestCase from hypothesis import given @@ -13,8 +15,8 @@ from tests.strategies import mapkey_st 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" + @@ -27,21 +29,7 @@ class TestMap(TestCase): 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)