当前位置: 首页 > 工具软件 > NSoup > 使用案例 >

NSoup ElementsTest 使用说明示例

邴修远
2023-12-01
//源自 github 源码示例


 /// <summary>
    /// Tests for ElementList.
    /// </summary>
    /// <!--
    /// Original Author: Jonathan Hedley
    /// Ported to .NET by: Amir Grozki
    /// -->
    [TestClass]
    public class ElementsTest
    {
        public ElementsTest()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test Attributes
        //
        // You can use the following additional Attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void filter()
        {
            string h = "<p>Excl</p><div class=headline><p>Hello</p><p>There</p></div><div class=headline><h1>Headline</h1></div>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements els = doc.Select(".headline").Select("p");
            Assert.AreEqual(2, els.Count);
            Assert.AreEqual("Hello", els[0].Text());
            Assert.AreEqual("There", els[1].Text());
        }

        [TestMethod]
        public void Attributes()
        {
            string h = "<p title=foo><p title=bar><p class=foo><p class=bar>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements withTitle = doc.Select("p[title]");
            Assert.AreEqual(2, withTitle.Count);
            Assert.IsTrue(withTitle.HasAttr("title"));
            Assert.IsFalse(withTitle.HasAttr("class"));
            Assert.AreEqual("foo", withTitle.Attr("title"));

            withTitle.RemoveAttr("title");
            Assert.AreEqual(2, withTitle.Count); // existing Elements are not reevaluated
            Assert.AreEqual(0, doc.Select("p[title]").Count);

            Elements ps = doc.Select("p").Attr("style", "classy");
            Assert.AreEqual(4, ps.Count);
            Assert.AreEqual("classy", ps.Last.Attr("style"));
            Assert.AreEqual("bar", ps.Last.Attr("class"));
        }

        [TestMethod]
        public void HasAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<p title=foo><p title=bar><p class=foo><p class=bar>");
            Elements ps = doc.Select("p");
            Assert.IsTrue(ps.HasAttr("class"));
            Assert.IsFalse(ps.HasAttr("style"));
        }

        [TestMethod]
        public void hasAbsAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<a id=1 href='/foo'>One</a> <a id=2 href='http://jsoup.org'>Two</a>");
            Elements one = doc.Select("#1");
            Elements two = doc.Select("#2");
            Elements both = doc.Select("a");
            Assert.IsFalse(one.HasAttr("abs:href"));
            Assert.IsTrue(two.HasAttr("abs:href"));
            Assert.IsTrue(both.HasAttr("abs:href")); // hits on #2
        }

        [TestMethod]
        public void Attr()
        {
            Document doc = NSoup.NSoupClient.Parse("<p title=foo><p title=bar><p class=foo><p class=bar>");
            string classVal = doc.Select("p").Attr("class");
            Assert.AreEqual("foo", classVal);
        }

        [TestMethod]
        public void absAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<a id=1 href='/foo'>One</a> <a id=2 href='http://jsoup.org'>Two</a>");
            Elements one = doc.Select("#1");
            Elements two = doc.Select("#2");
            Elements both = doc.Select("a");

            Assert.AreEqual("", one.Attr("abs:href"));
            Assert.AreEqual("http://jsoup.org/", two.Attr("abs:href"));
            Assert.AreEqual("http://jsoup.org/", both.Attr("abs:href"));
        }

        [TestMethod]
        public void classes()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p class='mellow yellow'></p><p class='red green'></p>");

            Elements els = doc.Select("p");
            Assert.IsTrue(els.HasClass("red"));
            Assert.IsFalse(els.HasClass("blue"));
            els.AddClass("blue");
            els.RemoveClass("yellow");
            els.ToggleClass("mellow");

            Assert.AreEqual("blue", els[0].ClassName());
            Assert.AreEqual("red green blue mellow", els[1].ClassName());
        }

        [TestMethod]
        public void text()
        {
            string h = "<div><p>Hello<p>there<p>world</div>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Assert.AreEqual("Hello there world", doc.Select("div > *").Text);
        }

        [TestMethod]
        public void hasText()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p></p></div>");
            Elements divs = doc.Select("div");
            Assert.IsTrue(divs.HasText);
            Assert.IsFalse(doc.Select("div + div").HasText);
        }

        [TestMethod]
        public void html()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p>There</p></div>");
            Elements divs = doc.Select("div");
            Assert.AreEqual("<p>Hello</p>\n<p>There</p>", divs.Html());
        }

        [TestMethod]
        public void outerHtml()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p>There</p></div>");
            Elements divs = doc.Select("div");
            Assert.AreEqual("<div><p>Hello</p></div><div><p>There</p></div>", TextUtil.StripNewLines(divs.OuterHtml()));
        }

        [TestMethod]
        public void setHtml()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>One</p><p>Two</p><p>Three</p>");
            Elements ps = doc.Select("p");

            ps.Prepend("<b>Bold</b>").Append("<i>Ital</i>");
            Assert.AreEqual("<p><b>Bold</b>Two<i>Ital</i></p>", TextUtil.StripNewLines(ps[1].OuterHtml()));

            ps.Html("<span>Gone</span>");
            Assert.AreEqual("<p><span>Gone</span></p>", TextUtil.StripNewLines(ps[1].OuterHtml()));
        }

        [TestMethod]
        public void val()
        {
            Document doc = NSoup.NSoupClient.Parse("<input value='one' /><textarea>two</textarea>");
            Elements els = doc.Select("input, textarea");
            Assert.AreEqual(2, els.Count);
            Assert.AreEqual("one", els.Val());
            Assert.AreEqual("two", els.Last.Val());

            els.Val("three");
            Assert.AreEqual("three", els.First.Val());
            Assert.AreEqual("three", els.Last.Val());
            Assert.AreEqual("<textarea>three</textarea>", els.Last.OuterHtml());
        }

        [TestMethod]
        public void before()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>This <a>is</a> <a>jsoup</a>.</p>");
            doc.Select("a").Before("<span>foo</span>");
            Assert.AreEqual("<p>This <span>foo</span><a>is</a> <span>foo</span><a>jsoup</a>.</p>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void after()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>This <a>is</a> <a>jsoup</a>.</p>");
            doc.Select("a").after("<span>foo</span>");
            Assert.AreEqual("<p>This <a>is</a><span>foo</span> <a>jsoup</a><span>foo</span>.</p>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void wrap()
        {
            string h = "<p><b>This</b> is <b>jsoup</b></p>";
            Document doc = NSoup.NSoupClient.Parse(h);
            doc.Select("b").Wrap("<i></i>");
            Assert.AreEqual("<p><i><b>This</b></i> is <i><b>jsoup</b></i></p>", doc.Body.Html());
        }

        [TestMethod]
        public void wrapDiv()
        {
            string h = "<p><b>This</b> is <b>jsoup</b>.</p> <p>How do you like it?</p>";
            Document doc = NSoupClient.Parse(h);
            doc.Select("p").Wrap("<div></div>");
            Assert.AreEqual("<div><p><b>This</b> is <b>jsoup</b>.</p></div> <div><p>How do you like it?</p></div>",
                    TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void unwrap()
        {
            string h = "<div><font>One</font> <font><a href=\"/\">Two</a></font></div";
            Document doc = NSoup.NSoupClient.Parse(h);
            doc.Select("font").Unwrap();
            Assert.AreEqual("<div>One <a href=\"/\">Two</a></div>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void unwrapP()
        {
            string h = "<p><a>One</a> Two</p> Three <i>Four</i> <p>Fix <i>Six</i></p>";
            Document doc = NSoupClient.Parse(h);
            doc.Select("p").Unwrap();
            Assert.AreEqual("<a>One</a> Two Three <i>Four</i> Fix <i>Six</i>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void empty()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello <b>there</b></p> <p>now!</p></div>");
            doc.OutputSettings().PrettyPrint(false);

            doc.Select("p").Empty();
            Assert.AreEqual("<div><p></p> <p></p></div>", doc.Body.Html());
        }

        [TestMethod]
        public void remove()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello <b>there</b></p> jsoup <p>now!</p></div>");
            doc.OutputSettings().PrettyPrint(false);

            doc.Select("p").Remove();
            Assert.AreEqual("<div> jsoup </div>", doc.Body.Html());
        }

        [TestMethod]
        public void eq()
        {
            string h = "<p>Hello<p>there<p>world";
            Document doc = NSoup.NSoupClient.Parse(h);
            Assert.AreEqual("there", doc.Select("p").Eq(1).Text);
            Assert.AreEqual("there", doc.Select("p")[1].Text());
        }

        [TestMethod]
        public void Is()
        {
            string h = "<p>Hello<p title=foo>there<p>world";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements ps = doc.Select("p");
            Assert.IsTrue(ps.Is("[title=foo]"));
            Assert.IsFalse(ps.Is("[title=bar]"));
        }

        [TestMethod]
        public void parents()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><p>There</p>");
            Elements parents = doc.Select("p").Parents;

            Assert.AreEqual(3, parents.Count);
            Assert.AreEqual("div", parents[0].TagName());
            Assert.AreEqual("body", parents[1].TagName());
            Assert.AreEqual("html", parents[2].TagName());
        }

        [TestMethod]
        public void not()
        {
            Document doc = NSoup.NSoupClient.Parse("<div id=1><p>One</p></div> <div id=2><p><span>Two</span></p></div>");

            Elements div1 = doc.Select("div").Not(":has(p > span)");
            Assert.AreEqual(1, div1.Count);
            Assert.AreEqual("1", div1.First.Id);

            Elements div2 = doc.Select("div").Not("#1");
            Assert.AreEqual(1, div2.Count);
            Assert.AreEqual("2", div2.First.Id);
        }

        [TestMethod]
        public void tagNameSet()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>Hello <i>there</i> <i>now</i></p>");
            doc.Select("i").TagName("em");

            Assert.AreEqual("<p>Hello <em>there</em> <em>now</em></p>", doc.Body.Html());
        }

        [TestMethod]
        public void traverse()
        {
            Document doc = NSoupClient.Parse("<div><p>Hello</p></div><div>There</div>");
            StringBuilder accum = new StringBuilder();
            doc.Select("div").Traverse(new TestNodeVisitor(accum));
            Assert.AreEqual("<div><p><#text></#text></p></div><div><#text></#text></div>", accum.ToString());
        }

        private class TestNodeVisitor : NodeVisitor
        {
            StringBuilder accum;

            public TestNodeVisitor(StringBuilder accum)
            {
                this.accum = accum;
            }

            public void Head(Node node, int depth)
            {
                accum.Append("<" + node.NodeName + ">");
            }

            public void Tail(Node node, int depth)
            {
                accum.Append("</" + node.NodeName + ">");
            }
        }
    }

 

 类似资料: