Home | History | Annotate | Download | only in alias
      1 """
      2 Test lldb command aliases.
      3 """
      4 
      5 import os, time
      6 import unittest2
      7 import lldb
      8 from lldbtest import *
      9 import lldbutil
     10 
     11 class AliasTestCase(TestBase):
     12 
     13     mydir = os.path.join("functionalities", "alias")
     14 
     15     @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
     16     @dsym_test
     17     def test_with_dsym (self):
     18         self.buildDsym ()
     19         self.alias_tests ()
     20 
     21     @expectedFailureFreeBSD('llvm.org/pr16697') # Expression fails with 'there is no JIT compiled function'
     22     @dwarf_test
     23     def test_with_dwarf (self):
     24         self.buildDwarf ()
     25         self.alias_tests ()
     26 
     27     def alias_tests (self):
     28         exe = os.path.join (os.getcwd(), "a.out")
     29         self.expect("file " + exe,
     30                     patterns = [ "Current executable set to .*a.out" ])
     31 
     32 
     33         def cleanup():
     34             self.runCmd('command unalias hello', check=False)
     35             self.runCmd('command unalias python', check=False)
     36             self.runCmd('command unalias pp', check=False)
     37             self.runCmd('command unalias alias', check=False)
     38             self.runCmd('command unalias unalias', check=False)
     39             self.runCmd('command unalias myrun', check=False)
     40             self.runCmd('command unalias bp', check=False)
     41             self.runCmd('command unalias bpa', check=False)
     42             self.runCmd('command unalias bpi', check=False)
     43             self.runCmd('command unalias bfl', check=False)
     44             self.runCmd('command unalias exprf', check=False)
     45             self.runCmd('command unalias exprf2', check=False)
     46 
     47         # Execute the cleanup function during test case tear down.
     48         self.addTearDownHook(cleanup)
     49 
     50         self.runCmd (r'''command alias hello expr (int) printf ("\n\nHello, anybody!\n\n")''')
     51 
     52         self.runCmd ("command alias python script")
     53 
     54         # We don't want to display the stdout if not in TraceOn() mode.
     55         if not self.TraceOn():
     56             self.HideStdout()
     57 
     58         self.runCmd (r'''python print "\n\n\nWhoopee!\n\n\n"''')
     59 #        self.expect (r'''python print "\n\n\nWhoopee!\n\n\n"''',
     60 #                     substrs = [ "Whoopee!" ])
     61 
     62         self.runCmd (r'''python print "\n\t\x68\x65\x6c\x6c\x6f\n"''')
     63 #        self.expect (r'''python print "\n\t\x68\x65\x6c\x6c\x6f\n"''',
     64 #                     substrs = [ "hello" ])
     65 
     66         self.runCmd (r'''command alias pp python print "\n\t\x68\x65\x6c\x6c\x6f\n"''')
     67         self.runCmd ("pp")
     68 #        self.expect ("pp",
     69 #                     substrs = [ "hello" ])
     70 
     71 
     72         self.runCmd ("command alias alias command alias")
     73         self.runCmd ("command alias unalias command unalias")
     74 
     75         self.runCmd ("alias myrun process launch -t %1 --")
     76         self.runCmd ("alias bp breakpoint")
     77 
     78         self.expect ("alias bpa bp add",
     79                      COMMAND_FAILED_AS_EXPECTED, error = True,
     80                      substrs = [ "'add' is not a valid sub-command of 'bp'" ])
     81 
     82         self.runCmd ("alias bpa bp command add")
     83         self.runCmd ("alias bpi bp list")
     84 
     85         break_results = lldbutil.run_break_set_command (self, "bp set -n foo")
     86         lldbutil.check_breakpoint_result (self, break_results, num_locations=1, symbol_name='foo', symbol_match_exact=False)
     87 
     88         break_results = lldbutil.run_break_set_command (self, "bp set -n sum")
     89         lldbutil.check_breakpoint_result (self, break_results, num_locations=1, symbol_name='sum', symbol_match_exact=False)
     90 
     91         self.runCmd ("alias bfl bp set -f %1 -l %2")
     92 
     93         break_results = lldbutil.run_break_set_command (self, "bfl main.cpp 32")
     94         lldbutil.check_breakpoint_result (self, break_results, num_locations=1, file_name='main.cpp', line_number=32)
     95 
     96         self.expect ("bpi",
     97                      startstr = "Current breakpoints:",
     98                      substrs = [ "1: name = 'foo', locations = 1",
     99                                  "2: name = 'sum', locations = 1",
    100                                  "3: file = 'main.cpp', line = 32, locations = 1" ])
    101 
    102         self.runCmd ("bpa -s python 1 -o 'print frame; print bp_loc'")
    103         self.runCmd ("bpa -s command 2 -o 'frame variable b'")
    104         self.expect ("bpi -f",
    105                      substrs = [ "Current breakpoints:",
    106                                  "1: name = 'foo', locations = 1",
    107                                  "print frame; print bp_loc",
    108                                  "2: name = 'sum', locations = 1",
    109                                  "frame variable b" ])
    110 
    111 
    112         self.expect ("help run",
    113                      substrs = [ "'run' is an abbreviation for 'process launch -c /bin/bash --'" ])
    114 
    115         self.expect ("help -a run",
    116                      substrs = [ "'run' is an abbreviation for 'process launch -c /bin/bash --'" ])
    117 
    118         self.expect ("help -a",
    119                      substrs = [ 'run', 'process launch -c /bin/bash' ])
    120 
    121         self.expect ("help", matching=False,
    122                      substrs = [ "'run'", 'process launch -c /bin/bash' ])
    123 
    124         self.expect ("run",
    125                      patterns = [ "Process .* launched: .*a.out" ])
    126 
    127         self.expect (r'''expression (int) printf("\x68\x65\x6c\x6c\x6f\n")''',
    128                      substrs = [ "(int) $",
    129                                  "= 6" ])
    130 
    131         self.expect ("hello",
    132                      substrs = [ "(int) $", 
    133                                  "= 19" ])
    134 
    135         self.expect ("expr -f x -- 68",
    136                      substrs = [ "(int) $",
    137                                  "= 0x00000044" ])
    138 
    139         self.runCmd ("alias exprf expr -f %1")
    140         self.runCmd ("alias exprf2 expr --raw -f %1 --")
    141         self.expect ("exprf x -- 1234",
    142                      substrs = [ "(int) $",
    143                                  "= 0x000004d2" ])
    144 
    145         self.expect ('exprf2 c "Hi there!"',
    146                      substrs = [ "[0] = 'H'",
    147                                  "[1] = 'i'",
    148                                  "[2] = ' '",
    149                                  "[3] = 't'",
    150                                  "[4] = 'h'",
    151                                  "[5] = 'e'",
    152                                  "[6] = 'r'",
    153                                  "[7] = 'e'",
    154                                  "[8] = '!'",
    155                                  "[9] = '\\0'" ])
    156         
    157 
    158         self.expect ("exprf x 1234",
    159                      COMMAND_FAILED_AS_EXPECTED, error = True,
    160                      substrs = [ "use of undeclared identifier 'f'",
    161                                  "1 errors parsing expression" ])
    162 
    163 if __name__ == '__main__':
    164     import atexit
    165     lldb.SBDebugger.Initialize()
    166     atexit.register(lambda: lldb.SBDebugger.Terminate())
    167     unittest2.main()
    168 
    169