Skip to content

Commit

Permalink
test: expand test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
wlsnmrk committed Jan 28, 2025
1 parent e14a405 commit 0f0a7cd
Show file tree
Hide file tree
Showing 6 changed files with 447 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Chickensoft.Log.Tests/badges/branch_coverage.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion Chickensoft.Log.Tests/badges/line_coverage.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
133 changes: 133 additions & 0 deletions Chickensoft.Log.Tests/test/src/ConsoleLogTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,57 @@ public void PrintsException() {
Invoked.Once);
}

[Fact]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style",
"CA1859:Change type of variable for performance",
Justification = "Need ILog type to test interface method")]
public void PrintsExceptionWithMessage() {
var contextMsg = "Context message";
var exceptionMsg = "Exception:";
var e = new TestException(TEST_MSG);
var eStr = e.ToString();
var formattedContextMsg = Format(contextMsg);
var formattedExceptionMsg = Format(exceptionMsg);
var formattedException = Format(eStr);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), contextMsg))
.Returns(formattedContextMsg);
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), exceptionMsg))
.Returns(formattedExceptionMsg);
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), eStr))
.Returns(formattedException);

var mockWriter = new Mock<ConsoleLog.IWriter>();
var log = (ILog)new ConsoleLog(nameof(ConsoleLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
log.Print(e, contextMsg);

mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), contextMsg),
Invoked.Once);
mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), exceptionMsg),
Invoked.Once);
mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(ConsoleLogTest), eStr),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteError(formattedContextMsg),
Invoked.Once);
mockWriter.Assert(writer =>
writer.WriteError(formattedExceptionMsg),
Invoked.Once);
mockWriter.Assert(writer =>
writer.WriteError(formattedException),
Invoked.Once);
}

[Fact]
public void PrintsStackTrace() {
var expectedStackTraceMsg = "ClassName.MethodName in File.cs(1,2)";
Expand All @@ -149,4 +200,86 @@ public void PrintsStackTrace() {
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutFile() {
var expectedStackTraceMsg = "ClassName.MethodName in **(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<ConsoleLog.IWriter>();
var log = new ConsoleLog(nameof(ConsoleLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace(null, "ClassName", "MethodName");
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutClass() {
var expectedStackTraceMsg = "UnknownClass.MethodName in File.cs(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<ConsoleLog.IWriter>();
var log = new ConsoleLog(nameof(ConsoleLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace("File.cs", null, "MethodName");
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutMethod() {
// unknown method is also unknown class
var expectedStackTraceMsg = "UnknownClass.UnknownMethod in File.cs(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<ConsoleLog.IWriter>();
var log = new ConsoleLog(nameof(ConsoleLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace("File.cs", "ClassName", null);
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(ConsoleLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}
}
164 changes: 164 additions & 0 deletions Chickensoft.Log.Tests/test/src/FileLogTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,37 @@ private static string Format(string msg) {
return $"MockLevel ({nameof(FileLogTest)}): {msg}";
}

[Fact]
public void WriterInstanceUsesDefaultFileName() {
var writer = FileLog.Writer.Instance();
writer.FileName.ShouldBe(FileLog.Writer.DefaultFileName);
}

[Fact]
public void WriterInstanceUsesProvidedFileName() {
var fileName = "testFileName.log";
var writer = FileLog.Writer.Instance(fileName);
writer.FileName.ShouldBe(fileName);
}

[Fact]
public void WriterInstanceUsesChangedDefaultFileName() {
var newDefault = "testDefaultFileName.log";
var originalDefault = FileLog.Writer.DefaultFileName;
FileLog.Writer.DefaultFileName = newDefault;
var writer = FileLog.Writer.Instance();
writer.FileName.ShouldBe(newDefault);
FileLog.Writer.DefaultFileName = originalDefault;
}

[Fact]
public void WriterInstanceUsesExistingWriter() {
var fileName = "testFileName.log";
var writer1 = FileLog.Writer.Instance(fileName);
var writer2 = FileLog.Writer.Instance(fileName);
writer1.ShouldBeSameAs(writer2);
}

[Fact]
public void Initializes() {
var mockWriter = new Mock<FileLog.IWriter>();
Expand Down Expand Up @@ -124,6 +155,57 @@ public void PrintsException() {
Invoked.Once);
}

[Fact]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style",
"CA1859:Change type of variable for performance",
Justification = "Need ILog type to test interface method")]
public void PrintsExceptionWithMessage() {
var contextMsg = "Context message";
var exceptionMsg = "Exception:";
var e = new TestException(TEST_MSG);
var eStr = e.ToString();
var formattedContextMsg = Format(contextMsg);
var formattedExceptionMsg = Format(exceptionMsg);
var formattedException = Format(eStr);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(FileLogTest), contextMsg))
.Returns(formattedContextMsg);
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(FileLogTest), exceptionMsg))
.Returns(formattedExceptionMsg);
mockFormatter.Arrange(formatter =>
formatter.FormatError(nameof(FileLogTest), eStr))
.Returns(formattedException);

var mockWriter = new Mock<FileLog.IWriter>();
var log = (ILog)new FileLog(nameof(FileLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
log.Print(e, contextMsg);

mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(FileLogTest), contextMsg),
Invoked.Once);
mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(FileLogTest), exceptionMsg),
Invoked.Once);
mockFormatter.Assert(formatter =>
formatter.FormatError(nameof(FileLogTest), eStr),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteError(formattedContextMsg),
Invoked.Once);
mockWriter.Assert(writer =>
writer.WriteError(formattedExceptionMsg),
Invoked.Once);
mockWriter.Assert(writer =>
writer.WriteError(formattedException),
Invoked.Once);
}

[Fact]
public void PrintsStackTrace() {
var expectedStackTraceMsg = "ClassName.MethodName in File.cs(1,2)";
Expand All @@ -150,4 +232,86 @@ public void PrintsStackTrace() {
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutFile() {
var expectedStackTraceMsg = "ClassName.MethodName in **(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<FileLog.IWriter>();
var log = new FileLog(nameof(FileLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace(null, "ClassName", "MethodName");
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutClass() {
var expectedStackTraceMsg = "UnknownClass.MethodName in File.cs(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<FileLog.IWriter>();
var log = new FileLog(nameof(FileLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace("File.cs", null, "MethodName");
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}

[Fact]
public void PrintsStackTraceWithoutMethod() {
// unknown method is also unknown class
var expectedStackTraceMsg = "UnknownClass.UnknownMethod in File.cs(1,2)";
var formattedStackTraceMsg = Format(expectedStackTraceMsg);

var mockFormatter = new Mock<ILogFormatter>();
mockFormatter.Arrange(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg))
.Returns(formattedStackTraceMsg);

var mockWriter = new Mock<FileLog.IWriter>();
var log = new FileLog(nameof(FileLogTest), mockWriter.Object) {
Formatter = mockFormatter.Object
};
var st = new FakeStackTrace("File.cs", "ClassName", null);
log.Print(st);

mockFormatter.Assert(formatter =>
formatter.FormatMessage(nameof(FileLogTest), expectedStackTraceMsg),
Invoked.Once);

mockWriter.Assert(writer =>
writer.WriteMessage(formattedStackTraceMsg),
Invoked.Once
);
}
}
Loading

0 comments on commit 0f0a7cd

Please sign in to comment.