1""" 2Test the session save feature 3""" 4 5import lldb 6from lldbsuite.test.decorators import * 7from lldbsuite.test.lldbtest import * 8from lldbsuite.test import lldbutil 9 10 11class SessionSaveTestCase(TestBase): 12 13 mydir = TestBase.compute_mydir(__file__) 14 15 def raw_transcript_builder(self, cmd, res): 16 raw = "(lldb) " + cmd + "\n" 17 if res.GetOutputSize(): 18 raw += res.GetOutput() 19 if res.GetErrorSize(): 20 raw += res.GetError() 21 return raw 22 23 24 @skipIfWindows 25 @skipIfReproducer 26 @no_debug_info_test 27 def test_session_save(self): 28 raw = "" 29 interpreter = self.dbg.GetCommandInterpreter() 30 31 settings = [ 32 'settings set interpreter.echo-commands true', 33 'settings set interpreter.echo-comment-commands true', 34 'settings set interpreter.stop-command-source-on-error false' 35 ] 36 37 for setting in settings: 38 interpreter.HandleCommand(setting, lldb.SBCommandReturnObject()) 39 40 inputs = [ 41 '# This is a comment', # Comment 42 'help session', # Valid command 43 'Lorem ipsum' # Invalid command 44 ] 45 46 for cmd in inputs: 47 res = lldb.SBCommandReturnObject() 48 interpreter.HandleCommand(cmd, res) 49 raw += self.raw_transcript_builder(cmd, res) 50 51 self.assertTrue(interpreter.HasCommands()) 52 self.assertTrue(len(raw) != 0) 53 54 # Check for error 55 cmd = 'session save /root/file' 56 interpreter.HandleCommand(cmd, res) 57 self.assertFalse(res.Succeeded()) 58 raw += self.raw_transcript_builder(cmd, res) 59 60 import tempfile 61 tf = tempfile.NamedTemporaryFile() 62 output_file = tf.name 63 64 res = lldb.SBCommandReturnObject() 65 interpreter.HandleCommand('session save ' + output_file, res) 66 self.assertTrue(res.Succeeded()) 67 raw += self.raw_transcript_builder(cmd, res) 68 69 with open(output_file, "r") as file: 70 content = file.read() 71 # Exclude last line, since session won't record it's own output 72 lines = raw.splitlines()[:-1] 73 for line in lines: 74 self.assertIn(line, content) 75