Skip to content

Commit 287f1f2

Browse files
Merge pull request #174 from Stravaig-Projects/#170/xunit-output-extensions
#170: xunit output extensions
2 parents 82c1446 + 9199a4f commit 287f1f2

File tree

4 files changed

+73
-6
lines changed

4 files changed

+73
-6
lines changed

docs/docs/library/xunit-extensions.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,13 @@ public class ThingamajigTests
4040
_output.WriteLogs(logProvider.GetAllLogEntries())
4141
}
4242
}
43-
```
43+
```
44+
45+
#### Variants
46+
47+
* `ITestOutputHelper.WriteLogs(ITestCaptureLogger logger, Func<LogEntry, string>? formatter = null)`
48+
* Available from v3.0
49+
* Takes an `ITestCaptureLogger` and outputs all of the log messages captured by that logger.
50+
* `ITestOutputHelper.WriteLogs(TestCaptureLoggerProvider provider, Func<LogEntry, string>? formatter = null)`
51+
* Available from v3.0
52+
* Takes an `TestCaptureLoggerProvider` and outputs all of the log messages captured by all the loggers in the provider.

release-notes/wip-release-notes.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ Date: ???
1515
- #123: `TestCaptureLoggerProvider.CreateLogger<T>()`
1616
- Potential breaking change: `TestCaptureLogger<T>` no longer inherits from `TestCaptureLogger`.
1717
- Add `ITestCaptureLogger` and have `TestCaptureLogger` and `TestCaptureLogger<T>` be concrete implementations of the interface so you can reference the interface and not care which concrete implementation you have.
18+
- #170: Additional xunit extension methods to write out all log messages to the `ITestOutputHelper`.
19+
- `ITestOutputHelper.WriteLogs(ITestCaptureLogger...)`
20+
- `ITestOutputHelper.WriteLogs(TestCaptureLoggerProvider...)`
1821

1922
### Miscellaneous
2023

src/Stravaig.Extensions.Logging.Diagnostics.Tests/XUnit/OutputTestHelperExtensionsTests.cs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void WriteLine(string format, params object[] args)
2626
}
2727

2828
[Test]
29-
public void RenderedLogMessagesGetSentToOutputTestHelper()
29+
public void RenderedLogEntryMessagesSentToOutputTestHelper()
3030
{
3131
ResetLogSequence();
3232
var outputHelper = new OutputHelper();
@@ -36,11 +36,47 @@ public void RenderedLogMessagesGetSentToOutputTestHelper()
3636

3737
var logs = logger.GetLogs();
3838
outputHelper.WriteLogs(logs);
39-
39+
40+
outputHelper.Messages[0].ShouldBe("[0 Information Stravaig.Extensions.Logging.Diagnostics.Tests.XUnit.OutputTestHelperExtensionTests] This is an information Message.");
41+
outputHelper.Messages[1].ShouldBe("[1 Information Stravaig.Extensions.Logging.Diagnostics.Tests.XUnit.OutputTestHelperExtensionTests] This is a Warning Message.");
42+
}
43+
44+
[Test]
45+
public void RenderedLoggerSentToOutputTestHelper()
46+
{
47+
ResetLogSequence();
48+
var outputHelper = new OutputHelper();
49+
var logger = new TestCaptureLogger<OutputTestHelperExtensionTests>();
50+
logger.LogInformation("This is an information Message.");
51+
logger.LogInformation("This is a Warning Message.");
52+
53+
outputHelper.WriteLogs(logger);
54+
4055
outputHelper.Messages[0].ShouldBe("[0 Information Stravaig.Extensions.Logging.Diagnostics.Tests.XUnit.OutputTestHelperExtensionTests] This is an information Message.");
4156
outputHelper.Messages[1].ShouldBe("[1 Information Stravaig.Extensions.Logging.Diagnostics.Tests.XUnit.OutputTestHelperExtensionTests] This is a Warning Message.");
4257
}
4358

59+
[Test]
60+
public void RenderedLoggerProviderSentToOutputTestHelper()
61+
{
62+
ResetLogSequence();
63+
var outputHelper = new OutputHelper();
64+
var loggerProvider = new TestCaptureLoggerProvider();
65+
var logger1 = loggerProvider.CreateLogger("logger1");
66+
var logger2 = loggerProvider.CreateLogger("logger2");
67+
logger1.LogInformation("This is an information Message on the first logger.");
68+
logger2.LogInformation("This is an information Message on the second logger.");
69+
logger2.LogWarning("This is a Warning Message on the second logger.");
70+
logger1.LogWarning("This is a Warning Message on the first logger.");
71+
72+
outputHelper.WriteLogs(loggerProvider);
73+
74+
outputHelper.Messages[0].ShouldBe("[0 Information logger1] This is an information Message on the first logger.");
75+
outputHelper.Messages[1].ShouldBe("[1 Information logger2] This is an information Message on the second logger.");
76+
outputHelper.Messages[2].ShouldBe("[2 Warning logger2] This is a Warning Message on the second logger.");
77+
outputHelper.Messages[3].ShouldBe("[3 Warning logger1] This is a Warning Message on the first logger.");
78+
}
79+
4480
private void ResetLogSequence()
4581
{
4682
var logEntryType = typeof(LogEntry);
@@ -49,4 +85,4 @@ private void ResetLogSequence()
4985
throw new InvalidOperationException("Expected LogEntry to have a private field called _sequence.");
5086
field.SetValue(null, 0);
5187
}
52-
}
88+
}

src/Stravaig.Extensions.Logging.Diagnostics.XUnit/OutputTestHelperExtensions.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using Microsoft.Extensions.Logging;
34
using Stravaig.Extensions.Logging.Diagnostics.Render;
45
using Xunit.Abstractions;
56

@@ -15,9 +16,27 @@ public static class OutputTestHelperExtensions
1516
/// </summary>
1617
/// <param name="output">The xunit test output helper.</param>
1718
/// <param name="logEntries">The log entries.</param>
18-
/// <param name="formatter"></param>
19+
/// <param name="formatter">An optional formatter that defines how the log entry is to be written.</param>
1920
public static void WriteLogs(this ITestOutputHelper output, IEnumerable<LogEntry> logEntries, Func<LogEntry, string>? formatter = null)
2021
{
2122
logEntries.RenderLogs(formatter ?? Formatter.SimpleBySequence, output.WriteLine);
2223
}
23-
}
24+
25+
/// <summary>
26+
/// Write the logs to the xunit test output helper.
27+
/// </summary>
28+
/// <param name="output">The xunit test output helper.</param>
29+
/// <param name="logger">The logger from which to output the captured logs.</param>
30+
/// <param name="formatter">An optional formatter that defines how the log entry is to be written.</param>
31+
public static void WriteLogs(this ITestOutputHelper output, ITestCaptureLogger logger, Func<LogEntry, string>? formatter = null)
32+
=> output.WriteLogs(logger.GetLogs(), formatter);
33+
34+
/// <summary>
35+
/// Write the logs to the xunit test output helper.
36+
/// </summary>
37+
/// <param name="output">The xunit test output helper.</param>
38+
/// <param name="provider">The log provider from which to output the captured logs.</param>
39+
/// <param name="formatter">An optional formatter that defines how the log entry is to be written.</param>
40+
public static void WriteLogs(this ITestOutputHelper output, TestCaptureLoggerProvider provider, Func<LogEntry, string>? formatter = null)
41+
=> output.WriteLogs(provider.GetAllLogEntries(), formatter);
42+
}

0 commit comments

Comments
 (0)