121 lines
4.1 KiB
Python
121 lines
4.1 KiB
Python
"""
|
|
Test the session save feature
|
|
"""
|
|
import os
|
|
import tempfile
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class SessionSaveTestCase(TestBase):
|
|
def raw_transcript_builder(self, cmd, res):
|
|
raw = "(lldb) " + cmd + "\n"
|
|
if res.GetOutputSize():
|
|
raw += res.GetOutput()
|
|
if res.GetErrorSize():
|
|
raw += res.GetError()
|
|
return raw
|
|
|
|
@skipIfWindows
|
|
@no_debug_info_test
|
|
def test_session_save(self):
|
|
raw = ""
|
|
interpreter = self.dbg.GetCommandInterpreter()
|
|
|
|
settings = [
|
|
"settings set interpreter.echo-commands true",
|
|
"settings set interpreter.echo-comment-commands true",
|
|
"settings set interpreter.stop-command-source-on-error false",
|
|
"settings set interpreter.open-transcript-in-editor false",
|
|
]
|
|
|
|
for setting in settings:
|
|
interpreter.HandleCommand(setting, lldb.SBCommandReturnObject())
|
|
|
|
inputs = [
|
|
"# This is a comment", # Comment
|
|
"help session", # Valid command
|
|
"Lorem ipsum", # Invalid command
|
|
]
|
|
|
|
for cmd in inputs:
|
|
res = lldb.SBCommandReturnObject()
|
|
interpreter.HandleCommand(cmd, res)
|
|
raw += self.raw_transcript_builder(cmd, res)
|
|
|
|
self.assertTrue(interpreter.HasCommands())
|
|
self.assertTrue(len(raw) != 0)
|
|
|
|
# Check for error
|
|
cmd = "session save /root/file"
|
|
interpreter.HandleCommand(cmd, res)
|
|
self.assertFalse(res.Succeeded())
|
|
raw += self.raw_transcript_builder(cmd, res)
|
|
|
|
tf = tempfile.NamedTemporaryFile()
|
|
output_file = tf.name
|
|
|
|
res = lldb.SBCommandReturnObject()
|
|
interpreter.HandleCommand("session save " + output_file, res)
|
|
self.assertTrue(res.Succeeded())
|
|
raw += self.raw_transcript_builder(cmd, res)
|
|
|
|
with open(output_file, "r") as file:
|
|
content = file.read()
|
|
# Exclude last line, since session won't record it's own output
|
|
lines = raw.splitlines()[:-1]
|
|
for line in lines:
|
|
self.assertIn(line, content)
|
|
|
|
td = tempfile.TemporaryDirectory()
|
|
res = lldb.SBCommandReturnObject()
|
|
interpreter.HandleCommand(
|
|
"settings set interpreter.save-session-directory " + td.name, res
|
|
)
|
|
self.assertTrue(res.Succeeded())
|
|
|
|
res = lldb.SBCommandReturnObject()
|
|
interpreter.HandleCommand("session save", res)
|
|
self.assertTrue(res.Succeeded())
|
|
raw += self.raw_transcript_builder(cmd, res)
|
|
|
|
with open(os.path.join(td.name, os.listdir(td.name)[0]), "r") as file:
|
|
content = file.read()
|
|
# Exclude last line, since session won't record it's own output
|
|
lines = raw.splitlines()[:-1]
|
|
for line in lines:
|
|
self.assertIn(line, content)
|
|
|
|
@skipIfWindows
|
|
@no_debug_info_test
|
|
def test_session_save_on_quit(self):
|
|
raw = ""
|
|
interpreter = self.dbg.GetCommandInterpreter()
|
|
|
|
td = tempfile.TemporaryDirectory()
|
|
|
|
settings = [
|
|
"settings set interpreter.echo-commands true",
|
|
"settings set interpreter.echo-comment-commands true",
|
|
"settings set interpreter.stop-command-source-on-error false",
|
|
"settings set interpreter.save-session-on-quit true",
|
|
"settings set interpreter.save-session-directory " + td.name,
|
|
"settings set interpreter.open-transcript-in-editor false",
|
|
]
|
|
|
|
for setting in settings:
|
|
res = lldb.SBCommandReturnObject()
|
|
interpreter.HandleCommand(setting, res)
|
|
raw += self.raw_transcript_builder(setting, res)
|
|
|
|
self.dbg.Destroy(self.dbg)
|
|
|
|
with open(os.path.join(td.name, os.listdir(td.name)[0]), "r") as file:
|
|
content = file.read()
|
|
# Exclude last line, since session won't record it's own output
|
|
lines = raw.splitlines()[:-1]
|
|
for line in lines:
|
|
self.assertIn(line, content)
|