Added Unit tests for Logger
This commit is contained in:
@@ -1,76 +1,75 @@
|
|||||||
namespace DiscordBotCore.Logging
|
namespace DiscordBotCore.Logging;
|
||||||
|
|
||||||
|
internal sealed class LogMessage : ILogMessage
|
||||||
{
|
{
|
||||||
internal sealed class LogMessage : ILogMessage
|
private static readonly string _DefaultLogMessageSender = "\b";
|
||||||
|
public string Message { get; set; }
|
||||||
|
public DateTime ThrowTime { get; set; }
|
||||||
|
public string SenderName { get; set; }
|
||||||
|
public LogType LogMessageType { get; set; }
|
||||||
|
|
||||||
|
public LogMessage(string message, LogType logMessageType)
|
||||||
{
|
{
|
||||||
private static readonly string _DefaultLogMessageSender = "\b";
|
Message = message;
|
||||||
public string Message { get; set; }
|
LogMessageType = logMessageType;
|
||||||
public DateTime ThrowTime { get; set; }
|
ThrowTime = DateTime.Now;
|
||||||
public string SenderName { get; set; }
|
SenderName = string.Empty;
|
||||||
public LogType LogMessageType { get; set; }
|
|
||||||
|
|
||||||
public LogMessage(string message, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
SenderName = string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
LogMessageType = LogType.Info;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender, DateTime throwTime)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = throwTime;
|
|
||||||
LogMessageType = LogType.Info;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, DateTime throwTime, object sender, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
ThrowTime = throwTime;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithMessage(string message)
|
|
||||||
{
|
|
||||||
this.Message = message;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithCurrentThrowTime()
|
|
||||||
{
|
|
||||||
this.ThrowTime = DateTime.Now;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithMessageType(LogType logType)
|
|
||||||
{
|
|
||||||
this.LogMessageType = logType;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LogMessage CreateFromException(Exception exception, object Sender, bool logFullStack)
|
|
||||||
{
|
|
||||||
LogMessage message = new LogMessage(logFullStack? exception.ToString() : exception.Message, Sender, LogType.Error);
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public LogMessage(string message, object sender)
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
||||||
|
ThrowTime = DateTime.Now;
|
||||||
|
LogMessageType = LogType.Info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage(string message, object sender, DateTime throwTime)
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
||||||
|
ThrowTime = throwTime;
|
||||||
|
LogMessageType = LogType.Info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage(string message, object sender, LogType logMessageType)
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
||||||
|
ThrowTime = DateTime.Now;
|
||||||
|
LogMessageType = logMessageType;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage(string message, DateTime throwTime, object sender, LogType logMessageType)
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
ThrowTime = throwTime;
|
||||||
|
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
||||||
|
LogMessageType = logMessageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage WithMessage(string message)
|
||||||
|
{
|
||||||
|
this.Message = message;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage WithCurrentThrowTime()
|
||||||
|
{
|
||||||
|
this.ThrowTime = DateTime.Now;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogMessage WithMessageType(LogType logType)
|
||||||
|
{
|
||||||
|
this.LogMessageType = logType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LogMessage CreateFromException(Exception exception, object Sender, bool logFullStack)
|
||||||
|
{
|
||||||
|
LogMessage message = new LogMessage(logFullStack? exception.ToString() : exception.Message, Sender, LogType.Error);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebUI", "WebUI\WebUI.csproj
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PollMaker", "Plugins\PollMaker\PollMaker.csproj", "{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PollMaker", "Plugins\PollMaker\PollMaker.csproj", "{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{8F27B3EA-F292-40DF-B9B3-4B0E6BEA4E70}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.DiscordBotCore.Logging", "Tests\Tests.DiscordBotCore.Logging\Tests.DiscordBotCore.Logging.csproj", "{94238D37-60C6-4E40-80EC-4B4D242F5914}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -215,6 +219,18 @@ Global
|
|||||||
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|ARM64.Build.0 = Release|Any CPU
|
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|x64.ActiveCfg = Release|Any CPU
|
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|x64.Build.0 = Release|Any CPU
|
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914}.Release|x64.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -224,6 +240,7 @@ Global
|
|||||||
{F3C61A47-F758-4145-B496-E3ECCF979D89} = {5CF9AD7B-6BF0-4035-835F-722F989C01E1}
|
{F3C61A47-F758-4145-B496-E3ECCF979D89} = {5CF9AD7B-6BF0-4035-835F-722F989C01E1}
|
||||||
{C67908F9-4A55-4DD8-B993-C26C648226F1} = {EA4FA308-7B2C-458E-8485-8747D745DD59}
|
{C67908F9-4A55-4DD8-B993-C26C648226F1} = {EA4FA308-7B2C-458E-8485-8747D745DD59}
|
||||||
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7} = {5CF9AD7B-6BF0-4035-835F-722F989C01E1}
|
{9A4B98C1-00AC-481C-BE55-A70C0B9D3BE7} = {5CF9AD7B-6BF0-4035-835F-722F989C01E1}
|
||||||
|
{94238D37-60C6-4E40-80EC-4B4D242F5914} = {8F27B3EA-F292-40DF-B9B3-4B0E6BEA4E70}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF}
|
SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF}
|
||||||
|
|||||||
46
Tests/Tests.DiscordBotCore.Logging/LoggerTests.cs
Normal file
46
Tests/Tests.DiscordBotCore.Logging/LoggerTests.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
using DiscordBotCore.Logging;
|
||||||
|
|
||||||
|
namespace Tests.DiscordBotCore.Logging;
|
||||||
|
|
||||||
|
public class LoggerTests
|
||||||
|
{
|
||||||
|
private readonly string logFolder = Path.GetTempPath();
|
||||||
|
private readonly string format = "{Message} | {SenderName} | {LogMessageType}";
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Log_AddsMessageToList()
|
||||||
|
{
|
||||||
|
ILogger logger = new Logger(logFolder, format, maxHistorySize: 5);
|
||||||
|
|
||||||
|
logger.Log("Test message");
|
||||||
|
|
||||||
|
Assert.Single(logger.LogMessages);
|
||||||
|
Assert.Equal("Test message", logger.LogMessages[0].Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Log_TriggersOnLogReceived()
|
||||||
|
{
|
||||||
|
ILogger logger = new Logger(logFolder, format, maxHistorySize: 5);
|
||||||
|
bool triggered = false;
|
||||||
|
logger.OnLogReceived += (_) => triggered = true;
|
||||||
|
|
||||||
|
logger.Log("Test message");
|
||||||
|
|
||||||
|
Assert.True(triggered);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Log_RespectsMaxHistorySize()
|
||||||
|
{
|
||||||
|
ILogger logger = new Logger(logFolder, format, maxHistorySize: 3);
|
||||||
|
|
||||||
|
logger.Log("1");
|
||||||
|
logger.Log("2");
|
||||||
|
logger.Log("3");
|
||||||
|
logger.Log("4");
|
||||||
|
|
||||||
|
Assert.Equal(3, logger.LogMessages.Count);
|
||||||
|
Assert.DoesNotContain(logger.LogMessages, m => m.Message == "1");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<IsTestProject>true</IsTestProject>
|
||||||
|
<RootNamespace>Tests.DiscordBotCore.Logging</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||||
|
<PackageReference Include="xunit" Version="2.5.3"/>
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Using Include="Xunit"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\DiscordBotCore.Logging\DiscordBotCore.Logging.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Reference in New Issue
Block a user