public static string WriteResultsFile()

in src/extensions/testframework/TrxXmlTestReporter.cs [15:199]


        public static string WriteResultsFile(TestRun testRun, string? resultsFile = null)
        {
            resultsFile ??= "test-results.trx";
            
            var testCases = testRun.TestCases;
            var testResults = testRun.TestResults;
            var startTime = testRun.StartTime;
            var endTime = testRun.EndTime;

            var assemblyPath = FileHelpers.GetAssemblyFileInfo(typeof(YamlTestFrameworkConsoleHost)).DirectoryName;

            var testRunId = Guid.NewGuid().ToString();
            var testListId = "8c84fa94-04c1-424b-9868-57a2d4851a1d";
            var testType = "13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b";
            var userName = Environment.UserName;
            var machineName = Environment.MachineName;
            var userAtMachine = userName.Split('\\', '/').Last() + "@" + machineName;
            var testRunName = userAtMachine + " " + endTime.ToString("yyyy-MM-dd HH:mm:ss");

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "  ";
            settings.NewLineChars = "\n";
            settings.NewLineHandling = NewLineHandling.Replace;
            settings.OmitXmlDeclaration = false;

            var writer = XmlWriter.Create(resultsFile, settings);
            writer.WriteStartDocument();
            writer.WriteStartElement("", "TestRun", "http://microsoft.com/schemas/VisualStudio/TeamTest/2010");
            writer.WriteAttributeString("id", testRunId);
            writer.WriteAttributeString("name", testRunName);
            writer.WriteAttributeString("runUser", userName);

            writer.WriteStartElement("Times");
            writer.WriteAttributeString("creation", endTime.ToString("o"));
            writer.WriteAttributeString("queuing", endTime.ToString("o"));
            writer.WriteAttributeString("start", startTime.ToString("o"));
            writer.WriteAttributeString("finish", endTime.ToString("o"));
            writer.WriteEndElement();

            writer.WriteStartElement("Results");
            foreach (var testResult in testResults)
            {
                var executionId = testRun.GetExecutionId(testResult.TestCase).ToString();
                var stdout = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.StandardOutCategory)?.Text;
                var stderr = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.StandardErrorCategory)?.Text;
                var debugTrace = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.DebugTraceCategory)?.Text;
                var message = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.AdditionalInfoCategory)?.Text;

                writer.WriteStartElement("UnitTestResult");
                writer.WriteAttributeString("executionId", executionId);
                writer.WriteAttributeString("testId", testResult.TestCase.Id.ToString());
                writer.WriteAttributeString("testName", testResult.TestCase.FullyQualifiedName);
                writer.WriteAttributeString("computerName", machineName);
                writer.WriteAttributeString("duration", testResult.Duration.ToString());
                writer.WriteAttributeString("startTime", testResult.StartTime.DateTime.ToString("o"));
                writer.WriteAttributeString("endTime", testResult.EndTime.DateTime.ToString("o"));
                writer.WriteAttributeString("testType", testType);
                writer.WriteAttributeString("outcome", OutcomeToString(testResult.Outcome));
                writer.WriteAttributeString("testListId", testListId);
                writer.WriteAttributeString("relativeResultsDirectory", Guid.NewGuid().ToString());
                writer.WriteStartElement("Output");

                if (!string.IsNullOrEmpty(stdout))
                {
                    writer.WriteStartElement("StdOut");
                    writer.WriteRaw(System.Security.SecurityElement
                        .Escape(stdout.Replace("\u001b", string.Empty))
                        .Replace("\r\n", "
\n"));
                    writer.WriteEndElement();
                }

                if (!string.IsNullOrEmpty(stderr))
                {
                    writer.WriteStartElement("StdErr");
                    writer.WriteRaw(System.Security.SecurityElement
                        .Escape(stderr.Replace("\u001b", string.Empty))
                        .Replace("\r\n", "
\n"));
                    writer.WriteEndElement();
                }

                if (!string.IsNullOrEmpty(debugTrace))
                {
                    writer.WriteElementString("DebugTrace", debugTrace);
                }

                writer.WriteStartElement("ErrorInfo");
                writer.WriteElementString("Message", testResult.ErrorMessage);
                writer.WriteElementString("StackTrace", testResult.ErrorStackTrace);
                writer.WriteEndElement();
                writer.WriteStartElement("TextMessages");

                if (!string.IsNullOrEmpty(message))
                {
                    writer.WriteElementString("Message", message);
                }
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            writer.WriteEndElement();

            writer.WriteStartElement("TestDefinitions");
            foreach (var testCase in testCases)
            {
                var executionId = testRun.GetExecutionId(testCase).ToString();
                var qualifiedParts = testCase.FullyQualifiedName.Split('.');
                var className = string.Join(".", qualifiedParts.Take(qualifiedParts.Length - 1));
                var name = qualifiedParts.Last();
                writer.WriteStartElement("UnitTest");
                writer.WriteAttributeString("name", testCase.DisplayName);
                writer.WriteAttributeString("storage", assemblyPath);
                writer.WriteAttributeString("id", testCase.Id.ToString());
                writer.WriteStartElement("Execution");
                writer.WriteAttributeString("id", executionId);
                writer.WriteEndElement();
                writer.WriteStartElement("TestMethod");
                writer.WriteAttributeString("codeBase", assemblyPath);
                writer.WriteAttributeString("adapterTypeName", testCase.ExecutorUri.ToString());
                writer.WriteAttributeString("className", className);
                writer.WriteAttributeString("name", name);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            writer.WriteEndElement();

            writer.WriteStartElement("TestEntries");
            foreach (var testCase in testCases)
            {
                var executionId = testRun.GetExecutionId(testCase).ToString();
                writer.WriteStartElement("TestEntry");
                writer.WriteAttributeString("testId", testCase.Id.ToString());
                writer.WriteAttributeString("executionId", executionId);
                writer.WriteAttributeString("testListId", testListId);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();

            writer.WriteStartElement("TestLists");
            writer.WriteStartElement("TestList");
            writer.WriteAttributeString("name", "Results Not in a List");
            writer.WriteAttributeString("id", testListId);
            writer.WriteEndElement();
            writer.WriteStartElement("TestList");
            writer.WriteAttributeString("name", "All Loaded Results");
            writer.WriteAttributeString("id", "19431567-8539-422a-85d7-44ee4e166bda");
            writer.WriteEndElement();
            writer.WriteEndElement();

            writer.WriteStartElement("ResultSummary");
            writer.WriteAttributeString("outcome", "Completed");

            writer.WriteStartElement("Counters");
            writer.WriteAttributeString("total", testResults.Count.ToString());
            writer.WriteAttributeString("executed", testResults.Count(r => IsExecuted(r)).ToString());
            writer.WriteAttributeString("passed", testResults.Count(r => IsPassed(r)).ToString());
            writer.WriteAttributeString("failed", testResults.Count(r => IsFailed(r)).ToString());
            writer.WriteAttributeString("error", testResults.Count(r => IsError(r)).ToString());
            writer.WriteAttributeString("timeout", testResults.Count(r => IsTimeout(r)).ToString());
            writer.WriteAttributeString("aborted", testResults.Count(r => IsAborted(r)).ToString());
            writer.WriteAttributeString("inconclusive", testResults.Count(r => IsInConclusive(r)).ToString());
            writer.WriteAttributeString("passedButRunAborted", testResults.Count(r => IsPassedButRunaborted(r)).ToString());
            writer.WriteAttributeString("notRunnable", testResults.Count(r => IsNotRunnable(r)).ToString());
            writer.WriteAttributeString("notExecuted", testResults.Count(r => IsNotExecuted(r)).ToString());
            writer.WriteAttributeString("disconnected", testResults.Count(r => IsDisconnected(r)).ToString());
            writer.WriteAttributeString("warning", testResults.Count(r => IsWarning(r)).ToString());
            writer.WriteAttributeString("completed", "0");
            writer.WriteAttributeString("inProgress", "0");
            writer.WriteAttributeString("pending", "0");
            writer.WriteEndElement();

            writer.WriteStartElement("Output");
            writer.WriteElementString("StdOut", "");
            writer.WriteEndElement();

            writer.WriteEndElement();

            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Close();
            writer.Dispose();

            return resultsFile;
        }