public async override void ViewDidLoad() { base.ViewDidLoad(); var options = ApplicationOptions.Current; TcpTextWriter writer = null; if (!string.IsNullOrEmpty(options.HostName)) { try { writer = new TcpTextWriter(options.HostName, options.HostPort); } catch (Exception ex) { Console.WriteLine("Network error: Cannot connect to {0}:{1}: {2}. Continuing on console.", options.HostName, options.HostPort, ex); writer = null; // will default to the console } } // 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(); var runner = RegisterType.IsXUnit ? (Xamarin.iOS.UnitTests.TestRunner) new XUnitTestRunner(logger) : new NUnitTestRunner(logger); var categories = await IgnoreFileParser.ParseTraitsContentFileAsync(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 = await IgnoreFileParser.ParseContentFilesAsync(NSBundle.MainBundle.BundlePath); if (skippedTests.Any()) { // ensure that we skip those tests that have been passed via the ignore files runner.SkipTests(skippedTests); } await runner.Run(testAssemblies).ConfigureAwait(false); Xamarin.iOS.UnitTests.TestRunner.Jargon jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV3; switch (options.XmlVersion) { default: case XmlVersion.NUnitV2: jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV2; break; case XmlVersion.NUnitV3: jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV3; break; } if (options.EnableXml) { runner.WriteResultsToFile(writer ?? Console.Out, jargon); logger.Info("Xml file was written to the tcp listener."); } else { string resultsFilePath = runner.WriteResultsToFile(jargon); 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) { BeginInvokeOnMainThread(TerminateWithSuccess); } }
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); Xamarin.iOS.UnitTests.TestRunner.Jargon jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV3; switch (options.XmlVersion) { default: case XmlVersion.NUnitV2: jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV2; break; case XmlVersion.NUnitV3: jargon = Xamarin.iOS.UnitTests.TestRunner.Jargon.NUnitV3; break; } if (options.EnableXml) { runner.WriteResultsToFile(writer, jargon); logger.Info("Xml file was written to the http listener."); } else { string resultsFilePath = runner.WriteResultsToFile(jargon); 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(); }); } }); }); }