Skip to content

Commit 2e1613a

Browse files
Merge pull request #247 from martincostello/Test-Coverage
Increase test coverage
2 parents ea86954 + ed0f821 commit 2e1613a

File tree

7 files changed

+131
-79
lines changed

7 files changed

+131
-79
lines changed

Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
<SignAssembly>true</SignAssembly>
3737
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
3838
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
39-
<AssemblyVersion>0.1.0.0</AssemblyVersion>
40-
<VersionPrefix>0.1.3</VersionPrefix>
39+
<AssemblyVersion>0.2.0.0</AssemblyVersion>
40+
<VersionPrefix>0.2.0</VersionPrefix>
4141
<VersionSuffix Condition=" '$(VersionSuffix)' == '' AND '$(GITHUB_ACTIONS)' != '' ">beta$([System.Convert]::ToInt32(`$(GITHUB_RUN_NUMBER)`).ToString(`0000`))</VersionSuffix>
4242
<VersionPrefix Condition=" $(GITHUB_REF.StartsWith(`refs/tags/v`)) ">$(GITHUB_REF.Replace('refs/tags/v', ''))</VersionPrefix>
4343
<VersionSuffix Condition=" $(GITHUB_REF.StartsWith(`refs/tags/v`)) "></VersionSuffix>

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<PackageVersion Include="Moq" Version="4.16.1" />
88
<PackageVersion Include="ReportGenerator" Version="4.8.13" />
99
<PackageVersion Include="Shouldly" Version="4.0.3" />
10-
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" />
10+
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.354" />
1111
</ItemGroup>
1212
<ItemGroup Condition=" '$(IsTestProject)' != 'true' ">
1313
<PackageVersion Include="Microsoft.Extensions.Logging" Version="2.0.0" />

src/Logging.XUnit/XUnitLogger.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public partial class XUnitLogger : ILogger
2525
/// <summary>
2626
/// The padding to use for messages. This field is read-only.
2727
/// </summary>
28-
private static readonly string MessagePadding = new string(' ', GetLogLevelString(LogLevel.Debug).Length + LogLevelPadding.Length);
28+
private static readonly string MessagePadding = new(' ', GetLogLevelString(LogLevel.Debug).Length + LogLevelPadding.Length);
2929

3030
/// <summary>
3131
/// The padding to use for new lines. This field is read-only.
@@ -202,9 +202,7 @@ public virtual void WriteMessage(LogLevel logLevel, int eventId, string? message
202202
messageSink.OnMessage(sinkMessage);
203203
}
204204
}
205-
#pragma warning disable CA1031
206205
catch (InvalidOperationException)
207-
#pragma warning restore CA1031
208206
{
209207
// Ignore exception if the application tries to log after the test ends
210208
// but before the ITestOutputHelper is detached, e.g. "There is no currently active test."
@@ -263,7 +261,7 @@ private static void GetScopeInformation(StringBuilder builder)
263261
}
264262

265263
var depth = 0;
266-
static string DepthPadding(int depth) => new string(' ', depth * 2);
264+
static string DepthPadding(int depth) => new(' ', depth * 2);
267265

268266
while (stack.Count > 0)
269267
{

src/Logging.XUnit/XUnitLoggerProvider.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,14 @@ public partial class XUnitLoggerProvider : ILoggerProvider
2727
/// <inheritdoc />
2828
public virtual ILogger CreateLogger(string categoryName)
2929
{
30-
if (_outputHelperAccessor != null)
30+
if (_outputHelperAccessor is not null)
3131
{
3232
return new XUnitLogger(categoryName, _outputHelperAccessor, _options);
3333
}
34-
35-
if (_messageSinkAccessor != null)
34+
else
3635
{
37-
return new XUnitLogger(categoryName, _messageSinkAccessor, _options);
36+
return new XUnitLogger(categoryName, _messageSinkAccessor!, _options);
3837
}
39-
40-
throw new InvalidOperationException("INTERNAL ERROR. This code path is not reachable since XUnitLoggerProvider is initialized with either a non null _outputHelperAccessor or a non null _messageSinkAccessor.");
4138
}
4239

4340
/// <inheritdoc />

tests/Logging.XUnit.Tests/XUnitLoggerExtensionsTests.cs

Lines changed: 101 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ public static void AddXUnit_TestOutputHelper_For_ILoggerBuilder_Validates_Parame
2323
var accessor = Mock.Of<ITestOutputHelperAccessor>();
2424

2525
// Act and Assert
26-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit());
27-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(outputHelper));
28-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(outputHelper, ConfigureAction));
29-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(accessor));
30-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(accessor, ConfigureAction));
31-
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as ITestOutputHelperAccessor) !));
32-
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as ITestOutputHelperAccessor) !, ConfigureAction));
33-
Assert.Throws<ArgumentNullException>("outputHelper", () => builder.AddXUnit((null as ITestOutputHelper) !));
34-
Assert.Throws<ArgumentNullException>("outputHelper", () => builder.AddXUnit((null as ITestOutputHelper) !, ConfigureAction));
35-
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(outputHelper, (null as Action<XUnitLoggerOptions>) !));
36-
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(accessor, (null as Action<XUnitLoggerOptions>) !));
26+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit());
27+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(outputHelper));
28+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(outputHelper, ConfigureAction));
29+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(accessor));
30+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(accessor, ConfigureAction));
31+
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as ITestOutputHelperAccessor)!));
32+
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as ITestOutputHelperAccessor)!, ConfigureAction));
33+
Assert.Throws<ArgumentNullException>("outputHelper", () => builder.AddXUnit((null as ITestOutputHelper)!));
34+
Assert.Throws<ArgumentNullException>("outputHelper", () => builder.AddXUnit((null as ITestOutputHelper)!, ConfigureAction));
35+
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(outputHelper, (null as Action<XUnitLoggerOptions>)!));
36+
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(accessor, (null as Action<XUnitLoggerOptions>)!));
3737
}
3838

3939
[Fact]
@@ -45,16 +45,16 @@ public static void AddXUnit_MessageSink_For_ILoggerBuilder_Validates_Parameters(
4545
var accessor = Mock.Of<IMessageSinkAccessor>();
4646

4747
// Act and Assert
48-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(messageSink));
49-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(messageSink, ConfigureAction));
50-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(accessor));
51-
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder) !.AddXUnit(accessor, ConfigureAction));
52-
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as IMessageSinkAccessor) !));
53-
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as IMessageSinkAccessor) !, ConfigureAction));
54-
Assert.Throws<ArgumentNullException>("messageSink", () => builder.AddXUnit((null as IMessageSink) !));
55-
Assert.Throws<ArgumentNullException>("messageSink", () => builder.AddXUnit((null as IMessageSink) !, ConfigureAction));
56-
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(messageSink, (null as Action<XUnitLoggerOptions>) !));
57-
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(accessor, (null as Action<XUnitLoggerOptions>) !));
48+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(messageSink));
49+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(messageSink, ConfigureAction));
50+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(accessor));
51+
Assert.Throws<ArgumentNullException>("builder", () => (null as ILoggingBuilder)!.AddXUnit(accessor, ConfigureAction));
52+
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as IMessageSinkAccessor)!));
53+
Assert.Throws<ArgumentNullException>("accessor", () => builder.AddXUnit((null as IMessageSinkAccessor)!, ConfigureAction));
54+
Assert.Throws<ArgumentNullException>("messageSink", () => builder.AddXUnit((null as IMessageSink)!));
55+
Assert.Throws<ArgumentNullException>("messageSink", () => builder.AddXUnit((null as IMessageSink)!, ConfigureAction));
56+
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(messageSink, (null as Action<XUnitLoggerOptions>)!));
57+
Assert.Throws<ArgumentNullException>("configure", () => builder.AddXUnit(accessor, (null as Action<XUnitLoggerOptions>)!));
5858
}
5959

6060
[Fact]
@@ -67,22 +67,22 @@ public static void AddXUnit_TestOutputHelper_For_ILoggerFactory_Validates_Parame
6767
var options = new XUnitLoggerOptions();
6868

6969
// Act and Assert
70-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper));
71-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper, options));
72-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper, ConfigureAction));
73-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper, ConfigureFunction));
74-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper, Filter));
75-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(outputHelper, logLevel));
76-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !));
77-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !, ConfigureAction));
78-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !, ConfigureFunction));
79-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !, Filter));
80-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !, logLevel));
81-
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper) !, options));
82-
Assert.Throws<ArgumentNullException>("options", () => factory.AddXUnit(outputHelper, (null as XUnitLoggerOptions) !));
83-
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(outputHelper, (null as Action<XUnitLoggerOptions>) !));
84-
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(outputHelper, (null as Func<XUnitLoggerOptions>) !));
85-
Assert.Throws<ArgumentNullException>("filter", () => factory.AddXUnit(outputHelper, (null as Func<string, LogLevel, bool>) !));
70+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper));
71+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper, options));
72+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper, ConfigureAction));
73+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper, ConfigureFunction));
74+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper, Filter));
75+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(outputHelper, logLevel));
76+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!));
77+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!, ConfigureAction));
78+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!, ConfigureFunction));
79+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!, Filter));
80+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!, logLevel));
81+
Assert.Throws<ArgumentNullException>("outputHelper", () => factory.AddXUnit((null as ITestOutputHelper)!, options));
82+
Assert.Throws<ArgumentNullException>("options", () => factory.AddXUnit(outputHelper, (null as XUnitLoggerOptions)!));
83+
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(outputHelper, (null as Action<XUnitLoggerOptions>)!));
84+
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(outputHelper, (null as Func<XUnitLoggerOptions>)!));
85+
Assert.Throws<ArgumentNullException>("filter", () => factory.AddXUnit(outputHelper, (null as Func<string, LogLevel, bool>)!));
8686
}
8787

8888
[Fact]
@@ -95,22 +95,22 @@ public static void AddXUnit_MessageSink_For_ILoggerFactory_Validates_Parameters(
9595
var options = new XUnitLoggerOptions();
9696

9797
// Act and Assert
98-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink));
99-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink, options));
100-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink, ConfigureAction));
101-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink, ConfigureFunction));
102-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink, Filter));
103-
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory) !.AddXUnit(messageSink, logLevel));
104-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !));
105-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !, ConfigureAction));
106-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !, ConfigureFunction));
107-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !, Filter));
108-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !, logLevel));
109-
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink) !, options));
110-
Assert.Throws<ArgumentNullException>("options", () => factory.AddXUnit(messageSink, (null as XUnitLoggerOptions) !));
111-
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(messageSink, (null as Action<XUnitLoggerOptions>) !));
112-
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(messageSink, (null as Func<XUnitLoggerOptions>) !));
113-
Assert.Throws<ArgumentNullException>("filter", () => factory.AddXUnit(messageSink, (null as Func<string, LogLevel, bool>) !));
98+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink));
99+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink, options));
100+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink, ConfigureAction));
101+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink, ConfigureFunction));
102+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink, Filter));
103+
Assert.Throws<ArgumentNullException>("factory", () => (null as ILoggerFactory)!.AddXUnit(messageSink, logLevel));
104+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!));
105+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!, ConfigureAction));
106+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!, ConfigureFunction));
107+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!, Filter));
108+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!, logLevel));
109+
Assert.Throws<ArgumentNullException>("messageSink", () => factory.AddXUnit((null as IMessageSink)!, options));
110+
Assert.Throws<ArgumentNullException>("options", () => factory.AddXUnit(messageSink, (null as XUnitLoggerOptions)!));
111+
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(messageSink, (null as Action<XUnitLoggerOptions>)!));
112+
Assert.Throws<ArgumentNullException>("configure", () => factory.AddXUnit(messageSink, (null as Func<XUnitLoggerOptions>)!));
113+
Assert.Throws<ArgumentNullException>("filter", () => factory.AddXUnit(messageSink, (null as Func<string, LogLevel, bool>)!));
114114
}
115115

116116
[Fact]
@@ -202,11 +202,58 @@ public static void AddXUnit_IMessageSink_Registers_Services()
202202
serviceProvider.GetService<ILoggerProvider>().ShouldBeOfType<XUnitLoggerProvider>();
203203
}
204204

205+
[Fact]
206+
public static void AddXUnit_IMessageSink_With_LogLevel_Works()
207+
{
208+
// Arrange
209+
ILoggerFactory factory = NullLoggerFactory.Instance;
210+
var messageSink = Mock.Of<IMessageSink>();
211+
var minLevel = LogLevel.Debug;
212+
213+
// Act
214+
factory.AddXUnit(messageSink, minLevel);
215+
216+
// Assert
217+
ILogger logger = factory.CreateLogger("SomeLogger");
218+
logger.LogInformation("Some message");
219+
}
220+
221+
[Fact]
222+
public static void AddXUnit_IMessageSink_With_Filter_Works()
223+
{
224+
// Arrange
225+
ILoggerFactory factory = NullLoggerFactory.Instance;
226+
var messageSink = Mock.Of<IMessageSink>();
227+
228+
// Act
229+
factory.AddXUnit(messageSink, (_) => { });
230+
231+
// Assert
232+
ILogger logger = factory.CreateLogger("SomeLogger");
233+
logger.LogInformation("Some message");
234+
}
235+
236+
[Fact]
237+
public static void AddXUnit_IMessageSink_With_Options_Works()
238+
{
239+
// Arrange
240+
ILoggerFactory factory = NullLoggerFactory.Instance;
241+
var messageSink = Mock.Of<IMessageSink>();
242+
var options = new XUnitLoggerOptions();
243+
244+
// Act
245+
factory.AddXUnit(messageSink, options);
246+
247+
// Assert
248+
ILogger logger = factory.CreateLogger("SomeLogger");
249+
logger.LogInformation("Some message");
250+
}
251+
205252
private static void ConfigureAction(XUnitLoggerOptions options)
206253
{
207254
}
208255

209-
private static XUnitLoggerOptions ConfigureFunction() => new XUnitLoggerOptions();
256+
private static XUnitLoggerOptions ConfigureFunction() => new();
210257

211258
private static bool Filter(string? categoryName, LogLevel level) => true;
212259
}

0 commit comments

Comments
 (0)