/// <summary/> public MessageBus(IMessageSink messageSink, bool stopOnFail = false) { this.messageSink = messageSink; this.stopOnFail = stopOnFail; reporterThread = new XunitWorkerThread(ReporterWorker); }
/// <inheritdoc/> public override void Post(SendOrPostCallback d, object state) { // The call to Post() may be the state machine signaling that an exception is // about to be thrown, so we make sure the operation count gets incremented // before the Task.Run, and then decrement the count when the operation is done. OperationStarted(); try { if (innerContext == null) { XunitWorkerThread.QueueUserWorkItem(() => { try { d(state); } catch (Exception ex) { exception = ex; } finally { OperationCompleted(); } }); } else { innerContext.Post(_ => { try { d(state); } catch (Exception ex) { exception = ex; } finally { OperationCompleted(); } }, null); } } catch { } }
/// <inheritdoc/> public void Find(string typeName, bool includeSourceInformation, IMessageSink discoveryMessageSink, ITestFrameworkDiscoveryOptions discoveryOptions) { Guard.ArgumentNotNullOrEmpty("typeName", typeName); Guard.ArgumentNotNull("discoveryMessageSink", discoveryMessageSink); Guard.ArgumentNotNull("discoveryOptions", discoveryOptions); XunitWorkerThread.QueueUserWorkItem(() => { using (var messageBus = CreateMessageBus(discoveryMessageSink, discoveryOptions)) using (new PreserveWorkingFolder(AssemblyInfo)) { var typeInfo = AssemblyInfo.GetType(typeName); if (typeInfo != null && IsValidTestClass(typeInfo)) { var testClass = CreateTestClass(typeInfo); FindTestsForTypeAndWrapExceptions(testClass, includeSourceInformation, messageBus, discoveryOptions); } messageBus.QueueMessage(new DiscoveryCompleteMessage()); } }); }
/// <inheritdoc/> public void Find(bool includeSourceInformation, IMessageSink discoveryMessageSink, ITestFrameworkDiscoveryOptions discoveryOptions) { Guard.ArgumentNotNull("discoveryMessageSink", discoveryMessageSink); Guard.ArgumentNotNull("discoveryOptions", discoveryOptions); XunitWorkerThread.QueueUserWorkItem(() => { using (var messageBus = CreateMessageBus(discoveryMessageSink, discoveryOptions)) using (new PreserveWorkingFolder(AssemblyInfo)) { foreach (var type in AssemblyInfo.GetTypes(false).Where(IsValidTestClass)) { var testClass = CreateTestClass(type); if (!FindTestsForTypeAndWrapExceptions(testClass, includeSourceInformation, messageBus, discoveryOptions)) { break; } } messageBus.QueueMessage(new DiscoveryCompleteMessage()); } }); }
/// <summary/> public MessageBus(IMessageSink messageSink) { this.messageSink = messageSink; reporterThread = new XunitWorkerThread(ReporterWorker); }