1c354d18bb
ChatBox.SendMessage reads bytes from ValidateMessage so Encoding.UTF8.GetBytes runs once per send. ValidateMessage takes an injectable sanitiser so xUnit can exercise the length-equality gate without ClientStructs game memory. CompactInputSubmitter and CompactInputHistoryNavigator lift the deterministic parts of ChatInputBar's pop-out submit and history-up/down callback into POCO helpers under HellionChat/_Helpers/. The ImGui buffer splice (DeleteChars/InsertChars) stays at the call site because it needs the live callback data. Behavior is identical to the previous inline implementation; tests in the local Build Suite repo pin the contracts.
30 lines
1.0 KiB
C#
30 lines
1.0 KiB
C#
using System;
|
|
using HellionChat.Ui;
|
|
|
|
namespace HellionChat._Helpers;
|
|
|
|
// Pure-helper mirror of the compact pop-out submit flow. ChatInputBar's
|
|
// SubmitCompact used to inline this against a sealed ChatLogWindow, which
|
|
// blocks Moq-based isolation. Lifting the deterministic part into a POCO
|
|
// keeps the production call site a one-liner while letting xUnit assert
|
|
// the buffer/cursor reset and the sender contract directly.
|
|
// TEST-MIRROR: ../../../Hellion Build test/Ui/CompactInputSubmitterTests.cs
|
|
public static class CompactInputSubmitter
|
|
{
|
|
public static bool TrySubmit(InputState state, Tab tab, Action<Tab, string> sender)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(state);
|
|
ArgumentNullException.ThrowIfNull(tab);
|
|
ArgumentNullException.ThrowIfNull(sender);
|
|
|
|
if (string.IsNullOrWhiteSpace(state.Buffer))
|
|
return false;
|
|
|
|
var text = state.Buffer;
|
|
state.Buffer = string.Empty;
|
|
state.HistoryCursor = -1;
|
|
sender(tab, text);
|
|
return true;
|
|
}
|
|
}
|