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