예제 #1
0
TEST(HTMLTreeBuilderSimulatorTest, SelfClosingMathFollowedByScript) {
    HTMLParserOptions options;
    HTMLTreeBuilderSimulator simulator(options);
    std::unique_ptr<HTMLTokenizer> tokenizer = HTMLTokenizer::create(options);
    SegmentedString input("<math/><script></script>");
    HTMLToken token;
    EXPECT_TRUE(tokenizer->nextToken(input, token));
    EXPECT_EQ(HTMLTreeBuilderSimulator::OtherToken,
              simulator.simulate(CompactHTMLToken(&token, TextPosition()),
                                 tokenizer.get()));

    token.clear();
    EXPECT_TRUE(tokenizer->nextToken(input, token));
    EXPECT_EQ(HTMLTreeBuilderSimulator::ScriptStart,
              simulator.simulate(CompactHTMLToken(&token, TextPosition()),
                                 tokenizer.get()));

    EXPECT_EQ(HTMLTokenizer::ScriptDataState, tokenizer->getState());

    token.clear();
    EXPECT_TRUE(tokenizer->nextToken(input, token));
    EXPECT_EQ(HTMLTreeBuilderSimulator::ScriptEnd,
              simulator.simulate(CompactHTMLToken(&token, TextPosition()),
                                 tokenizer.get()));
}
TEST(AtomicHTMLTokenTest, EmptyAttributeValueFromCompactHTMLToken)
{
    HTMLToken token;
    token.beginStartTag('a');
    token.addNewAttribute();
    token.beginAttributeName(3);
    token.appendToAttributeName('b');
    token.endAttributeName(4);
    token.addNewAttribute();
    token.beginAttributeName(5);
    token.appendToAttributeName('c');
    token.endAttributeName(6);
    token.beginAttributeValue(8);
    token.endAttributeValue(8);

    AtomicHTMLToken atoken(CompactHTMLToken(&token, TextPosition()));

    const blink::Attribute* attributeB = atoken.getAttributeItem(
        QualifiedName(AtomicString(), "b", AtomicString()));
    ASSERT_TRUE(attributeB);
    EXPECT_FALSE(attributeB->value().isNull());
    EXPECT_TRUE(attributeB->value().isEmpty());

    const blink::Attribute* attributeC = atoken.getAttributeItem(
        QualifiedName(AtomicString(), "c", AtomicString()));
    ASSERT_TRUE(attributeC);
    EXPECT_FALSE(attributeC->value().isNull());
    EXPECT_TRUE(attributeC->value().isEmpty());

    const blink::Attribute* attributeD = atoken.getAttributeItem(
        QualifiedName(AtomicString(), "d", AtomicString()));
    EXPECT_FALSE(attributeD);
}