Index: third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp |
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp |
index 7f47cd6735fd9502b9eee3878bfe94629eacd77b..f3a4b563a80daad825adec6c628f8a2e192f3705 100644 |
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp |
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp |
@@ -4,6 +4,11 @@ |
#include "core/dom/custom/CustomElement.h" |
+#include "core/HTMLNames.h" |
+#include "core/SVGNames.h" |
+#include "core/dom/Document.h" |
+#include "core/html/HTMLElement.h" |
+#include "core/testing/DummyPageHolder.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace blink { |
@@ -121,4 +126,61 @@ TEST(CustomElementTest, TestIsValidNameHyphenContainingElementNames) |
EXPECT_FALSE(CustomElement::isValidName("missing-glyph")); |
} |
+TEST(CustomElementTest, StateByParser) |
+{ |
+ const char* bodyContent = "<div id=div></div>" |
+ "<a-a id=v1v0></a-a>" |
+ "<font-face id=v0></font-face>"; |
+ OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(); |
+ Document& document = pageHolder->document(); |
+ document.body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION); |
+ |
+ struct { |
+ const char* id; |
+ CustomElementState state; |
+ Element::V0CustomElementState v0state; |
+ } parserData[] = { |
+ { "div", CustomElementState::Uncustomized, Element::V0NotCustomElement }, |
+ { "v1v0", CustomElementState::Undefined, Element::V0WaitingForUpgrade }, |
+ { "v0", CustomElementState::Uncustomized, Element::V0WaitingForUpgrade }, |
+ }; |
+ for (const auto& data : parserData) { |
+ Element* element = document.getElementById(data.id); |
+ EXPECT_EQ(data.state, element->getCustomElementState()) << data.id; |
+ EXPECT_EQ(data.v0state, element->getV0CustomElementState()) << data.id; |
+ } |
+} |
+ |
+TEST(CustomElementTest, StateByCreateElement) |
+{ |
+ struct { |
+ const char* name; |
+ CustomElementState state; |
+ Element::V0CustomElementState v0state; |
+ } createElementData[] = { |
+ { "div", CustomElementState::Uncustomized, Element::V0NotCustomElement }, |
+ { "a-a", CustomElementState::Undefined, Element::V0WaitingForUpgrade }, |
+ // TODO(pdr): <font-face> should be V0NotCustomElement as per the spec, |
+ // but was regressed to be V0WaitingForUpgrade in |
+ // http://crrev.com/656913006 |
+ { "font-face", CustomElementState::Uncustomized, Element::V0WaitingForUpgrade }, |
+ { "_-X", CustomElementState::Uncustomized, Element::V0WaitingForUpgrade }, |
+ }; |
+ OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(); |
+ Document& document = pageHolder->document(); |
+ for (const auto& data : createElementData) { |
+ Element* element = document.createElement(data.name, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(data.state, element->getCustomElementState()) << data.name; |
+ EXPECT_EQ(data.v0state, element->getV0CustomElementState()) << data.name; |
+ |
+ element = document.createElementNS(HTMLNames::xhtmlNamespaceURI, data.name, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(data.state, element->getCustomElementState()) << data.name; |
+ EXPECT_EQ(data.v0state, element->getV0CustomElementState()) << data.name; |
+ |
+ element = document.createElementNS(SVGNames::svgNamespaceURI, data.name, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(CustomElementState::Uncustomized, element->getCustomElementState()) << data.name; |
+ EXPECT_EQ(data.v0state, element->getV0CustomElementState()) << data.name; |
+ } |
+} |
+ |
} // namespace blink |