brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · eb1940c Raw
102 lines · python
1"""2Test stepping into std::function3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class LibCxxFunctionSteppingIntoCallableTestCase(TestBase):13    NO_DEBUG_INFO_TESTCASE = True14 15    @add_test_categories(["libc++"])16    def test(self):17        """Test that std::function as defined by libc++ is correctly printed by LLDB"""18        self.build()19 20        self.main_source = "main.cpp"21        self.main_source_spec = lldb.SBFileSpec(self.main_source)22        self.source_foo_line = line_number(self.main_source, "// Source foo start line")23        self.source_lambda_f2_line = line_number(24            self.main_source, "// Source lambda used by f2 start line"25        )26        self.source_lambda_f3_line = line_number(27            self.main_source, "// Source lambda used by f3 start line"28        )29        self.source_bar_operator_line = line_number(30            self.main_source, "// Source Bar::operator()() start line"31        )32        self.source_bar_add_num_line = line_number(33            self.main_source, "// Source Bar::add_num start line"34        )35        self.source_main_invoking_f1 = line_number(36            self.main_source, "// Source main invoking f1"37        )38 39        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(40            self, "// Set break point at this line.", self.main_source_spec41        )42 43        thread.StepInto()44        self.assertEqual(45            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(),46            self.source_main_invoking_f1,47        )48        self.assertEqual(49            thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(),50            self.main_source,51        )52 53        thread.StepInto()54        self.assertEqual(55            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(), self.source_foo_line56        )57        self.assertEqual(58            thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(),59            self.main_source,60        )61        process.Continue()62 63        thread.StepInto()64        self.assertEqual(65            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(),66            self.source_lambda_f2_line,67        )68        self.assertEqual(69            thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(),70            self.main_source,71        )72        process.Continue()73 74        thread.StepInto()75        self.assertEqual(76            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(),77            self.source_lambda_f3_line,78        )79        self.assertEqual(80            thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(),81            self.main_source,82        )83        process.Continue()84 85        # TODO reenable this case when std::function formatter supports86        # general callable object case.87        # thread.StepInto()88        # self.assertEqual( thread.GetFrameAtIndex(0).GetLineEntry().GetLine(), self.source_bar_operator_line ) ;89        # self.assertEqual( thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(), self.main_source) ;90        # process.Continue()91 92        thread.StepInto()93        self.assertEqual(94            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(),95            self.source_bar_add_num_line,96        )97        self.assertEqual(98            thread.GetFrameAtIndex(0).GetLineEntry().GetFileSpec().GetFilename(),99            self.main_source,100        )101        process.Continue()102