public bool OpenWriter(string message) { TouchOptions options = TouchOptions.Current; DateTime now = DateTime.Now; // let the application provide it's own TextWriter to ease automation with AutoStart property if (Writer == null) { if (options.ShowUseNetworkLogger) { try { string hostname = null; WriterFinishedTask = null; TextWriter defaultWriter = null; switch (options.Transport) { case "FILE": Console.WriteLine("[{0}] Sending '{1}' results to the file {2}", now, message, options.LogFile); defaultWriter = new StreamWriter(options.LogFile, true, System.Text.Encoding.UTF8) { AutoFlush = true, }; break; case "HTTP": var hostnames = options.HostName.Split(','); hostname = hostnames [0]; if (hostnames.Length > 1) { Console.WriteLine("[{0}] Found multiple host names ({1}); will only try sending to the first ({2})", now, options.HostName, hostname); } Console.WriteLine("[{0}] Sending '{1}' results to {2}:{3}", now, message, hostname, options.HostPort); var w = new HttpTextWriter() { HostName = hostname, Port = options.HostPort, }; w.Open(); defaultWriter = w; WriterFinishedTask = w.FinishedTask; break; default: Console.WriteLine("Unknown transport '{0}': switching to default (TCP)", options.Transport); goto case "TCP"; case "TCP": hostname = SelectHostName(options.HostName.Split(','), options.HostPort); if (string.IsNullOrEmpty(hostname)) { break; } Console.WriteLine("[{0}] Sending '{1}' results to {2}:{3}", now, message, hostname, options.HostPort); defaultWriter = new TcpTextWriter(hostname, options.HostPort); break; } if (options.EnableXml) { Writer = new NUnitOutputTextWriter( this, defaultWriter, new NUnitLite.Runner.NUnit2XmlOutputWriter(DateTime.UtcNow), options.XmlMode); } else { Writer = defaultWriter; } } catch (Exception ex) { connection_failure = true; if (!ShowConnectionErrorAlert(options.HostName, options.HostPort, ex)) { return(false); } Console.WriteLine("Network error: Cannot connect to {0}:{1}: {2}. Continuing on console.", options.HostName, options.HostPort, ex); Writer = Console.Out; } } } if (Writer == null) { Writer = Console.Out; } Writer.WriteLine("[Runner executing:\t{0}]", message); Writer.WriteLine("[MonoTouch Version:\t{0}]", Constants.Version); Writer.WriteLine("[Assembly:\t{0}.dll ({1} bits)]", typeof(NSObject).Assembly.GetName().Name, IntPtr.Size * 8); Writer.WriteLine("[GC:\t{0}]", GC.MaxGeneration == 0 ? "Boehm": "sgen"); WriteDeviceInformation(Writer); Writer.WriteLine("[Device Locale:\t{0}]", NSLocale.CurrentLocale.Identifier); Writer.WriteLine("[Device Date/Time:\t{0}]", now); // to match earlier C.WL output Writer.WriteLine("[Bundle:\t{0}]", NSBundle.MainBundle.BundleIdentifier); // FIXME: add data about how the app was compiled (e.g. ARMvX, LLVM, GC and Linker options) PassedCount = 0; IgnoredCount = 0; FailedCount = 0; InconclusiveCount = 0; return(true); }
void RunTests() { var options = ApplicationOptions.Current; TextWriter writer = null; if (!string.IsNullOrEmpty(options.HostName) && string.IsNullOrEmpty(options.LogFile)) { http_writer = new HttpTextWriter() { HostName = options.HostName.Split(',')[0], Port = options.HostPort }; Console.WriteLine("Sending results to {0}:{1} using HTTP", http_writer.HostName, http_writer.Port); http_writer.Open(); writer = http_writer; } else if (!string.IsNullOrEmpty(options.LogFile)) { writer = new StreamWriter(options.LogFile); } // we generate the logs in two different ways depending if the generate xml flag was // provided. If it was, we will write the xml file to the tcp writer if present, else // we will write the normal console output using the LogWriter var logger = (writer == null || options.EnableXml) ? new LogWriter() : new LogWriter(writer); logger.MinimumLogLevel = MinimumLogLevel.Info; var testAssemblies = GetTestAssemblies(); runner = RegisterType.IsXUnit ? (Xamarin.iOS.UnitTests.TestRunner) new XUnitTestRunner(logger) : new NUnitTestRunner(logger); var categories = IgnoreFileParser.ParseTraitsContentFile(NSBundle.MainBundle.BundlePath, RegisterType.IsXUnit); // add category filters if they have been added runner.SkipCategories(categories); // if we have ignore files, ignore those tests var skippedTests = IgnoreFileParser.ParseContentFiles(NSBundle.MainBundle.BundlePath); if (skippedTests.Any()) { // ensure that we skip those tests that have been passed via the ignore files runner.SkipTests(skippedTests); } ThreadPool.QueueUserWorkItem((v) => { BeginInvokeOnMainThread(async() => { lblStatus.SetText(string.Format("{0} tests", runner.TotalTests)); await runner.Run(testAssemblies).ConfigureAwait(false); RenderResults(); cmdRun.SetEnabled(true); cmdRun.SetHidden(false); if (options.EnableXml) { runner.WriteResultsToFile(writer); logger.Info("Xml file was written to the http listener."); } else { string resultsFilePath = runner.WriteResultsToFile(); logger.Info($"Xml result can be found {resultsFilePath}"); } logger.Info($"Tests run: {runner.TotalTests} Passed: {runner.PassedTests} Inconclusive: {runner.InconclusiveTests} Failed: {runner.FailedTests} Ignored: {runner.FilteredTests}"); if (options.TerminateAfterExecution) { var writer_finished_task = http_writer?.FinishedTask; http_writer?.Close(); Task.Run(async() => { if (writer_finished_task != null) { await writer_finished_task; } TerminateWithSuccess(); }); } }); }); }
void RunTests() { var options = ApplicationOptions.Current; TextWriter writer = null; if (!string.IsNullOrEmpty(options.HostName) && string.IsNullOrEmpty(options.LogFile)) { writer = new HttpTextWriter() { HostName = options.HostName, Port = options.HostPort } } ; if (!string.IsNullOrEmpty(options.LogFile)) { writer = new StreamWriter(options.LogFile); } // we generate the logs in two different ways depending if the generate xml flag was // provided. If it was, we will write the xml file to the tcp writer if present, else // we will write the normal console output using the LogWriter var logger = (writer == null || options.EnableXml) ? new LogWriter() : new LogWriter(writer); logger.MinimumLogLevel = MinimumLogLevel.Info; var testAssemblies = GetTestAssemblies(); runner = RegisterType.IsXUnit ? (Xamarin.iOS.UnitTests.TestRunner) new XUnitTestRunner(logger) : new NUnitTestRunner(logger); var categories = RegisterType.IsXUnit ? new List <string> { "failing", "nonmonotests", "outerloop", "nonosxtests" } : new List <string> { "MobileNotWorking", "NotOnMac", "NotWorking", "ValueAdd", "CAS", "InetAccess", "NotWorkingLinqInterpreter", "BitcodeNotSupported", }; if (RegisterType.IsXUnit) { // special case when we are using the xunit runner, // there is a trait we are not interested in which is // the Benchmark one var xunitRunner = runner as XUnitTestRunner; xunitRunner.AddFilter(XUnitFilter.CreateTraitFilter("Benchmark", "true", true)); } // add category filters if they have been added runner.SkipCategories(categories); // if we have ignore files, ignore those tests var skippedTests = IgnoreFileParser.ParseContentFiles(NSBundle.MainBundle.BundlePath); if (skippedTests.Any()) { // ensure that we skip those tests that have been passed via the ignore files runner.SkipTests(skippedTests); } ThreadPool.QueueUserWorkItem((v) => { BeginInvokeOnMainThread(() => { lblStatus.SetText(string.Format("{0} tests", runner.TotalTests)); runner.Run((IList <TestAssemblyInfo>)testAssemblies); RenderResults(); cmdRun.SetEnabled(true); cmdRun.SetHidden(false); if (options.EnableXml) { runner.WriteResultsToFile(writer); logger.Info("Xml file was written to the http listener."); } else { string resultsFilePath = runner.WriteResultsToFile(); logger.Info($"Xml result can be found {resultsFilePath}"); } logger.Info($"Tests run: {runner.TotalTests} Passed: {runner.PassedTests} Inconclusive: {runner.InconclusiveTests} Failed: {runner.FailedTests} Ignored: {runner.FilteredTests}"); if (options.TerminateAfterExecution) { TerminateWithSuccess(); } }); }); } void RenderResults() { var options = ApplicationOptions.Current; if (runner.TotalTests == 0) { return; } lblSuccess.SetText(string.Format("P: {0}/{1} {2}%", runner.PassedTests, runner.TotalTests, 100 * runner.PassedTests / runner.TotalTests)); lblFailed.SetText(string.Format("F: {0}/{1} {2}%", runner.FailedTests, runner.TotalTests, 100 * runner.FailedTests / runner.TotalTests)); lblIgnInc.SetText(string.Format("I: {0}/{1} {2}%", (runner.SkippedTests + runner.InconclusiveTests), runner.TotalTests, 100 * (runner.SkippedTests + runner.InconclusiveTests) / runner.TotalTests)); if (running == false && runner.PassedTests > 0) { if (runner.FailedTests == 0) { lblSuccess.SetTextColor(UIKit.UIColor.Green); lblStatus.SetTextColor(UIKit.UIColor.Green); lblStatus.SetText("Success"); } if (runner.FailedTests > 0) { lblFailed.SetTextColor(UIKit.UIColor.Red); lblStatus.SetTextColor(UIKit.UIColor.Red); lblStatus.SetText("Failed"); } } } partial void RunTests(NSObject obj) { RunTests(); } }
public bool OpenWriter(string message) { TouchOptions options = TouchOptions.Current; DateTime now = DateTime.Now; // let the application provide it's own TextWriter to ease automation with AutoStart property if (Writer == null) { if (options.ShowUseNetworkLogger) { var hostname = SelectHostName(options.HostName.Split(','), options.HostPort); if (hostname != null) { Console.WriteLine("[{0}] Sending '{1}' results to {2}:{3}", now, message, hostname, options.HostPort); try { WriterFinishedTask = null; switch (options.Transport) { case "HTTP": var w = new HttpTextWriter() { HostName = hostname, Port = options.HostPort, }; w.Open(); Writer = w; WriterFinishedTask = w.FinishedTask; break; default: Console.WriteLine("Unknown transport '{0}': switching to default (TCP)", options.Transport); goto case "TCP"; case "TCP": Writer = new TcpTextWriter(hostname, options.HostPort); break; } } catch (Exception ex) { #if __TVOS__ || __WATCHOS__ Console.WriteLine("Network error: Cannot connect to {0}:{1}: {2}. Continuing on console.", hostname, options.HostPort, ex); Writer = Console.Out; #else Console.WriteLine("Network error: Cannot connect to {0}:{1}: {2}.", hostname, options.HostPort, ex); UIAlertView alert = new UIAlertView("Network Error", String.Format("Cannot connect to {0}:{1}: {2}. Continue on console ?", hostname, options.HostPort, ex.Message), null, "Cancel", "Continue"); int button = -1; alert.Clicked += delegate(object sender, UIButtonEventArgs e) { button = (int)e.ButtonIndex; }; alert.Show(); while (button == -1) { NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.5)); } Console.WriteLine(button); Console.WriteLine("[Host unreachable: {0}]", button == 0 ? "Execution cancelled" : "Switching to console output"); if (button == 0) { return(false); } else { Writer = Console.Out; } #endif } } } else { Writer = Console.Out; } } Writer.WriteLine("[Runner executing:\t{0}]", message); Writer.WriteLine("[MonoTouch Version:\t{0}]", Constants.Version); Writer.WriteLine("[Assembly:\t{0}.dll ({1} bits)]", typeof(NSObject).Assembly.GetName().Name, IntPtr.Size * 8); Writer.WriteLine("[GC:\t{0}]", GC.MaxGeneration == 0 ? "Boehm": "sgen"); WriteDeviceInformation(Writer); Writer.WriteLine("[Device Locale:\t{0}]", NSLocale.CurrentLocale.Identifier); Writer.WriteLine("[Device Date/Time:\t{0}]", now); // to match earlier C.WL output Writer.WriteLine("[Bundle:\t{0}]", NSBundle.MainBundle.BundleIdentifier); // FIXME: add data about how the app was compiled (e.g. ARMvX, LLVM, GC and Linker options) PassedCount = 0; IgnoredCount = 0; FailedCount = 0; InconclusiveCount = 0; return(true); }
public bool OpenWriter (string message) { TouchOptions options = TouchOptions.Current; DateTime now = DateTime.Now; // let the application provide it's own TextWriter to ease automation with AutoStart property if (Writer == null) { if (options.ShowUseNetworkLogger) { var hostname = SelectHostName (options.HostName.Split (','), options.HostPort); if (hostname != null) { Console.WriteLine ("[{0}] Sending '{1}' results to {2}:{3}", now, message, hostname, options.HostPort); try { WriterFinishedTask = null; TextWriter defaultWriter = null; switch (options.Transport) { case "HTTP": var w = new HttpTextWriter () { HostName = hostname, Port = options.HostPort, }; w.Open (); defaultWriter = w; WriterFinishedTask = w.FinishedTask; break; default: Console.WriteLine ("Unknown transport '{0}': switching to default (TCP)", options.Transport); goto case "TCP"; case "TCP": defaultWriter = new TcpTextWriter (hostname, options.HostPort); break; } if (options.EnableXml) { Writer = new NUnitOutputTextWriter ( this, defaultWriter, new NUnitLite.Runner.NUnit2XmlOutputWriter (DateTime.UtcNow)); } else { Writer = defaultWriter; } } catch (Exception ex) { #if __TVOS__ || __WATCHOS__ Console.WriteLine ("Network error: Cannot connect to {0}:{1}: {2}. Continuing on console.", hostname, options.HostPort, ex); Writer = Console.Out; #else Console.WriteLine ("Network error: Cannot connect to {0}:{1}: {2}.", hostname, options.HostPort, ex); UIAlertView alert = new UIAlertView ("Network Error", String.Format ("Cannot connect to {0}:{1}: {2}. Continue on console ?", hostname, options.HostPort, ex.Message), null, "Cancel", "Continue"); int button = -1; alert.Clicked += delegate(object sender, UIButtonEventArgs e) { button = (int)e.ButtonIndex; }; alert.Show (); while (button == -1) NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow (0.5)); Console.WriteLine (button); Console.WriteLine ("[Host unreachable: {0}]", button == 0 ? "Execution cancelled" : "Switching to console output"); if (button == 0) return false; else Writer = Console.Out; #endif } } } else { Writer = Console.Out; } } Writer.WriteLine ("[Runner executing:\t{0}]", message); Writer.WriteLine ("[MonoTouch Version:\t{0}]", Constants.Version); Writer.WriteLine ("[Assembly:\t{0}.dll ({1} bits)]", typeof (NSObject).Assembly.GetName ().Name, IntPtr.Size * 8); Writer.WriteLine ("[GC:\t{0}]", GC.MaxGeneration == 0 ? "Boehm": "sgen"); WriteDeviceInformation (Writer); Writer.WriteLine ("[Device Locale:\t{0}]", NSLocale.CurrentLocale.Identifier); Writer.WriteLine ("[Device Date/Time:\t{0}]", now); // to match earlier C.WL output Writer.WriteLine ("[Bundle:\t{0}]", NSBundle.MainBundle.BundleIdentifier); // FIXME: add data about how the app was compiled (e.g. ARMvX, LLVM, GC and Linker options) PassedCount = 0; IgnoredCount = 0; FailedCount = 0; InconclusiveCount = 0; return true; }
void RunTests() { var options = ApplicationOptions.Current; TextWriter writer = null; if (!string.IsNullOrEmpty(options.HostName) && string.IsNullOrEmpty(options.LogFile)) { writer = new HttpTextWriter() { HostName = options.HostName, Port = options.HostPort } } ; if (!string.IsNullOrEmpty(options.LogFile)) { writer = new StreamWriter(options.LogFile); } // we generate the logs in two different ways depending if the generate xml flag was // provided. If it was, we will write the xml file to the tcp writer if present, else // we will write the normal console output using the LogWriter var logger = (writer == null || options.EnableXml) ? new LogWriter() : new LogWriter(writer); logger.MinimumLogLevel = MinimumLogLevel.Info; var testAssemblies = GetTestAssemblies(); if (RegisterType.IsXUnit) { runner = new XUnitTestRunner(logger); } else { runner = new NUnitTestRunner(logger); } ThreadPool.QueueUserWorkItem((v) => { BeginInvokeOnMainThread(() => { lblStatus.SetText(string.Format("{0} tests", runner.TotalTests)); runner.Run((IList <TestAssemblyInfo>)testAssemblies); RenderResults(); cmdRun.SetEnabled(true); cmdRun.SetHidden(false); if (options.EnableXml) { runner.WriteResultsToFile(writer); logger.Info("Xml file was written to the http listener."); } else { string resultsFilePath = runner.WriteResultsToFile(); logger.Info($"Xml result can be found {resultsFilePath}"); } logger.Info($"Tests run: {runner.TotalTests} Passed: {runner.PassedTests} Inconclusive: {runner.InconclusiveTests} Failed: {runner.FailedTests} Ignored: {runner.SkippedTests}"); if (options.TerminateAfterExecution) { TerminateWithSuccess(); } }); }); } void RenderResults() { var options = ApplicationOptions.Current; if (runner.TotalTests == 0) { return; } lblSuccess.SetText(string.Format("P: {0}/{1} {2}%", runner.PassedTests, runner.TotalTests, 100 * runner.PassedTests / runner.TotalTests)); lblFailed.SetText(string.Format("F: {0}/{1} {2}%", runner.FailedTests, runner.TotalTests, 100 * runner.FailedTests / runner.TotalTests)); lblIgnInc.SetText(string.Format("I: {0}/{1} {2}%", (runner.SkippedTests + runner.InconclusiveTests), runner.TotalTests, 100 * (runner.SkippedTests + runner.InconclusiveTests) / runner.TotalTests)); if (running == false && runner.PassedTests > 0) { if (runner.FailedTests == 0) { lblSuccess.SetTextColor(UIKit.UIColor.Green); lblStatus.SetTextColor(UIKit.UIColor.Green); lblStatus.SetText("Success"); } if (runner.FailedTests > 0) { lblFailed.SetTextColor(UIKit.UIColor.Red); lblStatus.SetTextColor(UIKit.UIColor.Red); lblStatus.SetText("Failed"); } } } partial void RunTests(NSObject obj) { RunTests(); } }