MCPcopy Index your code
hub / github.com/python/cpython / test_custom_struct_init

Method test_custom_struct_init

Lib/test/test_struct.py:836–895  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

834 test_error_propagation('n')
835
836 def test_custom_struct_init(self):
837 # Regression test for https://github.com/python/cpython/issues/112358
838 class MyStruct(struct.Struct):
839 def __init__(self, *args, **kwargs):
840 super().__init__('>h')
841
842 my_struct = MyStruct('>h')
843 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
844 my_struct = MyStruct(format='>h')
845 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
846
847 warnmsg = r"Different format arguments for __new__\(\) and __init__\(\) methods of Struct"
848 with self.assertWarnsRegex(FutureWarning, warnmsg):
849 my_struct = MyStruct('<h')
850 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
851 with self.assertWarnsRegex(FutureWarning, warnmsg):
852 my_struct = MyStruct(format='<h')
853 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
854
855 warnmsg = r"Struct\(\) missing required argument 'format' \(pos 1\)"
856 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
857 my_struct = MyStruct()
858 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
859 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
860 my_struct = MyStruct(arg='>h')
861 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
862
863 warnmsg = r"Struct\(\) takes at most 1 argument \(2 given\)"
864 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
865 my_struct = MyStruct('>h', 42)
866 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
867 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
868 my_struct = MyStruct('>h', arg=42)
869 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
870 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
871 my_struct = MyStruct('>h', format=42)
872 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
873 with self.assertWarnsRegex(DeprecationWarning, warnmsg):
874 my_struct = MyStruct(format='>h', arg=42)
875 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
876
877 warnmsg = r"Invalid 'format' argument for Struct\.__new__\(\): "
878 with self.assertWarnsRegex(DeprecationWarning, warnmsg + '.*must be'):
879 my_struct = MyStruct(42)
880 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
881 with self.assertWarnsRegex(DeprecationWarning, warnmsg + '.*must be'):
882 my_struct = MyStruct(format=42)
883 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
884 with self.assertWarnsRegex(DeprecationWarning, warnmsg + 'bad char'):
885 my_struct = MyStruct('$')
886 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
887 with self.assertWarnsRegex(DeprecationWarning, warnmsg + 'bad char'):
888 my_struct = MyStruct(format='$')
889 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
890 with self.assertWarnsRegex(DeprecationWarning, warnmsg + "non-ASCII"):
891 my_struct = MyStruct('\udc00')
892 self.assertEqual(my_struct.pack(12345), b'\x30\x39')
893 with self.assertWarnsRegex(DeprecationWarning, warnmsg + "non-ASCII"):

Callers

nothing calls this directly

Calls 4

MyStructClass · 0.85
assertWarnsRegexMethod · 0.80
assertEqualMethod · 0.45
packMethod · 0.45

Tested by

no test coverage detected