private static void AddSetting(TNode settingsNode, string name, object value)
        {
            TNode setting = new TNode("setting");

            setting.AddAttribute("name", name);

            if (value != null)
            {
                var dict = value as IDictionary;
                if (dict != null)
                {
                    AddDictionaryEntries(setting, dict);
                    AddBackwardsCompatibleDictionaryEntries(setting, dict);
                }
                else
                {
                    setting.AddAttribute("value", value.ToString());
                }
            }
            else
            {
                setting.AddAttribute("value", null);
            }

            settingsNode.ChildNodes.Add(setting);
        }
示例#2
0
        /// <summary>
        /// Called when a test has just started
        /// </summary>
        /// <param name="test">The test that is starting</param>
        public void TestStarted(ITest test)
        {
            string startElement = test is TestSuite
                ? "start-suite"
                : "start-test";

            var parent = GetParent(test);

            try
            {
                TNode thisNode = new TNode(startElement);
                thisNode.AddAttribute("id", test.Id);
                thisNode.AddAttribute("parentId", parent != null ? parent.Id : string.Empty);
                thisNode.AddAttribute("name", FormatAttributeValue(test.Name));
                thisNode.AddAttribute("fullname", FormatAttributeValue(test.FullName));
                thisNode.AddAttribute("type", test.TestType);

                if (test.StdIn != null)
                {
                    thisNode.AddElementWithCDATA("stdin", test.StdIn);
                }

                handler.RaiseCallbackEvent(thisNode.OuterXml);
            }
            catch (Exception ex)
            {
                log.Error("Exception processing " + test.FullName + Environment.NewLine + ex.ToString());
            }
        }
示例#3
0
        private static void AddSetting(TNode settingsNode, string name, object value)
        {
            TNode setting = new TNode("setting");

            setting.AddAttribute("name", name);
            setting.AddAttribute("value", value.ToString());

            settingsNode.ChildNodes.Add(setting);
        }
示例#4
0
        /// <summary>
        /// Convert the TestOutput object to an XML string
        /// </summary>
        public string ToXml()
        {
            TNode tnode = new TNode("test-output", Text, true);

            tnode.AddAttribute("stream", Stream);
            if (TestName != null)
                tnode.AddAttribute("testname", TestName);

            return tnode.OuterXml;
        }
示例#5
0
 private static void AddDictionaryEntries(TNode settingNode, IDictionary entries)
 {
     foreach (var key in entries.Keys)
     {
         var value     = entries[key];
         var entryNode = new TNode("item");
         entryNode.AddAttribute("key", key.ToString());
         entryNode.AddAttribute("value", value?.ToString() ?? "");
         settingNode.ChildNodes.Add(entryNode);
     }
 }
        /// <summary>
        /// Adds an XML node
        /// </summary>
        /// <param name="parentNode">Parent node</param>
        /// <param name="recursive">True if recursive</param>
        /// <returns>The added XML node</returns>
        public override TNode AddToXml(TNode parentNode, bool recursive)
        {
            TNode result = base.AddToXml(parentNode, recursive);

            result.AddAttribute("name", _propertyName);
            return(result);
        }
示例#7
0
        private TNode AddAssertionsElement(TNode targetNode)
        {
            var assertionsNode = targetNode.AddElement("assertions");

            foreach (var assertion in AssertionResults)
            {
                TNode assertionNode = assertionsNode.AddElement("assertion");
                assertionNode.AddAttribute("result", assertion.Status.ToString());
                if (assertion.Actual != null && assertion.Expected != null)
                {
                    assertionNode.AddElementWithCDATA("actual", assertion.Actual.ToString());
                    assertionNode.AddElementWithCDATA("expected", assertion.Expected.ToString());
                }
                if (assertion.Message != null)
                {
                    assertionNode.AddElementWithCDATA("message", assertion.Message);
                }
                if (assertion.StackTrace != null)
                {
                    assertionNode.AddElementWithCDATA("stack-trace", assertion.StackTrace);
                }
            }

            return(assertionsNode);
        }
        /// <summary>
        /// Returns an XmlNode representing the PropertyBag after
        /// adding it as a child of the supplied parent node.
        /// </summary>
        /// <param name="parentNode">The parent node.</param>
        /// <param name="recursive">Not used</param>
        /// <returns></returns>
        public TNode AddToXml(TNode parentNode, bool recursive)
        {
            TNode properties = parentNode.AddElement("properties");

            foreach (string key in Keys)
            {
                foreach (object value in this[key])
                {
                    TNode prop = properties.AddElement("property");

                    // TODO: Format as string
                    prop.AddAttribute("name", key.ToString());
                    prop.AddAttribute("value", value.ToString());
                }
            }

            return(properties);
        }
示例#9
0
文件: TestMethod.cs 项目: jnm2/nunit
        /// <summary>
        /// Returns a TNode representing the current result after
        /// adding it as a child of the supplied parent node.
        /// </summary>
        /// <param name="parentNode">The parent node.</param>
        /// <param name="recursive">If true, descendant results are included</param>
        /// <returns></returns>
        public override TNode AddToXml(TNode parentNode, bool recursive)
        {
            TNode thisNode = parentNode.AddElement(XmlElementName);

            PopulateTestNode(thisNode, recursive);

            thisNode.AddAttribute("seed", this.Seed.ToString());

            return(thisNode);
        }
示例#10
0
        private static void AddBackwardsCompatibleDictionaryEntries(TNode settingsNode, IDictionary entries)
        {
            var pairs = new List <string>(entries.Count);

            foreach (var key in entries.Keys)
            {
                pairs.Add($"[{key}, {entries[key]}]");
            }
            settingsNode.AddAttribute("value", string.Join(", ", pairs.ToArray()));
        }
示例#11
0
        /// <summary>
        /// Adds an XML node
        /// </summary>
        /// <param name="parentNode">Parent node</param>
        /// <param name="recursive">True if recursive</param>
        /// <returns>The added XML node</returns>
        public override TNode AddToXml(TNode parentNode, bool recursive)
        {
            TNode result = parentNode.AddElement(ElementName, ExpectedValue);

            if (IsRegex)
            {
                result.AddAttribute("re", "1");
            }
            return(result);
        }
示例#12
0
        /// <summary>
        /// Returns an XmlNode representing the current result after
        /// adding it as a child of the supplied parent node.
        /// </summary>
        /// <param name="parentNode">The parent node.</param>
        /// <param name="recursive">If true, descendant results are included</param>
        /// <returns></returns>
        public override TNode AddToXml(TNode parentNode, bool recursive)
        {
            TNode thisNode = parentNode.AddElement("test-suite");

            thisNode.AddAttribute("type", this.TestType);

            PopulateTestNode(thisNode, recursive);
            thisNode.AddAttribute("testcasecount", this.TestCaseCount.ToString());


            if (recursive)
            {
                foreach (Test test in this.Tests)
                {
                    test.AddToXml(thisNode, recursive);
                }
            }

            return(thisNode);
        }
示例#13
0
        /// <summary>
        /// Inserts environment element
        /// </summary>
        /// <param name="targetNode">Target node</param>
        /// <returns>The new node</returns>
#if NETSTANDARD1_6
        public static TNode InsertEnvironmentElement(TNode targetNode)
        {
            TNode env = new TNode("environment");

            targetNode.ChildNodes.Insert(0, env);

            var assemblyName = AssemblyHelper.GetAssemblyName(typeof(FrameworkController).GetTypeInfo().Assembly);

            env.AddAttribute("framework-version", assemblyName.Version.ToString());
            env.AddAttribute("cwd", Directory.GetCurrentDirectory());
            env.AddAttribute("culture", CultureInfo.CurrentCulture.ToString());
            env.AddAttribute("uiculture", CultureInfo.CurrentUICulture.ToString());
            env.AddAttribute("clr-version", RuntimeInformation.FrameworkDescription);
            env.AddAttribute("os-version", RuntimeInformation.OSDescription);
            env.AddAttribute("machine-name", Environment.MachineName);
            env.AddAttribute("os-architecture", RuntimeInformation.ProcessArchitecture.ToString());
            return(env);
        }
示例#14
0
文件: Test.cs 项目: wbratz/nunit
        protected void PopulateTestNode(TNode thisNode, bool recursive)
        {
            thisNode.AddAttribute("id", this.Id.ToString());
            thisNode.AddAttribute("name", this.Name);
            thisNode.AddAttribute("fullname", this.FullName);
            if (this.MethodName != null)
            {
                thisNode.AddAttribute("methodname", this.MethodName);
            }
            if (this.ClassName != null)
            {
                thisNode.AddAttribute("classname", this.ClassName);
            }
            thisNode.AddAttribute("runstate", this.RunState.ToString());

            if (Properties.Keys.Count > 0)
            {
                Properties.AddToXml(thisNode, recursive);
            }
        }
        private TNode MakeTestRunElement(ITestResult result)
        {
            TNode testRun = new TNode("test-run");

            testRun.AddAttribute("id", "2");
            testRun.AddAttribute("name", result.Name);
            testRun.AddAttribute("fullname", result.FullName);
            testRun.AddAttribute("testcasecount", result.Test.TestCaseCount.ToString());

            testRun.AddAttribute("result", result.ResultState.Status.ToString());
            if (result.ResultState.Label != string.Empty)
            {
                testRun.AddAttribute("label", result.ResultState.Label);
            }

            testRun.AddAttribute("start-time", result.StartTime.ToString("u"));
            testRun.AddAttribute("end-time", result.EndTime.ToString("u"));
            testRun.AddAttribute("duration", result.Duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            testRun.AddAttribute("total", (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
            testRun.AddAttribute("passed", result.PassCount.ToString());
            testRun.AddAttribute("failed", result.FailCount.ToString());
            testRun.AddAttribute("inconclusive", result.InconclusiveCount.ToString());
            testRun.AddAttribute("skipped", result.SkipCount.ToString());
            testRun.AddAttribute("asserts", result.AssertCount.ToString());

            testRun.AddAttribute("random-seed", Randomizer.InitialSeed.ToString());

            // NOTE: The console runner adds attributes for engine-version and clr-version
            // Neither of these is needed under nunitlite since there is no engine involved
            // and we are running under the same runtime as the tests.

            return(testRun);
        }
示例#16
0
        /// <summary>
        /// Inserts environment element
        /// </summary>
        /// <param name="targetNode">Target node</param>
        /// <returns>The new node</returns>
#if NETSTANDARD1_6
        public static TNode InsertEnvironmentElement(TNode targetNode)
        {
            TNode env = new TNode("environment");
            targetNode.ChildNodes.Insert(0, env);

            var assemblyName = AssemblyHelper.GetAssemblyName(typeof(FrameworkController).GetTypeInfo().Assembly);
            env.AddAttribute("framework-version", assemblyName.Version.ToString());
            env.AddAttribute("clr-version", RuntimeInformation.FrameworkDescription);
            env.AddAttribute("os-version", RuntimeInformation.OSDescription);
            env.AddAttribute("cwd", Directory.GetCurrentDirectory());
            env.AddAttribute("machine-name", Environment.MachineName);
            env.AddAttribute("culture", CultureInfo.CurrentCulture.ToString());
            env.AddAttribute("uiculture", CultureInfo.CurrentUICulture.ToString());
            env.AddAttribute("os-architecture", RuntimeInformation.ProcessArchitecture.ToString());

            return env;
        }
示例#17
0
        /// <summary>
        /// Inserts environment element
        /// </summary>
        /// <param name="targetNode">Target node</param>
        /// <returns>The new node</returns>
        public static TNode InsertEnvironmentElement(TNode targetNode)
        {
            TNode env = new TNode("environment");

            targetNode.ChildNodes.Insert(0, env);

            env.AddAttribute("framework-version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
            env.AddAttribute("clr-version", Environment.Version.ToString());
            env.AddAttribute("os-version", Environment.OSVersion.ToString());
            env.AddAttribute("platform", Environment.OSVersion.Platform.ToString());
#if !NETCF
            env.AddAttribute("cwd", Environment.CurrentDirectory);
            env.AddAttribute("machine-name", Environment.MachineName);
            env.AddAttribute("user", Environment.UserName);
            env.AddAttribute("user-domain", Environment.UserDomainName);
#endif
            env.AddAttribute("culture", CultureInfo.CurrentCulture.ToString());
            env.AddAttribute("uiculture", CultureInfo.CurrentUICulture.ToString());
            env.AddAttribute("os-architecture", GetProcessorArchitecture());

            return(env);
        }
示例#18
0
        private static void AddSetting(TNode settingsNode, string name, object value)
        {
            TNode setting = new TNode("setting");
            setting.AddAttribute("name", name);
            setting.AddAttribute("value", value.ToString());

            settingsNode.ChildNodes.Add(setting);
        }
示例#19
0
        /// <summary>
        /// Inserts environment element
        /// </summary>
        /// <param name="targetNode">Target node</param>
        /// <returns>The new node</returns>
        public static TNode InsertEnvironmentElement(TNode targetNode)
        {
            TNode env = new TNode("environment");
            targetNode.ChildNodes.Insert(0, env);

            env.AddAttribute("framework-version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
            env.AddAttribute("clr-version", Environment.Version.ToString());
            env.AddAttribute("os-version", Environment.OSVersion.ToString());
            env.AddAttribute("platform", Environment.OSVersion.Platform.ToString());
#if !NETCF
            env.AddAttribute("cwd", Environment.CurrentDirectory);
            env.AddAttribute("machine-name", Environment.MachineName);
            env.AddAttribute("user", Environment.UserName);
            env.AddAttribute("user-domain", Environment.UserDomainName);
#endif
            env.AddAttribute("culture", CultureInfo.CurrentCulture.ToString());
            env.AddAttribute("uiculture", CultureInfo.CurrentUICulture.ToString());
            env.AddAttribute("os-architecture", GetProcessorArchitecture());

            return env;
        }
示例#20
0
        void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter)
        {
            // XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format

            var testRunNode = new TNode(k_TestRunNode);

            testRunNode.AddAttribute(k_Id, "2");
            testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
            testRunNode.AddAttribute(k_Result, result.ResultState.ToString());
            testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
            testRunNode.AddAttribute(k_Passed, result.PassCount.ToString());
            testRunNode.AddAttribute(k_Failed, result.FailCount.ToString());
            testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString());
            testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString());
            testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString());
            testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion);
            testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString());
            testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat));
            testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat));
            testRunNode.AddAttribute(k_Duration, result.Duration.ToString());

            var resultNode = result.ToXml();

            testRunNode.ChildNodes.Add(resultNode);

            testRunNode.WriteTo(xmlWriter);
        }
        /// <summary>
        /// Inserts environment element
        /// </summary>
        /// <param name="targetNode">Target node</param>
        /// <returns>The new node</returns>
        public static TNode InsertEnvironmentElement(TNode targetNode)
        {
            TNode env = new TNode("environment");

            targetNode.ChildNodes.Insert(0, env);

            env.AddAttribute("framework-version", typeof(FrameworkController).GetTypeInfo().Assembly.GetName().Version.ToString());
#if NETSTANDARD1_6
            env.AddAttribute("clr-version", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription);
#else
            env.AddAttribute("clr-version", Environment.Version.ToString());
#endif
#if !PLATFORM_DETECTION
            env.AddAttribute("os-version", System.Runtime.InteropServices.RuntimeInformation.OSDescription);
#else
            env.AddAttribute("os-version", OSPlatform.CurrentPlatform.ToString());
#endif
#if !NETSTANDARD1_6
            env.AddAttribute("platform", Environment.OSVersion.Platform.ToString());
#endif
            env.AddAttribute("cwd", Directory.GetCurrentDirectory());
            env.AddAttribute("machine-name", Environment.MachineName);
#if !NETSTANDARD1_6
            env.AddAttribute("user", Environment.UserName);
            env.AddAttribute("user-domain", Environment.UserDomainName);
#endif
            env.AddAttribute("culture", CultureInfo.CurrentCulture.ToString());
            env.AddAttribute("uiculture", CultureInfo.CurrentUICulture.ToString());
            env.AddAttribute("os-architecture", GetProcessorArchitecture());

            return(env);
        }
示例#22
0
文件: Test.cs 项目: nunit/nunit
        /// <summary>
        /// Add standard attributes and members to a test node.
        /// </summary>
        /// <param name="thisNode"></param>
        /// <param name="recursive"></param>
        protected void PopulateTestNode(TNode thisNode, bool recursive)
        {
            thisNode.AddAttribute("id", this.Id.ToString());
            thisNode.AddAttribute("name", this.Name);
            thisNode.AddAttribute("fullname", this.FullName);
            if (this.MethodName != null)
                thisNode.AddAttribute("methodname", this.MethodName);
            if (this.ClassName != null)
                thisNode.AddAttribute("classname", this.ClassName);
            thisNode.AddAttribute("runstate", this.RunState.ToString());

            if (Properties.Keys.Count > 0)
                Properties.AddToXml(thisNode, recursive);
        }
示例#23
0
        /// <summary>
        /// Adds the XML representation of the result as a child of the
        /// supplied parent node..
        /// </summary>
        /// <param name="parentNode">The parent node.</param>
        /// <param name="recursive">If true, descendant results are included</param>
        /// <returns></returns>
        public virtual TNode AddToXml(TNode parentNode, bool recursive)
        {
            // A result node looks like a test node with extra info added
            TNode thisNode = Test.AddToXml(parentNode, false);

            thisNode.AddAttribute("result", ResultState.Status.ToString());
            if (ResultState.Label != string.Empty) // && ResultState.Label != ResultState.Status.ToString())
            {
                thisNode.AddAttribute("label", ResultState.Label);
            }
            if (ResultState.Site != FailureSite.Test)
            {
                thisNode.AddAttribute("site", ResultState.Site.ToString());
            }

            thisNode.AddAttribute("start-time", StartTime.ToString("u"));
            thisNode.AddAttribute("end-time", EndTime.ToString("u"));
            thisNode.AddAttribute("duration", Duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            if (Test is TestSuite)
            {
                thisNode.AddAttribute("total", (PassCount + FailCount + SkipCount + InconclusiveCount).ToString());
                thisNode.AddAttribute("passed", PassCount.ToString());
                thisNode.AddAttribute("failed", FailCount.ToString());
                thisNode.AddAttribute("inconclusive", InconclusiveCount.ToString());
                thisNode.AddAttribute("skipped", SkipCount.ToString());
            }

            thisNode.AddAttribute("asserts", AssertCount.ToString());

            switch (ResultState.Status)
            {
            case TestStatus.Failed:
                AddFailureElement(thisNode);
                break;

            case TestStatus.Skipped:
            case TestStatus.Passed:
            case TestStatus.Inconclusive:
                if (Message != null)
                {
                    AddReasonElement(thisNode);
                }
                break;
            }

            if (Output.Length > 0)
            {
                AddOutputElement(thisNode);
            }


            if (recursive && HasChildren)
            {
                foreach (TestResult child in Children)
                {
                    child.AddToXml(thisNode, recursive);
                }
            }

            return(thisNode);
        }
示例#24
0
        private TNode MakeTestRunElement(ITestResult result)
        {
            TNode testRun = new TNode("test-run");

            testRun.AddAttribute("id", "2");
            testRun.AddAttribute("name", result.Name);
            testRun.AddAttribute("fullname", result.FullName);
            testRun.AddAttribute("testcasecount", result.Test.TestCaseCount.ToString());

            testRun.AddAttribute("result", result.ResultState.Status.ToString());
            if (result.ResultState.Label != string.Empty)
                testRun.AddAttribute("label", result.ResultState.Label);

            testRun.AddAttribute("start-time", result.StartTime.ToString("u"));
            testRun.AddAttribute("end-time", result.EndTime.ToString("u"));
            testRun.AddAttribute("duration", result.Duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            testRun.AddAttribute("total", (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
            testRun.AddAttribute("passed", result.PassCount.ToString());
            testRun.AddAttribute("failed", result.FailCount.ToString());
            testRun.AddAttribute("inconclusive", result.InconclusiveCount.ToString());
            testRun.AddAttribute("skipped", result.SkipCount.ToString());
            testRun.AddAttribute("asserts", result.AssertCount.ToString());

            testRun.AddAttribute("random-seed", Randomizer.InitialSeed.ToString());

            // NOTE: The console runner adds attributes for engine-version and clr-version
            // Neither of these is needed under nunitlite since there is no engine involved
            // and we are running under the same runtime as the tests.

            return testRun;
        }