From 4e115d1b74edeffdebe06a9f48957cf20604e403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Foidl?= Date: Thu, 11 Jun 2020 00:01:29 +0200 Subject: [PATCH] trx to junit keeps stdout per testcase (#72) * Added test * Fix * Tests for system-err / StdErr * Update e2e-tests used schema --- schemas/jenkins-junit.xsd | 2 +- .../trx2junit/JUnitTestResultXmlBuilder.cs | 6 +- .../trx2junit/Trx2JunitTestConverter.cs | 2 +- .../scripts/run-different-output-location.sh | 4 +- tests/scripts/run-globbing.sh | 2 +- tests/scripts/run-multiple-args.sh | 6 +- tests/scripts/run-no-globbing.sh | 2 +- tests/scripts/run-samples.sh | 6 +- tests/scripts/run-single-arg.sh | 2 +- .../Integration.cs | 73 ++++++++++++++++++- tests/trx2junit.Tests/ValidationHelper.cs | 4 +- .../data/trx/nunit-with-stderr.trx | 33 +++++++++ 12 files changed, 125 insertions(+), 17 deletions(-) create mode 100644 tests/trx2junit.Tests/data/trx/nunit-with-stderr.trx diff --git a/schemas/jenkins-junit.xsd b/schemas/jenkins-junit.xsd index 9ee9cea..e6f9646 100644 --- a/schemas/jenkins-junit.xsd +++ b/schemas/jenkins-junit.xsd @@ -45,7 +45,7 @@ - + diff --git a/source/trx2junit/Internal/trx2junit/JUnitTestResultXmlBuilder.cs b/source/trx2junit/Internal/trx2junit/JUnitTestResultXmlBuilder.cs index 15ce544..9149382 100644 --- a/source/trx2junit/Internal/trx2junit/JUnitTestResultXmlBuilder.cs +++ b/source/trx2junit/Internal/trx2junit/JUnitTestResultXmlBuilder.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text; using System.Xml.Linq; using trx2junit.Models; @@ -95,12 +95,16 @@ private void AddTestCase(XElement xTestSuite, JUnitTestCase testCase) if (testCase.SystemErr != null) { + xTestCase.Add(new XElement("system-err", testCase.SystemErr)); + _junitTestSuiteSystemErrStringBuilder ??= new StringBuilder(); _junitTestSuiteSystemErrStringBuilder.AppendLine(testCase.SystemErr); } if (testCase.SystemOut != null) { + xTestCase.Add(new XElement("system-out", testCase.SystemOut)); + _junitTestSuiteSystemOutStringBuilder ??= new StringBuilder(); _junitTestSuiteSystemOutStringBuilder.AppendLine(testCase.SystemOut); } diff --git a/source/trx2junit/Internal/trx2junit/Trx2JunitTestConverter.cs b/source/trx2junit/Internal/trx2junit/Trx2JunitTestConverter.cs index d171c1c..886c8b0 100644 --- a/source/trx2junit/Internal/trx2junit/Trx2JunitTestConverter.cs +++ b/source/trx2junit/Internal/trx2junit/Trx2JunitTestConverter.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; diff --git a/tests/scripts/run-different-output-location.sh b/tests/scripts/run-different-output-location.sh index 698427f..710293f 100644 --- a/tests/scripts/run-different-output-location.sh +++ b/tests/scripts/run-different-output-location.sh @@ -7,5 +7,5 @@ echo "" trx2junit --output ./tests/junit-out ./different-output-location/mstest.trx ./different-output-location/nunit.trx echo "" -./verify-xml.sh "schemas/junit.xsd" "tests/junit-out/mstest.xml" -./verify-xml.sh "schemas/junit.xsd" "tests/junit-out/nunit.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "tests/junit-out/mstest.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "tests/junit-out/nunit.xml" diff --git a/tests/scripts/run-globbing.sh b/tests/scripts/run-globbing.sh index 09130c0..a0b34e5 100644 --- a/tests/scripts/run-globbing.sh +++ b/tests/scripts/run-globbing.sh @@ -9,7 +9,7 @@ trx2junit ./globbing/*.trx echo "" for junit in ./globbing/*.xml; do - ./verify-xml.sh "schemas/junit.xsd" "$junit" + ./verify-xml.sh "schemas/jenkins-junit.xsd" "$junit" done nTrx=$(ls -l ./globbing/*.trx | wc -l) diff --git a/tests/scripts/run-multiple-args.sh b/tests/scripts/run-multiple-args.sh index 6161db4..7dddc77 100644 --- a/tests/scripts/run-multiple-args.sh +++ b/tests/scripts/run-multiple-args.sh @@ -7,6 +7,6 @@ echo "" trx2junit ./multiple-args/mstest.trx ./multiple-args/mstest-warning.trx ./multiple-args/nunit.trx echo "" -./verify-xml.sh "schemas/junit.xsd" "multiple-args/mstest.xml" -./verify-xml.sh "schemas/junit.xsd" "multiple-args/mstest-warning.xml" -./verify-xml.sh "schemas/junit.xsd" "multiple-args/nunit.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "multiple-args/mstest.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "multiple-args/mstest-warning.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "multiple-args/nunit.xml" diff --git a/tests/scripts/run-no-globbing.sh b/tests/scripts/run-no-globbing.sh index 6e71c58..ad8c961 100644 --- a/tests/scripts/run-no-globbing.sh +++ b/tests/scripts/run-no-globbing.sh @@ -11,7 +11,7 @@ set +f echo "" for junit in ./no-globbing/*.xml; do - ./verify-xml.sh "schemas/junit.xsd" "$junit" + ./verify-xml.sh "schemas/jenkins-junit.xsd" "$junit" done nTrx=$(ls -l ./no-globbing/*.trx | wc -l) diff --git a/tests/scripts/run-samples.sh b/tests/scripts/run-samples.sh index 760c5c3..323a802 100644 --- a/tests/scripts/run-samples.sh +++ b/tests/scripts/run-samples.sh @@ -20,6 +20,6 @@ trx2junit ./TestResults/mstest.trx trx2junit ./TestResults/xunit.trx echo "" -./verify-xml.sh "schemas/junit.xsd" "TestResults/nunit.xml" -./verify-xml.sh "schemas/junit.xsd" "TestResults/mstest.xml" -./verify-xml.sh "schemas/junit.xsd" "TestResults/xunit.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "TestResults/nunit.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "TestResults/mstest.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "TestResults/xunit.xml" diff --git a/tests/scripts/run-single-arg.sh b/tests/scripts/run-single-arg.sh index 7937982..fbd0fde 100644 --- a/tests/scripts/run-single-arg.sh +++ b/tests/scripts/run-single-arg.sh @@ -18,4 +18,4 @@ trx2junit nunit.trx echo "" cd - -./verify-xml.sh "schemas/junit.xsd" "single-arg/nunit.xml" +./verify-xml.sh "schemas/jenkins-junit.xsd" "single-arg/nunit.xml" diff --git a/tests/trx2junit.Tests/Internal/JUnitTestResultXmlBuilderTests/Integration.cs b/tests/trx2junit.Tests/Internal/JUnitTestResultXmlBuilderTests/Integration.cs index 5fbcb75..af564af 100644 --- a/tests/trx2junit.Tests/Internal/JUnitTestResultXmlBuilderTests/Integration.cs +++ b/tests/trx2junit.Tests/Internal/JUnitTestResultXmlBuilderTests/Integration.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using System.Xml.Linq; using NUnit.Framework; @@ -66,5 +66,76 @@ public void TrxUnitTestResult_with_stdout___system_out_set() Assert.IsNotNull(systemOut, nameof(systemOut)); Assert.AreEqual("message written to stdout", systemOut.Value); } + //--------------------------------------------------------------------- + [Test] + public void TrxUnitTestResult_with_stdout___system_out_set_by_testcase() + { + XElement trx = XElement.Load("./data/trx/nunit-with-stdout.trx"); + var parser = new TrxTestResultXmlParser(trx); + + parser.Parse(); + Models.TrxTest testData = parser.Result; + + var converter = new Trx2JunitTestConverter(testData); + converter.Convert(); + + Models.JUnitTest junitTest = converter.Result; + var sut = new JUnitTestResultXmlBuilder(junitTest); + sut.Build(); + + XElement testsuite = sut.Result.Elements("testsuite").First(); + XElement testcase = testsuite.Elements("testcase").First(); + XElement systemOut = testcase.Element("system-out"); + + Assert.IsNotNull(systemOut, nameof(systemOut)); + Assert.AreEqual("message written to stdout", systemOut.Value); + } + //--------------------------------------------------------------------- + [Test] + public void TrxUnitTestResult_with_stderr___system_err_set() + { + XElement trx = XElement.Load("./data/trx/nunit-with-stderr.trx"); + var parser = new TrxTestResultXmlParser(trx); + + parser.Parse(); + Models.TrxTest testData = parser.Result; + + var converter = new Trx2JunitTestConverter(testData); + converter.Convert(); + + Models.JUnitTest junitTest = converter.Result; + var sut = new JUnitTestResultXmlBuilder(junitTest); + sut.Build(); + + XElement testsuite = sut.Result.Elements("testsuite").First(); + XElement systemErr = testsuite.Element("system-err"); + + Assert.IsNotNull(systemErr, nameof(systemErr)); + Assert.AreEqual("message written to stderr", systemErr.Value); + } + //--------------------------------------------------------------------- + [Test] + public void TrxUnitTestResult_with_stderr___system_err_set_by_testcase() + { + XElement trx = XElement.Load("./data/trx/nunit-with-stderr.trx"); + var parser = new TrxTestResultXmlParser(trx); + + parser.Parse(); + Models.TrxTest testData = parser.Result; + + var converter = new Trx2JunitTestConverter(testData); + converter.Convert(); + + Models.JUnitTest junitTest = converter.Result; + var sut = new JUnitTestResultXmlBuilder(junitTest); + sut.Build(); + + XElement testsuite = sut.Result.Elements("testsuite").First(); + XElement testcase = testsuite.Elements("testcase").First(); + XElement systemErr = testcase.Element("system-err"); + + Assert.IsNotNull(systemErr, nameof(systemErr)); + Assert.AreEqual("message written to stderr", systemErr.Value); + } } } diff --git a/tests/trx2junit.Tests/ValidationHelper.cs b/tests/trx2junit.Tests/ValidationHelper.cs index bd2b099..5a1de44 100644 --- a/tests/trx2junit.Tests/ValidationHelper.cs +++ b/tests/trx2junit.Tests/ValidationHelper.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; @@ -8,7 +8,7 @@ namespace trx2junit.Tests { internal static class ValidationHelper { - private static readonly XmlSchemaSet s_schemaJunit = LoadSchema("./data/junit.xsd"); + private static readonly XmlSchemaSet s_schemaJunit = LoadSchema("./data/jenkins-junit.xsd"); private static readonly XmlSchemaSet s_schemaTrx = LoadSchema("./data/vstst.xsd", targetNamespace: "http://microsoft.com/schemas/VisualStudio/TeamTest/2010"); //--------------------------------------------------------------------- public static void IsXmlValidJunit(string fileName, bool validateJunit) diff --git a/tests/trx2junit.Tests/data/trx/nunit-with-stderr.trx b/tests/trx2junit.Tests/data/trx/nunit-with-stderr.trx new file mode 100644 index 0000000..e2f2a94 --- /dev/null +++ b/tests/trx2junit.Tests/data/trx/nunit-with-stderr.trx @@ -0,0 +1,33 @@ + + + + + + + + + + message written to stderr + + + + + + + + + + + + + + + + + + + + NUnit Adapter 3.10.0.21: Test execution startedRunning all tests in /root/repo/samples/NUnitSample/bin/Release/netcoreapp2.1/NUnitSample.dllNUnit3TestExecutor converted 3 of 3 NUnit test casesNUnit Adapter 3.10.0.21: Test execution complete + + +