Author: jingham Date: Wed Apr 19 18:21:04 2017 New Revision: 300785 URL: http://llvm.org/viewvc/llvm-project?rev=300785&view=rev Log: Fix !N and !-N commands and add a test case.
<rdar://problem/31713267> Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/ lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py Modified: lldb/trunk/source/Commands/CommandObjectCommands.cpp lldb/trunk/source/Interpreter/CommandHistory.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py?rev=300785&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/history/TestHistoryRecall.py Wed Apr 19 18:21:04 2017 @@ -0,0 +1,45 @@ +""" +Make sure the !N and !-N commands work properly. +""" + +from __future__ import print_function + + +import os +import time +import re +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + + +class TestHistoryRecall(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + # If your test case doesn't stress debug info, the + # set this to true. That way it won't be run once for + # each debug info format. + NO_DEBUG_INFO_TESTCASE = True + + def test_history_recall(self): + """Test the !N and !-N functionality of the command interpreter.""" + self.sample_test() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + + def sample_test(self): + interp = self.dbg.GetCommandInterpreter() + result = lldb.SBCommandReturnObject() + interp.HandleCommand("command history", result, True) + interp.HandleCommand("platform list", result, True) + + interp.HandleCommand("!0", result, False) + self.assertTrue(result.Succeeded(), "!0 command did not work: %s"%(result.GetError())) + self.assertTrue("command history" in result.GetOutput(), "!0 didn't rerun command history") + + interp.HandleCommand("!-1", result, False) + self.assertTrue(result.Succeeded(), "!-1 command did not work: %s"%(result.GetError())) + self.assertTrue("host:" in result.GetOutput(), "!-1 didn't rerun platform list.") Modified: lldb/trunk/source/Commands/CommandObjectCommands.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectCommands.cpp?rev=300785&r1=300784&r2=300785&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectCommands.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectCommands.cpp Wed Apr 19 18:21:04 2017 @@ -50,7 +50,11 @@ class CommandObjectCommandsHistory : pub public: CommandObjectCommandsHistory(CommandInterpreter &interpreter) : CommandObjectParsed(interpreter, "command history", - "Dump the history of commands in this session.", + "Dump the history of commands in this session.\n" + "Commands in the history list can be run again " + "using \"!<INDEX>\". \"!-<OFFSET>\" will re-run " + "the command that is <OFFSET> commands from the end" + " of the list (counting the current command).", nullptr), m_options() {} Modified: lldb/trunk/source/Interpreter/CommandHistory.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandHistory.cpp?rev=300785&r1=300784&r2=300785&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/CommandHistory.cpp (original) +++ lldb/trunk/source/Interpreter/CommandHistory.cpp Wed Apr 19 18:21:04 2017 @@ -47,13 +47,13 @@ CommandHistory::FindString(llvm::StringR size_t idx = 0; if (input_str.front() == '-') { - if (input_str.drop_front(2).getAsInteger(0, idx)) + if (input_str.drop_front(1).getAsInteger(0, idx)) return llvm::None; if (idx >= m_history.size()) return llvm::None; idx = m_history.size() - idx; } else { - if (input_str.drop_front().getAsInteger(0, idx)) + if (input_str.getAsInteger(0, idx)) return llvm::None; if (idx >= m_history.size()) return llvm::None; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits