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); }