FakeComponentFactory.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System.Collections.Concurrent;
  2. namespace Terminal.Gui.Drivers;
  3. /// <summary>
  4. /// <see cref="IComponentFactory{T}"/> implementation for fake/mock console I/O used in unit tests.
  5. /// This factory creates instances that simulate console behavior without requiring a real terminal.
  6. /// </summary>
  7. public class FakeComponentFactory : ComponentFactoryImpl<ConsoleKeyInfo>
  8. {
  9. /// <summary>
  10. /// Creates a new FakeComponentFactory with optional output capture.
  11. /// </summary>
  12. /// <param name="input"></param>
  13. /// <param name="output">Optional fake output to capture what would be written to console.</param>
  14. /// <param name="sizeMonitor"></param>
  15. public FakeComponentFactory (FakeInput? input = null, IOutput? output = null, ISizeMonitor? sizeMonitor = null)
  16. {
  17. _input = input;
  18. _output = output;
  19. _sizeMonitor = sizeMonitor;
  20. }
  21. private readonly FakeInput? _input;
  22. private readonly IOutput? _output;
  23. private readonly ISizeMonitor? _sizeMonitor;
  24. /// <inheritdoc/>
  25. public override IInput<ConsoleKeyInfo> CreateInput ()
  26. {
  27. return _input ?? new FakeInput ();
  28. }
  29. /// <inheritdoc/>
  30. public override IInputProcessor CreateInputProcessor (ConcurrentQueue<ConsoleKeyInfo> inputBuffer) { return new FakeInputProcessor (inputBuffer); }
  31. /// <inheritdoc/>
  32. public override IOutput CreateOutput () { return _output ?? new FakeOutput (); }
  33. /// <inheritdoc/>
  34. public override ISizeMonitor CreateSizeMonitor (IOutput consoleOutput, IOutputBuffer outputBuffer)
  35. {
  36. return _sizeMonitor ?? new SizeMonitorImpl (consoleOutput);
  37. }
  38. }