FakeConsoleInput.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #nullable enable
  2. using System.Collections.Concurrent;
  3. namespace Terminal.Gui.Drivers;
  4. /// <summary>
  5. /// Fake console input for testing that can return predefined input or wait indefinitely.
  6. /// </summary>
  7. public class FakeConsoleInput : ConsoleInput<ConsoleKeyInfo>
  8. {
  9. private readonly ConcurrentQueue<ConsoleKeyInfo>? _predefinedInput;
  10. /// <summary>
  11. /// Creates a new FakeConsoleInput with optional predefined input.
  12. /// </summary>
  13. /// <param name="predefinedInput">Optional queue of predefined input to return.</param>
  14. public FakeConsoleInput (ConcurrentQueue<ConsoleKeyInfo>? predefinedInput = null)
  15. {
  16. _predefinedInput = predefinedInput;
  17. }
  18. /// <inheritdoc/>
  19. protected override bool Peek ()
  20. {
  21. if (_predefinedInput != null && !_predefinedInput.IsEmpty)
  22. {
  23. return true;
  24. }
  25. // No input available
  26. return false;
  27. }
  28. /// <inheritdoc/>
  29. protected override IEnumerable<ConsoleKeyInfo> Read ()
  30. {
  31. if (_predefinedInput != null && _predefinedInput.TryDequeue (out ConsoleKeyInfo key))
  32. {
  33. yield return key;
  34. }
  35. }
  36. }