brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 358ab5b Raw
93 lines · python
1"""2Test that global operators are found and evaluated.3"""4import lldb5from lldbsuite.test.decorators import *6from lldbsuite.test.lldbtest import *7from lldbsuite.test import lldbutil8 9 10class TestCppGlobalOperators(TestBase):11    def prepare_executable_and_get_frame(self):12        self.build()13 14        # Get main source file15        src_file = "main.cpp"16        src_file_spec = lldb.SBFileSpec(src_file)17        self.assertTrue(src_file_spec.IsValid(), "Main source file")18 19        # Get the path of the executable20        exe_path = self.getBuildArtifact("a.out")21 22        # Load the executable23        target = self.dbg.CreateTarget(exe_path)24        self.assertTrue(target.IsValid(), VALID_TARGET)25 26        # Break on main function27        main_breakpoint = target.BreakpointCreateBySourceRegex(28            "// break here", src_file_spec29        )30        self.assertTrue(31            main_breakpoint.IsValid() and main_breakpoint.GetNumLocations() >= 1,32            VALID_BREAKPOINT,33        )34 35        # Launch the process36        args = None37        env = None38        process = target.LaunchSimple(args, env, self.get_process_working_directory())39        self.assertTrue(process.IsValid(), PROCESS_IS_VALID)40 41        # Get the thread of the process42        self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED)43        thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint)44 45        return thread.GetSelectedFrame()46 47    def test_equals_operator(self):48        frame = self.prepare_executable_and_get_frame()49 50        test_result = frame.EvaluateExpression("operator==(s1, s2)")51        self.assertTrue(52            test_result.IsValid() and test_result.GetValue() == "false",53            "operator==(s1, s2) = false",54        )55 56        test_result = frame.EvaluateExpression("operator==(s1, s3)")57        self.assertTrue(58            test_result.IsValid() and test_result.GetValue() == "true",59            "operator==(s1, s3) = true",60        )61 62        test_result = frame.EvaluateExpression("operator==(s2, s3)")63        self.assertTrue(64            test_result.IsValid() and test_result.GetValue() == "false",65            "operator==(s2, s3) = false",66        )67 68    def do_new_test(self, frame, expr, expected_value_name):69        """Evaluate a new expression, and check its result"""70 71        expected_value = frame.FindValue(72            expected_value_name, lldb.eValueTypeVariableGlobal73        )74        self.assertTrue(expected_value.IsValid())75 76        expected_value_addr = expected_value.AddressOf()77        self.assertTrue(expected_value_addr.IsValid())78 79        got = frame.EvaluateExpression(expr)80        self.assertTrue(got.IsValid())81        self.assertEqual(82            got.GetValueAsUnsigned(), expected_value_addr.GetValueAsUnsigned()83        )84        got_type = got.GetType()85        self.assertTrue(got_type.IsPointerType())86        self.assertEqual(got_type.GetPointeeType().GetName(), "Struct")87 88    def test_operator_new(self):89        frame = self.prepare_executable_and_get_frame()90 91        self.do_new_test(frame, "new Struct()", "global_new_buf")92        self.do_new_test(frame, "new(new_tag) Struct()", "tagged_new_buf")93