Ejemplo n.º 1
0
        // it used to be regarded as MS bug but it was not really.
        public void TestPreserveEntityNotOnDotNet()
        {
            string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'><!ENTITY ent 'entity string'>";
            string dtd       = "<!DOCTYPE root [" + intSubset + "]>";
            string xml       = dtd + "<root foo='&ent;' bar='internal &ent; value' />";

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandCharEntities;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(!dvr.ReadAttributeValue());

            // bar
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual("internal ", dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual(" value", dvr.Value);

            // ValidationType = None

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandCharEntities;
            dvr.ValidationType = ValidationType.None;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);

            // foo
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(!dvr.ReadAttributeValue());

            // bar
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual("internal ", dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual(" value", dvr.Value);
        }