126 строки
4.3 KiB
C#
126 строки
4.3 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Collections.Generic;
|
|
|
|
using UIKit;
|
|
using ObjCRuntime;
|
|
|
|
using Xamarin.iOS.UnitTests;
|
|
using Xamarin.iOS.UnitTests.NUnit;
|
|
using BCLTests.TestRunner.Core;
|
|
using Xamarin.iOS.UnitTests.XUnit;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using Foundation;
|
|
using NUnit.Framework.Internal.Filters;
|
|
|
|
namespace BCLTests {
|
|
public partial class ViewController : UIViewController {
|
|
|
|
internal static IEnumerable<TestAssemblyInfo> GetTestAssemblies ()
|
|
{
|
|
// var t = Path.GetFileName (typeof (ActivatorCas).Assembly.Location);
|
|
foreach (var name in RegisterType.TypesToRegister.Keys) {
|
|
var a = Assembly.Load (name);
|
|
if (a is null) {
|
|
Console.WriteLine ($"# WARNING: Unable to load assembly {name}.");
|
|
continue;
|
|
}
|
|
yield return new TestAssemblyInfo (a, name);
|
|
}
|
|
}
|
|
|
|
public ViewController ()
|
|
{
|
|
}
|
|
|
|
protected ViewController (IntPtr handle) : base (handle)
|
|
{
|
|
// Note: this .ctor should not contain any initialization logic.
|
|
}
|
|
|
|
#if __WATCH__
|
|
[DllImport ("libc")]
|
|
static extern void exit (int code);
|
|
protected virtual void TerminateWithSuccess ()
|
|
{
|
|
// For WatchOS we're terminating the extension, not the watchos app itself.
|
|
Console.WriteLine ("Exiting test run with success");
|
|
exit (0);
|
|
}
|
|
#else
|
|
protected virtual void TerminateWithSuccess ()
|
|
{
|
|
// For WatchOS we're terminating the extension, not the watchos app itself.
|
|
Console.WriteLine ("Exiting test run with success");
|
|
Selector s = new Selector ("terminateWithSuccess");
|
|
UIApplication.SharedApplication.PerformSelector (s, UIApplication.SharedApplication, 0);
|
|
}
|
|
#endif
|
|
|
|
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, options.UseTcpTunnel);
|
|
} 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 is 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);
|
|
|
|
}
|
|
|
|
public override void DidReceiveMemoryWarning ()
|
|
{
|
|
base.DidReceiveMemoryWarning ();
|
|
// Release any cached data, images, etc that aren't in use.
|
|
}
|
|
}
|
|
}
|