YamlCliTestHost.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.ComponentModel;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Logging;
  5. using RackPeek;
  6. using Shared.Rcl;
  7. using Spectre.Console;
  8. using Spectre.Console.Cli;
  9. using Spectre.Console.Testing;
  10. using Xunit.Abstractions;
  11. namespace Tests.EndToEnd.Infra;
  12. public static class YamlCliTestHost
  13. {
  14. public static async Task<string> RunAsync(
  15. string[] args,
  16. string hardwarePath,
  17. ITestOutputHelper output,
  18. string yamlFile)
  19. {
  20. var services = new ServiceCollection();
  21. var config = new ConfigurationBuilder()
  22. .AddInMemoryCollection(new Dictionary<string, string?>
  23. {
  24. ["HardwarePath"] = hardwarePath
  25. })
  26. .Build();
  27. await CliBootstrap.RegisterInternals(services, config, hardwarePath, yamlFile);
  28. services.AddLogging(builder =>
  29. {
  30. builder.ClearProviders();
  31. builder.AddProvider(new XUnitLoggerProvider(output));
  32. });
  33. var console = new TestConsole();
  34. var registrar = new TypeRegistrar(services.BuildServiceProvider());
  35. var app = new CommandApp(registrar);
  36. AnsiConsole.Console = console;
  37. app.Configure(c => c.Settings.Console = console);
  38. CliBootstrap.BuildApp(app);
  39. await app.RunAsync(args);
  40. return console.Output;
  41. }
  42. }