Skip to content

Commit 7d0c587

Browse files
committed
Add QueueLogger and supporting classes
Allows logging to a queue
1 parent 7a2e18d commit 7d0c587

9 files changed

Lines changed: 198 additions & 0 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
3+
namespace ModuleManager.Logging
4+
{
5+
public class ExceptionMessage : ILogMessage
6+
{
7+
public readonly string message;
8+
public readonly Exception exception;
9+
10+
public ExceptionMessage(string message, Exception exception)
11+
{
12+
this.message = message;
13+
this.exception = exception;
14+
}
15+
16+
public void LogTo(IBasicLogger logger)
17+
{
18+
logger.Exception(message, exception);
19+
}
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System;
2+
3+
namespace ModuleManager.Logging
4+
{
5+
public interface ILogMessage
6+
{
7+
void LogTo(IBasicLogger logger);
8+
}
9+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using UnityEngine;
3+
4+
namespace ModuleManager.Logging
5+
{
6+
public class NormalMessage : ILogMessage
7+
{
8+
public readonly LogType logType;
9+
public readonly string message;
10+
11+
public NormalMessage(LogType logType, string message)
12+
{
13+
this.logType = logType;
14+
this.message = message;
15+
}
16+
17+
public void LogTo(IBasicLogger logger)
18+
{
19+
logger.Log(logType, message);
20+
}
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using UnityEngine;
3+
using ModuleManager.Collections;
4+
5+
namespace ModuleManager.Logging
6+
{
7+
public class QueueLogger : IBasicLogger
8+
{
9+
private readonly IMessageQueue<ILogMessage> queue;
10+
11+
public QueueLogger(IMessageQueue<ILogMessage> queue)
12+
{
13+
this.queue = queue;
14+
}
15+
16+
public void Log(LogType logType, string message) => queue.Add(new NormalMessage(logType, message));
17+
public void Info(string message) => Log(LogType.Log, message);
18+
public void Warning(string message) => Log(LogType.Warning, message);
19+
public void Error(string message) => Log(LogType.Error, message);
20+
public void Exception(string message, Exception exception) => queue.Add(new ExceptionMessage(message, exception));
21+
}
22+
}

ModuleManager/ModuleManager.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@
4444
<Compile Include="Extensions\StringExtensions.cs" />
4545
<Compile Include="Extensions\UrlConfigExtensions.cs" />
4646
<Compile Include="IPatchProgress.cs" />
47+
<Compile Include="Logging\ExceptionMessage.cs" />
4748
<Compile Include="Logging\IBasicLogger.cs" />
49+
<Compile Include="Logging\ILogMessage.cs" />
4850
<Compile Include="Logging\ModLogger.cs" />
51+
<Compile Include="Logging\NormalMessage.cs" />
52+
<Compile Include="Logging\QueueLogger.cs" />
4953
<Compile Include="Collections\MessageQueue.cs" />
5054
<Compile Include="MMPatchLoader.cs" />
5155
<Compile Include="ModuleManager.cs" />
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using Xunit;
3+
using NSubstitute;
4+
using ModuleManager.Logging;
5+
6+
namespace ModuleManagerTests.Logging
7+
{
8+
public class ExceptionMessageTest
9+
{
10+
[Fact]
11+
public void TestLogTo()
12+
{
13+
IBasicLogger logger = Substitute.For<IBasicLogger>();
14+
15+
Exception e = new Exception();
16+
ExceptionMessage message = new ExceptionMessage("An exception was thrown", e);
17+
message.LogTo(logger);
18+
19+
logger.Received().Exception("An exception was thrown", e);
20+
}
21+
}
22+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using Xunit;
3+
using NSubstitute;
4+
using UnityEngine;
5+
using ModuleManager.Logging;
6+
7+
namespace ModuleManagerTests.Logging
8+
{
9+
public class NormalMessageTest
10+
{
11+
private IBasicLogger logger = Substitute.For<IBasicLogger>();
12+
13+
[Fact]
14+
public void TestLogTo__Info()
15+
{
16+
NormalMessage message = new NormalMessage(LogType.Log, "everything is ok");
17+
message.LogTo(logger);
18+
logger.Received().Log(LogType.Log, "everything is ok");
19+
}
20+
21+
[Fact]
22+
public void TestLogTo__Warning()
23+
{
24+
NormalMessage message = new NormalMessage(LogType.Warning, "I'm warning you");
25+
message.LogTo(logger);
26+
logger.Received().Log(LogType.Warning, "I'm warning you");
27+
}
28+
29+
[Fact]
30+
public void TestLogTo__Error()
31+
{
32+
NormalMessage message = new NormalMessage(LogType.Error, "You went too far");
33+
message.LogTo(logger);
34+
logger.Received().Log(LogType.Error, "You went too far");
35+
}
36+
}
37+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using Xunit;
3+
using NSubstitute;
4+
using UnityEngine;
5+
using ModuleManager.Collections;
6+
using ModuleManager.Logging;
7+
8+
namespace ModuleManagerTests.Logging
9+
{
10+
public class QueueLoggerTest
11+
{
12+
private IMessageQueue<ILogMessage> queue;
13+
private QueueLogger logger;
14+
15+
public QueueLoggerTest()
16+
{
17+
queue = Substitute.For<IMessageQueue<ILogMessage>>();
18+
logger = new QueueLogger(queue);
19+
}
20+
21+
[Fact]
22+
public void TestLog()
23+
{
24+
logger.Log(LogType.Log, "this is a log message");
25+
queue.Received().Add(Arg.Is<NormalMessage>(m => m.logType == LogType.Log && m.message == "this is a log message"));
26+
}
27+
28+
[Fact]
29+
public void TestInfo()
30+
{
31+
logger.Info("useful information");
32+
queue.Received().Add(Arg.Is<NormalMessage>(m => m.logType == LogType.Log && m.message == "useful information"));
33+
}
34+
35+
[Fact]
36+
public void TestWarning()
37+
{
38+
logger.Warning("not to alarm you, but something might be wrong");
39+
queue.Received().Add(Arg.Is<NormalMessage>(m => m.logType == LogType.Warning && m.message == "not to alarm you, but something might be wrong"));
40+
}
41+
42+
[Fact]
43+
public void TestError()
44+
{
45+
logger.Error("you broke everything");
46+
queue.Received().Add(Arg.Is<NormalMessage>(m => m.logType == LogType.Error && m.message == "you broke everything"));
47+
}
48+
49+
50+
[Fact]
51+
public void TestException()
52+
{
53+
Exception e = new Exception();
54+
logger.Exception("An exception was thrown", e);
55+
queue.Received().Add(Arg.Is<ExceptionMessage>(m => m.message == "An exception was thrown" && m.exception == e));
56+
}
57+
}
58+
}

ModuleManagerTests/ModuleManagerTests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
<Compile Include="Extensions\UrlConfigExtensionsTest.cs" />
5454
<Compile Include="NeedsCheckerTest.cs" />
5555
<Compile Include="Collections\MessageQueueTest.cs" />
56+
<Compile Include="Logging\ExceptionMessageTest.cs" />
57+
<Compile Include="Logging\NormalMessageTest.cs" />
58+
<Compile Include="Logging\QueueLoggerTest.cs" />
5659
<Compile Include="PatchListTest.cs" />
5760
<Compile Include="Collections\ArrayEnumeratorTest.cs" />
5861
<Compile Include="Collections\ImmutableStackTest.cs" />

0 commit comments

Comments
 (0)