summaryrefslogtreecommitdiffstats
path: root/lldb/test/functionalities/command_script/TestCommandScript.py
blob: 5064377b842e64ce55ca32d240969df24aee7629 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""
Test lldb Python commands.
"""

import os, time
import unittest2
import lldb
from lldbtest import *

class CmdPythonTestCase(TestBase):

    mydir = os.path.join("functionalities", "command_script")

    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
    def test_with_dsym (self):
        self.buildDsym ()
        self.pycmd_tests ()

    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)

        # Execute the cleanup function during test case tear down.
        self.addTearDownHook(cleanup)

        # 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("command script clear")

        self.expect('command script list', matching=False,
                    substrs = ['targetname',
                               'longwait'])

if __name__ == '__main__':
    import atexit
    lldb.SBDebugger.Initialize()
    atexit.register(lambda: lldb.SBDebugger.Terminate())
    unittest2.main()

OpenPOWER on IntegriCloud