75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| Test the session save feature
 | |
| """
 | |
| 
 | |
| import lldb
 | |
| from lldbsuite.test.decorators import *
 | |
| from lldbsuite.test.lldbtest import *
 | |
| from lldbsuite.test import lldbutil
 | |
| 
 | |
| 
 | |
| class SessionSaveTestCase(TestBase):
 | |
| 
 | |
|     mydir = TestBase.compute_mydir(__file__)
 | |
| 
 | |
|     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
 | |
|     @skipIfReproducer
 | |
|     @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'
 | |
|         ]
 | |
| 
 | |
|         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)
 | |
| 
 | |
|         import tempfile
 | |
|         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)
 |