1d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea"""Test the lldb public C++ api breakpoint callbacks. """ 2d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 3d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport os, re, StringIO 4d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport unittest2 5d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleafrom lldbtest import * 6d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport lldbutil 7d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport subprocess 8d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 9d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaclass SBBreakpointCallbackCase(TestBase): 10d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 11d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea mydir = os.path.join("api", "multithreaded") 12d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 13d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def setUp(self): 14d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea TestBase.setUp(self) 15d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.lib_dir = os.environ["LLDB_LIB_DIR"] 16d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.inferior = 'inferior_program' 17d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if self.getArchitecture() != "i386": 18d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.buildProgram('inferior.cpp', self.inferior) 19d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.addTearDownHook(lambda: os.remove(self.inferior)) 20d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 210440b1115c17608233595090148d02124d61d170Daniel Malea @unittest2.expectedFailure # llvm.org/pr16000: SBBreakpoint.SetCallback() does nothing 22d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea @skipIfi386 23156d8e04b9434923ab8e1bf9d3e81c0e71fccd36Daniel Malea @skipIfLinuxClang # buildbot clang version unable to use libstdc++ with c++11 24d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def test_breakpoint_callback(self): 25d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """Test the that SBBreakpoint callback is invoked when a breakpoint is hit. """ 26d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.build_and_test('driver.cpp test_breakpoint_callback.cpp', 27d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 'test_breakpoint_callback') 28d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 29d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea @skipIfi386 30156d8e04b9434923ab8e1bf9d3e81c0e71fccd36Daniel Malea @skipIfLinuxClang # buildbot clang version unable to use libstdc++ with c++11 31d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def test_sb_api_listener_event_description(self): 32d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """ Test the description of an SBListener breakpoint event is valid.""" 33d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.build_and_test('driver.cpp listener_test.cpp test_listener_event_description.cpp', 34d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 'test_listener_event_description') 35d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea pass 36d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 37d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea @skipIfi386 38156d8e04b9434923ab8e1bf9d3e81c0e71fccd36Daniel Malea @skipIfLinuxClang # buildbot clang version unable to use libstdc++ with c++11 39d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def test_sb_api_listener_event_process_state(self): 40d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """ Test that a registered SBListener receives events when a process 41d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea changes state. 42d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """ 43d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.build_and_test('driver.cpp listener_test.cpp test_listener_event_process_state.cpp', 44d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 'test_listener_event_process_state') 45d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea pass 46d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 47d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 48d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea @skipIfi386 49156d8e04b9434923ab8e1bf9d3e81c0e71fccd36Daniel Malea @skipIfLinuxClang # buildbot clang version unable to use libstdc++ with c++11 500440b1115c17608233595090148d02124d61d170Daniel Malea @skipIfLinux # llvm.org/pr16016 assertion failure in ProcessPOSIX.cpp. 51d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def test_sb_api_listener_resume(self): 52d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """ Test that a process can be resumed from a non-main thread. """ 53d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.build_and_test('driver.cpp listener_test.cpp test_listener_resume.cpp', 54d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 'test_listener_resume') 55d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea pass 56d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 57d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def build_and_test(self, sources, test_name, args = None): 58d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea """ Build LLDB test from sources, and run expecting 0 exit code """ 59d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea self.buildDriver(sources, test_name) 60bd58742be3a38e7f272765ae43dc3061d209dc06Jim Ingham self.addTearDownHook(lambda: os.remove(test_name)) 61d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 62d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea exe = [os.path.join(os.getcwd(), test_name), self.inferior] 63d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 64d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if self.TraceOn(): 65d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea print "Running test %s" % " ".join(exe) 66d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 67d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea check_call(exe, env={self.dylibPath : self.getLLDBLibraryEnvVal()}) 68d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 69d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 70d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 71d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea def build_program(self, sources, program): 72d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea return self.buildDriver(sources, program) 73d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 74d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaif __name__ == '__main__': 75d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea import atexit 76d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea lldb.SBDebugger.Initialize() 77d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea atexit.register(lambda: lldb.SBDebugger.Terminate()) 78d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea unittest2.main() 79