using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using PlanB.Html.Nodes; using PlanB.Html; namespace TestProject1 { /// /// Summary description for UnitTest1 /// [TestClass] public class ParseTests { public ParseTests() { // // TODO: Add constructor logic here // } private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// 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 Test_Parse_HtmlTextNode() { String htmlText = "asdf"; String expectedResult = "asdf"; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, "The HtmlNode returned by the parser is null."); Assert.AreEqual(htmlNode.Children.Count, 1); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlTextNode)); HtmlTextNode htmlTextNode = htmlNode.Children[0] as HtmlTextNode; Assert.AreEqual(expectedResult, htmlTextNode.Text); } [TestMethod] public void Test_Parse_Returns_HtmlDocumentNode() { String htmlText = String.Empty; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsInstanceOfType(htmlNode, typeof(HtmlDocumentNode)); } [TestMethod] public void Test_HtmlTextNode_Constructors() { HtmlTextNode htmlTextNode = new HtmlTextNode(); Assert.IsNotNull(htmlTextNode.Attributes, "The default constructor failed to initialize the Attributes property."); Assert.IsNotNull(htmlTextNode.Children, "The default constructor failed to initialize the Children property."); Assert.IsNotNull(htmlTextNode.InnerHtml, "The default constructor failed to initialize the InnerHtml property."); Assert.IsNotNull(htmlTextNode.OuterHtml, "The default constructor failed to initialize the OuterHtml property."); Assert.IsNotNull(htmlTextNode.Text, "The default constructor failed to initialize the Text property"); Assert.IsNotNull(htmlTextNode.Type, "The default constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Text_, htmlTextNode.Type); String expectedValue = "This is some sample text."; htmlTextNode = new HtmlTextNode(expectedValue); Assert.IsNotNull(htmlTextNode.Attributes, "The HtmlTextNode(string) constructor failed to initialize the Attributes property."); Assert.IsNotNull(htmlTextNode.Children, "The HtmlTextNode(string) constructor failed to initialize the Children property."); Assert.IsNotNull(htmlTextNode.InnerHtml, "The HtmlTextNode(string) constructor failed to initialize the InnerHtml property."); Assert.AreEqual(String.Empty, htmlTextNode.InnerHtml); Assert.IsNotNull(htmlTextNode.OuterHtml, "The HtmlTextNode(string) constructor failed to initialize the OuterHtml property."); Assert.AreEqual(expectedValue, htmlTextNode.OuterHtml); Assert.IsNotNull(htmlTextNode.Text, "The HtmlTextNode(string) constructor failed to initialize the Text property"); Assert.AreEqual(expectedValue, htmlTextNode.Text); Assert.IsNotNull(htmlTextNode.Type, "The HtmlTextNode(string) constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Text_, htmlTextNode.Type); } [TestMethod] public void Test_HtmlDocumentNode_Constructors() { HtmlDocumentNode htmlDocumentNode = new HtmlDocumentNode(); Assert.IsNotNull(htmlDocumentNode.Attributes); Assert.IsNotNull(htmlDocumentNode.Children); Assert.AreEqual(0, htmlDocumentNode.Children.Count); Assert.IsNotNull(htmlDocumentNode.InnerHtml); Assert.AreEqual(String.Empty, htmlDocumentNode.InnerHtml); Assert.IsNotNull(htmlDocumentNode.OuterHtml); Assert.AreEqual(String.Empty, htmlDocumentNode.OuterHtml); Assert.IsNotNull(htmlDocumentNode.Type); Assert.AreEqual(HtmlNodeType.Document_, htmlDocumentNode.Type); } [TestMethod] public void Test_HtmlBrNode_Constructor() { HtmlBrNode htmlBrNode = new HtmlBrNode(); String expectedOuterHtml = "
"; Assert.IsNotNull(htmlBrNode.Attributes, "The default constructor failed to initialize the Attributes property."); Assert.AreEqual(0, htmlBrNode.Attributes.Count); Assert.IsNotNull(htmlBrNode.Children, "The default constructor failed to initialize the Children property."); Assert.AreEqual(0, htmlBrNode.Children.Count); Assert.IsNotNull(htmlBrNode.InnerHtml, "The default constructor failed to initialize the InnerHtml property."); Assert.AreEqual(htmlBrNode.InnerHtml, String.Empty); Assert.IsNotNull(htmlBrNode.OuterHtml, "The default constructor failed to initialize the OuterHtml property."); Assert.AreEqual(htmlBrNode.OuterHtml, expectedOuterHtml); Assert.IsNotNull(htmlBrNode.Type, "The default constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Br, htmlBrNode.Type); } [TestMethod] public void Test_HtmlSpanNode_Constructor() { //Default constructor HtmlSpanNode htmlSpanNode = new HtmlSpanNode(); Assert.IsNotNull(htmlSpanNode.Attributes, "The default constructor failed to initialize the Attributes property."); Assert.AreEqual(0, htmlSpanNode.Attributes.Count); Assert.IsNotNull(htmlSpanNode.Children, "The default constructor failed to initialize the Children property."); Assert.AreEqual(0, htmlSpanNode.Children.Count); Assert.IsNotNull(htmlSpanNode.InnerHtml, "The default constructor failed to initialize the InnerHtml property."); Assert.AreEqual(String.Empty, htmlSpanNode.InnerHtml); Assert.IsNotNull(htmlSpanNode.OuterHtml, "The default constructor failed to initialize the OuterHtml property."); Assert.AreEqual("", htmlSpanNode.OuterHtml); Assert.IsNotNull(htmlSpanNode.Type, "The default constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Span, htmlSpanNode.Type); //HtmlSpanNode(String) String text = "test"; htmlSpanNode = new HtmlSpanNode(text); Assert.IsNotNull(htmlSpanNode.Attributes, "The HtmlSpanNode(String) constructor failed to initialize the Attributes property."); Assert.AreEqual(0, htmlSpanNode.Attributes.Count); Assert.IsNotNull(htmlSpanNode.Children, "The HtmlSpanNode(String) constructor failed to initialize the Children property."); Assert.AreEqual(1, htmlSpanNode.Children.Count); Assert.IsNotNull(htmlSpanNode.InnerHtml, "The HtmlSpanNode(String) constructor failed to initialize the InnerHtml property."); Assert.AreEqual(text, htmlSpanNode.InnerHtml); Assert.IsNotNull(htmlSpanNode.OuterHtml, "The HtmlSpanNode(String) constructor failed to initialize the OuterHtml property."); Assert.AreEqual("" + text + "", htmlSpanNode.OuterHtml); Assert.IsNotNull(htmlSpanNode.Type, "The HtmlSpanNode(String) constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Span, htmlSpanNode.Type); //HtmlSpanNode(IEnumerable) htmlSpanNode = new HtmlSpanNode(new HtmlNode[] { new HtmlTextNode(text), new HtmlBrNode(), new HtmlTextNode(text) }); Assert.IsNotNull(htmlSpanNode.Attributes, "The HtmlSpanNode(IEnumerable) constructor failed to initialize the Attributes property."); Assert.AreEqual(0, htmlSpanNode.Attributes.Count); Assert.IsNotNull(htmlSpanNode.Children, "The HtmlSpanNode(IEnumerable) constructor failed to initialize the Children property."); Assert.AreEqual(3, htmlSpanNode.Children.Count); Assert.IsNotNull(htmlSpanNode.InnerHtml, "The HtmlSpanNode(IEnumerable) constructor failed to initialize the InnerHtml property."); Assert.AreEqual(text + "
" + text, htmlSpanNode.InnerHtml); Assert.IsNotNull(htmlSpanNode.OuterHtml, "The HtmlSpanNode(IEnumerable) constructor failed to initialize the OuterHtml property."); Assert.AreEqual("" + text + "
" + text + "
", htmlSpanNode.OuterHtml); Assert.IsNotNull(htmlSpanNode.Type, "The HtmlSpanNode(IEnumerable) constructor failed to initialize the Type property"); Assert.AreEqual(HtmlNodeType.Span, htmlSpanNode.Type); } [TestMethod] public void Test_Parse_TextWithSpanTag() { String htmlText = "asdf123fdsa"; String expectedFirstNodeOuterHtml = "asdf"; String expectedSecondNodeOuterHtml = "123"; String expectedThirdNodeOuterHtml = "fdsa"; String expectedSecondNodeInnerHtml = "123"; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, ""); Assert.IsInstanceOfType(htmlNode, typeof(HtmlDocumentNode)); Assert.AreEqual(htmlText, htmlNode.OuterHtml); Assert.AreEqual(3, htmlNode.Children.Count); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlTextNode)); Assert.AreEqual(expectedFirstNodeOuterHtml, htmlNode.Children[0].OuterHtml); Assert.AreEqual(0, htmlNode.Children[0].Children.Count); Assert.IsInstanceOfType(htmlNode.Children[1], typeof(HtmlSpanNode)); Assert.AreEqual(expectedSecondNodeOuterHtml, htmlNode.Children[1].OuterHtml); Assert.AreEqual(1, htmlNode.Children[1].Children.Count); Assert.IsInstanceOfType(htmlNode.Children[1].Children[0], typeof(HtmlTextNode)); Assert.AreEqual(expectedSecondNodeInnerHtml, htmlNode.Children[1].Children[0].OuterHtml); Assert.AreEqual(0, htmlNode.Children[1].Children[0].Children.Count); Assert.IsInstanceOfType(htmlNode.Children[2], typeof(HtmlTextNode)); Assert.AreEqual(expectedThirdNodeOuterHtml, htmlNode.Children[2].OuterHtml); Assert.AreEqual(0, htmlNode.Children[2].Children.Count); } [TestMethod] public void Test_Parse_TextWithBrTag() { String htmlText = "asdf
asdf"; String expectedResult = "asdf
asdf"; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, "The HtmlNode returned by the parser is null."); Assert.AreEqual(htmlNode.Children.Count, 3); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlTextNode)); HtmlTextNode htmlTextNode = htmlNode.Children[0] as HtmlTextNode; Assert.IsInstanceOfType(htmlNode.Children[1], typeof(HtmlBrNode)); HtmlBrNode htmlBrNode = htmlNode.Children[1] as HtmlBrNode; Assert.IsInstanceOfType(htmlNode.Children[2], typeof(HtmlTextNode)); htmlTextNode = htmlNode.Children[2] as HtmlTextNode; Assert.AreEqual(expectedResult, htmlNode.InnerHtml); } [TestMethod] public void Test_Parse_SpanWithStyle() { String htmlText = "asdf"; String expectedResult = "asdf"; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, "The HtmlNode returned by the parser is null."); Assert.AreEqual(htmlNode.Children.Count, 1); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlSpanNode)); HtmlSpanNode spanNode = htmlNode.Children[0] as HtmlSpanNode; IEnumerable> spanStyleAttributes = spanNode.Attributes.Where(i=>i.Key == "style"); Assert.AreEqual(spanStyleAttributes.Count(), 0); IEnumerable> spanColorStyles = spanNode.Styles.Where(i => i.Key == "color"); Assert.AreEqual(spanColorStyles.Count(), 1); KeyValuePair spanColorStyle = spanColorStyles.First(); Assert.AreEqual("rgb(0, 0, 0)", spanColorStyle.Value); //Assert.AreEqual(spanColorStyle.Value, "black"); /**/ Assert.AreEqual(expectedResult, htmlNode.InnerHtml); } [TestMethod] public void Test_Parse_Div() { String htmlText = "
asdf
"; String expectedResult = "
asdf
"; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, "The HtmlNode returned by the parser is null."); Assert.AreEqual(htmlNode.Children.Count, 1); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlDivNode)); HtmlDivNode divNode = htmlNode.Children[0] as HtmlDivNode; Assert.AreEqual(divNode.Children.Count, 1); Assert.AreEqual(expectedResult, htmlNode.InnerHtml); } [TestMethod] public void Test_Parse_Img() { String htmlText = ""; String expectedResult = ""; HtmlNode htmlNode = Parser.Parse(htmlText); Assert.IsNotNull(htmlNode, "The HtmlNode returned by the parser is null."); Assert.AreEqual(htmlNode.Children.Count, 1); Assert.IsInstanceOfType(htmlNode.Children[0], typeof(HtmlImgNode)); HtmlImgNode imgNode = htmlNode.Children[0] as HtmlImgNode; Assert.AreEqual(imgNode.Children.Count, 0); Assert.AreEqual(expectedResult, htmlNode.InnerHtml); Assert.AreEqual(imgNode.Attributes.Count, 1); Assert.AreEqual(imgNode.Styles.Count, 0); var temp = imgNode.Attributes.Where(i=>i.Key == "src"); Assert.AreEqual(temp.Count(), 1); Assert.AreEqual(temp.Single().Value, "http://blogs.msdn.com/blogfiles/klevereblog/WindowsLiveWriter/Bingishere_A002/bing-logo_2.jpg"); } } }