Files
RobustToolbox/Robust.UnitTesting/TestLogHandler.cs
T
DrSmugleafandGitHub de2e505a12 Make content able to choose which log level leads to test failures (#1670)
* Make content able to choose which log level leads to test failures

* Now make it make sense
2021-03-31 19:26:38 +11:00

55 lines
1.5 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using NUnit.Framework;
using Robust.Shared.Log;
using Serilog.Events;
namespace Robust.UnitTesting
{
public sealed class TestLogHandler : ILogHandler, IDisposable
{
private readonly string? _prefix;
private readonly TextWriter _writer;
private readonly Stopwatch _sw = Stopwatch.StartNew();
private readonly LogLevel? _failureLevel;
public TestLogHandler(string? prefix = null, LogLevel? failureLevel = null)
{
_prefix = prefix;
_failureLevel = failureLevel;
_writer = TestContext.Out;
_writer.WriteLine($"{GetPrefix()}Started {DateTime.Now:o}");
}
public void Dispose()
{
_writer.Dispose();
}
public void Log(string sawmillName, LogEvent message)
{
var level = message.Level.ToRobust();
var name = LogMessage.LogLevelToName(level);
var seconds = _sw.ElapsedMilliseconds / 1000d;
var rendered = message.RenderMessage();
var line = $"{GetPrefix()}{seconds:F3}s [{name}] {sawmillName}: {rendered}";
_writer.WriteLine(line);
if (_failureLevel == null || level < _failureLevel)
return;
_writer.Flush();
Assert.Fail(line);
}
private string GetPrefix()
{
return _prefix != null ? $"{_prefix}: " : "";
}
}
}