using Microsoft.Extensions.Logging; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Core.Hosting; namespace ZB.MOM.WW.OtOpcUa.Driver.TwinCAT.Tests; /// #602 CONV-3: the TwinCAT factory hands the host logger factory to the driver. [Trait("Category", "Unit")] public sealed class TwinCATFactoryLoggerTests { private sealed class RecordingLoggerFactory : ILoggerFactory { public List 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(); 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(); } }