feat: add autocomplete foundation
- add reusable autocomplete provider contracts - integrate slash command completions with editor select list
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using TinyTUI.Components;
|
||||
using TinyTUI.Autocomplete;
|
||||
using TinyTUI.Input;
|
||||
using TinyTUI.Rendering;
|
||||
using TinyTUI.Text;
|
||||
@@ -41,6 +42,29 @@ loader.HandleInput(new TuiInputEvent(TuiInputEventKind.Key, KeyNames.Escape));
|
||||
AssertTrue(loader.IsCanceled, "cancellable loader token");
|
||||
AssertTrue(canceled, "cancellable loader callback");
|
||||
|
||||
var autocompleteEditor = new Editor(measurer)
|
||||
{
|
||||
AutocompleteProvider = new SlashCommandAutocompleteProvider(
|
||||
[
|
||||
new SlashCommand("help", "show help"),
|
||||
new SlashCommand("history", "show history"),
|
||||
]),
|
||||
};
|
||||
autocompleteEditor.HandleInput(new TuiInputEvent(TuiInputEventKind.Text, "/h"));
|
||||
AssertTrue(autocompleteEditor.IsAutocompleteActive, "slash command autocomplete active");
|
||||
AssertTrue(autocompleteEditor.RenderAutocomplete(40).Any(line => line.Contains("help", StringComparison.Ordinal)), "slash command autocomplete render");
|
||||
autocompleteEditor.HandleInput(new TuiInputEvent(TuiInputEventKind.Key, KeyNames.Down));
|
||||
autocompleteEditor.HandleInput(new TuiInputEvent(TuiInputEventKind.Key, KeyNames.Tab));
|
||||
AssertEqual("/history ", autocompleteEditor.Value, "slash command autocomplete confirm");
|
||||
AssertFalse(autocompleteEditor.IsAutocompleteActive, "slash command autocomplete closes after confirm");
|
||||
|
||||
autocompleteEditor.Value = "/h";
|
||||
autocompleteEditor.HandleInput(new TuiInputEvent(TuiInputEventKind.Key, KeyNames.Tab));
|
||||
AssertTrue(autocompleteEditor.IsAutocompleteActive, "forced autocomplete active");
|
||||
autocompleteEditor.HandleInput(new TuiInputEvent(TuiInputEventKind.Key, KeyNames.Escape));
|
||||
AssertFalse(autocompleteEditor.IsAutocompleteActive, "autocomplete cancel");
|
||||
AssertEqual("/h", autocompleteEditor.Value, "autocomplete cancel keeps text");
|
||||
|
||||
Console.WriteLine("TinyTUI component checks passed");
|
||||
|
||||
static void AssertEqual<T>(T expected, T actual, string name)
|
||||
|
||||
Reference in New Issue
Block a user