From 82803cec77e1aa06cba868d73e99e8f5dfb02ad5 Mon Sep 17 00:00:00 2001
From: lukeIam <2lukeiam@gmail.com>
Date: Thu, 29 Mar 2018 14:08:59 +0200
Subject: [PATCH] - Add minLogLevel param to CLog.Init() - Add tests for CLog
---
Tests/Tests.csproj | 10 +
Tests/VocaluxeLib/Log/CLogTest.cs | 1121 +++++++++++++++++++++++++++++
Tests/VocaluxeLib/Log/CLogTest.tt | 158 ++++
Vocaluxe/Program.cs | 8 +-
VocaluxeLib/Log/CLog.cs | 28 +-
VocaluxeLib/Log/ELogLevel.cs | 56 ++
VocaluxeLib/VocaluxeLib.csproj | 1 +
7 files changed, 1374 insertions(+), 8 deletions(-)
create mode 100644 Tests/VocaluxeLib/Log/CLogTest.cs
create mode 100644 Tests/VocaluxeLib/Log/CLogTest.tt
create mode 100644 VocaluxeLib/Log/ELogLevel.cs
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index 76d9ab83..289e4b5d 100644
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -65,6 +65,15 @@
+
+ TextTemplatingFileGenerator
+ CLogTest.cs
+
+
+ True
+ True
+ CLogTest.tt
+
@@ -76,6 +85,7 @@
+
diff --git a/Tests/VocaluxeLib/Log/CLogTest.cs b/Tests/VocaluxeLib/Log/CLogTest.cs
new file mode 100644
index 00000000..a5c279f6
--- /dev/null
+++ b/Tests/VocaluxeLib/Log/CLogTest.cs
@@ -0,0 +1,1121 @@
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System;
+using System.IO;
+using NUnit.Framework;
+using VocaluxeLib.Log;
+
+namespace Tests.VocaluxeLib.Log
+{
+ [TestFixture]
+ public class CLogTest
+ {
+ private const string _TestMessage = "This is a test";
+ private const string _TestMessageWithData = "This is a test with data: {Data1}";
+ private const string _TestMessageWithResolvedData = "This is a test with data: \"Test\"";
+ private string _TestFolder;
+
+ #region Setup methods
+
+ [SetUp]
+ public void SetUp()
+ {
+ _TestFolder = _GetTemporaryDirectory();
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ Directory.Delete(_TestFolder, true);
+ }
+
+ #endregion
+
+ #region Tests
+
+ #region Verbose tests
+
+ [Test]
+ public void VerboseTestWithDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Verbose(new Exception("TestExceptionMessage"), _TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Verbose(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void VerboseTestWithDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Verbose(_TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Verbose(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void VerboseTestWithoutDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Verbose(new Exception("TestExceptionMessage"), _TestMessage, show);
+ CLog.CSongLog.Verbose(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void VerboseTestWithoutDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Verbose(_TestMessage, show);
+ CLog.CSongLog.Verbose(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Verbose] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ #endregion
+ #region Debug tests
+
+ [Test]
+ public void DebugTestWithDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Debug(new Exception("TestExceptionMessage"), _TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Debug(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void DebugTestWithDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Debug(_TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Debug(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void DebugTestWithoutDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Debug(new Exception("TestExceptionMessage"), _TestMessage, show);
+ CLog.CSongLog.Debug(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void DebugTestWithoutDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Debug(_TestMessage, show);
+ CLog.CSongLog.Debug(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Debug] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ #endregion
+ #region Information tests
+
+ [Test]
+ public void InformationTestWithDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Information(new Exception("TestExceptionMessage"), _TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Information(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void InformationTestWithDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Information(_TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Information(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void InformationTestWithoutDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Information(new Exception("TestExceptionMessage"), _TestMessage, show);
+ CLog.CSongLog.Information(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void InformationTestWithoutDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Information(_TestMessage, show);
+ CLog.CSongLog.Information(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Information] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ #endregion
+ #region Warning tests
+
+ [Test]
+ public void WarningTestWithDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Warning(new Exception("TestExceptionMessage"), _TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Warning(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void WarningTestWithDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Warning(_TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Warning(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void WarningTestWithoutDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Warning(new Exception("TestExceptionMessage"), _TestMessage, show);
+ CLog.CSongLog.Warning(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void WarningTestWithoutDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Warning(_TestMessage, show);
+ CLog.CSongLog.Warning(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Warning] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ #endregion
+ #region Error tests
+
+ [Test]
+ public void ErrorTestWithDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Error(new Exception("TestExceptionMessage"), _TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Error(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void ErrorTestWithDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " + _TestMessageWithResolvedData, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessageWithData, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Error(_TestMessageWithData, CLog.Params("Test", "Foo"), show);
+ CLog.CSongLog.Error(_TestMessageWithData, CLog.Params("Test", "Foo"));
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " +_TestMessageWithResolvedData, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+ StringAssert.Contains(_TestMessageWithResolvedData, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void ErrorTestWithoutDataWithException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Error(new Exception("TestExceptionMessage"), _TestMessage, show);
+ CLog.CSongLog.Error(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ [Test]
+ public void ErrorTestWithoutDataWithoutException([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " + _TestMessage, log, "Main log entry wrong");
+
+ StringAssert.Contains(_TestMessage, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.Error(_TestMessage, show);
+ CLog.CSongLog.Error(_TestMessage);
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[Error] " +_TestMessage, mainLogContent, "Main log entry wrong");
+ StringAssert.Contains(_TestMessage, songLogContent, "Song log entry wrong");
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+
+ #endregion
+
+ #endregion
+
+ #region Helper methods
+
+ private string _GetTemporaryDirectory()
+ {
+ string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+ Directory.CreateDirectory(tempDirectory);
+ return tempDirectory;
+ }
+
+ #endregion
+
+ }
+}
diff --git a/Tests/VocaluxeLib/Log/CLogTest.tt b/Tests/VocaluxeLib/Log/CLogTest.tt
new file mode 100644
index 00000000..ebb4e978
--- /dev/null
+++ b/Tests/VocaluxeLib/Log/CLogTest.tt
@@ -0,0 +1,158 @@
+<#
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#>
+<#@ template debug="false" hostspecific="false" language="C#" #>
+<#@ assembly name="System.Core" #>
+<#@ import namespace="System.Linq" #>
+<#@ import namespace="System.Text" #>
+<#@ import namespace="System.Collections.Generic" #>
+<#@ output extension=".cs" #>
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System;
+using System.IO;
+using NUnit.Framework;
+using VocaluxeLib.Log;
+
+namespace Tests.VocaluxeLib.Log
+{
+ [TestFixture]
+ public class CLogTest
+ {
+ private const string _TestMessage = "This is a test";
+ private const string _TestMessageWithData = "This is a test with data: {Data1}";
+ private const string _TestMessageWithResolvedData = "This is a test with data: \"Test\"";
+ private string _TestFolder;
+
+ #region Setup methods
+
+ [SetUp]
+ public void SetUp()
+ {
+ _TestFolder = _GetTemporaryDirectory();
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ Directory.Delete(_TestFolder, true);
+ }
+
+ #endregion
+
+ #region Tests
+
+<# foreach (var LogLevel in new[]{"Verbose","Debug", "Information", "Warning", "Error"/*, "Fatal"*/}) { /* Fatal calls Environment.Exit -> cant test without mock*/ #>
+ #region <#= LogLevel #> tests
+<# foreach (var WithData in new[] {true, false}) { #>
+<# foreach (var WithException in new[] {true, false}) { #>
+
+ [Test]
+ public void <#= LogLevel #>Test<#= WithData?"With":"Without" #>Data<#= WithException?"With":"Without" #>Exception([Values(true, false)] bool show)
+ {
+ string testFileName = Path.GetRandomFileName();
+ string testFileSongName = Path.GetRandomFileName();
+ string testFileMarkerName = Path.GetRandomFileName();
+ string versionTag = "Test Version (1.2.4)";
+ bool messageShown = false;
+
+ // Init Log
+ CLog.Init(_TestFolder, testFileName, testFileSongName, testFileMarkerName, versionTag,
+ (crash, cont, tag, log, error) =>
+ {
+ messageShown = true;
+ Assert.IsTrue(show);
+ Assert.IsFalse(crash);
+ Assert.IsTrue(cont);
+ Assert.AreEqual(versionTag, tag);
+
+ StringAssert.Contains("[Information] Starting to log", log, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, log, "Main log version tag entry wrong");
+ StringAssert.Contains("[<#= LogLevel #>] " + <#= WithData?"_TestMessageWithResolvedData":"_TestMessage" #>, log, "Main log entry wrong");
+
+ StringAssert.Contains(<#= WithData?"_TestMessageWithData":"_TestMessage" #>, error, "Error message wrong");
+ },
+ ELogLevel.Verbose);
+
+ // Add log entry
+ CLog.<#= LogLevel #>(<#= WithException?"new Exception(\"TestExceptionMessage\"), ":"" #><#= WithData?"_TestMessageWithData":"_TestMessage" #><#= WithData?", CLog.Params(\"Test\", \"Foo\")":"" #>, show);
+<# if(LogLevel!="Fatal") { #>
+ CLog.CSongLog.<#= LogLevel #>(<#= WithData?"_TestMessageWithData":"_TestMessage" #><#= WithData?", CLog.Params(\"Test\", \"Foo\")":"" #>);
+<# } #>
+
+ // Close logfile
+ CLog.Close();
+
+ // Check log
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileName)), "Mainlog file is missing.");
+ Assert.IsTrue(File.Exists(Path.Combine(_TestFolder, testFileSongName)), "Songlog file is missing.");
+
+ string mainLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileName));
+ string songLogContent = File.ReadAllText(Path.Combine(_TestFolder, testFileSongName));
+
+ StringAssert.Contains("[Information] Starting to log", mainLogContent, "Main log start entry wrong");
+ StringAssert.Contains("Version = " + versionTag, mainLogContent, "Main log version tag entry wrong");
+ StringAssert.Contains("[<#= LogLevel #>] " +<#= WithData?"_TestMessageWithResolvedData":"_TestMessage" #>, mainLogContent, "Main log entry wrong");
+<# if(WithException) { #>
+ StringAssert.Contains("TestExceptionMessage", mainLogContent, "Exception is missing");
+<# } #>
+<# if(WithData) { #>
+ StringAssert.Contains("Foo", mainLogContent, "Second data field is missing");
+<# } #>
+<# if(LogLevel!="Fatal") { #>
+ StringAssert.Contains(<#= WithData?"_TestMessageWithResolvedData":"_TestMessage" #>, songLogContent, "Song log entry wrong");
+<# } #>
+ if(!show)
+ {
+ Assert.IsFalse(messageShown);
+ }
+ }
+<# } #>
+<# } #>
+
+ #endregion
+<# } #>
+
+ #endregion
+
+ #region Helper methods
+
+ private string _GetTemporaryDirectory()
+ {
+ string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+ Directory.CreateDirectory(tempDirectory);
+ return tempDirectory;
+ }
+
+ #endregion
+
+ }
+}
diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs
index 2f049814..b7a31660 100644
--- a/Vocaluxe/Program.cs
+++ b/Vocaluxe/Program.cs
@@ -91,7 +91,13 @@ namespace Vocaluxe
Directory.CreateDirectory(CSettings.DataFolder);
// Init Log
- CLog.Init(CSettings.FolderNameLogs, CSettings.FileNameMainLog, CSettings.FileNameSongLog, CSettings.FileNameCrashMarker, CSettings.GetFullVersionText(), CReporter.ShowReporterFunc);
+ CLog.Init(CSettings.FolderNameLogs,
+ CSettings.FileNameMainLog,
+ CSettings.FileNameSongLog,
+ CSettings.FileNameCrashMarker,
+ CSettings.GetFullVersionText(),
+ CReporter.ShowReporterFunc,
+ ELogLevel.Information);
if (!CProgrammHelper.CheckRequirements())
return;
diff --git a/VocaluxeLib/Log/CLog.cs b/VocaluxeLib/Log/CLog.cs
index 926c5994..e2719273 100644
--- a/VocaluxeLib/Log/CLog.cs
+++ b/VocaluxeLib/Log/CLog.cs
@@ -41,7 +41,6 @@ namespace VocaluxeLib.Log
private const string _MainLogTemplate = "[{TimeStampFromStart}] [{Level}] {Message}{NewLine}{Properties}{NewLine}{Exception}";
private const string _SongLogTemplate = "{Message}{NewLine}Additional info:{Properties}{NewLine}{Exception}";
-
///
/// Initialize the logging framework.
///
@@ -51,7 +50,8 @@ namespace VocaluxeLib.Log
/// The name of the file which is used as crash marker.
/// The current version tag as it is displayed in the main menu.
/// Delegate to the function which should be called if the reporter have to been shown.
- public static void Init(string logFolder, string fileNameMainLog, string fileNameSongInfoLog, string fileNameCrashMarker, string currentVersion, ShowReporterDelegate showReporterFunc)
+ /// The log level for log messages.
+ public static void Init(string logFolder, string fileNameMainLog, string fileNameSongInfoLog, string fileNameCrashMarker, string currentVersion, ShowReporterDelegate showReporterFunc, ELogLevel logLevel)
{
_LogFolder = logFolder;
_ShowReporterFunc = showReporterFunc;
@@ -83,7 +83,11 @@ namespace VocaluxeLib.Log
if (_CurrentVersion == versionTag && File.Exists(mainLogFilePath))
{
string logContent = File.ReadAllText(mainLogFilePath, Encoding.UTF8);
- _ShowReporterFunc(crash:true, showContinue:true, vocaluxeVersionTag:versionTag, log:logContent, lastError:"Vocaluxe crashed while the last execution.");
+ _ShowReporterFunc(crash:true,
+ showContinue:true,
+ vocaluxeVersionTag:versionTag,
+ log:logContent,
+ lastError:"Vocaluxe crashed while the last execution.");
}
#endif
}
@@ -95,26 +99,36 @@ namespace VocaluxeLib.Log
CLogFileRoller.RollLogs(songLogFilePath, 2);
_MainLog = new LoggerConfiguration()
+ .MinimumLevel.Is(logLevel.ToSerilogLogLevel())
.Enrich.WithThreadId()
.Enrich.FromLogContext()
.Enrich.WithTimeStampFromStart()
- .WriteTo.TextWriter(_MainLogStringWriter, outputTemplate: _MainLogTemplate)
+ .WriteTo.TextWriter(_MainLogStringWriter,
+ outputTemplate: _MainLogTemplate)
// Json can be activated by adding "new CompactJsonFormatter()" as first argument
- .WriteTo.File(mainLogFilePath, flushToDiskInterval: TimeSpan.FromSeconds(30), outputTemplate: _MainLogTemplate)
+ .WriteTo.File(mainLogFilePath,
+ flushToDiskInterval: TimeSpan.FromSeconds(30),
+ outputTemplate: _MainLogTemplate)
#if DEBUG
.WriteTo.Console(outputTemplate: _MainLogTemplate)
#endif
.CreateLogger();
_SongLog = new LoggerConfiguration()
- .WriteTo.File(songLogFilePath, flushToDiskInterval: TimeSpan.FromSeconds(60), outputTemplate: _SongLogTemplate)
+ .MinimumLevel.Is(logLevel.ToSerilogLogLevel())
+ .WriteTo.File(songLogFilePath,
+ flushToDiskInterval: TimeSpan.FromSeconds(60),
+ outputTemplate: _SongLogTemplate)
#if DEBUG
.WriteTo.Console(outputTemplate: "[SongInfo] " + _SongLogTemplate)
#endif
.CreateLogger();
// Adding first line to log with information about this run
- Information("Starting to log", Params( new { Version = _CurrentVersion}, new { StartDate = DateTime.Now}, new { Id = Guid.NewGuid() } ) );
+ Information("Starting to log",
+ Params( new { Version = _CurrentVersion},
+ new { StartDate = DateTime.Now},
+ new { Id = Guid.NewGuid() } ) );
}
///
diff --git a/VocaluxeLib/Log/ELogLevel.cs b/VocaluxeLib/Log/ELogLevel.cs
new file mode 100644
index 00000000..d9ebc627
--- /dev/null
+++ b/VocaluxeLib/Log/ELogLevel.cs
@@ -0,0 +1,56 @@
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System;
+using Serilog.Events;
+
+namespace VocaluxeLib.Log
+{
+ public enum ELogLevel
+ {
+ Verbose,
+ Debug,
+ Information,
+ Warning,
+ Error,
+ Fatal
+ }
+
+ public static class CLogLevelExtension
+ {
+ public static LogEventLevel ToSerilogLogLevel(this ELogLevel level)
+ {
+ switch (level)
+ {
+ case ELogLevel.Verbose:
+ return LogEventLevel.Verbose;
+ case ELogLevel.Debug:
+ return LogEventLevel.Debug;
+ case ELogLevel.Information:
+ return LogEventLevel.Information;
+ case ELogLevel.Warning:
+ return LogEventLevel.Warning;
+ case ELogLevel.Error:
+ return LogEventLevel.Error;
+ case ELogLevel.Fatal:
+ return LogEventLevel.Fatal;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(level), level, null);
+ }
+ }
+ }
+}
diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj
index 5172700f..242ea280 100644
--- a/VocaluxeLib/VocaluxeLib.csproj
+++ b/VocaluxeLib/VocaluxeLib.csproj
@@ -112,6 +112,7 @@
+