Clean up command history context passed to suggestions UI (#17245)

This is fallout from #16937. 

* Typing a command then backspacing the chars then asking for
suggestions would think the current commandline ended with spaces,
making filtering very hard.
* The currently typed command would _also_ appear in the command
history, which isn't useful.

I actually did TDD for this and wrote the test first, then confirmed
again running through the build script, I wasn't hitting any of the
earlier issues.

Closes #17241
Closes #17243
This commit is contained in:
Mike Griese
2024-05-13 12:36:27 -05:00
committed by GitHub
parent e1b102a354
commit bf8a647788
2 changed files with 77 additions and 7 deletions

View File

@@ -40,6 +40,7 @@ namespace ControlUnitTests
TEST_METHOD(TestSelectCommandSimple);
TEST_METHOD(TestSelectOutputSimple);
TEST_METHOD(TestCommandContext);
TEST_METHOD(TestSelectOutputScrolling);
TEST_METHOD(TestSelectOutputExactWrap);
@@ -509,6 +510,56 @@ namespace ControlUnitTests
VERIFY_ARE_EQUAL(expectedEnd, end);
}
}
void ControlCoreTests::TestCommandContext()
{
auto [settings, conn] = _createSettingsAndConnection();
Log::Comment(L"Create ControlCore object");
auto core = createCore(*settings, *conn);
VERIFY_IS_NOT_NULL(core);
_standardInit(core);
Log::Comment(L"Print some text");
_writePrompt(conn, L"C:\\Windows");
conn->WriteInput(L"Foo-bar");
conn->WriteInput(L"\x1b]133;C\x7");
conn->WriteInput(L"\r\n");
conn->WriteInput(L"This is some text \r\n");
conn->WriteInput(L"with varying amounts \r\n");
conn->WriteInput(L"of whitespace \r\n");
_writePrompt(conn, L"C:\\Windows");
Log::Comment(L"Check the command context");
const WEX::TestExecution::DisableVerifyExceptions disableExceptionsScope;
{
auto historyContext{ core->CommandHistory() };
VERIFY_ARE_EQUAL(1u, historyContext.History().Size());
VERIFY_ARE_EQUAL(L"", historyContext.CurrentCommandline());
}
Log::Comment(L"Write 'Bar' to the command...");
conn->WriteInput(L"Bar");
{
auto historyContext{ core->CommandHistory() };
// Bar shouldn't be in the history, it should be the current command
VERIFY_ARE_EQUAL(1u, historyContext.History().Size());
VERIFY_ARE_EQUAL(L"Bar", historyContext.CurrentCommandline());
}
Log::Comment(L"then delete it");
conn->WriteInput(L"\b \b");
conn->WriteInput(L"\b \b");
conn->WriteInput(L"\b \b");
{
auto historyContext{ core->CommandHistory() };
VERIFY_ARE_EQUAL(1u, historyContext.History().Size());
// The current commandline is now empty
VERIFY_ARE_EQUAL(L"", historyContext.CurrentCommandline());
}
}
void ControlCoreTests::TestSelectOutputScrolling()
{