From 1d4264b259735f5bb92c4809d7d0de630d94aad5898cbef0a6321c34077166be Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 30 Nov 2024 21:35:15 +0300 Subject: [PATCH] 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). --- pyac/tests/test_list.py | 28 ++++++++++++---------------- pyac/tests/test_map.py | 22 +++++----------------- 2 files changed, 17 insertions(+), 33 deletions(-) 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) -- 2.50.0