xamarin-macios/tests/templates/WatchExtension/InterfaceController.cs

180 строки
4.8 KiB
C#

using System;
using System.Collections;
using System.Linq;
using System.Threading;
using WatchKit;
using Foundation;
using NUnit.Framework.Internal.Filters;
using MonoTouch.NUnit.UI;
public static partial class TestLoader
{
static partial void AddTestAssembliesImpl (BaseTouchRunner runner);
public static void AddTestAssemblies (BaseTouchRunner runner)
{
AddTestAssembliesImpl (runner);
}
}
namespace monotouchtestWatchKitExtension
{
[Register ("InterfaceController")]
public partial class InterfaceController : WKInterfaceController
{
WatchOSRunner runner;
bool running;
[Action ("runTests:")]
partial void RunTests (NSObject obj);
[Outlet ("lblStatus")]
WatchKit.WKInterfaceLabel lblStatus { get; set; }
[Outlet ("lblSuccess")]
WatchKit.WKInterfaceLabel lblSuccess { get; set; }
[Outlet ("lblFailed")]
WatchKit.WKInterfaceLabel lblFailed { get; set; }
[Outlet ("lblIgnInc")]
WatchKit.WKInterfaceLabel lblIgnInc { get; set; }
[Outlet ("cmdRun")]
WatchKit.WKInterfaceButton cmdRun { get; set; }
static InterfaceController ()
{
ObjCRuntime.Runtime.MarshalManagedException += (object sender, ObjCRuntime.MarshalManagedExceptionEventArgs args) =>
{
Console.WriteLine ("Managed exception: {0}", args.Exception);
};
ObjCRuntime.Runtime.MarshalObjectiveCException += (object sender, ObjCRuntime.MarshalObjectiveCExceptionEventArgs args) =>
{
Console.WriteLine ("Objective-C exception: {0}", args.Exception);
};
}
public InterfaceController (IntPtr handle) : base (handle)
{
}
public override void Awake (NSObject context)
{
base.Awake (context);
BeginInvokeOnMainThread (LoadTests);
}
void LoadTests ()
{
runner = new WatchOSRunner ();
var categoryFilter = new NotFilter (new CategoryExpression ("MobileNotWorking,NotOnMac,NotWorking,ValueAdd,CAS,InetAccess,NotWorkingInterpreter,RequiresBSDSockets").Filter);
if (!string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("NUNIT_FILTER_START"))) {
var firstChar = Environment.GetEnvironmentVariable ("NUNIT_FILTER_START") [0];
var lastChar = Environment.GetEnvironmentVariable ("NUNIT_FILTER_END") [0];
var nameFilter = new NameStartsWithFilter () { FirstChar = firstChar, LastChar = lastChar };
runner.Filter = new AndFilter (categoryFilter, nameFilter);
} else {
runner.Filter = categoryFilter;
}
runner.Add (GetType ().Assembly);
TestLoader.AddTestAssemblies (runner);
ThreadPool.QueueUserWorkItem ((v) =>
{
runner.LoadSync ();
BeginInvokeOnMainThread (() =>
{
lblStatus.SetText (string.Format ("{0} tests", runner.TestCount));
RenderResults ();
cmdRun.SetEnabled (true);
cmdRun.SetHidden (false);
runner.AutoRun ();
});
});
}
void RunTests ()
{
if (running) {
Console.WriteLine ("Already running");
return;
}
running = true;
cmdRun.SetEnabled (false);
lblStatus.SetText ("Running");
BeginInvokeOnMainThread (() => {
runner.Run ();
cmdRun.SetEnabled (true);
lblStatus.SetText ("Done");
running = false;
RenderResults ();
});
}
void RenderResults ()
{
if (runner.TestCount == 0)
return;
lblSuccess.SetText (string.Format ("P: {0}/{1} {2}%", runner.PassedCount, runner.TestCount, 100 * runner.PassedCount / runner.TestCount));
lblFailed.SetText (string.Format ("F: {0}/{1} {2}%", runner.FailedCount, runner.TestCount, 100 * runner.FailedCount / runner.TestCount));
lblIgnInc.SetText (string.Format ("I: {0}/{1} {2}%", (runner.IgnoredCount + runner.InconclusiveCount), runner.TestCount, 100 * (runner.IgnoredCount + runner.InconclusiveCount) / runner.TestCount));
if (running == false && runner.PassedCount > 0) {
if (runner.FailedCount == 0) {
lblSuccess.SetTextColor (UIKit.UIColor.Green);
lblStatus.SetTextColor (UIKit.UIColor.Green);
lblStatus.SetText ("Success");
}
if (runner.FailedCount > 0) {
lblFailed.SetTextColor (UIKit.UIColor.Red);
lblStatus.SetTextColor (UIKit.UIColor.Red);
lblStatus.SetText ("Failed");
}
}
}
partial void RunTests (NSObject obj)
{
RunTests ();
}
}
}
class NameStartsWithFilter : NUnit.Framework.Internal.TestFilter
{
public char FirstChar;
public char LastChar;
public override bool Match (NUnit.Framework.Api.ITest test)
{
if (test is NUnit.Framework.Internal.TestAssembly)
return true;
var method = test as NUnit.Framework.Internal.TestMethod;
if (method != null)
return Match (method.Parent);
var name = !string.IsNullOrEmpty (test.Name) ? test.Name : test.FullName;
bool rv;
if (string.IsNullOrEmpty (name)) {
rv = true;
} else {
var z = Char.ToUpperInvariant (name [0]);
rv = z >= Char.ToUpperInvariant (FirstChar) && z <= Char.ToUpperInvariant (LastChar);
}
return rv;
}
public override bool Pass (NUnit.Framework.Api.ITest test)
{
return Match (test);
}
}