| """Look up enum type information and check for correct display.""" |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| import lldbsuite.test.lldbutil as lldbutil |
| |
| |
| class CPP11EnumTypesTestCase(TestBase): |
| def check_enum(self, suffix): |
| """ |
| :param suffix The suffix of the enum type name (enum_<suffix>) that |
| should be checked. |
| :param test_values A list of integet values that shouldn't be converted |
| to any valid enum case. |
| """ |
| enum_name = "enum_" + suffix |
| unsigned = suffix.startswith("u") |
| |
| self.expect( |
| "image lookup -t " + enum_name, |
| patterns=["enum( struct| class) " + enum_name + " {"], |
| substrs=["Case1", "Case2", "Case3"], |
| ) |
| # Test each case in the enum. |
| self.expect_expr("var1_" + suffix, result_type=enum_name, result_value="Case1") |
| self.expect_expr("var2_" + suffix, result_type=enum_name, result_value="Case2") |
| self.expect_expr("var3_" + suffix, result_type=enum_name, result_value="Case3") |
| |
| if unsigned: |
| self.expect_expr( |
| "var_below_" + suffix, result_type=enum_name, result_value="199" |
| ) |
| self.expect_expr( |
| "var_above_" + suffix, result_type=enum_name, result_value="203" |
| ) |
| else: |
| self.expect_expr( |
| "var_below_" + suffix, result_type=enum_name, result_value="-3" |
| ) |
| self.expect_expr( |
| "var_above_" + suffix, result_type=enum_name, result_value="1" |
| ) |
| |
| @skipIf(dwarf_version=["<", "4"]) |
| def test(self): |
| self.build() |
| target = self.dbg.CreateTarget(self.getBuildArtifact("a.out")) |
| self.check_enum("uc") |
| self.check_enum("c") |
| self.check_enum("us") |
| self.check_enum("s") |
| self.check_enum("ui") |
| self.check_enum("i") |
| self.check_enum("ul") |
| self.check_enum("l") |
| self.check_enum("ull") |
| self.check_enum("ll") |