teemperor created this revision. We always print two error messages when we hit an unknown command. As the function with one error message unconditionally calls the other, we can just remove that error message.
Fixes https://bugs.llvm.org/show_bug.cgi?id=38312 https://reviews.llvm.org/D49831 Files: packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py source/Interpreter/CommandInterpreter.cpp Index: source/Interpreter/CommandInterpreter.cpp =================================================================== --- source/Interpreter/CommandInterpreter.cpp +++ source/Interpreter/CommandInterpreter.cpp @@ -1693,33 +1693,6 @@ remainder.c_str()); cmd_obj->Execute(remainder.c_str(), result); - } else { - // We didn't find the first command object, so complete the first argument. - Args command_args(command_string); - StringList matches; - unsigned cursor_char_position = strlen(command_args.GetArgumentAtIndex(0)); - CompletionRequest request(command_line, cursor_char_position, 0, -1, - matches); - int num_matches = HandleCompletionMatches(request); - - if (num_matches > 0) { - std::string error_msg; - error_msg.assign("ambiguous command '"); - error_msg.append(command_args.GetArgumentAtIndex(0)); - error_msg.append("'."); - - error_msg.append(" Possible completions:"); - for (int i = 0; i < num_matches; i++) { - error_msg.append("\n\t"); - error_msg.append(matches.GetStringAtIndex(i)); - } - error_msg.append("\n"); - result.AppendRawError(error_msg.c_str()); - } else - result.AppendErrorWithFormat("Unrecognized command '%s'.\n", - command_args.GetArgumentAtIndex(0)); - - result.SetStatus(eReturnStatusFailed); } if (log) Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py =================================================================== --- /dev/null +++ packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py @@ -0,0 +1,39 @@ +""" +Test how lldb reacts to wrong commands +""" + +from __future__ import print_function + +import os +import time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class UnknownCommandTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test + def test_ambiguous_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("g", result) + self.assertFalse(result.Succeeded()) + self.assertRegexpMatches(result.GetError(), "Ambiguous command 'g'. Possible matches:") + self.assertRegexpMatches(result.GetError(), "gui") + self.assertRegexpMatches(result.GetError(), "gdb-remote") + # FIXME: Somehow we get 'gui' and 'gdb-remote' twice in the output. + + @no_debug_info_test + def test_unknown_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("qbert", result) + self.assertFalse(result.Succeeded()) + self.assertEquals(result.GetError(), "error: 'qbert' is not a valid command.\n") Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories =================================================================== --- /dev/null +++ packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories @@ -0,0 +1 @@ +cmdline
Index: source/Interpreter/CommandInterpreter.cpp =================================================================== --- source/Interpreter/CommandInterpreter.cpp +++ source/Interpreter/CommandInterpreter.cpp @@ -1693,33 +1693,6 @@ remainder.c_str()); cmd_obj->Execute(remainder.c_str(), result); - } else { - // We didn't find the first command object, so complete the first argument. - Args command_args(command_string); - StringList matches; - unsigned cursor_char_position = strlen(command_args.GetArgumentAtIndex(0)); - CompletionRequest request(command_line, cursor_char_position, 0, -1, - matches); - int num_matches = HandleCompletionMatches(request); - - if (num_matches > 0) { - std::string error_msg; - error_msg.assign("ambiguous command '"); - error_msg.append(command_args.GetArgumentAtIndex(0)); - error_msg.append("'."); - - error_msg.append(" Possible completions:"); - for (int i = 0; i < num_matches; i++) { - error_msg.append("\n\t"); - error_msg.append(matches.GetStringAtIndex(i)); - } - error_msg.append("\n"); - result.AppendRawError(error_msg.c_str()); - } else - result.AppendErrorWithFormat("Unrecognized command '%s'.\n", - command_args.GetArgumentAtIndex(0)); - - result.SetStatus(eReturnStatusFailed); } if (log) Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py =================================================================== --- /dev/null +++ packages/Python/lldbsuite/test/functionalities/wrong_commands/TestWrongCommands.py @@ -0,0 +1,39 @@ +""" +Test how lldb reacts to wrong commands +""" + +from __future__ import print_function + +import os +import time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class UnknownCommandTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test + def test_ambiguous_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("g", result) + self.assertFalse(result.Succeeded()) + self.assertRegexpMatches(result.GetError(), "Ambiguous command 'g'. Possible matches:") + self.assertRegexpMatches(result.GetError(), "gui") + self.assertRegexpMatches(result.GetError(), "gdb-remote") + # FIXME: Somehow we get 'gui' and 'gdb-remote' twice in the output. + + @no_debug_info_test + def test_unknown_command(self): + command_interpreter = self.dbg.GetCommandInterpreter() + self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER) + result = lldb.SBCommandReturnObject() + + command_interpreter.HandleCommand("qbert", result) + self.assertFalse(result.Succeeded()) + self.assertEquals(result.GetError(), "error: 'qbert' is not a valid command.\n") Index: packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories =================================================================== --- /dev/null +++ packages/Python/lldbsuite/test/functionalities/wrong_commands/.categories @@ -0,0 +1 @@ +cmdline
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits