You've already forked linux-packaging-mono
Imported Upstream version 5.10.0.47
Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
This commit is contained in:
parent
88ff76fe28
commit
e46a49ecf1
@@ -29,9 +29,18 @@ 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
|
||||
@@ -49,19 +58,31 @@ 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) {
|
||||
TestExecutionContext context = this.testStack.Peek().Item1;
|
||||
context.CurrentResult.RecordException(ex);
|
||||
context.CurrentResult.ThreadCrashFail = true;
|
||||
Container c = (Container) CallContext.GetData(CONTEXT_KEY);
|
||||
TestResult result = this.lookupTable [c.testName];
|
||||
result.RecordException(ex);
|
||||
result.ThreadCrashFail = true;
|
||||
}
|
||||
|
||||
public void Complete () {
|
||||
|
@@ -180,6 +180,15 @@ 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;
|
||||
|
Reference in New Issue
Block a user