From 5f9e38b78389278cfb3aa9cf2095455863b31937 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:15:37 +0000 Subject: [PATCH] Test: add test for unpickling NetUtils enums (#5326) * Test: add test for unpickling NetUtils enums This verifies that Utils.ByValue either works or is not required, and once we drop ByValue, this validates that future Python versions do not break our Enums again. * Test: NetUtils enum switch to more direct pickle.dumps It's probably better to use the direct interface in case restricted_dumps does some funky stuff in the future. Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Test: NetUtils enum fix import for change --------- Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> --- test/netutils/test_enum.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 test/netutils/test_enum.py diff --git a/test/netutils/test_enum.py b/test/netutils/test_enum.py new file mode 100644 index 0000000000..3d7cdd4e33 --- /dev/null +++ b/test/netutils/test_enum.py @@ -0,0 +1,37 @@ +"""Verify that NetUtils' enums work correctly with all supported Python versions.""" + +import pickle +import unittest +from enum import Enum +from typing import Type + +from NetUtils import ClientStatus, HintStatus, SlotType +from Utils import restricted_loads + + +class Base: + class DataEnumTest(unittest.TestCase): + type: Type[Enum] + value: Enum + + def test_unpickle(self) -> None: + """Tests that enums used in multidata or multisave can be pickled and unpickled.""" + pickled = pickle.dumps(self.value) + unpickled = restricted_loads(pickled) + self.assertEqual(unpickled, self.value) + self.assertIsInstance(unpickled, self.type) + + +class HintStatusTest(Base.DataEnumTest): + type = HintStatus + value = HintStatus.HINT_AVOID + + +class ClientStatusTest(Base.DataEnumTest): + type = ClientStatus + value = ClientStatus.CLIENT_GOAL + + +class SlotTypeTest(Base.DataEnumTest): + type = SlotType + value = SlotType.player