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

Reply via email to