using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UnitTests.ConsoleDrivers.V2; public class ConsoleInputTests { class FakeInput : ConsoleInput { private readonly string [] _reads; public FakeInput (params string [] reads ) { _reads = reads; } int iteration = 0; /// protected override bool Peek () { return iteration < _reads.Length; } /// protected override IEnumerable Read () { return _reads [iteration++]; } } [Fact] public void Test_ThrowsIfNotInitialized () { var input = new FakeInput ("Fish"); var ex = Assert.Throws(()=>input.Run (new (canceled: true))); Assert.Equal ("Cannot run input before Initialization", ex.Message); } [Fact] public void Test_Simple () { var input = new FakeInput ("Fish"); var queue = new ConcurrentQueue (); input.Initialize (queue); var cts = new CancellationTokenSource (); cts.CancelAfter (25); // Cancel after 25 milliseconds CancellationToken token = cts.Token; Assert.Empty (queue); input.Run (token); Assert.Equal ("Fish",new string (queue.ToArray ())); } }