diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Microsoft.DotNet.XHarness.iOS.Shared.Tests.csproj b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Microsoft.DotNet.XHarness.iOS.Shared.Tests.csproj index 50aab4f24b53..364f4b1d55ad 100644 --- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Microsoft.DotNet.XHarness.iOS.Shared.Tests.csproj +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Microsoft.DotNet.XHarness.iOS.Shared.Tests.csproj @@ -18,6 +18,7 @@ + @@ -52,6 +53,7 @@ PreserveNewest + diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Samples/TestCaseFailures.xml b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Samples/TestCaseFailures.xml new file mode 100644 index 000000000000..5a2d4e5193b9 --- /dev/null +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/Samples/TestCaseFailures.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + message + stacktrace + + + + + + + message + stacktrace + + + + + + + + + + + + diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/XmlResultParserTests.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/XmlResultParserTests.cs index f0f6d5eb5073..876061161a4e 100644 --- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/XmlResultParserTests.cs +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared.Tests/XmlResultParserTests.cs @@ -361,9 +361,31 @@ public void NUnitV2GenerateTestReport () message
  • -ErrorTest2: SingleLineErrorMessage
  • -
  • NUnit.Tests.Assemblies.MockTestFixture.FailingTest: Intentional failure
  • +
  • +NUnit.Tests.Assemblies.MockTestFixture.TestWithException: System.ApplicationException : Intentional Exception
  • + + +"; + Assert.AreEqual (expectedOutput, writer.ToString (), "Output"); + } + + + [Test] + public void NUnitV2GenerateTestReportWithTestCaseFailures () + { + using var writer = new StringWriter (); + using var stream = GetType ().Assembly.GetManifestResourceStream ("Microsoft.DotNet.XHarness.iOS.Shared.Tests.Samples.TestCaseFailures.xml"); + using var reader = new StreamReader (stream); + resultParser.GenerateTestReport (writer, reader, XmlResultJargon.NUnitV2); + Console.WriteLine (writer.ToString ()); + var expectedOutput = +@"
    +
      +
    • +Xamarin.MTouch.FastDev_LinkAll(iOS): message
    • +
    • +Xamarin.MTouch.RebuildWhenReferenceSymbolsInCode: message
    "; diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/XmlResultParser.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/XmlResultParser.cs index 0e2f448484ba..8e787e676242 100644 --- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/XmlResultParser.cs +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/XmlResultParser.cs @@ -518,7 +518,14 @@ static void GenerateNUnitV2TestReport (TextWriter writer, XmlReader reader) void write_failure () { var name = reader ["name"]; - var message = reader.ReadToDescendant ("message") ? reader.ReadElementContentAsString () : null; + string? message = null; + var depth = reader.Depth; + if (reader.ReadToDescendant ("message")) { + message = reader.ReadElementContentAsString (); + // ReadToParent + while (depth > reader.Depth && reader.Read ()) { + } + } var message_block = message?.IndexOf ('\n') >= 0; writer.WriteLine ("
  • "); writer.Write (name.AsHtml ()); @@ -544,16 +551,18 @@ void write_failure () if (result == "Error") write_failure (); - if (!reader.ReadToDescendant ("test-case")) - continue; + var depth = reader.Depth; - do { - result = reader ["result"]; - if (result != "Error" && result != "Failure") - continue; + while (reader.Read ()) { + if (reader.NodeType != XmlNodeType.Element || reader.Name != "test-case") + continue; - write_failure (); - } while (reader.ReadToNextSibling ("test-case")); + result = reader ["result"]; + if (result == "Error" || result == "Failure") + write_failure (); + if (reader.Depth < depth) + break; + } } writer.WriteLine ("");