using SpdUp.Core; namespace SpdUp.Tests; /// /// Tests for the Logger class. /// public class LoggerTests { [Fact] public void Info_FiresLogWrittenEvent() { string? received = null; Logger.LogWritten += handler; try { Logger.Info("test info message"); Assert.NotNull(received); Assert.Contains("[INFO]", received); Assert.Contains("test info message", received); } finally { Logger.LogWritten -= handler; } void handler(string line) => received = line; } [Fact] public void Warn_FiresLogWrittenEventWithWarnLevel() { string? received = null; Logger.LogWritten += handler; try { Logger.Warn("test warning"); Assert.NotNull(received); Assert.Contains("[WARN]", received); Assert.Contains("test warning", received); } finally { Logger.LogWritten -= handler; } void handler(string line) => received = line; } [Fact] public void Error_IncludesExceptionDetails() { string? received = null; Logger.LogWritten += handler; try { Logger.Error("something failed", new InvalidOperationException("bad state")); Assert.NotNull(received); Assert.Contains("[ERROR]", received); Assert.Contains("something failed", received); Assert.Contains("InvalidOperationException", received); Assert.Contains("bad state", received); } finally { Logger.LogWritten -= handler; } void handler(string line) => received = line; } [Fact] public void Error_WithoutException_DoesNotContainPipe() { string? received = null; Logger.LogWritten += handler; try { Logger.Error("simple error"); Assert.NotNull(received); Assert.Contains("[ERROR]", received); Assert.Contains("simple error", received); Assert.DoesNotContain("|", received); } finally { Logger.LogWritten -= handler; } void handler(string line) => received = line; } [Fact] public void LogWritten_IncludesTimestamp() { string? received = null; Logger.LogWritten += handler; try { Logger.Info("timestamp check"); Assert.NotNull(received); // Format: [yyyy-MM-dd HH:mm:ss.fff] Assert.Matches(@"\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\]", received); } finally { Logger.LogWritten -= handler; } void handler(string line) => received = line; } }