#nullable enable
using System.Collections.Concurrent;
namespace Terminal.Gui.Drivers;
///
/// Fake console input for testing that can return predefined input or wait indefinitely.
///
public class FakeConsoleInput : ConsoleInput
{
private readonly ConcurrentQueue? _predefinedInput;
///
/// Creates a new FakeConsoleInput with optional predefined input.
///
/// Optional queue of predefined input to return.
public FakeConsoleInput (ConcurrentQueue? predefinedInput = null)
{
_predefinedInput = predefinedInput;
}
///
protected override bool Peek ()
{
if (_predefinedInput != null && !_predefinedInput.IsEmpty)
{
return true;
}
// No input available
return false;
}
///
protected override IEnumerable Read ()
{
if (_predefinedInput != null && _predefinedInput.TryDequeue (out ConsoleKeyInfo key))
{
yield return key;
}
}
}