public new void Setup() { // Do base generic setup base.Setup(); try { // Only use event firing if we are logging if (LoggingConfig.GetLoggingEnabledSetting() != LoggingEnabled.NO) { this.SetupEventFiringTester(); } else { this.SetupNoneEventFiringTester(); } } catch (Exception e) { this.TryToLog(MessageType.ERROR, "Setup failed because: {0}\r\n{1}", e.Message, e.StackTrace); // Make sure we do the standard teardown this.Teardown(); throw e; } this.PostSetupLogging(); }
/// <summary> /// Create a logger /// </summary> /// <returns>A logger</returns> protected Logger CreateLogger() { this.LoggedExceptionList = new List <string>(); this.LoggingEnabledSetting = LoggingConfig.GetLoggingEnabledSetting(); // Setup the exception listener AppDomain currentDomain = AppDomain.CurrentDomain; if (LoggingConfig.GetFirstChanceHandler()) { currentDomain.FirstChanceException += this.FirstChanceHandler; } if (this.LoggingEnabledSetting != LoggingEnabled.NO) { return(LoggingConfig.GetLogger( StringProcessor.SafeFormatter( "{0} - {1}", this.GetFullyQualifiedTestClassName(), DateTime.UtcNow.ToString("yyyy-MM-dd-hh-mm-ss-ffff", CultureInfo.InvariantCulture)))); } else { return(new ConsoleLogger()); } }
public void GetLoggingEnabledSettings() { LoggingEnabled[] loggingEnableds = (LoggingEnabled[])Enum.GetValues(typeof(LoggingEnabled)); for (int i = 0; i < loggingEnableds.Length; i++) { Config.AddTestSettingValues("Log", loggingEnableds[i].ToString(), "MagenicMaqs", true); Assert.AreEqual(loggingEnableds[i], LoggingConfig.GetLoggingEnabledSetting()); } }
/// <summary> /// Listen for any thrown exceptions /// </summary> /// <param name="source">Source object</param> /// <param name="e">The first chance exception</param> private void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e) { // Config settings for logging are messed up so we cannot safely log to anything but the console if (e.Exception is MaqsLoggingConfigException) { Console.WriteLine(StringProcessor.SafeExceptionFormatter(e.Exception)); return; } try { // Only do this is we are logging if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { return; } Exception ex = e.Exception; // Check for an inner exception or if it is from the NUnit core if (ex.InnerException == null || ex.Source.Equals("nunit.core")) { // This is not the test run exception we are looking for return; } // Get the inner exception and specific test name Exception inner = ex.InnerException; string innerStack = inner.StackTrace ?? string.Empty; var message = StringProcessor.SafeExceptionFormatter(inner); var messages = this.LoggedExceptionList; // Make sure this error is associated with the current test and that we have not logged it yet if (innerStack.ToLower().Contains("magenic.maqs") || innerStack.Contains("at " + this.GetFullyQualifiedTestClassName() + "(")) { // Check if this is a duplicate massage if (messages.Count > 0 && messages.Last().Equals(message)) { return; } this.TryToLog(MessageType.ERROR, message); messages.Add(message); } } catch (Exception ex) { this.TryToLog(MessageType.WARNING, "Failed to log exception because: " + ex.Message); } }
/// <summary> /// Get the web driver /// </summary> /// <returns>The web driver</returns> public IWebDriver GetWebDriver() { IWebDriver tempDriver; if (!this.IsDriverIntialized() && LoggingConfig.GetLoggingEnabledSetting() != LoggingEnabled.NO) { tempDriver = GetDriver() as IWebDriver; tempDriver = new EventFiringWebDriver(tempDriver); this.MapEvents(tempDriver as EventFiringWebDriver); this.BaseDriver = tempDriver; // Log the setup this.LoggingStartup(tempDriver); } return(GetBase() as IWebDriver); }
/// <summary> /// Get the http driver /// </summary> /// <returns>The http driver</returns> public WebServiceDriver GetWebServiceDriver() { if (this.driver == null) { if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { this.Log.LogMessage(MessageType.INFORMATION, "Getting web service driver"); this.driver = new WebServiceDriver(GetBase() as HttpClient); } else { this.Log.LogMessage(MessageType.INFORMATION, "Getting event firing web service driver"); this.driver = new EventFiringWebServiceDriver(GetBase() as HttpClient); this.MapEvents(this.driver as EventFiringWebServiceDriver); } } return(this.driver); }
/// <summary> /// Get the email connection driver /// </summary> /// <returns>The email connection driver</returns> public EmailDriver GetEmailDriver() { if (this.driver == null) { if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { this.Log.LogMessage(MessageType.INFORMATION, "Getting email driver"); this.driver = new EmailDriver(() => GetBase() as ImapClient); } else { this.Log.LogMessage(MessageType.INFORMATION, "Getting event firing email driver"); this.driver = new EventFiringEmailDriver(() => GetBase() as ImapClient); this.MapEvents(this.driver as EventFiringEmailDriver); } } return(this.driver); }
/// <summary> /// Get the database driver /// </summary> /// <returns>The database driver</returns> public DatabaseDriver GetDatabaseDriver() { if (this.driver == null) { if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { this.Log.LogMessage(MessageType.INFORMATION, "Getting database driver"); this.driver = new DatabaseDriver(GetBase() as IDbConnection); } else { this.Log.LogMessage(MessageType.INFORMATION, "Getting event firing database driver"); this.driver = new EventFiringDatabaseDriver(GetBase() as IDbConnection); this.MapEvents(this.driver as EventFiringDatabaseDriver); } } return(this.driver); }
/// <summary> /// Get the Mongo driver /// </summary> /// <returns>The Mongo driver</returns> public MongoDBDriver <T> GetMongoDriver() { if (this.driver == null) { IMongoCollection <T> temp = (IMongoCollection <T>)GetBase(); if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { this.Log.LogMessage(MessageType.INFORMATION, "Getting Mongo driver"); this.driver = new MongoDBDriver <T>(temp); } else { this.Log.LogMessage(MessageType.INFORMATION, "Getting event firing Mongo driver"); this.driver = new EventFiringMongoDBDriver <T>(temp); this.MapEvents((EventFiringMongoDBDriver <T>) this.driver); } } return(this.driver); }
/// <summary> /// Get the Mongo driver /// </summary> /// <returns>The Mongo driver</returns> public MongoDBDriver <T> GetMongoDriver() { if (this.driver == null) { ValueTuple <string, string, string> temp = (ValueTuple <string, string, string>)GetBase(); if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { this.Log.LogMessage(MessageType.INFORMATION, "Getting Mongo driver"); this.driver = new MongoDBDriver <T>(temp.Item1, temp.Item2, temp.Item3); } else { this.Log.LogMessage(MessageType.INFORMATION, "Getting event firing Mongo driver"); this.driver = new EventFiringMongoDBDriver <T>(temp.Item1, temp.Item2, temp.Item3); this.MapEvents((EventFiringMongoDBDriver <T>) this.driver); } } return(this.driver); }
/// <summary> /// Listen for any thrown exceptions /// </summary> /// <param name="source">Source object</param> /// <param name="e">The first chance exception</param> private void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e) { try { // Only do this is we are logging if (LoggingConfig.GetLoggingEnabledSetting() == LoggingEnabled.NO) { return; } Exception ex = e.Exception; // Check for an inner exception or if it is from the NUnit core if (ex.InnerException == null || ex.Source.Equals("nunit.core")) { // This is not the test run exception we are looking for return; } // Get the inner exception and specific test name Exception inner = ex.InnerException; string innerStack = inner.StackTrace ?? string.Empty; string message = inner.Message + Environment.NewLine + innerStack; List <string> messages = this.LoggedExceptionList; // Make sure this error is associated with the current test and that we have not logged it yet if (innerStack.ToLower().Contains("magenic.maqs") || (innerStack.Contains("at " + this.GetFullyQualifiedTestClassName() + "(") && !messages.Contains(message))) { this.TryToLog(MessageType.ERROR, message); messages.Add(message); } } catch (Exception ex) { this.TryToLog(MessageType.WARNING, "Failed to log exception because: " + ex.Message); } }
/// <summary> /// Map selenium events to log events /// </summary> /// <param name="eventFiringDriver">The event firing web driver that we want mapped</param> private void MapEvents(EventFiringWebDriver eventFiringDriver) { LoggingEnabled enbled = LoggingConfig.GetLoggingEnabledSetting(); if (enbled == LoggingEnabled.YES || enbled == LoggingEnabled.ONFAIL) { eventFiringDriver.ElementClicked += this.WebDriver_ElementClicked; eventFiringDriver.ElementClicking += this.WebDriver_ElementClicking; eventFiringDriver.ElementValueChanged += this.WebDriver_ElementValueChanged; eventFiringDriver.ElementValueChanging += this.WebDriver_ElementValueChanging; eventFiringDriver.FindElementCompleted += this.WebDriver_FindElementCompleted; eventFiringDriver.FindingElement += this.WebDriver_FindingElement; eventFiringDriver.ScriptExecuted += this.WebDriver_ScriptExecuted; eventFiringDriver.ScriptExecuting += this.WebDriver_ScriptExecuting; eventFiringDriver.Navigated += this.WebDriver_Navigated; eventFiringDriver.Navigating += this.WebDriver_Navigating; eventFiringDriver.NavigatedBack += this.WebDriver_NavigatedBack; eventFiringDriver.NavigatedForward += this.WebDriver_NavigatedForward; eventFiringDriver.NavigatingBack += this.WebDriver_NavigatingBack; eventFiringDriver.NavigatingForward += this.WebDriver_NavigatingForward; eventFiringDriver.ExceptionThrown += this.WebDriver_ExceptionThrown; } }
/// <summary> /// Create a Selenium test object /// </summary> protected new void SetupTestObject() { ILogger newLogger = this.CreateAndSetupLogger(GetFileNameWithoutExtension(), LoggingConfig.GetLogType(), LoggingConfig.GetLoggingEnabledSetting(), LoggingConfig.GetFirstChanceHandler()); this.TestObject = CreateSpecificTestObject(newLogger); }
public void GetLoggingEnabledSettingsDefault() { Config.AddTestSettingValues("Log", "Default", "MagenicMaqs", true); LoggingConfig.GetLoggingEnabledSetting(); }