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 @@ +