public IContextScope Run(IEnumerable <IOperationProvider> contextProviders) { var setupResults = new List <IOperationResult>(); var cleanupProviders = new Stack <IOperationProvider>(); // TODO: Repetition with TestRunner foreach (var contextProvider in contextProviders) { if (cleanupProviders.Contains(contextProvider)) { continue; } var setupResult = _operationRunner.Run(contextProvider); setupResults.Add(setupResult); if (setupResult.State == State.Failed) { break; } if (setupResult.State == State.Passed && contextProvider.CleanupProvider != null) { cleanupProviders.Push(contextProvider.CleanupProvider); } } return(new ContextScope(setupResults, _operationRunner, cleanupProviders.ToList())); }
protected ContextResult Run(IEnumerable <IOperationProvider> operationProviders) { var operationResults = new List <IOperationResult>(); var cleanupProviderStack = new Stack <IOperationProvider>(); foreach (var operationProvider in operationProviders) { Trace.Assert( !cleanupProviderStack.Contains(operationProvider) || operationProvider == cleanupProviderStack.Pop(), $"Cleanup ({operationProvider.Action}) is not in order to setup."); var operationResult = _operationRunner.Run(operationProvider); operationResults.Add(operationResult); if (operationResult.State == State.Failed && operationResult.Type != OperationType.Assertion) { break; } if (operationProvider.CleanupProvider != null) { cleanupProviderStack.Push(operationProvider.CleanupProvider); } } return(new ContextResult { OperationResults = operationResults, CleanupProviders = cleanupProviderStack }); }
public ITestResult Run(IIntent intent, ITestProvider provider) { if (provider.Ignored) { return(_resultFactory.CreateIgnoredTestResult(provider)); } _listener.OnTestStarted(intent); IOutputRecording outputRecording; var operationResults = new List <IOperationResult>(); var cleanupProviderStack = new Stack <IOperationProvider>(); var stopWatch = Stopwatch.StartNew(); using (outputRecording = _resultFactory.CreateOutputRecording()) { // TODO: Repetition with ContextRunner foreach (var operationProvider in provider.OperationProviders) { Trace.Assert( !cleanupProviderStack.Contains(operationProvider) || operationProvider == cleanupProviderStack.Pop(), string.Format("Cleanup ({0}) is not in order to setup.", operationProvider.Action)); var operationResult = _operationRunner.Run(operationProvider); operationResults.Add(operationResult); if (operationResult.State == State.Failed && operationResult.Type != OperationType.Assertion) { break; } if (operationProvider.CleanupProvider != null) { cleanupProviderStack.Push(operationProvider.CleanupProvider); } } Trace.Assert( !cleanupProviderStack.Any() || operationResults.Any(x => x.State == State.Failed), "Either cleanup stack must be empty, or any result must have failed."); operationResults.AddRange(cleanupProviderStack.Select(_operationRunner.Run)); } var result = _resultFactory.CreateTestResult(provider, stopWatch.Elapsed, outputRecording, operationResults); _listener.OnTestFinished(result); return(result); }
public void Dispose() { _cleanupResults.AddRange(_cleanupProviders.Select(x => _operationRunner.Run(x))); }