private static TestCaseSummary BuildTestCaseSummary() { var summary = new TestCaseSummary(); var fileSummary = new TestFileSummary("path1"){ TimeTaken = 1500}; fileSummary.AddTestCase(new TestCase { ModuleName = "module1", TestName = "test1", TestResults = new List<TestResult> { new TestResult { Passed = false, Message = "some failure" } } }); fileSummary.AddTestCase(new TestCase { ModuleName = "module1", TestName = "test2", TestResults = new List<TestResult> { new TestResult { Passed = true } } }); var fileSummary2 = new TestFileSummary("path>2") { TimeTaken = 2000 }; fileSummary2.AddTestCase(new TestCase { TestName = "test3", TestResults = new List<TestResult> { new TestResult { Passed = true } } }); fileSummary2.AddTestCase(new TestCase { TestName = "test<4", TestResults = new List<TestResult> { new TestResult { Passed = false, Message = "bad<failure" } } }); summary.Append(fileSummary); summary.Append(fileSummary2); return summary; }
public void FileFinished(string fileName, TestFileSummary testResultsSummary) { lock (sync) { nestedCallback.FileFinished(fileName, testResultsSummary); } }
/// <summary> /// Appends another test case summary into the current instnace. /// This will combines the tests, logs and errors collections. This is not thread safe. /// </summary> /// <param name="summary"></param> public void Append(TestFileSummary summary) { TestFileSummaries.Add(summary); AppendTests(summary.Tests); AppendLogs(summary.Logs); AppendErrors(summary.Errors); AppendCoverageData(summary.CoverageObject); TimeTaken += summary.TimeTaken; }
public override void FileFinished(string fileName, TestFileSummary testResultsSummary) { ClearCounter(); Console.WriteLine("File: {0}", fileName); var seconds = testResultsSummary.TimeTaken / 1000.0; Console.WriteLine(Indent("{0} total, {1} failed, took {2:n} seconds", 2), testResultsSummary.TotalCount, testResultsSummary.FailedCount, seconds); Console.WriteLine(); PrintRunningTestCount(); base.FileFinished(fileName, testResultsSummary); }
public virtual void FileFinished(string fileName, TestFileSummary testResultsSummary){}
public override void FileFinished(string fileName, TestFileSummary testResultsSummary) { var text = string.Format("{0} passed, {1} failed, {2} total (chutzpah).\n\n", testResultsSummary.PassedCount, testResultsSummary.FailedCount, testResultsSummary.TotalCount); testPane.OutputString(text); }
public StreamingTestFileContext(ReferencedFile referencedFile, TestContext testContext, bool coverageEnabled) { SeenTests = new HashSet<Tuple<string, string>>(); ReferencedFile = referencedFile; TestContext = testContext; TestFileSummary = new TestFileSummary(referencedFile.Path); if (coverageEnabled) { TestFileSummary.CoverageObject = new CoverageData(); } }
private void FireFileFinished(ITestMethodRunnerCallback callback, string testFilesString, IEnumerable<StreamingTestFileContext> testFileContexts, JsRunnerOutput jsRunnerOutput) { var jsFileDone = jsRunnerOutput as JsFileDone; var testFileSummary = new TestFileSummary(testFilesString); testFileSummary.TimeTaken = jsFileDone.TimeTaken; foreach (var context in testFileContexts) { context.TestFileSummary.TimeTaken = jsFileDone.TimeTaken; testFileSummary.AddTestCases(context.TestFileSummary.Tests); } callback.FileFinished(testFilesString, testFileSummary); }
private TestFileSummary ReadFromStream(StreamReader stream, TestContext testContext, ITestMethodRunnerCallback callback, bool debugEnabled) { var referencedFile = testContext.ReferencedJavaScriptFiles.SingleOrDefault(x => x.IsFileUnderTest); var testIndex = 0; var summary = new TestFileSummary(testContext.InputTestFile); string line; while ((line = stream.ReadLine()) != null) { if (debugEnabled) Console.WriteLine(line); var match = prefixRegex.Match(line); if (!match.Success) continue; var type = match.Groups["type"].Value; var json = match.Groups["json"].Value; // Only update last event timestamp if it is an important event. // Log and error could happen even though no test progress is made if (!type.Equals("Log") && !type.Equals("Error")) { lastTestEvent = DateTime.Now; } try { JsTestCase jsTestCase = null; switch (type) { case "FileStart": callback.FileStarted(testContext.InputTestFile); break; case "CoverageObject": var jsCov = jsonSerializer.Deserialize<JsCoverage>(json); summary.CoverageObject = coverageEngine.DeserializeCoverageObject(jsCov.Object, testContext); break; case "FileDone": var jsFileDone = jsonSerializer.Deserialize<JsFileDone>(json); summary.TimeTaken = jsFileDone.TimeTaken; callback.FileFinished(testContext.InputTestFile, summary); break; case "TestStart": jsTestCase = jsonSerializer.Deserialize<JsTestCase>(json); jsTestCase.TestCase.InputTestFile = testContext.InputTestFile; callback.TestStarted(jsTestCase.TestCase); break; case "TestDone": jsTestCase = jsonSerializer.Deserialize<JsTestCase>(json); jsTestCase.TestCase.InputTestFile = testContext.InputTestFile; AddLineNumber(referencedFile, testIndex, jsTestCase); testIndex++; callback.TestFinished(jsTestCase.TestCase); summary.AddTestCase(jsTestCase.TestCase); break; case "Log": var log = jsonSerializer.Deserialize<JsLog>(json); // This is an internal log message if (log.Log.Message.StartsWith(internalLogPrefix)) { ChutzpahTracer.TraceInformation("Phantom Log - {0}",log.Log.Message.Substring(internalLogPrefix.Length).Trim()); break; } log.Log.InputTestFile = testContext.InputTestFile; callback.FileLog(log.Log); summary.Logs.Add(log.Log); break; case "Error": var error = jsonSerializer.Deserialize<JsError>(json); error.Error.InputTestFile = testContext.InputTestFile; callback.FileError(error.Error); summary.Errors.Add(error.Error); break; } } catch (SerializationException e) { // Ignore malformed json and move on ChutzpahTracer.TraceError(e, "Recieved malformed json from Phantom in this line: '{0}'", line); } } return summary; }