diff --git a/bfxapi/tests/test_labeler.py b/bfxapi/tests/test_labeler.py index 721b20e..a4310ef 100644 --- a/bfxapi/tests/test_labeler.py +++ b/bfxapi/tests/test_labeler.py @@ -16,9 +16,41 @@ class TestLabeler(unittest.TestCase): serializer = generate_labeler_serializer("Test", Test, labels) - self.assertEqual(serializer.parse(5, None, 65.0, None, "X"), Test(5, 65.0, "X")) - self.assertRaises(LabelerSerializerException, serializer.parse, 5, 65.0, "X") - self.assertListEqual(serializer.get_labels(), [ "A", "B", "C" ]) + 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"], { "E": inner }) + outer = generate_recursive_serializer("Outer", Outer, ["A", "B", "C"], { "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() \ No newline at end of file