public void PromptTimesOut() { LoggedConsole.SuppressInteractive = false; Assert.IsTrue(LoggedConsole.IsInteractive); using (var reader = new InfiniteTextStream(random: TestHelpers.Random.GetRandom())) { Console.SetIn(reader); Assert.ThrowsException <TimeoutException>( () => LoggedConsole.Prompt("Enter your name:", timeout: TimeSpan.FromMilliseconds(500)), "Timed out waiting for user input to prompt:"); } }
public void InfiniteStreamIsInfinite() { Debug.WriteLine("Generating output"); var builder = new StringBuilder(1_000_000); var source = new CancellationTokenSource(); var token = source.Token; void Generate() { using (var reader = new InfiniteTextStream(random: TestHelpers.Random.GetRandom())) { while (true) { char[] chars = new char[1000]; for (int i = 0; i < 1000; i++) { chars[i] = (char)reader.Read(); } builder.Append(chars); if (token.IsCancellationRequested) { return; } } } } var work = Task.Run((Action)Generate, token); Assert.IsFalse(work.IsCompleted); source.CancelAfter(this.timeout); work.Wait(); Assert.IsTrue(work.IsCompleted); string s = builder.ToString(); Debug.WriteLine($"Generation complete (length: {s.Length}):"); Assert.IsTrue(s.Length > 1_000, $"Length {s.Length} was not greater than expected length of 1000"); //Debug.WriteLine(s); }
public void InfiniteStreamCanReadLines() { Debug.WriteLine("Generating output"); StringBuilder builder = new StringBuilder(1_000_000); var source = new CancellationTokenSource(); var token = source.Token; void Generate() { using (var reader = new InfiniteTextStream(1000, random: TestHelpers.Random.GetRandom())) { while (true) { if (token.IsCancellationRequested) { return; } builder.Append(reader.ReadLine()); } } } var work = Task.Run((Action)Generate, token); Assert.IsFalse(work.IsCompleted); source.CancelAfter(this.timeout); work.Wait(); Assert.IsTrue(work.IsCompleted); string s = builder.ToString(); Debug.WriteLine($"Generation complete (length: {s.Length}:"); Assert.IsTrue(s.Length > 10_000); //Debug.WriteLine(s); }