public static string WriteResultsFile()

in src/extensions/testframework/JunitXmlTestReporter.cs [15:93]


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

            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("testsuites");

            writer.WriteStartElement("testsuite");
            writer.WriteAttributeString("name", "TestSuite");
            writer.WriteAttributeString("tests", testResults.Count.ToString());
            writer.WriteAttributeString("failures", testResults.Count(r => r.Outcome == TestOutcome.Failed).ToString());
            writer.WriteAttributeString("errors", "0");
            writer.WriteAttributeString("time", testResults.Sum(r => r.Duration.TotalSeconds).ToString());
            writer.WriteAttributeString("timestamp", endTime.ToString("yyyy-MM-ddTHH:mm:ss"));

            foreach (var testResult in testResults)
            {
                writer.WriteStartElement("testcase");
                writer.WriteAttributeString("name", testResult.TestCase.DisplayName);
                writer.WriteAttributeString("classname", testResult.TestCase.FullyQualifiedName);
                writer.WriteAttributeString("time", testResult.Duration.TotalSeconds.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;

                if (stdout != null)
                {
                    writer.WriteStartElement("system-out");
                    writer.WriteRaw(System.Security.SecurityElement
                        .Escape(stdout.Replace("\u001b", string.Empty))
                        .Replace("\r\n", "
\n"));
                    writer.WriteEndElement();
                }

                if (stderr != null)
                {
                    writer.WriteStartElement("system-err");
                    writer.WriteRaw(System.Security.SecurityElement
                        .Escape(stderr.Replace("\u001b", string.Empty))
                        .Replace("\r\n", "
\n"));
                    writer.WriteEndElement();
                }

                if (testResult.Outcome == TestOutcome.Failed)
                {
                    writer.WriteStartElement("failure");
                    writer.WriteAttributeString("message", testResult.ErrorMessage);
                    writer.WriteAttributeString("type", "Failure");
                    writer.WriteCData(testResult.ErrorStackTrace);
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
            }

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

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

            return resultsFile;
        }