namespace Spectre.Console; /// /// A console recorder used to record output from a console. /// public class Recorder : IAnsiConsole, IDisposable { private readonly IAnsiConsole _console; private readonly List _recorded; /// public Profile Profile => _console.Profile; /// public IAnsiConsoleCursor Cursor => _console.Cursor; /// public IAnsiConsoleInput Input => _console.Input; /// public IExclusivityMode ExclusivityMode => _console.ExclusivityMode; /// public RenderPipeline Pipeline => _console.Pipeline; /// /// 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(); } /// [SuppressMessage("Usage", "CA1816:Dispose methods should call SuppressFinalize")] public void Dispose() { // Only used for scoping. } /// public void Clear(bool home) { _console.Clear(home); } /// public void Write(IRenderable renderable) { if (renderable is null) { throw new ArgumentNullException(nameof(renderable)); } _recorded.Add(renderable); _console.Write(renderable); } internal Recorder Clone(IAnsiConsole console) { var recorder = new Recorder(console); recorder._recorded.AddRange(_recorded); return recorder; } /// /// 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(_console, _recorded); } }