mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 14:54:21 +01:00
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
import unittest
|
|
|
|
from dataclasses import dataclass
|
|
from ..exceptions import LabelerSerializerException
|
|
from ..labeler import _Type, generate_labeler_serializer, generate_recursive_serializer
|
|
|
|
class TestLabeler(unittest.TestCase):
|
|
def test_generate_labeler_serializer(self):
|
|
@dataclass
|
|
class Test(_Type):
|
|
A: int
|
|
B: float
|
|
C: str
|
|
|
|
labels = [ "A", "_PLACEHOLDER", "B", "_PLACEHOLDER", "C" ]
|
|
|
|
serializer = generate_labeler_serializer("Test", Test, labels)
|
|
|
|
self.assertEqual(serializer.parse(5, None, 65.0, None, "X"), Test(5, 65.0, "X"),
|
|
msg="_Serializer should produce the right result.")
|
|
|
|
self.assertEqual(serializer.parse(5, 65.0, "X", skip=[ "_PLACEHOLDER" ]), Test(5, 65.0, "X"),
|
|
msg="_Serializer should produce the right result when skip parameter is given.")
|
|
|
|
self.assertListEqual(serializer.get_labels(), [ "A", "B", "C" ],
|
|
msg="_Serializer::get_labels() should return the right list of labels.")
|
|
|
|
with self.assertRaises(LabelerSerializerException,
|
|
msg="_Serializer should raise LabelerSerializerException if given "
|
|
+ "fewer arguments than the serializer labels."):
|
|
serializer.parse(5, 65.0, "X")
|
|
|
|
def test_generate_recursive_serializer(self):
|
|
@dataclass
|
|
class Outer(_Type):
|
|
A: int
|
|
B: float
|
|
C: "Middle"
|
|
|
|
@dataclass
|
|
class Middle(_Type):
|
|
D: str
|
|
E: "Inner"
|
|
|
|
@dataclass
|
|
class Inner(_Type):
|
|
F: bool
|
|
|
|
inner = generate_labeler_serializer("Inner", Inner, ["F"])
|
|
middle = generate_recursive_serializer("Middle", Middle, ["D", "E"], serializers={ "E": inner })
|
|
outer = generate_recursive_serializer("Outer", Outer, ["A", "B", "C"], serializers={ "C": middle })
|
|
|
|
self.assertEqual(outer.parse(10, 45.5, [ "Y", [ True ] ]), Outer(10, 45.5, Middle("Y", Inner(True))),
|
|
msg="_RecursiveSerializer should produce the right result.")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|