This has led to many test suite failures because of copy and paste where new test cases were based off of other test cases and the "mydir" variable wasn't updated. Now you can call your superclasses "compute_mydir()" function with "__file__" as the sole argument and the relative path will be computed for you. llvm-svn: 196985
147 lines
5.3 KiB
Python
147 lines
5.3 KiB
Python
"""
|
|
Test lldb Python commands.
|
|
"""
|
|
|
|
import os, time
|
|
import unittest2
|
|
import lldb
|
|
from lldbtest import *
|
|
|
|
class CmdPythonTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
|
|
@dsym_test
|
|
def test_with_dsym (self):
|
|
self.buildDsym ()
|
|
self.pycmd_tests ()
|
|
|
|
@dwarf_test
|
|
def test_with_dwarf (self):
|
|
self.buildDwarf ()
|
|
self.pycmd_tests ()
|
|
|
|
def pycmd_tests (self):
|
|
exe = os.path.join (os.getcwd(), "a.out")
|
|
self.expect("file " + exe,
|
|
patterns = [ "Current executable set to .*a.out" ])
|
|
|
|
self.runCmd("command source py_import")
|
|
|
|
# This is the function to remove the custom commands in order to have a
|
|
# clean slate for the next test case.
|
|
def cleanup():
|
|
self.runCmd('command script delete welcome', check=False)
|
|
self.runCmd('command script delete targetname', check=False)
|
|
self.runCmd('command script delete longwait', check=False)
|
|
self.runCmd('command script delete mysto', check=False)
|
|
self.runCmd('command script delete tell_sync', check=False)
|
|
self.runCmd('command script delete tell_async', check=False)
|
|
self.runCmd('command script delete tell_curr', check=False)
|
|
self.runCmd('command script delete bug11569', check=False)
|
|
|
|
# Execute the cleanup function during test case tear down.
|
|
self.addTearDownHook(cleanup)
|
|
|
|
# Interact with debugger in synchronous mode
|
|
self.setAsync(False)
|
|
|
|
# We don't want to display the stdout if not in TraceOn() mode.
|
|
if not self.TraceOn():
|
|
self.HideStdout()
|
|
|
|
self.expect('welcome Enrico',
|
|
substrs = ['Hello Enrico, welcome to LLDB']);
|
|
|
|
self.expect("help welcome",
|
|
substrs = ['Just a docstring for welcome_impl',
|
|
'A command that says hello to LLDB users'])
|
|
|
|
self.expect("help",
|
|
substrs = ['Run Python function welcome.welcome_impl',
|
|
'welcome'])
|
|
|
|
self.expect("help -a",
|
|
substrs = ['Run Python function welcome.welcome_impl',
|
|
'welcome'])
|
|
|
|
self.expect("help -u", matching=False,
|
|
substrs = ['Run Python function welcome.welcome_impl',
|
|
'welcome'])
|
|
|
|
self.runCmd("command script delete welcome");
|
|
|
|
self.expect('welcome Enrico', matching=False, error=True,
|
|
substrs = ['Hello Enrico, welcome to LLDB']);
|
|
|
|
self.expect('targetname',
|
|
substrs = ['a.out'])
|
|
|
|
self.expect('targetname fail', error=True,
|
|
substrs = ['a test for error in command'])
|
|
|
|
self.expect('command script list',
|
|
substrs = ['targetname',
|
|
'Run Python function welcome.target_name_impl'])
|
|
|
|
self.expect("help targetname",
|
|
substrs = ['Run Python function welcome.target_name_imp',
|
|
'This command takes','\'raw\' input',
|
|
'quote stuff'])
|
|
|
|
self.expect("longwait",
|
|
substrs = ['Done; if you saw the delays I am doing OK'])
|
|
|
|
self.runCmd("b main")
|
|
self.runCmd("run")
|
|
self.runCmd("mysto 3")
|
|
self.expect("frame variable array",
|
|
substrs = ['[0] = 79630','[1] = 388785018','[2] = 0'])
|
|
self.runCmd("mysto 3")
|
|
self.expect("frame variable array",
|
|
substrs = ['[0] = 79630','[4] = 388785018','[5] = 0'])
|
|
|
|
# we cannot use the stepover command to check for async execution mode since LLDB
|
|
# seems to get confused when events start to queue up
|
|
self.expect("tell_sync",
|
|
substrs = ['running sync'])
|
|
self.expect("tell_async",
|
|
substrs = ['running async'])
|
|
self.expect("tell_curr",
|
|
substrs = ['I am running sync'])
|
|
|
|
# Test that a python command can redefine itself
|
|
self.expect('command script add -f foobar welcome')
|
|
|
|
self.runCmd("command script clear")
|
|
|
|
# Test that re-defining an existing command works
|
|
self.runCmd('command script add my_command --function welcome.welcome_impl')
|
|
self.expect('my_command Blah', substrs = ['Hello Blah, welcome to LLDB'])
|
|
|
|
self.runCmd('command script add my_command --function welcome.target_name_impl')
|
|
self.expect('my_command', substrs = ['a.out'])
|
|
|
|
self.runCmd("command script clear")
|
|
|
|
self.expect('command script list', matching=False,
|
|
substrs = ['targetname',
|
|
'longwait'])
|
|
|
|
self.expect('command script add -f foobar frame', error=True,
|
|
substrs = ['cannot add command'])
|
|
|
|
# http://llvm.org/bugs/show_bug.cgi?id=11569
|
|
# LLDBSwigPythonCallCommand crashes when a command script returns an object
|
|
self.runCmd('command script add -f bug11569 bug11569')
|
|
# This should not crash.
|
|
self.runCmd('bug11569', check=False)
|
|
|
|
if __name__ == '__main__':
|
|
import atexit
|
|
lldb.SBDebugger.Initialize()
|
|
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
|
unittest2.main()
|
|
|