Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,38 @@ public void LogMessages(Delegate messageDelegate, int argumentCount)
var actualLogValues = Assert.IsAssignableFrom<IReadOnlyList<KeyValuePair<string, object>>>(write.State);
AssertLogValues(expectedValues, actualLogValues.ToList());
Assert.Equal(expectedToString, actualLogValues.ToString());
Assert.Equal(2, testLogger.IsEnabledCallCount);
}

[Theory]
[MemberData(nameof(LogMessagesDataSkipEnabledCheck))]
public void LogMessagesSkipEnabledCheck(Delegate messageDelegate, int argumentCount)
{
// Arrange
var testSink = new TestSink();
var testLogger = new TestLogger("testlogger", testSink, enabled: true);
var exception = new Exception("TestException");
var parameterNames = Enumerable.Range(0, argumentCount).Select(i => "P" + i).ToArray();
var parameters = new List<object>();
parameters.Add(testLogger);
parameters.AddRange(parameterNames);
parameters.Add(exception);

var expectedFormat = "Log " + string.Join(" ", parameterNames.Select(p => "{" + p + "}"));
var expectedToString = "Log " + string.Join(" ", parameterNames);
var expectedValues = parameterNames.Select(p => new KeyValuePair<string, object>(p, p)).ToList();
expectedValues.Add(new KeyValuePair<string, object>("{OriginalFormat}", expectedFormat));

// Act
messageDelegate.DynamicInvoke(parameters.ToArray());

// Assert
Assert.Single(testSink.Writes);
var write = testSink.Writes.First();
var actualLogValues = Assert.IsAssignableFrom<IReadOnlyList<KeyValuePair<string, object>>>(write.State);
AssertLogValues(expectedValues, actualLogValues.ToList());
Assert.Equal(expectedToString, actualLogValues.ToString());
Assert.Equal(1, testLogger.IsEnabledCallCount);
}

[Fact]
Expand Down Expand Up @@ -392,6 +424,17 @@ public void DefineAndDefineScope_ThrowsException_WhenFormatString_IsNull(Delegat
new object[] { LoggerMessage.Define<string, string, string, string, string, string>(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}"), 6 },
};

public static IEnumerable<object[]> LogMessagesDataSkipEnabledCheck => new[]
{
new object[] { LoggerMessage.Define(LogLevel.Error, 0, "Log ", skipEnabledCheck: true), 0 },
new object[] { LoggerMessage.Define<string>(LogLevel.Error, 1, "Log {P0}", skipEnabledCheck: true), 1 },
new object[] { LoggerMessage.Define<string, string>(LogLevel.Error, 2, "Log {P0} {P1}", skipEnabledCheck: true), 2 },
new object[] { LoggerMessage.Define<string, string, string>(LogLevel.Error, 3, "Log {P0} {P1} {P2}", skipEnabledCheck: true), 3 },
new object[] { LoggerMessage.Define<string, string, string, string>(LogLevel.Error, 4, "Log {P0} {P1} {P2} {P3}", skipEnabledCheck: true), 4 },
new object[] { LoggerMessage.Define<string, string, string, string, string>(LogLevel.Error, 5, "Log {P0} {P1} {P2} {P3} {P4}", skipEnabledCheck: true), 5 },
new object[] { LoggerMessage.Define<string, string, string, string, string, string>(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}", skipEnabledCheck: true), 6 },
};

private delegate Delegate Define(LogLevel logLevel, EventId eventId, string formatString);
private delegate Delegate DefineScope(string formatString);
private static object[] DefineInvalidParameters => new object[] { LogLevel.Error, new EventId(0), null };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public TestLogger(string name, ITestSink sink, Func<LogLevel, bool> filter)
}

public string Name { get; set; }
public int IsEnabledCallCount { get; private set; }

public IDisposable BeginScope<TState>(TState state)
{
Expand Down Expand Up @@ -60,6 +61,7 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except

public bool IsEnabled(LogLevel logLevel)
{
IsEnabledCallCount++;
return logLevel != LogLevel.None && _filter(logLevel);
}

Expand Down