Imported Upstream version 5.10.0.105

Former-commit-id: 6e251d044a07c59c414f9b731c508b1c0b97caa7
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-02-13 19:02:56 +00:00
parent e8112b0628
commit 5e8fcc7e50
38 changed files with 95 additions and 64 deletions

View File

@@ -29,18 +29,9 @@ using System.Diagnostics;
using System.Threading;
using NUnit.Framework.Api;
using System.Collections.Generic;
using System.Runtime.Remoting.Messaging;
namespace NUnit.Framework.Internal
{
[Serializable]
class Container : ILogicalThreadAffinative {
public string testName;
public Container(string testName) {
this.testName = testName;
}
}
public class FinallyDelegate
{
// If our test spawns a thread that throws, we will bubble
@@ -58,31 +49,19 @@ namespace NUnit.Framework.Internal
// so we need a stack of finally delegate continuations
Stack<Tuple<TestExecutionContext, long, TestResult>> testStack;
Dictionary<string, TestResult> lookupTable;
private static readonly string CONTEXT_KEY = "TestResultName";
public FinallyDelegate () {
this.testStack = new Stack<Tuple<TestExecutionContext, long, TestResult>>();
this.lookupTable = new Dictionary<string, TestResult>();
}
public void Set (TestExecutionContext context, long startTicks, TestResult result) {
var frame = new Tuple<TestExecutionContext, long, TestResult>(context, startTicks, result);
/* keep name in LogicalCallContext, because this will be inherited by
* Threads spawned by the test case */
CallContext.SetData(CONTEXT_KEY, new Container(result.Test.FullName));
this.lookupTable.Add(result.Test.FullName, result);
this.testStack.Push(frame);
}
public void HandleUnhandledExc (Exception ex) {
Container c = (Container) CallContext.GetData(CONTEXT_KEY);
TestResult result = this.lookupTable [c.testName];
result.RecordException(ex);
result.ThreadCrashFail = true;
TestExecutionContext context = this.testStack.Peek().Item1;
context.CurrentResult.RecordException(ex);
context.CurrentResult.ThreadCrashFail = true;
}
public void Complete () {

View File

@@ -180,15 +180,6 @@ namespace NUnit.Framework.Internal.WorkItems
#endif
private void RunTest()
{
/* using a separate ExecutionContext for every test case,
* guarantees us to have a dedicated "namespace" for the
* LogicalCallContext per testcase */
ExecutionContext ec = ExecutionContext.Capture();
ExecutionContext.Run(ec, DispatchWork, null);
}
private void DispatchWork(object o)
{
_context.CurrentTest = this.Test;
_context.CurrentResult = this.Result;