示例#1
0
        public void AttributeParsing_NamespacesMissingNameAndPrefix()
        {
            var target = ParserAccessor.CreateParser(":=foo");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.False(at.HasName());

                Assert.True(at.HasValue());
                Assert.Equal(2, at.ValueToken.Start);
                Assert.Equal(3, at.ValueToken.Length);

                NameToken nameToken = at.NameToken as NameToken;

                Assert.Equal(1, nameToken.ColonRange.Length);

                Assert.False(nameToken.HasName());
                Assert.Equal(0, nameToken.NameRange.Length);

                Assert.False(nameToken.HasPrefix());
                Assert.Equal(0, nameToken.PrefixRange.Length);
            };
            target.OnAttributeState();
        }
示例#2
0
        public void AttributeParsing_Namespaces()
        {
            var target = ParserAccessor.CreateParser("ns:name=foo");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(7, at.NameToken.End);

                Assert.True(at.HasValue());
                Assert.Equal(8, at.ValueToken.Start);
                Assert.Equal(11, at.ValueToken.End);

                NameToken nameToken = at.NameToken as NameToken;

                Assert.True(nameToken.HasQualifiedName());

                Assert.True(nameToken.NameRange.Length > 0);
                Assert.Equal(3, nameToken.NameRange.Start);
                Assert.Equal(7, nameToken.NameRange.End);

                Assert.True(nameToken.PrefixRange.Length > 0);
                Assert.Equal(0, nameToken.PrefixRange.Start);
                Assert.Equal(2, nameToken.PrefixRange.End);
            };

            target.OnAttributeState();
        }
示例#3
0
        public void AttributeParse_RandomCharacters()
        {
            var target = new HtmlParser();

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                switch (attributeCalls)
                {
                case 0:
                    Assert.True(at.HasName());
                    Assert.Equal(3, at.NameToken.Start);
                    Assert.Equal(2, at.NameToken.Length);

                    Assert.True(at.HasValue());
                    Assert.Equal(6, at.ValueToken.Start);
                    Assert.Equal(1, at.ValueToken.Length);
                    break;

                case 1:
                    Assert.True(at.HasName());
                    Assert.Equal(8, at.NameToken.Start);
                    Assert.Equal(1, at.NameToken.Length);

                    Assert.True(at.HasValue());
                    Assert.Equal(10, at.ValueToken.Start);
                    Assert.Equal(1, at.ValueToken.Length);
                    break;

                case 2:
                    Assert.True(at.HasName());
                    Assert.Equal(12, at.NameToken.Start);
                    Assert.Equal(2, at.NameToken.Length);

                    Assert.False(at.HasValue());
                    break;
                }
                attributeCalls++;
            };

            attributeCalls = 0;
            target.Parse("<a id=# $=% ^^");

            Assert.Equal(3, attributeCalls);
        }
示例#4
0
        public void AttributeParse_MissingNameAndValue()
        {
            var target = ParserAccessor.CreateParser("=");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.False(at.HasName());
                Assert.False(at.HasValue());
            };

            target.OnAttributeState(100);
        }
示例#5
0
        public void AttributeParse_InlineStyle_Typo()
        {
            var target = new HtmlParser();

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                switch (attributeCalls)
                {
                case 0:
                    Assert.True(at.HasName());
                    Assert.Equal(7, at.NameToken.Start);
                    Assert.Equal(5, at.NameToken.Length);

                    Assert.True(at.HasValue());
                    Assert.Equal(13, at.ValueToken.Start);
                    Assert.Equal(14, at.ValueToken.Length);
                    break;

                case 1:
                    Assert.True(at.HasName());
                    Assert.Equal(27, at.NameToken.Start);
                    Assert.Equal(1, at.NameToken.Length);

                    Assert.False(at.HasValue());
                    break;
                }
                attributeCalls++;
            };

            attributeCalls = 0;
            target.Parse("<input style=\"display:none\";>");
            Assert.Equal(2, attributeCalls);
        }
示例#6
0
        public void AttributeParse_WellFormed4()
        {
            var target = ParserAccessor.CreateParser("nowrap");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(6, at.NameToken.Length);

                Assert.False(at.HasValue());
            };

            target.OnAttributeState(100);
        }
示例#7
0
        public void AttributeParse_WellFormed1()
        {
            var target = ParserAccessor.CreateParser("foo=bar");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(3, at.NameToken.End);

                Assert.True(at.HasValue());
                Assert.Equal(4, at.ValueToken.Start);
                Assert.Equal(7, at.ValueToken.End);
            };

            target.OnAttributeState(100);
        }
示例#8
0
        public void AttributeParse_InlineStyle()
        {
            var target = ParserAccessor.CreateParser("style=\"display:none;\"");

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(5, at.NameToken.Length);

                Assert.True(at.HasValue());
                Assert.Equal(6, at.ValueToken.Start);
                Assert.Equal(15, at.ValueToken.Length);
            };

            target.OnAttributeState(100);
        }
示例#9
0
        public void AttributeParse_WellFormed2()
        {
            var text   = "class=\"foo\"";
            var target = ParserAccessor.CreateParser(text);

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(5, at.NameToken.End);

                Assert.True(at.HasValue());
                Assert.Equal(6, at.ValueToken.Start);
                Assert.Equal(text.Length, at.ValueToken.End);
            };

            target.OnAttributeState(100);
        }
示例#10
0
        public void AttributeParse_Script()
        {
            var text   = "onclick=\"window.navigateTo(x<y)\"  ";
            var target = ParserAccessor.CreateParser(text);

            target.AttributeFound +=
                delegate(object sender, HtmlParserAttributeEventArgs args) {
                Assert.True(args.AttributeToken is AttributeToken);
                AttributeToken at = args.AttributeToken;

                Assert.True(at.HasName());
                Assert.Equal(0, at.NameToken.Start);
                Assert.Equal(7, at.NameToken.End);

                Assert.True(at.HasValue());
                Assert.Equal(8, at.ValueToken.Start);
                Assert.Equal(text.Length - 2, at.ValueToken.End);
            };

            target.OnAttributeState(100);
        }
示例#11
0
 /// <summary>
 /// Determines if attribute is a standalone attribute (i.e. does not have equal sign or value)
 /// </summary>
 public bool IsStandalone()
 {
     return(AttributeToken.EqualsSign < 0 && !AttributeToken.HasValue());
 }