+ for (int j = 0; j < threads.Count; ++j)
+ threads [j].Join ();
+
+ TimeSpan test_time = DateTime.UtcNow - test_start_time;
+
+ int npassed = passed.Count;
+ int nfailed = failed.Count;
+ int ntimedout = timedout.Count;
+
+ XmlWriterSettings xmlWriterSettings = new XmlWriterSettings ();
+ xmlWriterSettings.NewLineOnAttributes = true;
+ xmlWriterSettings.Indent = true;
+ using (XmlWriter writer = XmlWriter.Create (String.Format ("TestResult-{0}.xml", testsuiteName), xmlWriterSettings)) {
+ // <?xml version="1.0" encoding="utf-8" standalone="no"?>
+ writer.WriteStartDocument ();
+ // <!--This file represents the results of running a test suite-->
+ writer.WriteComment ("This file represents the results of running a test suite");
+ // <test-results name="/home/charlie/Dev/NUnit/nunit-2.5/work/src/bin/Debug/tests/mock-assembly.dll" total="21" errors="1" failures="1" not-run="7" inconclusive="1" ignored="4" skipped="0" invalid="3" date="2010-10-18" time="13:23:35">
+ writer.WriteStartElement ("test-results");
+ writer.WriteAttributeString ("name", String.Format ("{0}-tests.dummy", testsuiteName));
+ writer.WriteAttributeString ("total", (npassed + nfailed + ntimedout).ToString());
+ writer.WriteAttributeString ("failures", (nfailed + ntimedout).ToString());
+ writer.WriteAttributeString ("not-run", "0");
+ writer.WriteAttributeString ("date", DateTime.Now.ToString ("yyyy-MM-dd"));
+ writer.WriteAttributeString ("time", DateTime.Now.ToString ("HH:mm:ss"));
+ // <environment nunit-version="2.4.8.0" clr-version="4.0.30319.17020" os-version="Unix 3.13.0.45" platform="Unix" cwd="/home/directhex/Projects/mono/mcs/class/corlib" machine-name="marceline" user="directhex" user-domain="marceline" />
+ writer.WriteStartElement ("environment");
+ writer.WriteAttributeString ("nunit-version", "2.4.8.0" );
+ writer.WriteAttributeString ("clr-version", Environment.Version.ToString() );
+ writer.WriteAttributeString ("os-version", Environment.OSVersion.ToString() );
+ writer.WriteAttributeString ("platform", Environment.OSVersion.Platform.ToString() );
+ writer.WriteAttributeString ("cwd", Environment.CurrentDirectory );
+ writer.WriteAttributeString ("machine-name", Environment.MachineName );
+ writer.WriteAttributeString ("user", Environment.UserName );
+ writer.WriteAttributeString ("user-domain", Environment.UserDomainName );
+ writer.WriteEndElement ();
+ // <culture-info current-culture="en-GB" current-uiculture="en-GB" />
+ writer.WriteStartElement ("culture-info");
+ writer.WriteAttributeString ("current-culture", CultureInfo.CurrentCulture.Name );
+ writer.WriteAttributeString ("current-uiculture", CultureInfo.CurrentUICulture.Name );
+ writer.WriteEndElement ();
+ // <test-suite name="corlib_test_net_4_5.dll" success="True" time="114.318" asserts="0">
+ writer.WriteStartElement ("test-suite");
+ writer.WriteAttributeString ("name", String.Format ("{0}-tests.dummy", testsuiteName));
+ writer.WriteAttributeString ("success", (nfailed + ntimedout == 0).ToString());
+ writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+ writer.WriteAttributeString ("asserts", (nfailed + ntimedout).ToString());
+ // <results>
+ writer.WriteStartElement ("results");
+ // <test-suite name="MonoTests" success="True" time="114.318" asserts="0">
+ writer.WriteStartElement ("test-suite");
+ writer.WriteAttributeString ("name","MonoTests");
+ writer.WriteAttributeString ("success", (nfailed + ntimedout == 0).ToString());
+ writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+ writer.WriteAttributeString ("asserts", (nfailed + ntimedout).ToString());
+ // <results>
+ writer.WriteStartElement ("results");
+ // <test-suite name="MonoTests" success="True" time="114.318" asserts="0">
+ writer.WriteStartElement ("test-suite");
+ writer.WriteAttributeString ("name", testsuiteName);
+ writer.WriteAttributeString ("success", (nfailed + ntimedout == 0).ToString());
+ writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+ writer.WriteAttributeString ("asserts", (nfailed + ntimedout).ToString());
+ // <results>
+ writer.WriteStartElement ("results");
+ // Dump all passing tests first
+ foreach (ProcessData pd in passed) {
+ // <test-case name="MonoTests.Microsoft.Win32.RegistryKeyTest.bug79051" executed="True" success="True" time="0.063" asserts="0" />
+ writer.WriteStartElement ("test-case");
+ writer.WriteAttributeString ("name", String.Format ("MonoTests.{0}.{1}", testsuiteName, pd.test));
+ writer.WriteAttributeString ("executed", "True");
+ writer.WriteAttributeString ("success", "True");
+ writer.WriteAttributeString ("time", "0");
+ writer.WriteAttributeString ("asserts", "0");
+ writer.WriteEndElement ();