autogen: fix enum (#14171)

This commit is contained in:
Christopher Milan
2026-01-15 22:30:11 -08:00
committed by GitHub
parent fa5475307c
commit a021b84604
2 changed files with 21 additions and 1 deletions

View File

@@ -491,4 +491,24 @@ typedef struct ip_discovery_header
self.assertIn('struct_foo', namespace)
self.assertIn('struct_foo_bar', namespace)
@unittest.skipIf(WIN, "doesn't compile on windows")
def test_enums(self):
namespace = self.run_gen("""
enum Foo { A, B, C };
enum Bar { X, Y, Z };
""")
assert namespace["A"] == 0
assert namespace["B"] == 1
assert namespace["C"] == 2
assert namespace["X"] == 0
assert namespace["Y"] == 1
assert namespace["Z"] == 2
assert namespace["enum_Foo"].get(0) == "A"
assert namespace["enum_Foo"].get(1) == "B"
assert namespace["enum_Foo"].get(2) == "C"
assert namespace["enum_Bar"].get(0) == "X"
assert namespace["enum_Bar"].get(1) == "Y"
assert namespace["enum_Bar"].get(2) == "Z"
if __name__ == "__main__": unittest.main()

View File

@@ -65,7 +65,7 @@ else:
class CFUNCTYPE:
def __class_getitem__(cls, key): return ctypes.CFUNCTYPE(del_an(key[0]), *(del_an(a) for a in key[1]))
class Enum:
_val_to_name_: dict[int,str] = {}
def __init_subclass__(cls): cls._val_to_name_ = {}
@classmethod
def get(cls, val, default="unknown"): return cls._val_to_name_.get(val, default)