/// <summary>
        /// The close log file.
        /// </summary>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        public bool CloseLogFile()
        {
            if (!LogFileInitialized)
            {
                return(true);
            }

            var retVal = SetRunStatus();

            retVal             = retVal && EndHtmlLogFile();
            retVal             = retVal && LogFileHandle.Close();
            LogFileInitialized = false;
            return(retVal);
        }
Beispiel #2
0
        /// <summary>
        /// Logging a KeyValue pair - as you see fit. The logger will log some, that are generally useful - like OS
        /// Machine, CurrentDirectory etc..
        /// </summary>
        /// <param name="key">
        /// The <c>key</c> part of the pair.
        /// </param>
        /// <param name="value">
        /// The <c>value</c> part of the pair.
        /// </param>
        /// <param name="message">
        /// Further information related to the KeyValue pair - if any.
        /// </param>
        /// <param name="args">
        /// The args.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        public int LogKeyValue(string key, string value, string message, params object[] args)
        {
            message = message.StfFormatString(args);

            var htmlLine = "<div class=\"line keyvalue\">\n";

            htmlLine += $"   <div class=\"el key\">{key}</div>\n";
            htmlLine += $"   <div class=\"el value\">{value}</div>\n";
            htmlLine += $"   <div class=\"el msg\">{message}</div>\n";
            htmlLine += "</div>\n";

            LogFileHandle.Write(htmlLine);
            return(htmlLine.Length);
        }
        /// <summary>
        /// initialize a logger
        /// </summary>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private bool InitLogfile()
        {
            var userName = $"{Environment.UserDomainName}\\{Environment.UserName}";

            if (LogFileInitialized)
            {
                return(true);
            }

            OverwriteLogFile = Configuration.OverwriteLogFile;
            TestName         = "TestName_Not_Set";
            this.LogLevel    = Configuration.LogLevel;

            if (LogFileHandle.Initialized)
            {
                CloseLogFile();
            }

            if (!LogFileHandle.Open(FileName))
            {
                return(false);
            }

            if (!BeginHtmlLogFile())
            {
                return(false);
            }

            LogFileInitialized = true;
            LogTrace($"Log Initiated at [{FileName}]");

            TimeOfFirstLogMessage = DateTime.Now;

            LogKeyValue("Environment", "TODO_ENVIRONMENT", "Configuration.EnvironmentName");
            LogKeyValue("OS", Environment.OSVersion.ToString(), string.Empty);
            LogKeyValue("User", userName, string.Empty);
            LogKeyValue("InstDir", Environment.CurrentDirectory, "TODO_InstDir");
            LogKeyValue("ResultDir", Environment.CurrentDirectory, "TODO_ResultDir");
            LogKeyValue("Controller", Environment.MachineName, "TODO_Controller");
            LogKeyValue("Hostname", Environment.MachineName, "TODO_Hostname");
            LogKeyValue("TestDir", Environment.CurrentDirectory, "TODO_TestDir");
            LogKeyValue("Test Iteration", "TODO_Test Iteration", "TODO_Test Iteration");
            LogKeyValue("Testname", TestName, "TODO_Testname");
            LogKeyValue("Date", DateTime.Now.ToShortDateString(), string.Empty);

            return(true);
        }
        /// <summary>
        /// End html log file.
        /// </summary>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private bool EndHtmlLogFile()
        {
            LogTestDuration();

            LogKeyValue("Passed", NumberOfLoglevelMessages[StfLogLevel.Pass].ToString(), "Passed Tests");
            LogKeyValue("Failed", NumberOfLoglevelMessages[StfLogLevel.Fail].ToString(), "Failed Tests");
            LogKeyValue("Inconclusives", NumberOfLoglevelMessages[StfLogLevel.Inconclusive].ToString(), "Inconclusive Tests");
            LogKeyValue("Errors", NumberOfLoglevelMessages[StfLogLevel.Error].ToString(), "Errors logged");
            LogKeyValue("Warnings", NumberOfLoglevelMessages[StfLogLevel.Warning].ToString(), "Warnings logged");

            var htmlLine = "    </div>\n";

            htmlLine += "  </body>\n";
            htmlLine += "</html>\n";

            LogFileHandle.Write(htmlLine);
            return(true);
        }
        /// <summary>
        /// Open and Start the logger
        /// </summary>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        /// private
        private bool BeginHtmlLogFile()
        {
            var htmlLine = "<!DOCTYPE html>\n";

            htmlLine += "<html>\n";
            htmlLine += "  <head>\n";
            htmlLine += "    <meta charset=\"utf-8\" />\n";
            htmlLine += $"    <title>{Configuration.LogTitle}</title>\n";
            htmlLine += "    <style type=\"text/css\">\n";
            htmlLine += GetStyleSheet();
            htmlLine += "    </style>\n<script type=\"text/javascript\">";
            htmlLine += GetJavaScript();
            htmlLine += "  </script>\n</head>\n";
            htmlLine += GetOpenBody();

            LogFileHandle.Write(htmlLine);
            return(true);
        }
Beispiel #6
0
        /// <summary>
        /// The log one image.
        /// </summary>
        /// <param name="level">
        /// The level.
        /// </param>
        /// <param name="imageFile">
        /// The image file.
        /// </param>
        /// <param name="message">
        /// The message.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        private int LogOneImage(StfLogLevel level, string imageFile, string message)
        {
            if (!AddLoglevelToRunReport[level])
            {
                return(-1);
            }

            var messageIdString = GetNextMessageId();
            var logLevelString  = Enum.GetName(typeof(StfLogLevel), level) ?? "Unknown StfLogLevel";

            logLevelString = logLevelString.ToLower();

            var html = string.Format("<div onclick=\"sa('{0}')\" id=\"{0}\" class=\"line {1} image\">\n", messageIdString, logLevelString);

            html += $"    <div class=\"el time\">{DateTime.Now:HH:mm:ss}</div>\n";
            html += $"    <div class=\"el level\">{logLevelString}</div>\n";
            html += $"    <div class=\"el msg\">{message}</div>\n";
            html += $"    <p><img  onclick=\"showImage(this)\" class=\"embeddedimage\" alt=\"{message}\" src=\"data:image/png;base64, {imageFile}\" /></p>";
            html += "</div>\n";

            LogFileHandle.Write(html);

            return(html.Length);
        }
Beispiel #7
0
        /// <summary>
        /// The log one html Message.
        /// </summary>
        /// <param name="loglevel">
        /// The log level.
        /// </param>
        /// <param name="message">
        /// The Message.
        /// </param>
        /// <param name="args">
        /// The args.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        private int LogOneHtmlMessage(StfLogLevel loglevel, string message, params object[] args)
        {
            ResetIdleTimer();

            string htmlLine;

            if (!AddLoglevelToRunReport[loglevel])
            {
                return(-1);
            }

            if (messageId == 0)
            {
                if (!InitLogfile())
                {
                    Console.WriteLine(@"Coulnd't initialise the logfile");
                }
            }

            if (!LogFileHandle.Initialized)
            {
                return(-2);
            }

            var messageIdString            = GetNextMessageId();
            var logLevelString             = Enum.GetName(typeof(StfLogLevel), loglevel) ?? "Unknown StfLogLevel";
            var convertedToFoldableMessage = false;

            logLevelString = logLevelString.ToLower();
            CheckForPerformanceAlert();
            message = message.StfFormatString(args);

            if (Configuration.MapNewlinesToBr)
            {
                var count = message.Count(f => f == '\n');

                if (count > 1)
                {
                    var firstLineIndexOf = message.IndexOf(Environment.NewLine, StringComparison.Ordinal);

                    if (firstLineIndexOf > 0)
                    {
                        var firstLineOfMessage = message.Substring(0, firstLineIndexOf);
                        var firstLoggedLine    = $"{Environment.NewLine}{firstLineOfMessage}";

                        message = GetMultilineMessage(messageIdString, firstLoggedLine, message);
                        convertedToFoldableMessage = true;
                    }
                }
            }

            if (ShouldMessageBeConvertedToClickable(message) && !convertedToFoldableMessage)
            {
                // todo: Implement :-)
            }

            switch (loglevel)
            {
            case StfLogLevel.Header:
                htmlLine = $"<div class=\"line logheader\">{message}</div>\n";
                break;

            case StfLogLevel.SubHeader:
                htmlLine = $"<div class=\"line logsubheader\">{message}</div>\n";
                break;

            default:
                htmlLine = string.Format(
                    "<div onclick=\"sa('{0}')\" id=\"{0}\" class=\"line {1} \">\n",
                    messageIdString,
                    logLevelString);
                htmlLine += $"    <div class=\"el time\">{timeOfLastMessage:HH:mm:ss}</div>\n";
                htmlLine += $"    <div class=\"el level\">{logLevelString}</div>\n";
                htmlLine += $"    <div class=\"el pad\">{IndentString()}</div>\n";
                htmlLine += $"    <div class=\"el msg\">{message}</div>\n";
                htmlLine += "</div>\n";
                break;
            }

            NumberOfLoglevelMessages[loglevel]++;
            LogFileHandle.Write(htmlLine);

            return(htmlLine.Length);
        }