using System; using System.Collections.Generic; using System.Text; using Spectre.Console.Rendering; namespace Spectre.Console { /// /// A console recorder used to record output from a console. /// public sealed class Recorder : IAnsiConsole, IDisposable { private readonly IAnsiConsole _console; private readonly List _recorded; /// public Capabilities Capabilities => _console.Capabilities; /// public Encoding Encoding => _console.Encoding; /// public int Width => _console.Width; /// public int Height => _console.Height; /// /// Initializes a new instance of the class. /// /// The console to record output for. public Recorder(IAnsiConsole console) { _console = console ?? throw new ArgumentNullException(nameof(console)); _recorded = new List(); } /// public void Dispose() { // Only used for scoping. } /// public void Write(Segment segment) { _recorded.Add(segment); _console.Write(segment); } /// /// Exports the recorded data. /// /// The encoder. /// The recorded data represented as a string. public string Export(IAnsiConsoleEncoder encoder) { if (encoder is null) { throw new ArgumentNullException(nameof(encoder)); } return encoder.Encode(_recorded); } } }