brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 4565987 Raw
148 lines · python
1"""Test the RunCommandInterpreter API."""2 3import os4import lldb5from lldbsuite.test.decorators import *6from lldbsuite.test.lldbtest import *7 8 9class CommandRunInterpreterLegacyAPICase(TestBase):10    NO_DEBUG_INFO_TESTCASE = True11 12    def setUp(self):13        TestBase.setUp(self)14 15        self.stdin_path = self.getBuildArtifact("stdin.txt")16 17        with open(self.stdin_path, "w") as input_handle:18            input_handle.write("nonexistingcommand\nquit")19 20        # Python will close the file descriptor if all references21        # to the filehandle object lapse, so we need to keep one22        # around.23        self.filehandle = open(self.stdin_path, "r")24        self.dbg.SetInputFileHandle(self.filehandle, False)25 26        # No need to track the output27        self.devnull = open(os.devnull, "w")28        self.dbg.SetOutputFileHandle(self.devnull, False)29        self.dbg.SetErrorFileHandle(self.devnull, False)30 31    def test_run_session_with_error_and_quit_legacy(self):32        """Run non-existing and quit command returns appropriate values"""33 34        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(35            True, False, lldb.SBCommandInterpreterRunOptions(), 0, False, False36        )37 38        self.assertGreater(n_errors, 0)39        self.assertTrue(quit_requested)40        self.assertFalse(has_crashed)41 42 43class CommandRunInterpreterAPICase(TestBase):44    NO_DEBUG_INFO_TESTCASE = True45 46    def setUp(self):47        TestBase.setUp(self)48 49        self.stdin_path = self.getBuildArtifact("stdin.txt")50        self.stdout_path = self.getBuildArtifact("stdout.txt")51 52    def run_commands_string(53        self, command_string, options=lldb.SBCommandInterpreterRunOptions()54    ):55        """Run the commands in command_string through RunCommandInterpreter.56        Returns (n_errors, quit_requested, has_crashed, result_string)."""57 58        with open(self.stdin_path, "w") as input_handle:59            input_handle.write(command_string)60 61        n_errors = 062        quit_requested = False63        has_crashed = False64 65        with open(self.stdin_path, "r") as in_fileH, open(66            self.stdout_path, "w"67        ) as out_fileH:68            self.dbg.SetInputFile(in_fileH)69 70            self.dbg.SetOutputFile(out_fileH)71            self.dbg.SetErrorFile(out_fileH)72 73            n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(74                True, False, options, 0, False, False75            )76 77        result_string = None78        with open(self.stdout_path, "r") as out_fileH:79            result_string = out_fileH.read()80 81        return (n_errors, quit_requested, has_crashed, result_string)82 83    def test_run_session_with_error_and_quit(self):84        """Run non-existing and quit command returns appropriate values"""85 86        n_errors, quit_requested, has_crashed, _ = self.run_commands_string(87            "nonexistingcommand\nquit\n"88        )89        self.assertGreater(n_errors, 0)90        self.assertTrue(quit_requested)91        self.assertFalse(has_crashed)92 93    def test_allow_repeat(self):94        """Try auto-repeat of process launch - the command will fail and95        the auto-repeat will fail because of no auto-repeat."""96        options = lldb.SBCommandInterpreterRunOptions()97        options.SetEchoCommands(False)98        options.SetAllowRepeats(True)99 100        n_errors, quit_requested, has_crashed, result_str = self.run_commands_string(101            "process launch\n\n", options102        )103        self.assertEqual(n_errors, 2)104        self.assertFalse(quit_requested)105        self.assertFalse(has_crashed)106 107        self.assertIn("invalid target", result_str)108        self.assertIn("no auto repeat", result_str)109 110 111class SBCommandInterpreterRunOptionsCase(TestBase):112    NO_DEBUG_INFO_TESTCASE = True113 114    def test_command_interpreter_run_options(self):115        """Test SBCommandInterpreterRunOptions default values, getters & setters"""116 117        opts = lldb.SBCommandInterpreterRunOptions()118 119        # Check getters with default values120        self.assertFalse(opts.GetStopOnContinue())121        self.assertFalse(opts.GetStopOnError())122        self.assertFalse(opts.GetStopOnCrash())123        self.assertTrue(opts.GetEchoCommands())124        self.assertTrue(opts.GetPrintResults())125        self.assertTrue(opts.GetPrintErrors())126        self.assertTrue(opts.GetAddToHistory())127        self.assertFalse(opts.GetAllowRepeats())128 129        # Invert values130        opts.SetStopOnContinue(not opts.GetStopOnContinue())131        opts.SetStopOnError(not opts.GetStopOnError())132        opts.SetStopOnCrash(not opts.GetStopOnCrash())133        opts.SetEchoCommands(not opts.GetEchoCommands())134        opts.SetPrintResults(not opts.GetPrintResults())135        opts.SetPrintErrors(not opts.GetPrintErrors())136        opts.SetAddToHistory(not opts.GetAddToHistory())137        opts.SetAllowRepeats(not opts.GetAllowRepeats())138 139        # Check the value changed140        self.assertTrue(opts.GetStopOnContinue())141        self.assertTrue(opts.GetStopOnError())142        self.assertTrue(opts.GetStopOnCrash())143        self.assertFalse(opts.GetEchoCommands())144        self.assertFalse(opts.GetPrintResults())145        self.assertFalse(opts.GetPrintErrors())146        self.assertFalse(opts.GetAddToHistory())147        self.assertTrue(opts.GetAllowRepeats())148