blob: ee6348160f9a30e543e59ec7a421e1195e34a12a [file] [log] [blame]
Sean Callanan5207a342011-08-10 21:05:52 +00001"""
2Tests that C strings work as expected in expressions
3"""
Jim Ingham63dfc722012-09-22 00:05:11 +00004import lldb
Sean Callanan5207a342011-08-10 21:05:52 +00005from lldbtest import *
Jim Ingham63dfc722012-09-22 00:05:11 +00006import lldbutil
Sean Callanan5207a342011-08-10 21:05:52 +00007
8class CStringsTestCase(TestBase):
9
Greg Clayton4570d3e2013-12-10 23:19:29 +000010 mydir = TestBase.compute_mydir(__file__)
Sean Callanan5207a342011-08-10 21:05:52 +000011
Robert Flack13c7ad92015-03-30 14:12:17 +000012 @skipUnlessDarwin
Johnny Chen24086bc2012-04-06 19:54:10 +000013 @dsym_test
Sean Callanan5207a342011-08-10 21:05:52 +000014 def test_with_dsym_and_run_command(self):
15 """Tests that C strings work as expected in expressions"""
16 self.buildDsym()
17 self.static_method_commands()
18
Johnny Chen24086bc2012-04-06 19:54:10 +000019 @dwarf_test
Sean Callanan5207a342011-08-10 21:05:52 +000020 def test_with_dwarf_and_run_command(self):
21 """Tests that C strings work as expected in expressions"""
22 self.buildDwarf()
23 self.static_method_commands()
24
25 def setUp(self):
26 TestBase.setUp(self)
27
28 def set_breakpoint(self, line):
Jim Ingham63dfc722012-09-22 00:05:11 +000029 lldbutil.run_break_set_by_file_and_line (self, "main.c", line, num_expected_locations=1, loc_exact=True)
Sean Callanan5207a342011-08-10 21:05:52 +000030
31 def static_method_commands(self):
32 """Tests that C strings work as expected in expressions"""
33 self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
34
35 self.set_breakpoint(line_number('main.c', '// breakpoint 1'))
36
Sean Callanan05834cd2015-07-01 23:56:30 +000037 self.runCmd("process launch", RUN_SUCCEEDED)
Sean Callanan5207a342011-08-10 21:05:52 +000038
39 self.expect("expression -- a[2]",
Johnny Chene1cdc922011-08-16 19:59:22 +000040 patterns = ["\((const )?char\) \$0 = 'c'"])
Sean Callanan5207a342011-08-10 21:05:52 +000041
42 self.expect("expression -- z[2]",
43 startstr = "(const char) $1 = 'x'")
44
Matt Kopec00049b82013-02-27 20:13:38 +000045 # On Linux, the expression below will test GNU indirect function calls.
Sean Callanan5207a342011-08-10 21:05:52 +000046 self.expect("expression -- (int)strlen(\"hello\")",
47 startstr = "(int) $2 = 5")
48
49 self.expect("expression -- \"world\"[2]",
50 startstr = "(const char) $3 = 'r'")
51
52 self.expect("expression -- \"\"[0]",
53 startstr = "(const char) $4 = '\\0'")
54
Enrico Granatacd58d112013-03-28 21:58:05 +000055 self.expect("expr --raw -- \"hello\"",
56 substrs = ['[0] = \'h\'',
Enrico Granatab576bba2013-01-09 20:12:53 +000057 '[5] = \'\\0\''])
Enrico Granata9128ee22011-09-06 19:20:51 +000058
Enrico Granatacd58d112013-03-28 21:58:05 +000059 self.expect("p \"hello\"",
60 substrs = ['[6]) $', 'hello'])
61
Enrico Granata9128ee22011-09-06 19:20:51 +000062 self.expect("p (char*)\"hello\"",
63 substrs = ['(char *) $', ' = 0x',
64 'hello'])
65
Sean Callanan76ee3e72013-04-24 19:50:12 +000066 self.expect("p (int)strlen(\"\")",
67 substrs = ['(int) $', ' = 0'])
68
Sean Callanan7d01ddd2013-05-31 17:29:03 +000069 self.expect("expression !z",
70 substrs = ['false'])
71
Sean Callanan5207a342011-08-10 21:05:52 +000072if __name__ == '__main__':
73 import atexit
74 lldb.SBDebugger.Initialize()
75 atexit.register(lambda: lldb.SBDebugger.Terminate())
76 unittest2.main()