public void Clear() { StandardOutputStringBuilder.Clear(); ErrorOutputStringBuilder.Clear(); CurrentContextStringBuilder.Clear(); CurrentTestModule = string.Empty; CurrentTestSuite = string.Empty; CurrentTestCase = string.Empty; testSuiteStack.Clear(); testSuiteStack.Push(string.Empty); }
public void StandardOutputReceiver(object sendingProcess, System.Diagnostics.DataReceivedEventArgs outLine) { if (!string.IsNullOrEmpty(outLine.Data)) { foreach (var line in outLine.Data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { StandardOutputStringBuilder.AppendLine(outLine.Data); CurrentContextStringBuilder.AppendLine(outLine.Data); if (EnableParsing) { var testLineInfo = ParseStandardOutputLine(line); if (testLineInfo != null) { switch (testLineInfo.TestType) { case "module": switch (testLineInfo.TestExecInfoType) { case TestExecInfoType.Entering: CurrentTestModule = testLineInfo.TestName; CurrentTestCaseFailed = false; CurrentContextStringBuilder.Clear(); OnTestModuleEntered?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Entering, DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); break; case TestExecInfoType.Leaving: CurrentTestSuite = string.Empty; CurrentTestCase = string.Empty; OnTestModuleLeft?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Leaving, DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); CurrentContextStringBuilder.Clear(); CurrentTestModule = string.Empty; break; case TestExecInfoType.Skipping: CurrentTestCaseFailed = false; OnTestModuleSkipped?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Skipping, TestInfo = "Module disabled", DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); break; } break; case "suite": switch (testLineInfo.TestExecInfoType) { case TestExecInfoType.Entering: testSuiteStack.Push(testLineInfo.TestName); CurrentTestSuite = testLineInfo.TestName; CurrentContextStringBuilder.Clear(); OnTestSuiteEntered?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Entering, DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); break; case TestExecInfoType.Leaving: OnTestSuiteLeft?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Leaving, DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); if (testSuiteStack.Count > 0) { testSuiteStack.Pop(); if (testSuiteStack.Count > 0) { CurrentTestSuite = testSuiteStack.Peek(); } else { //uh, can't peek over root CurrentTestSuite = string.Empty; } } else { //uh, can't pop over root CurrentTestSuite = string.Empty; } CurrentTestCase = string.Empty; CurrentTestCaseFailed = false; CurrentContextStringBuilder.Clear(); break; case TestExecInfoType.Skipping: OnTestSuiteSkipped?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = testLineInfo.TestName, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Skipping, TestInfo = "Suite disabled", DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); break; } break; case "case": switch (testLineInfo.TestExecInfoType) { case TestExecInfoType.Entering: //Hack TestCase and TestSuite for DataDriven testcases if (testLineInfo.DataDrivenTestCaseIndex >= 0) { CurrentTestCase = testSuiteStack.Peek(); var testSuites = testSuiteStack.ToList(); CurrentTestSuite = testSuites[testSuites.Count - 2]; } else { CurrentContextStringBuilder.Clear(); CurrentTestCaseFailed = false; CurrentTestCase = testLineInfo.TestName; } OnTestCaseEntered?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = TestExecInfoType.Entering }); break; case TestExecInfoType.Leaving: //Hack TestCase and TestSuite for DataDriven testcases if (testLineInfo.DataDrivenTestCaseIndex >= 0) { CurrentTestCase = testSuiteStack.Peek(); var testSuites = testSuiteStack.ToList(); CurrentTestSuite = testSuites[testSuites.Count - 2]; } else { CurrentTestCase = testLineInfo.TestName; } OnTestCaseLeft?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = CurrentTestCase, TestExecInfoType = CurrentTestCaseFailed ? TestExecInfoType.Error : TestExecInfoType.Leaving, TestInfo = CurrentContextStringBuilder.ToString(), DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); if (testLineInfo.DataDrivenTestCaseIndex < 0) { CurrentTestCase = string.Empty; CurrentContextStringBuilder.Clear(); CurrentTestCaseFailed = false; } break; case TestExecInfoType.Skipping: OnTestCaseSkipped?.Invoke(this, new TestModuleEventArgs() { TestModule = CurrentTestModule, TestSuite = CurrentTestSuite, TestCase = testLineInfo.TestName, TestExecInfoType = TestExecInfoType.Skipping, TestInfo = "Testcase was skipped", DataDrivenTestCaseIndex = testLineInfo.DataDrivenTestCaseIndex }); break; case TestExecInfoType.Error: CurrentTestCaseFailed = true; break; } break; default: //unknown testType break; } } } } } }