/// <summary>
        /// Compares the 2 Xml subtrees.
        /// </summary>
        /// <param name="lhs">The left-hand side Xml subtree</param>
        /// <param name="rhs">The right-hand side Xml subtree</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        public void CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter)
        {
            bool lhsFilter = filter.Filter(lhs);
            bool rhsFilter = filter.Filter(rhs);

            Assert.AreEqual(lhsFilter, rhsFilter);

            // At this point, lhsFilter and rhsFilter are known to be equal.
            // If both elements should be filtered, avoid comparing the subtrees altogether.
            if (!lhsFilter)
            {
                _CompareXML(lhs, rhs, filter);
            }
        }
예제 #2
0
        /// <summary>
        /// Compares the 2 Xml subtrees.
        /// </summary>
        /// <param name="lhs">The left-hand side Xml subtree</param>
        /// <param name="rhs">The right-hand side Xml subtree</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        public void CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter)
        {
            bool lhsFilter = filter.Filter(lhs);
            bool rhsFilter = filter.Filter(rhs);

            Assert.AreEqual(lhsFilter, rhsFilter);

            // At this point, lhsFilter and rhsFilter are known to be equal.
            // If both elements should be filtered, avoid comparing the subtrees altogether.
            if (!lhsFilter)
            {
                _CompareXML(lhs, rhs, filter);
            }
        }
예제 #3
0
        /// <summary>
        /// Internal version of CompareXML. Compares the 2 Xml subtrees.
        /// </summary>
        /// <remarks>In contrast to the public CompareXML, this version avoids checking whether both elements should be filtered or not.</remarks>
        /// <param name="lhs">The left-hand side Xml subtree</param>
        /// <param name="rhs">The right-hand side Xml subtree</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        private void _CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter)
        {
            Assert.AreEqual(lhs.NodeType, rhs.NodeType);

            Assert.AreEqual(lhs.NamespaceURI, rhs.NamespaceURI);
            Assert.AreEqual(lhs.LocalName, rhs.LocalName);

            if (lhs.NodeType == XmlNodeType.CDATA || lhs.NodeType == XmlNodeType.Comment || lhs.NodeType == XmlNodeType.Text)
            {
                Assert.AreEqual(lhs.Value, rhs.Value);
            }

            CompareXML(GetXmlCollectionEnumerator(lhs.ChildNodes), GetXmlCollectionEnumerator(rhs.ChildNodes), filter);
            CompareXML(GetXmlCollectionEnumerator(lhs.Attributes), GetXmlCollectionEnumerator(rhs.Attributes), filter);
        }
예제 #4
0
        /// <summary>
        /// Compares the 2 Xml collections.
        /// </summary>
        /// <param name="lhs">The left-hand side Xml collection enumerator</param>
        /// <param name="rhs">The right-hand side Xml collection enumerator</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        private void CompareXML(IEnumerator lhs, IEnumerator rhs, IXmlNodeFilter filter)
        {
            bool lhsNext = lhs != null && lhs.MoveNext();
            bool rhsNext = rhs != null && rhs.MoveNext();

            while (lhsNext && rhsNext)
            {
                XmlNode lhsChild = (XmlNode)lhs.Current;
                XmlNode rhsChild = (XmlNode)rhs.Current;

                if (filter.Filter(lhsChild))
                {
                    lhsNext = lhs.MoveNext();
                    continue;
                }
                else if (filter.Filter(rhsChild))
                {
                    rhsNext = rhs.MoveNext();
                    continue;
                }

                _CompareXML(lhsChild, rhsChild, filter);

                lhsNext = lhs.MoveNext();
                rhsNext = rhs.MoveNext();
            }

            // Ensure that any remaining nodes are filtered
            // and not important for the comparison process
            while (lhsNext)
            {
                Assert.IsTrue(filter.Filter((XmlNode)lhs.Current));
                lhsNext = lhs.MoveNext();
            }

            while (rhsNext)
            {
                Assert.IsTrue(filter.Filter((XmlNode)rhs.Current));
                rhsNext = rhs.MoveNext();
            }
        }
예제 #5
0
 /// <summary>
 /// Compares the 2 Xml string fragments.
 /// </summary>
 /// <param name="lhs">The left-hand side Xml fragment</param>
 /// <param name="rhs">The right-hand side Xml fragment</param>
 /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
 public void CompareXML(string lhs, string rhs, IXmlNodeFilter filter)
 {
     this.CompareXML(LoadXml(lhs), LoadXml(rhs), filter);
 }
 /// <summary>
 /// Compares the 2 Xml string fragments.
 /// </summary>
 /// <param name="lhs">The left-hand side Xml fragment</param>
 /// <param name="rhs">The right-hand side Xml fragment</param>
 /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
 public void CompareXML(string lhs, string rhs, IXmlNodeFilter filter)
 {
     this.CompareXML(LoadXml(lhs), LoadXml(rhs), filter);
 }
        /// <summary>
        /// Internal version of CompareXML. Compares the 2 Xml subtrees.
        /// </summary>
        /// <remarks>In contrast to the public CompareXML, this version avoids checking whether both elements should be filtered or not.</remarks>
        /// <param name="lhs">The left-hand side Xml subtree</param>
        /// <param name="rhs">The right-hand side Xml subtree</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        private void _CompareXML(XmlNode lhs, XmlNode rhs, IXmlNodeFilter filter)
        {
            Assert.AreEqual(lhs.NodeType, rhs.NodeType);

            Assert.AreEqual(lhs.NamespaceURI, rhs.NamespaceURI);
            Assert.AreEqual(lhs.LocalName, rhs.LocalName);

            if (lhs.NodeType == XmlNodeType.CDATA || lhs.NodeType == XmlNodeType.Comment || lhs.NodeType == XmlNodeType.Text)
            {
                Assert.AreEqual(lhs.Value, rhs.Value);
            }

            CompareXML(GetXmlCollectionEnumerator(lhs.ChildNodes), GetXmlCollectionEnumerator(rhs.ChildNodes), filter);
            CompareXML(GetXmlCollectionEnumerator(lhs.Attributes), GetXmlCollectionEnumerator(rhs.Attributes), filter);
        }
        /// <summary>
        /// Compares the 2 Xml collections.
        /// </summary>
        /// <param name="lhs">The left-hand side Xml collection enumerator</param>
        /// <param name="rhs">The right-hand side Xml collection enumerator</param>
        /// <param name="filter">The XmlNodeType filter to apply during comparison</param>
        private void CompareXML(IEnumerator lhs, IEnumerator rhs, IXmlNodeFilter filter)
        {
            bool lhsNext = lhs != null && lhs.MoveNext();
            bool rhsNext = rhs != null && rhs.MoveNext();

            while (lhsNext && rhsNext)
            {
                XmlNode lhsChild = (XmlNode)lhs.Current;
                XmlNode rhsChild = (XmlNode)rhs.Current;

                if (filter.Filter(lhsChild))
                {
                    lhsNext = lhs.MoveNext();
                    continue;
                }
                else if (filter.Filter(rhsChild))
                {
                    rhsNext = rhs.MoveNext();
                    continue;
                }

                _CompareXML(lhsChild, rhsChild, filter);

                lhsNext = lhs.MoveNext();
                rhsNext = rhs.MoveNext();
            }

            // Ensure that any remaining nodes are filtered
            // and not important for the comparison process
            while (lhsNext)
            {
                Assert.IsTrue(filter.Filter((XmlNode)lhs.Current));
                lhsNext = lhs.MoveNext();
            }

            while (rhsNext)
            {
                Assert.IsTrue(filter.Filter((XmlNode)rhs.Current));
                rhsNext = rhs.MoveNext();
            }
        }