/// <summary> /// INTERNAL METHOD, FOR TESTING PURPOSES ONLY. DO NOT CALL. /// </summary> protected void Run( IEnumerable <Xunit1TestCase> testCases, _IMessageSink messageSink) { var results = new Xunit1RunSummary(); var environment = $"{IntPtr.Size * 8}-bit .NET {Environment.Version}"; var testCasesList = testCases.ToList(); var testAssemblyStartingMessage = new _TestAssemblyStarting { AssemblyName = testAssemblyName, AssemblyPath = assemblyFileName, AssemblyUniqueID = TestAssemblyUniqueID, ConfigFilePath = configFileName, StartTime = DateTimeOffset.Now, TestEnvironment = environment, TestFrameworkDisplayName = TestFrameworkDisplayName, }; if (messageSink.OnMessage(testAssemblyStartingMessage)) { try { if (testCasesList.Count != 0) { results = RunTestCollection(testCasesList, messageSink); } } catch (Exception ex) { var errorMetadata = Xunit1ExceptionUtility.ConvertToErrorMetadata(ex); var errorMessage = new _ErrorMessage { ExceptionParentIndices = errorMetadata.ExceptionParentIndices, ExceptionTypes = errorMetadata.ExceptionTypes, Messages = errorMetadata.Messages, StackTraces = errorMetadata.StackTraces }; messageSink.OnMessage(errorMessage); } finally { var assemblyFinished = new _TestAssemblyFinished { AssemblyUniqueID = testAssemblyStartingMessage.AssemblyUniqueID, ExecutionTime = results.Time, TestsFailed = results.Failed, TestsRun = results.Total, TestsSkipped = results.Skipped }; messageSink.OnMessage(assemblyFinished); } } }
Xunit1RunSummary RunTestCollection( IList <Xunit1TestCase> testCases, _IMessageSink messageSink) { Guard.ArgumentValid(nameof(testCases), "testCases must contain at least one test case", testCases.Count > 0); var collectionStarting = new _TestCollectionStarting { AssemblyUniqueID = testCases[0].AssemblyUniqueID, TestCollectionClass = null, TestCollectionDisplayName = $"xUnit.net v1 Tests for {assemblyFileName}", TestCollectionUniqueID = testCases[0].TestCollectionUniqueID }; var results = new Xunit1RunSummary { Continue = messageSink.OnMessage(collectionStarting) }; try { if (results.Continue) { foreach (var testClassGroup in testCases.GroupBy(tc => tc.TestClass)) { var classResults = RunTestClass(testClassGroup.Key, testClassGroup.ToList(), messageSink); results.Aggregate(classResults); if (!classResults.Continue) { break; } } } } finally { var collectionFinished = new _TestCollectionFinished { AssemblyUniqueID = collectionStarting.AssemblyUniqueID, ExecutionTime = results.Time, TestCollectionUniqueID = collectionStarting.TestCollectionUniqueID, TestsFailed = results.Failed, TestsRun = results.Total, TestsSkipped = results.Skipped }; results.Continue = messageSink.OnMessage(collectionFinished) && results.Continue; } return(results); }
/// <summary> /// Initializes a new instance of the <see cref="TestClassCallbackHandler" /> class. /// </summary> /// <param name="testCases">The test cases that are being run.</param> /// <param name="messageSink">The message sink to call with the translated results.</param> public TestClassCallbackHandler( IList <Xunit1TestCase> testCases, _IMessageSink messageSink) : base(lastNodeName: "class") { Guard.ArgumentNotNull(nameof(testCases), testCases); Guard.ArgumentNotNull(nameof(messageSink), messageSink); this.messageSink = messageSink; this.testCases = testCases; handlers = new Dictionary <string, Predicate <XmlNode> > { { "class", OnClass }, { "start", OnStart }, { "test", OnTest } }; TestClassResults = new Xunit1RunSummary(); }