blob: 60aaeedf1450b821da8fbff9e83aa00d17887393 [file] [log] [blame]
Caroline Tice8607f032011-01-29 00:19:53 +00001"""
2Test lldb logging.
3"""
4
5import os, time
6import unittest2
7import lldb
8from lldbtest import *
9
10class LogTestCase(TestBase):
11
Greg Clayton4570d3e2013-12-10 23:19:29 +000012 mydir = TestBase.compute_mydir(__file__)
Caroline Tice8607f032011-01-29 00:19:53 +000013
14 @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
Johnny Chen24086bc2012-04-06 19:54:10 +000015 @dsym_test
Caroline Tice8607f032011-01-29 00:19:53 +000016 def test_with_dsym (self):
17 self.buildDsym ()
Johnny Chenec1ccca2011-01-29 00:52:54 +000018 self.command_log_tests ("dsym")
Caroline Tice8607f032011-01-29 00:19:53 +000019
Johnny Chen24086bc2012-04-06 19:54:10 +000020 @dwarf_test
Caroline Tice8607f032011-01-29 00:19:53 +000021 def test_with_dwarf (self):
22 self.buildDwarf ()
Johnny Chenec1ccca2011-01-29 00:52:54 +000023 self.command_log_tests ("dwarf")
Caroline Tice8607f032011-01-29 00:19:53 +000024
Johnny Chenec1ccca2011-01-29 00:52:54 +000025 def command_log_tests (self, type):
Caroline Tice8607f032011-01-29 00:19:53 +000026 exe = os.path.join (os.getcwd(), "a.out")
27 self.expect("file " + exe,
28 patterns = [ "Current executable set to .*a.out" ])
29
Johnny Chene0ec9ea2011-03-04 01:35:22 +000030 log_file = os.path.join (os.getcwd(), "lldb-commands-log-%s-%s-%s.txt" % (type,
Greg Claytonc1b2ccf2013-01-08 00:01:36 +000031 os.path.basename(self.getCompiler()),
Johnny Chene0ec9ea2011-03-04 01:35:22 +000032 self.getArchitecture()))
Caroline Tice8607f032011-01-29 00:19:53 +000033
34 if (os.path.exists (log_file)):
35 os.remove (log_file)
36
Michael Sartainc2052432013-08-01 18:51:08 +000037 # By default, Debugger::EnableLog() will set log options to
38 # PREPEND_THREAD_NAME + OPTION_THREADSAFE. We don't want the
39 # threadnames here, so we enable just threadsafe (-t).
40 self.runCmd ("log enable -t -f '%s' lldb commands" % (log_file))
Caroline Tice8607f032011-01-29 00:19:53 +000041
Johnny Chen72c40822011-04-21 20:55:57 +000042 self.runCmd ("command alias bp breakpoint")
Caroline Tice8607f032011-01-29 00:19:53 +000043
44 self.runCmd ("bp set -n main")
45
46 self.runCmd ("bp l")
47
48 expected_log_lines = [
Daniel Maleab90c3682012-11-21 20:12:12 +000049 "Processing command: command alias bp breakpoint\n",
50 "HandleCommand, cmd_obj : 'command alias'\n",
51 "HandleCommand, revised_command_line: 'command alias bp breakpoint'\n",
52 "HandleCommand, wants_raw_input:'True'\n",
53 "HandleCommand, command line after removing command name(s): 'bp breakpoint'\n",
54 "HandleCommand, command succeeded\n",
55 "Processing command: bp set -n main\n",
56 "HandleCommand, cmd_obj : 'breakpoint set'\n",
57 "HandleCommand, revised_command_line: 'breakpoint set -n main'\n",
58 "HandleCommand, wants_raw_input:'False'\n",
59 "HandleCommand, command line after removing command name(s): '-n main'\n",
60 "HandleCommand, command succeeded\n",
61 "Processing command: bp l\n",
62 "HandleCommand, cmd_obj : 'breakpoint list'\n",
63 "HandleCommand, revised_command_line: 'breakpoint l'\n",
64 "HandleCommand, wants_raw_input:'False'\n",
65 "HandleCommand, command line after removing command name(s): ''\n",
66 "HandleCommand, command succeeded\n",
Caroline Tice8607f032011-01-29 00:19:53 +000067 ]
68
69 self.assertTrue (os.path.isfile (log_file))
70
71 idx = 0
72 end = len (expected_log_lines)
73 f = open (log_file)
74 log_lines = f.readlines()
75 f.close ()
Johnny Chenec1ccca2011-01-29 00:52:54 +000076 self.runCmd("log disable lldb")
Caroline Tice8607f032011-01-29 00:19:53 +000077 os.remove (log_file)
78
79 err_msg = ""
80 success = True
81
82 if len (log_lines) != len (expected_log_lines):
83 success = False
84 err_msg = "Wrong number of lines in log file; expected: " + repr (len (expected_log_lines)) + " found: " + repr(len (log_lines))
85 else:
86 for line1, line2 in zip (log_lines, expected_log_lines):
87 if line1 != line2:
88 success = False
89 err_msg = "Expected '" + line2 + "'; Found '" + line1 + "'"
90 break
91
92 if not success:
93 self.fail (err_msg)
94
95
96if __name__ == '__main__':
97 import atexit
98 lldb.SBDebugger.Initialize()
99 atexit.register(lambda: lldb.SBDebugger.Terminate())
100 unittest2.main()
101