// ReSharper disable once CheckNamespace namespace Xunit.Abstractions { using System; using System.Runtime.CompilerServices; using Divergic.Logging.Xunit; using Microsoft.Extensions.Logging; /// /// The class provides extension methods for the /// . /// public static class TestOutputHelperExtensions { /// /// Builds a logger from the specified test output helper. /// /// The test output helper. /// /// The member to create the logger for. This is automatically populated using /// . /// /// The logger. /// The is null. public static ICacheLogger BuildLogger( this ITestOutputHelper output, [CallerMemberName] string memberName = "") { return BuildLogger(output, null, memberName); } /// /// Builds a logger from the specified test output helper. /// /// The test output helper. /// The minimum log level to output. /// /// The member to create the logger for. This is automatically populated using /// . /// /// The logger. /// The is null. public static ICacheLogger BuildLogger( this ITestOutputHelper output, LogLevel logLevel, [CallerMemberName] string memberName = "") { var config = new LoggingConfig { LogLevel = logLevel }; return BuildLogger(output, config, memberName); } /// /// Builds a logger from the specified test output helper. /// /// The test output helper. /// Optional logging configuration. /// /// The member to create the logger for. This is automatically populated using /// . /// /// The logger. /// The is null. public static ICacheLogger BuildLogger( this ITestOutputHelper output, LoggingConfig? config, [CallerMemberName] string memberName = "") { output = output ?? throw new ArgumentNullException(nameof(output)); // Do not use the using keyword here because the factory will be disposed before the cache logger is finished with it var factory = LogFactory.Create(output, config); var logger = factory.CreateLogger(memberName); return logger.WithCache(factory); } /// /// Builds a logger from the specified test output helper for the specified type. /// /// The type to create the logger for. /// The test output helper. /// The logger. /// The is null. public static ICacheLogger BuildLoggerFor(this ITestOutputHelper output) { return BuildLoggerFor(output, null); } /// /// Builds a logger from the specified test output helper for the specified type. /// /// The type to create the logger for. /// The test output helper. /// The minimum log level to output. /// The logger. /// The is null. public static ICacheLogger BuildLoggerFor(this ITestOutputHelper output, LogLevel logLevel) { var config = new LoggingConfig { LogLevel = logLevel }; return BuildLoggerFor(output, config); } /// /// Builds a logger from the specified test output helper for the specified type. /// /// The type to create the logger for. /// The test output helper. /// Optional logging configuration. /// The logger. /// The is null. public static ICacheLogger BuildLoggerFor(this ITestOutputHelper output, LoggingConfig? config) { output = output ?? throw new ArgumentNullException(nameof(output)); // Do not use the using keyword here because the factory will be disposed before the cache logger is finished with it var factory = LogFactory.Create(output, config); var logger = factory.CreateLogger(); return logger.WithCache(factory); } /// /// Builds a logger factory from the specified test output helper. /// /// The test output helper. /// The logger factory. /// The is null. public static ILoggerFactory BuildLoggerFactory( this ITestOutputHelper output) { return BuildLoggerFactory(output, null); } /// /// Builds a logger factory from the specified test output helper. /// /// The test output helper. /// The minimum log level to output. /// The logger factory. /// The is null. public static ILoggerFactory BuildLoggerFactory( this ITestOutputHelper output, LogLevel logLevel) { var config = new LoggingConfig { LogLevel = logLevel }; return BuildLoggerFactory(output, config); } /// /// Builds a logger factory from the specified test output helper. /// /// The test output helper. /// Optional logging configuration. /// The logger factory. /// The is null. public static ILoggerFactory BuildLoggerFactory( this ITestOutputHelper output, LoggingConfig? config) { output = output ?? throw new ArgumentNullException(nameof(output)); // Do not use the using keyword here because the factory will be disposed before the cache logger is finished with it var factory = LogFactory.Create(output, config); return factory; } } }