mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 00:42:51 +08:00
95 lines
2.7 KiB
C#
95 lines
2.7 KiB
C#
namespace Spectre.Console.Tests.Unit.Cli;
|
|
|
|
public sealed partial class CommandAppTests
|
|
{
|
|
public sealed partial class Injection
|
|
{
|
|
public sealed class FakeDependency
|
|
{
|
|
}
|
|
|
|
public abstract class BaseInjectSettings : CommandSettings
|
|
{
|
|
}
|
|
|
|
public sealed class InjectSettings : BaseInjectSettings
|
|
{
|
|
public FakeDependency Fake { get; set; }
|
|
|
|
[CommandOption("--name <NAME>")]
|
|
public string Name { get; }
|
|
|
|
[CommandOption("--age <AGE>")]
|
|
public int Age { get; set; }
|
|
|
|
public InjectSettings(FakeDependency fake, string name)
|
|
{
|
|
Fake = fake;
|
|
Name = "Hello " + name;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Inject_Parameters()
|
|
{
|
|
// Given
|
|
var app = new CommandAppTester();
|
|
var dependency = new FakeDependency();
|
|
|
|
app.SetDefaultCommand<GenericCommand<InjectSettings>>();
|
|
app.Configure(config =>
|
|
{
|
|
config.Settings.Registrar.RegisterInstance(dependency);
|
|
config.PropagateExceptions();
|
|
});
|
|
|
|
// When
|
|
var result = app.Run(new[]
|
|
{
|
|
"--name", "foo",
|
|
"--age", "35",
|
|
});
|
|
|
|
// Then
|
|
result.ExitCode.ShouldBe(0);
|
|
result.Settings.ShouldBeOfType<InjectSettings>().And(injected =>
|
|
{
|
|
injected.ShouldNotBeNull();
|
|
injected.Fake.ShouldBeSameAs(dependency);
|
|
injected.Name.ShouldBe("Hello foo");
|
|
injected.Age.ShouldBe(35);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Inject_Dependency_Using_A_Given_Registrar()
|
|
{
|
|
// Given
|
|
var dependency = new FakeDependency();
|
|
var registrar = new FakeTypeRegistrar();
|
|
registrar.RegisterInstance(typeof(FakeDependency), dependency);
|
|
var app = new CommandAppTester(registrar);
|
|
|
|
app.SetDefaultCommand<GenericCommand<InjectSettings>>();
|
|
app.Configure(config => config.PropagateExceptions());
|
|
|
|
// When
|
|
var result = app.Run(new[]
|
|
{
|
|
"--name", "foo",
|
|
"--age", "35",
|
|
});
|
|
|
|
// Then
|
|
result.ExitCode.ShouldBe(0);
|
|
result.Settings.ShouldBeOfType<InjectSettings>().And(injected =>
|
|
{
|
|
injected.ShouldNotBeNull();
|
|
injected.Fake.ShouldBeSameAs(dependency);
|
|
injected.Name.ShouldBe("Hello foo");
|
|
injected.Age.ShouldBe(35);
|
|
});
|
|
}
|
|
}
|
|
}
|