Пример #1
0
        public void TestSerialize()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HDocumentType(),
                new HElement(
                    "html",
                    new HElement(
                        "header",
                        new HElement("title", "Title of the document")
                        ),
                    new HElement(
                        "body",
                        new HElement(
                            "div",
                            new HAttribute("class", "container"),
                            "This is the content of the container.",
                            new HElement("br"),
                            "\r\nTexte avec des lettres échappées : &é~\"'èçàêëù!µ."
                            )
                        )
                    )
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html>");
            expected.Append("<html>");
            expected.Append("<header>");
            expected.Append("<title>Title of the document</title>");
            expected.Append("</header>");
            expected.Append("<body>");
            expected.Append("<div class=\"container\">");
            expected.Append("This is the content of the container.");
            expected.Append("<br />\r\n");
            expected.Append("Texte avec des lettres &eacute;chapp&eacute;es : &amp;&eacute;~&quot;'&egrave;&ccedil;&agrave;&ecirc;&euml;&ugrave;!&micro;.");
            expected.Append("</div>");
            expected.Append("</body>");
            expected.Append("</html>");
            Assert.Equal(expected.ToString(), html.ToString());

            Assert.Throws <ArgumentNullException>(() => serializer.Serialize(null, null));
            Assert.Throws <ArgumentNullException>(() => serializer.Serialize(doc, null));
        }
Пример #2
0
        public void TestRawText()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HDocumentType(),
                new HElement(
                    "html",
                    new HElement("script", "A content <text> \n with multiple lines and é accented"),
                    new HElement("div", "A content <text> \n with multiple lines and é accented")
                    )
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html>");
            expected.Append("<html>");
            expected.Append("<script>A content <text> \n with multiple lines and é accented</script>");
            expected.Append("<div>A content &lt;text&gt; \n with multiple lines and &eacute; accented</div>");
            expected.Append("</html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #3
0
        public void TestCData()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HDocumentType(),
                new HElement(
                    "html",
                    new HCData("A content <CDATA> \n with multiple lines and é accented")
                    )
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html>");
            expected.Append("<html>");
            expected.Append("<![CDATA[A content <CDATA> \n with multiple lines and é accented]]>");
            expected.Append("</html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #4
0
        public void TestComments()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HComment("First comment before doctype"),
                new HDocumentType(),
                new HComment("First second comments before <html>"),
                new HElement(
                    "html",
                    new HComment("Another comments \n with multiple lines")
                    )
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!-- First comment before doctype -->");
            expected.Append("<!DOCTYPE html>");
            expected.Append("<!-- First second comments before &lt;html&gt; -->");
            expected.Append("<html>");
            expected.Append("<!-- Another comments \n with multiple lines -->");
            expected.Append("</html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #5
0
        public void TestXmlDeclaration_Full()
        {
            var doc = new HDocument(
                new HXmlDeclaration("version", "encoding", "standalone"),
                new HElement("html")
                );

            StringBuilder html       = new StringBuilder();
            var           writer     = new StringWriter(html);
            var           serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<?xml version=\"version\" encoding=\"encoding\" standalone=\"standalone\" ?>");
            expected.Append("<html></html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #6
0
        public void TestXmlDeclaration_EmptyDeclaration()
        {
            var doc = new HDocument(
                new HXmlDeclaration(null, null, null),
                new HElement("html")
                );

            StringBuilder html       = new StringBuilder();
            var           writer     = new StringWriter(html);
            var           serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<?xml ?>");
            expected.Append("<html></html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #7
0
        public void TestDocumentType_Full()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HDocumentType(StandardDoctype.XHtml10Transitional),
                new HElement("html")
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
            expected.Append("<html></html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #8
0
        public void TestDocumentType()
        {
            StringBuilder html   = new StringBuilder();
            var           writer = new StringWriter(html);

            var doc = new HDocument(
                new HDocumentType(),
                new HElement("html")
                );

            var serializer = new HSerializer();

            serializer.Serialize(doc, writer);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html>");
            expected.Append("<html></html>");
            Assert.Equal(expected.ToString(), html.ToString());
        }
Пример #9
0
        public void TestDeserializeTestPage1()
        {
            String pageContent;

            using (var pageStream = this.GetType().Assembly.GetManifestResourceStream("HDoc.Tests.Resources.TestPage1.html"))
                using (var reader = new StreamReader(pageStream))
                    pageContent = reader.ReadToEnd();

            using (var pageStream = this.GetType().Assembly.GetManifestResourceStream("HDoc.Tests.Resources.TestPage1.html"))
                using (var reader = new StreamReader(pageStream))
                {
                    var serializer = new HSerializer();
                    var doc        = serializer.DeserializeDocument(reader);

                    Assert.Same(Encoding.UTF8, doc.Encoding);
                    Assert.Null(doc.XmlDeclaration);
                    Assert.Equal(StandardDoctype.Html5, doc.DocumentType.StandardType);

                    var nodes = doc.Nodes().ToArray();
                    Assert.Equal(3, nodes.Length);
                    Assert.IsType <HDocumentType>(nodes[0]);
                    Assert.IsType <HText>(nodes[1]);
                    Assert.IsType <HElement>(nodes[2]);

                    nodes = doc.DescendantNodes().ToArray();
                    Assert.Equal(129, nodes.Length);

                    var elms = doc.Descendants().ToArray();
                    Assert.Equal(46, elms.Length);

                    // Correct false HTML source
                    String tmp = pageContent
                                 .Replace("src=\"http://placekitten.com/g/64/64\">", "src=\"http://placekitten.com/g/64/64\" />")
                                 .Replace("a = b < c;", "a = b &lt; c;")
                                 .Replace("s = \"&lt;html&gt;\";", "s = &quot;&lt;html&gt;&quot;;")
                                 .Replace("français", "fran&ccedil;ais")
                    ;
                    Assert.Equal(tmp, serializer.Serialize(doc));
                }
        }
Пример #10
0
        public void TestEscapableRawText()
        {
            var doc = new HDocument(
                new HDocumentType(),
                new HElement(
                    "html",
                    new HElement("textarea", "A content <text> \n with multiple lines and é accented"),
                    new HElement("div", "A content <text> \n with multiple lines and é accented")
                    )
                );

            var    serializer = new HSerializer();
            String html       = serializer.Serialize(doc);

            var expected = new StringBuilder();

            expected.Append("<!DOCTYPE html>");
            expected.Append("<html>");
            expected.Append("<textarea>A content &lt;text&gt; \n with multiple lines and &eacute; accented</textarea>");
            expected.Append("<div>A content &lt;text&gt; \n with multiple lines and &eacute; accented</div>");
            expected.Append("</html>");
            Assert.Equal(expected.ToString(), html);
        }