using System; using Spectre.Console; using Generator.Commands; using System.Threading; namespace DocExampleGenerator { internal static class AnsiConsoleExtensions { /// /// Displays something via AnsiConsole, waits a bit and then simulates typing based on the input. If the console /// doesn't have the focus this will just type into whatever window does so watch the alt-tab. /// /// /// The display action. /// The characters to type. ↑ for an up arrow, ↓ for down arrow, ↲ for a return and ¦ for a pause. /// How long to delay before typing. This should be at least 100ms because we won't check if the prompt has displayed before simulating typing. /// Delay between keypresses. There will be a bit of randomness between each keypress +/- 20% of this value. public static void DisplayThenType(this IAnsiConsole console, Action action, string input, int initialDelayMs = 500, int keypressDelayMs = 200) { if (console is not AsciiCastConsole asciiConsole) { throw new InvalidOperationException("Not an ASCII cast console"); } asciiConsole.Input.PushText(input, keypressDelayMs); Thread.Sleep(initialDelayMs); action(console); } } }