コード例 #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);
        }