public void construct_generic_dom_document_fluent_appenders()
 {
     DomDocument d = new DomDocument();
     d.AppendElement("html")
         .AppendElement("body")
         .AppendElement("p")
         .AppendText("Hello, World");
 }
예제 #2
0
 public void test_append_element_implies_parent()
 {
     DomDocument doc = new DomDocument();
     var ele = doc.AppendElement("html");
     Assert.That(ele.ParentNode, Is.SameAs(doc));
     Assert.That(doc.DocumentElement, Is.SameAs(ele));
     Assert.That(doc.DocumentElement.ChildNodes, Is.Empty);
     Assert.False(doc.UnlinkedNodes.Contains(ele));
 }
예제 #3
0
 public void test_add_child_implies_parent_and_owner()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     var text = html.AppendText("ws");
     Assert.That(text.ChildNodes.Count, Is.EqualTo(0));
     Assert.That(text.OwnerDocument, Is.SameAs(doc));
     Assert.That(text.ParentNode, Is.SameAs(html));
     Assert.That(text.ParentElement, Is.SameAs(html));
 }
예제 #4
0
        public void test_append_attribute_implies_parent_and_owner()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");

            Assert.That(attr.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr.OwnerElement, Is.SameAs(html));
            Assert.That(attr.ParentNode, Is.Null); // per spec
        }
예제 #5
0
 public void test_create_attribute_implies_owner_document()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     var attr = doc.CreateAttribute("class");
     html.Attributes.Add(attr);
     Assert.That(attr.OwnerElement, Is.SameAs(html));
     Assert.That(attr.ParentNode, Is.Null);
     Assert.That(attr.OwnerDocument, Is.SameAs(doc));
 }
예제 #6
0
        public void test_add_attribute_implies_parent_and_owner()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            html.Attribute("lang", "en");

            DomAttribute attr = html.Attributes[0];
            Assert.That(attr.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr.OwnerElement, Is.SameAs(html));
            Assert.That(attr.ParentNode, Is.Null); // per spec
            Assert.False(doc.UnlinkedNodes.Contains(attr));
        }
예제 #7
0
        public void test_append_attribute_implies_add()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = doc.CreateAttribute("lang", "en");

            html.Append(attr);

            Assert.That(html.Attributes.Count, Is.EqualTo(1));
            Assert.That(html.Attribute("lang"), Is.EqualTo("en"));
            Assert.That(attr.OwnerDocument, Is.SameAs(doc));
        }
예제 #8
0
        public void test_attribute_adjacent_nominal()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            html.Attribute("lang", "en");
            html.Attribute("dir", "ltr");
            html.Attribute("data-e", "e");

            DomAttribute attr = html.Attributes[1];
            Assert.That(attr.NodePosition, Is.EqualTo(1));
            Assert.That(attr.NextAttribute.Name, Is.EqualTo("data-e"));
            Assert.That(attr.PreviousAttribute.Name, Is.EqualTo("lang"));
        }
예제 #9
0
 public void test_outer_text_domelement()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     var body = html.AppendElement("body");
     html.Attribute("lang", "en");
     html.Attribute("data-cast", "true");
     body.Attribute("dir", "ltr");
     body.Attribute("class", "hl");
     body.AppendText("Hello, world!");
     string htmlText = "<html lang=\"en\" data-cast=\"true\"><body dir=\"ltr\" class=\"hl\">Hello, world!</body></html>";
     Assert.That(html.OuterText, Is.EqualTo(htmlText));
     Assert.That(html.ToString(), Is.EqualTo(htmlText));
 }
예제 #10
0
        public void test_descendents_and_self()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var body = html.AppendElement("body");
            var para1 = body.AppendElement("p");
            var para2 = body.AppendElement("div");
            para1.AppendText("Hello, world!");
            para2.AppendText("Hello, world!");

            Assert.That(string.Join(" ", html.DescendantsAndSelf.Select(t => t.NodeName)),
                        Is.EquivalentTo("html body p div"));
            Assert.That(string.Join(" ", html.Descendants.Select(t => t.NodeName)),
                        Is.EquivalentTo("body p div"));
        }
예제 #11
0
        public void test_elements_list_nominal()
        {
            DomDocument doc = new DomDocument();
            var svg = doc.AppendElement("svg");
            var g1 = svg.AppendElement("g");
            var g2 = svg.AppendElement("g");
            var g3 = svg.AppendElement("g");

            Assert.That(svg.Elements[1], Is.SameAs(g2));
            Assert.That(svg.Elements[2], Is.SameAs(g3));

            Assert.That(svg.Element(1), Is.SameAs(g2));
            Assert.That(svg.Element(2), Is.SameAs(g3));

            Assert.That(svg.Element("g"), Is.SameAs(g1));
        }
        public void test_clear_collection_implies_no_parent()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr1 = html.AppendAttribute("lang", "en");
            var attr2 = html.AppendAttribute("dir", "ltr");
            var attr3 = html.AppendAttribute("class", "y");

            Assert.That(attr1.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr1.OwnerElement, Is.SameAs(html));
            Assert.That(attr1.ParentElement, Is.Null); // spec
            html.Attributes.Clear();

            Assert.That(html.Attributes.Count, Is.EqualTo(0));
            Assert.That(attr1.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr1.OwnerElement, Is.Null); // spec
            Assert.That(attr1.ParentElement, Is.Null);
        }
        public void test_remove_from_collection_implies_no_parent()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr1 = html.AppendAttribute("lang", "en");

            Assert.That(attr1.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr1.OwnerElement, Is.SameAs(html));
            Assert.That(attr1.ParentElement, Is.Null); // spec
            Assert.That(attr1.NodePosition, Is.EqualTo(0));
            Assert.That(html.Attributes.Count, Is.EqualTo(1));
            Assert.That(html.Attributes.IndexOf(attr1), Is.EqualTo(0));
            Assert.True(html.Attributes.Remove(attr1));
            Assert.That(html.Attributes.Count, Is.EqualTo(0));
            Assert.That(html.Attributes.IndexOf(attr1), Is.EqualTo(-1));

            Assert.That(attr1.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr1.OwnerElement, Is.Null); // spec
            Assert.That(attr1.ParentElement, Is.Null);
        }
예제 #14
0
        public void Xmlns_should_allow_binding_prefix_names_from_AppendAttribute(Func <DomElement, DomAttribute> op)
        {
            var doc = new DomDocument();

            doc.NameContext = DomNameContext.Xml;
            var root = doc.AppendElement("root");

            root.Attribute("xmlns:a", "https://example.com/");

            var newAttr = op(root);

            Assert.Equal(
                "https://example.com/",
                newAttr.NamespaceUri
                );
            Assert.Equal(
                "hello",
                newAttr.LocalName,
                "Local name should re-map without the prefix because of namespace binding"
                );
        }
예제 #15
0
        public void Xmlns_should_move_attributes_to_replacement_on_SetName()
        {
            var doc = new DomDocument {
                NameContext = DomNameContext.Xml
            };
            var root = doc.AppendElement("root");

            root.Attribute("xmlns:a", "https://example.com/");

            var newElement = root.SetName("a:ugust");

            // The XML name context moves to the wrapped element
            Assert.IsInstanceOf(typeof(XmlNameContext), newElement.ActualNameContext);
            Assert.Same(newElement, ((XmlNameContext)newElement.ActualNameContext).Container);

            Assert.Equal(
                new [] { "xmlns:a" },
                newElement.Attributes.Select(a => a.Name.ToString("P"))
                );
            Assert.Equal("ugust", newElement.LocalName);
        }
예제 #16
0
        public void test_attribute_adjacent_singleton()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            html.Attribute("lang", "en");

            DomAttribute attr = html.Attributes[0];
            Assert.That(attr.NextAttribute, Is.Null);
            Assert.That(attr.PreviousAttribute, Is.Null);
        }
예제 #17
0
 public void Closest_should_return_self_if_it_matches() {
     var doc = new DomDocument();
     var self = doc.AppendElement("a").Attribute("class", "clear").AppendElement("span").AppendElement("span");
     Assert.Same(self, self.Closest("span"));
 }
예제 #18
0
 public void NameContext_set_should_use_Value() {
     var doc = new DomDocument();
     var e = doc.AppendElement("e");
     e.NameContext = DomNameContext.Html;
     Assert.Same(DomNameContext.Html, e.NameContext);
 }
예제 #19
0
        public void test_attribute_duplicate_name_same_instance()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");
            Assert.That(html.Attributes.Count, Is.EqualTo(1));

            // TODO Should this move attribute to end of collection?

            html.Append(attr); // legal
            Assert.That(html.Attributes.Count, Is.EqualTo(1));
        }
예제 #20
0
 public void test_common_element_properties()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     Assert.That(html.NodeValue, Is.Null);
 }
예제 #21
0
 public void test_set_dom_value_setter()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     var classList = new DomStringTokenList();
     html.Attribute("class", classList);
     html.Attribute("class", "heat up");
     Assert.That(classList, Contains.Item("heat"));
     Assert.That(classList, Contains.Item("up"));
 }
예제 #22
0
        public void test_set_dom_value_getter()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var classList = new DomStringTokenList();
            html.Attribute("class", classList);

            Assert.That(html.Attribute("class"), Is.EqualTo(string.Empty));
            classList.Add("cool");
            classList.Add("down");
            Assert.That(html.Attribute("class"), Is.EqualTo("cool down"));
        }
예제 #23
0
        public void test_to_xml_string()
        {
            DomDocument doc = new DomDocument();
            // doc.AppendDocumentType("html");
            var html = doc.AppendElement("html");
            var body = html.AppendElement("body");
            body.AppendElement("h1").AppendText("Hello, world");
            html.Attribute("lang", "en");

            // N.B. By default, xml decl is omitted
            Assert.That(doc.ToXml(), Is.EqualTo("<html lang=\"en\"><body><h1>Hello, world</h1></body></html>"));
        }
예제 #24
0
        public void AppendElement_should_throw_on_ws()
        {
            var doc = new DomDocument();

            Assert.Throws <ArgumentException>(() => doc.AppendElement(" s"));
        }
예제 #25
0
        public void test_attribute_remove_self()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");

            Assert.That(html.Attributes.Count, Is.EqualTo(1));
            attr.RemoveSelf();

            Assert.That(html.Attributes.Count, Is.EqualTo(0));
        }
예제 #26
0
        public void test_attribute_implies_new_instance()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            html.Attribute("lang", "en");
            DomAttribute attr = html.Attributes[0];
            Assert.That(html.Attributes.Count, Is.EqualTo(1));
            Assert.That(html.ChildNodes.Count, Is.EqualTo(0));

            // Excludes attributes
            Assert.That(attr.Value, Is.EqualTo("en"));
            Assert.That(attr.Name, Is.EqualTo("lang"));
            Assert.False(doc.UnlinkedNodes.Contains(attr));
        }
예제 #27
0
 public void Closest_should_return_closest_element() {
     var doc = new DomDocument();
     var self = doc.AppendElement("a").Attribute("class", "clear").AppendElement("a").AppendElement("span");
     Assert.Same(doc.DocumentElement, self.Closest("a.clear"));
 }
예제 #28
0
        public void test_replace_with_many_nominal()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var body = html.AppendElement("body");
            var h1 = body.AppendElement("h1");
            var h3 = doc.CreateElement("h3");

            var result = h1.ReplaceWith(h3, doc.CreateElement("h4"), doc.CreateElement("h5"));
            Assert.That(doc.ToXml(), Is.EqualTo("<html><body><h3 /><h4 /><h5 /></body></html>"));
            Assert.That(result, Is.SameAs(h3));
        }
예제 #29
0
 public void NodeDepth_should_be_correct_value_nominal_case() {
     DomDocument doc = new DomDocument();
     var e = doc.AppendElement("a").AppendElement("b").AppendElement("c");
     Assert.Equal(3, e.NodeDepth);
 }
예제 #30
0
        public void test_attribute_replace_with_attribute()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");
            var attr2 = doc.CreateAttribute("dir", "ltr");

            Assert.That(attr.ReplaceWith(attr2), Is.SameAs(attr2));
            Assert.That(html.Attributes.Count, Is.EqualTo(1));
            Assert.That(html.Attributes[0], Is.SameAs(attr2));
            Assert.True(doc.UnlinkedNodes.Contains(attr));
            Assert.False(doc.UnlinkedNodes.Contains(attr2));
        }
예제 #31
0
        public void test_attribute_duplicate_name_error()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");

            Assert.That(() => {
                            html.AppendAttribute("lang", "fr");
                        }, Throws.ArgumentException);

            Assert.That(() => {
                            html.Append(doc.CreateAttribute("lang", "fr"));
                        }, Throws.ArgumentException);

            Assert.That(() => {
                            html.Attributes.Add(doc.CreateAttribute("lang", "fr"));
                        }, Throws.ArgumentException);
        }
예제 #32
0
        public void test_remove_self_implies_parent_and_owner()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var body = html.AppendElement("head");

            DomElement e = body.RemoveSelf();
            Assert.That(html.ChildNodes.Count, Is.EqualTo(0));
            Assert.That(e, Is.SameAs(body));
            Assert.That(e.OwnerDocument, Is.SameAs(doc));
            Assert.That(e.ParentNode, Is.Null);
            Assert.That(e.ParentElement, Is.Null);
        }
예제 #33
0
        public void test_attribute_replace_with_non_attribute()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            var attr = html.AppendAttribute("lang", "en");

            Assert.That(() => {
                            attr.ReplaceWith(doc.CreateCData());
                        }, Throws.ArgumentException);
        }
예제 #34
0
        public void test_remove_self_implies_parent_and_owner()
        {
            DomDocument doc = new DomDocument();
            var html = doc.AppendElement("html");
            html.Attribute("lang", "en");

            DomAttribute attr = html.Attributes[0].RemoveSelf();
            Assert.That(html.Attributes.Count, Is.EqualTo(0));
            Assert.That(attr.OwnerDocument, Is.SameAs(doc));
            Assert.That(attr.ParentNode, Is.Null);
        }
예제 #35
0
 public void test_replace_element_with_element()
 {
     DomDocument doc = new DomDocument();
     var html = doc.AppendElement("html");
     var body = html.AppendElement("body");
     var head = (DomElement) body.ReplaceWith(doc.CreateElement("head"));
     Assert.That(((DomElement) html.ChildNode(0)).Name, Is.EqualTo("head"));
     Assert.That(head.Name, Is.EqualTo("head"));
 }