Files
lmxopcua/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.TwinCAT.Tests/TwinCATFactoryLoggerTests.cs
T

45 lines
1.6 KiB
C#

using Microsoft.Extensions.Logging;
using Shouldly;
using Xunit;
using ZB.MOM.WW.OtOpcUa.Core.Hosting;
namespace ZB.MOM.WW.OtOpcUa.Driver.TwinCAT.Tests;
/// <summary>#602 CONV-3: the TwinCAT factory hands the host logger factory to the driver.</summary>
[Trait("Category", "Unit")]
public sealed class TwinCATFactoryLoggerTests
{
private sealed class RecordingLoggerFactory : ILoggerFactory
{
public List<string> Categories { get; } = [];
public ILogger CreateLogger(string categoryName)
{
lock (Categories) Categories.Add(categoryName);
return Microsoft.Extensions.Logging.Abstractions.NullLogger.Instance;
}
public void AddProvider(ILoggerProvider provider) { }
public void Dispose() { }
}
[Fact]
public void Registered_factory_creates_the_driver_logger_from_the_host_factory()
{
var lf = new RecordingLoggerFactory();
var registry = new DriverFactoryRegistry();
TwinCATDriverFactoryExtensions.Register(registry, lf);
var drv = registry.TryGet(TwinCATDriverFactoryExtensions.DriverTypeName)!("drv-1", "{}");
drv.ShouldBeOfType<TwinCATDriver>();
lf.Categories.ShouldContain(typeof(TwinCATDriver).FullName!);
}
[Fact]
public void Registering_without_a_logger_factory_still_works()
{
var registry = new DriverFactoryRegistry();
TwinCATDriverFactoryExtensions.Register(registry);
registry.TryGet(TwinCATDriverFactoryExtensions.DriverTypeName)!("drv-1", "{}").ShouldBeOfType<TwinCATDriver>();
}
}