Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Touch.Client] Add a client that uses MonoTouch.Dialog and NUnitLite from NuGet. #63

Merged
merged 4 commits into from
May 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions NUnitLite/TouchRunner/NUnitOutputTextWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
using System.IO;
using System.Text;

#if NUNITLITE_NUGET
using NUnitLite;
#else
using NUnitLite.Runner;
#endif
using MonoTouch.NUnit.UI;

namespace MonoTouch.NUnit {
Expand Down
10 changes: 9 additions & 1 deletion NUnitLite/TouchRunner/TestCaseElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@

using NUnit.Framework;
using NUnit.Framework.Internal;
#if NUNITLITE_NUGET
using NUnit.Framework.Interfaces;
#else
using NUnit.Framework.Api;
#endif

namespace MonoTouch.NUnit.UI {

Expand All @@ -43,12 +47,16 @@ public TestCaseElement (TestMethod testCase, TouchRunner runner)
return;

var suite = (testCase.Parent as TestSuite);
#if NUNITLITE_NUGET
Run ();
#else
var context = TestExecutionContext.CurrentContext;
context.TestObject = Reflect.Construct (testCase.Method.ReflectedType, null);

suite.GetOneTimeSetUpCommand ().Execute (context);
Run ();
suite.GetOneTimeTearDownCommand ().Execute (context);
#endif

Runner.CloseWriter ();
// display more details on (any) failure (but not when ignored)
Expand Down Expand Up @@ -85,7 +93,7 @@ public override void Update ()
int counter = Result.AssertCount;
Value = String.Format ("{0} {1} ms for {2} assertion{3}",
Result.IsInconclusive () ? "Inconclusive." : "Success!",
Result.Duration.TotalMilliseconds, counter,
Result.GetDuration ().TotalMilliseconds, counter,
counter == 1 ? String.Empty : "s");
DetailColor = DarkGreen;
} else if (Result.IsFailure ()) {
Expand Down
4 changes: 4 additions & 0 deletions NUnitLite/TouchRunner/TestElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@
using MonoTouch.Dialog;

using NUnit.Framework.Internal;
#if NUNITLITE_NUGET
using NUnit.Framework.Interfaces;
#else
using NUnit.Framework.Api;
#endif

namespace MonoTouch.NUnit.UI {

Expand Down
24 changes: 24 additions & 0 deletions NUnitLite/TouchRunner/TestRocks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,17 @@
// limitations under the License.
//

using System;
using System.IO;

using NUnit.Framework;
using NUnit.Framework.Internal;
#if NUNITLITE_NUGET
using NUnitLite;
using NUnit.Framework.Interfaces;
#else
using NUnit.Framework.Api;
#endif

namespace MonoTouch.NUnit {

Expand Down Expand Up @@ -58,5 +66,21 @@ static public string GetMessage (this TestResult result)
return m;
return m.Substring (m.IndexOf (" : ") + 3);
}

static public TimeSpan GetDuration (this TestResult result)
{
#if NUNITLITE_NUGET
return TimeSpan.FromSeconds (result.Duration);
#else
return result.Duration;
#endif
}

#if NUNITLITE_NUGET
static public void WriteResultFile (this NUnitLite.OutputWriter @this, ITestResult result, TextWriter writer)
{
@this.WriteResultFile (result, writer, null, null);
}
#endif
}
}
2 changes: 1 addition & 1 deletion NUnitLite/TouchRunner/TestSuiteElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public override void Update ()
StringBuilder sb = new StringBuilder ();
if (failure == 0) {
DetailColor = DarkGreen;
sb.Append ("Success! ").Append (Result.Duration.TotalMilliseconds).Append (" ms for ").Append (positive).Append (" test");
sb.Append ("Success! ").Append (Result.GetDuration ().TotalMilliseconds).Append (" ms for ").Append (positive).Append (" test");
if (positive > 1)
sb.Append ('s');
} else {
Expand Down
146 changes: 135 additions & 11 deletions NUnitLite/TouchRunner/TouchRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,24 @@
using NUnit.Framework.Api;
using NUnit.Framework.Internal;
using NUnit.Framework.Internal.Commands;
#if NUNITLITE_NUGET
using NUnitLite;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal.Execution;
#else
using NUnitLite.Runner;
using NUnit.Framework.Internal.WorkItems;
#endif

#if NUNITLITE_NUGET
using SettingsDictionary = System.Collections.Generic.IDictionary<string, object>;
#else
using SettingsDictionary = System.Collections.IDictionary;
#endif

namespace MonoTouch.NUnit.UI {
public abstract class BaseTouchRunner : ITestListener {
TestSuite suite = new TestSuite (String.Empty);
TestSuite suite = new TestSuite ("TestSuite");
ITestFilter filter = TestFilter.Empty;
bool connection_failure;

Expand Down Expand Up @@ -119,7 +132,7 @@ protected virtual void ExecuteOnMainThread (Action action)
public void LoadSync ()
{
foreach (Assembly assembly in assemblies)
Load (assembly, fixtures == null ? null : new Dictionary<string, IList<string>> () { { "LOAD", fixtures } });
Load (assembly);
assemblies.Clear ();
}

Expand Down Expand Up @@ -275,13 +288,21 @@ public bool OpenWriter (string message)
break;
}
if (options.EnableXml) {
NUnitLite.Runner.OutputWriter formatter;
OutputWriter formatter;
switch (options.XmlVersion) {
case XmlVersion.NUnitV3:
formatter = new NUnitLite.Runner.NUnit3XmlOutputWriter (DateTime.UtcNow);
#if NUNITLITE_NUGET
formatter = new NUnit3XmlOutputWriter ();
#else
formatter = new NUnit3XmlOutputWriter (DateTime.UtcNow);
#endif
break;
default:
formatter = new NUnitLite.Runner.NUnit2XmlOutputWriter (DateTime.UtcNow);
#if NUNITLITE_NUGET
formatter = new NUnit2XmlOutputWriter ();
#else
formatter = new NUnit2XmlOutputWriter (DateTime.UtcNow);
#endif
break;
}
Writer = new NUnitOutputTextWriter (
Expand Down Expand Up @@ -388,7 +409,7 @@ public virtual void TestFinished (ITestResult r)

string name = result.Test.Name;
if (!String.IsNullOrEmpty (name))
Writer.WriteLine ("{0} : {1} ms", name, result.Duration.TotalMilliseconds);
Writer.WriteLine ("{0} : {1} ms", name, result.GetDuration ().TotalMilliseconds);
} else {
if (result.IsSuccess ()) {
Writer.Write ("\t[PASS] ");
Expand All @@ -405,7 +426,11 @@ public virtual void TestFinished (ITestResult r)
} else {
Writer.Write ("\t[INFO] ");
}
#if NUNITLITE_NUGET
Writer.Write (result.Test.FullName);
#else
Writer.Write (result.Test.FixtureType.Name);
#endif
Writer.Write (".");
Writer.Write (result.Test.Name);

Expand All @@ -424,18 +449,55 @@ public virtual void TestFinished (ITestResult r)
}
}

Dictionary<string, object> default_settings = new Dictionary<string, object> () {
#if NUNITLITE_NUGET
{ "RunOnMainThread", true },
#endif
};

SettingsDictionary CreateSettings (SettingsDictionary settings)
{
if (fixtures == null && (settings == null || settings.Count == 0))
return default_settings;

var dict = new Dictionary<string, object> (default_settings);

if (settings != null) {
foreach (var key in settings.Keys)
dict [key?.ToString ()] = settings [key];
}

if (fixtures != null)
dict ["LOAD"] = fixtures;

return dict;
}

#if NUNITLITE_NUGET
NUnitTestAssemblyRunner runner = new NUnitTestAssemblyRunner (new DefaultTestAssemblyBuilder ());

public bool Load (string assemblyName, IDictionary<string, object> settings = null)
{
return AddSuite ((TestSuite) runner.Load (assemblyName, CreateSettings (settings)));
}

public bool Load (Assembly assembly, IDictionary<string, object> settings = null)
{
return AddSuite ((TestSuite) runner.Load (assembly, CreateSettings (settings)));
}
#else
NUnitLiteTestAssemblyBuilder builder = new NUnitLiteTestAssemblyBuilder ();
Dictionary<string, object> empty = new Dictionary<string, object> ();

public bool Load (string assemblyName, IDictionary settings)
public bool Load (string assemblyName, SettingsDictionary settings = null)
{
return AddSuite (builder.Build (assemblyName, settings ?? empty));
return AddSuite (builder.Build (assemblyName, CreateSettings (settings)));
}

public bool Load (Assembly assembly, IDictionary settings)
public bool Load (Assembly assembly, SettingsDictionary settings = null)
{
return AddSuite (builder.Build (assembly, settings ?? empty));
return AddSuite (builder.Build (assembly, CreateSettings (settings)));
}
#endif

bool AddSuite (TestSuite ts)
{
Expand All @@ -453,12 +515,34 @@ public TestResult Run (Test test)
InconclusiveCount = 0;

Result = null;

#if NUNITLITE_NUGET
runner.Run (this, new MatchTestFilter { MatchTest = test });

// The TestResult we get back from the runner is for the top-most test suite,
// which isn't necessarily the test that we ran. So look for the TestResult
// for the test we ran.
ITestResult find_result (ITestResult tr)
{
if (tr.Test == test)
return tr;
foreach (var child in tr.Children) {
var r = find_result (child);
if (r != null)
return r;
}
return null;
}

Result = (TestResult) (find_result (runner.Result) ?? runner.Result);
#else
TestExecutionContext current = TestExecutionContext.CurrentContext;
current.WorkDirectory = Environment.CurrentDirectory;
current.Listener = this;
WorkItem wi = test.CreateWorkItem (filter, new FinallyDelegate ());
wi.Execute (current);
Result = wi.Result;
#endif
return Result;
}

Expand All @@ -471,6 +555,13 @@ public ITest LoadedTest {
public void TestOutput (TestOutput testOutput)
{
}

#if NUNITLITE_NUGET
public void SendMessage (TestMessage message)
{
Writer.WriteLine (message.ToString ());
}
#endif
}

#if __WATCHOS__
Expand Down Expand Up @@ -694,4 +785,37 @@ protected override void ExecuteOnMainThread (Action action)
}
}
#endif

// A filter that matches a specific test
class MatchTestFilter : TestFilter {
public ITest MatchTest;

#if NUNITLITE_NUGET
public override TNode AddToXml (TNode parentNode, bool recursive)
{
throw new NotImplementedException ();
}
#endif

public override bool Match (ITest test)
{
return IsMatch (test, MatchTest);
}

static bool IsMatch (ITest test, ITest match)
{
if (test == match)
return true;

if (match.HasChildren) {
foreach (var child in match.Tests) {
if (IsMatch (test, child))
return true;
}
}

return false;

}
}
}
Loading