Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Unified Diff: third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp

Issue 2277713002: Rename CustomElementsRegistry to CustomElementRegistry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
deleted file mode 100644
index 7b844f544e3ba6832579be4ca2446df06bfc0d1f..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "core/dom/custom/CustomElementsRegistry.h"
-
-#include "bindings/core/v8/ExceptionState.h"
-#include "bindings/core/v8/ScriptValue.h"
-#include "core/dom/Document.h"
-#include "core/dom/Element.h"
-#include "core/dom/ElementRegistrationOptions.h"
-#include "core/dom/custom/CEReactionsScope.h"
-#include "core/dom/custom/CustomElementDefinition.h"
-#include "core/dom/custom/CustomElementDefinitionBuilder.h"
-#include "core/dom/custom/CustomElementDescriptor.h"
-#include "core/dom/custom/CustomElementTestHelpers.h"
-#include "core/dom/shadow/ShadowRoot.h"
-#include "core/dom/shadow/ShadowRootInit.h"
-#include "core/testing/DummyPageHolder.h"
-#include "platform/ScriptForbiddenScope.h"
-#include "platform/heap/Handle.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/text/AtomicString.h"
-#include <memory>
-
-namespace blink {
-
-class CustomElementsRegistryTest : public ::testing::Test {
-protected:
- void SetUp()
- {
- m_page.reset(DummyPageHolder::create(IntSize(1, 1)).release());
- }
-
- void TearDown()
- {
- m_page = nullptr;
- }
-
- Document& document() { return m_page->document(); }
-
- CustomElementsRegistry& registry()
- {
- return *m_page->frame().localDOMWindow()->customElements();
- }
-
- ScriptState* scriptState()
- {
- return ScriptState::forMainWorld(&m_page->frame());
- }
-
- void collectCandidates(
- const CustomElementDescriptor& desc,
- HeapVector<Member<Element>>* elements)
- {
- registry().collectCandidates(desc, elements);
- }
-
- ShadowRoot* attachShadowTo(Element* element)
- {
- NonThrowableExceptionState noExceptions;
- ShadowRootInit shadowRootInit;
- return
- element->attachShadow(scriptState(), shadowRootInit, noExceptions);
- }
-
-private:
- std::unique_ptr<DummyPageHolder> m_page;
-};
-
-TEST_F(
- CustomElementsRegistryTest,
- collectCandidates_shouldNotIncludeElementsRemovedFromDocument)
-{
- Element* element = CreateElement("a-a").inDocument(&document());
- registry().addCandidate(element);
-
- HeapVector<Member<Element>> elements;
- collectCandidates(
- CustomElementDescriptor("a-a", "a-a"),
- &elements);
-
- EXPECT_TRUE(elements.isEmpty())
- << "no candidates should have been found, but we have "
- << elements.size();
- EXPECT_FALSE(elements.contains(element))
- << "the out-of-document candidate should not have been found";
-}
-
-TEST_F(
- CustomElementsRegistryTest,
- collectCandidates_shouldNotIncludeElementsInDifferentDocument)
-{
- Element* element = CreateElement("a-a").inDocument(&document());
- registry().addCandidate(element);
-
- Document* otherDocument = HTMLDocument::create();
- otherDocument->appendChild(element);
- EXPECT_EQ(otherDocument, element->ownerDocument())
- << "sanity: another document should have adopted an element on append";
-
- HeapVector<Member<Element>> elements;
- collectCandidates(
- CustomElementDescriptor("a-a", "a-a"),
- &elements);
-
- EXPECT_TRUE(elements.isEmpty())
- << "no candidates should have been found, but we have "
- << elements.size();
- EXPECT_FALSE(elements.contains(element))
- << "the adopted-away candidate should not have been found";
-}
-
-TEST_F(
- CustomElementsRegistryTest,
- collectCandidates_shouldOnlyIncludeCandidatesMatchingDescriptor)
-{
- CustomElementDescriptor descriptor("hello-world", "hello-world");
-
- // Does not match: namespace is not HTML
- Element* elementA = CreateElement("hello-world")
- .inDocument(&document())
- .inNamespace("data:text/date,1981-03-10");
- // Matches
- Element* elementB = CreateElement("hello-world").inDocument(&document());
- // Does not match: local name is not hello-world
- Element* elementC = CreateElement("button")
- .inDocument(&document())
- .withIsAttribute("hello-world");
- document().documentElement()->appendChild(elementA);
- elementA->appendChild(elementB);
- elementA->appendChild(elementC);
-
- registry().addCandidate(elementA);
- registry().addCandidate(elementB);
- registry().addCandidate(elementC);
-
- HeapVector<Member<Element>> elements;
- collectCandidates(descriptor, &elements);
-
- EXPECT_EQ(1u, elements.size())
- << "only one candidates should have been found";
- EXPECT_EQ(elementB, elements[0])
- << "the matching element should have been found";
-}
-
-TEST_F(CustomElementsRegistryTest, collectCandidates_oneCandidate)
-{
- Element* element = CreateElement("a-a").inDocument(&document());
- registry().addCandidate(element);
- document().documentElement()->appendChild(element);
-
- HeapVector<Member<Element>> elements;
- collectCandidates(
- CustomElementDescriptor("a-a", "a-a"),
- &elements);
-
- EXPECT_EQ(1u, elements.size())
- << "exactly one candidate should have been found";
- EXPECT_TRUE(elements.contains(element))
- << "the candidate should be the element that was added";
-}
-
-TEST_F(CustomElementsRegistryTest, collectCandidates_shouldBeInDocumentOrder)
-{
- CreateElement factory = CreateElement("a-a");
- factory.inDocument(&document());
- Element* elementA = factory.withId("a");
- Element* elementB = factory.withId("b");
- Element* elementC = factory.withId("c");
-
- registry().addCandidate(elementB);
- registry().addCandidate(elementA);
- registry().addCandidate(elementC);
-
- document().documentElement()->appendChild(elementA);
- elementA->appendChild(elementB);
- document().documentElement()->appendChild(elementC);
-
- HeapVector<Member<Element>> elements;
- collectCandidates(
- CustomElementDescriptor("a-a", "a-a"),
- &elements);
-
- EXPECT_EQ(elementA, elements[0].get());
- EXPECT_EQ(elementB, elements[1].get());
- EXPECT_EQ(elementC, elements[2].get());
-}
-
-class TestCustomElementDefinition : public CustomElementDefinition {
- WTF_MAKE_NONCOPYABLE(TestCustomElementDefinition);
-public:
- TestCustomElementDefinition(const CustomElementDescriptor& descriptor)
- : CustomElementDefinition(descriptor)
- {
- }
-
- TestCustomElementDefinition(const CustomElementDescriptor& descriptor,
- const HashSet<AtomicString>& observedAttributes)
- : CustomElementDefinition(descriptor, observedAttributes)
- {
- }
-
- ~TestCustomElementDefinition() override = default;
-
- ScriptValue getConstructorForScript() override
- {
- return ScriptValue();
- }
-
- bool runConstructor(Element* element) override
- {
- if (constructionStack().isEmpty()
- || constructionStack().last() != element)
- return false;
- constructionStack().last().clear();
- return true;
- }
-
- HTMLElement* createElementSync(Document&, const QualifiedName&) override
- {
- return nullptr;
- }
-
- HTMLElement* createElementSync(Document&, const QualifiedName&, ExceptionState&) override
- {
- return nullptr;
- }
-};
-
-// Classes which use trace macros cannot be local because of the
-// traceImpl template.
-class LogUpgradeDefinition : public TestCustomElementDefinition {
- WTF_MAKE_NONCOPYABLE(LogUpgradeDefinition);
-public:
- LogUpgradeDefinition(const CustomElementDescriptor& descriptor)
- : TestCustomElementDefinition(descriptor, {
- "attr1",
- "attr2",
- HTMLNames::contenteditableAttr.localName(),
- })
- {
- }
-
- DEFINE_INLINE_VIRTUAL_TRACE()
- {
- TestCustomElementDefinition::trace(visitor);
- visitor->trace(m_element);
- }
-
- // TODO(dominicc): Make this class collect a vector of what's
- // upgraded; it will be useful in more tests.
- Member<Element> m_element;
- enum MethodType {
- Constructor,
- ConnectedCallback,
- DisconnectedCallback,
- AdoptedCallback,
- AttributeChangedCallback,
- };
- Vector<MethodType> m_logs;
-
- struct AttributeChanged {
- QualifiedName name;
- AtomicString oldValue;
- AtomicString newValue;
- };
- Vector<AttributeChanged> m_attributeChanged;
-
- void clear()
- {
- m_logs.clear();
- m_attributeChanged.clear();
- }
-
- bool runConstructor(Element* element) override
- {
- m_logs.append(Constructor);
- m_element = element;
- return TestCustomElementDefinition::runConstructor(element);
- }
-
- bool hasConnectedCallback() const override { return true; }
- bool hasDisconnectedCallback() const override { return true; }
- bool hasAdoptedCallback() const override {return true;}
-
- void runConnectedCallback(Element* element) override
- {
- m_logs.append(ConnectedCallback);
- EXPECT_EQ(element, m_element);
- }
-
- void runDisconnectedCallback(Element* element) override
- {
- m_logs.append(DisconnectedCallback);
- EXPECT_EQ(element, m_element);
- }
-
- void runAdoptedCallback(Element* element) override
- {
- m_logs.append(AdoptedCallback);
- EXPECT_EQ(element, m_element);
- }
-
- void runAttributeChangedCallback(Element* element, const QualifiedName& name, const AtomicString& oldValue, const AtomicString& newValue) override
- {
- m_logs.append(AttributeChangedCallback);
- EXPECT_EQ(element, m_element);
- m_attributeChanged.append(AttributeChanged { name, oldValue, newValue });
- }
-};
-
-class LogUpgradeBuilder final : public CustomElementDefinitionBuilder {
- STACK_ALLOCATED();
- WTF_MAKE_NONCOPYABLE(LogUpgradeBuilder);
-public:
- LogUpgradeBuilder() { }
-
- bool checkConstructorIntrinsics() override { return true; }
- bool checkConstructorNotRegistered() override { return true; }
- bool checkPrototype() override { return true; }
- bool rememberOriginalProperties() override { return true; }
- CustomElementDefinition* build(
- const CustomElementDescriptor& descriptor) {
- return new LogUpgradeDefinition(descriptor);
- }
-};
-
-TEST_F(CustomElementsRegistryTest, define_upgradesInDocumentElements)
-{
- ScriptForbiddenScope doNotRelyOnScript;
-
- Element* element = CreateElement("a-a").inDocument(&document());
- element->setAttribute(QualifiedName(nullAtom, "attr1", HTMLNames::xhtmlNamespaceURI), "v1");
- element->setBooleanAttribute(HTMLNames::contenteditableAttr, true);
- document().documentElement()->appendChild(element);
-
- LogUpgradeBuilder builder;
- NonThrowableExceptionState shouldNotThrow;
- {
- CEReactionsScope reactions;
- registry().define(
- "a-a",
- builder,
- ElementRegistrationOptions(),
- shouldNotThrow);
- }
- LogUpgradeDefinition* definition =
- static_cast<LogUpgradeDefinition*>(registry().definitionForName("a-a"));
- EXPECT_EQ(LogUpgradeDefinition::Constructor, definition->m_logs[0])
- << "defining the element should have 'upgraded' the existing element";
- EXPECT_EQ(element, definition->m_element)
- << "the existing a-a element should have been upgraded";
-
- EXPECT_EQ(LogUpgradeDefinition::AttributeChangedCallback, definition->m_logs[1])
- << "Upgrade should invoke attributeChangedCallback for all attributes";
- EXPECT_EQ("attr1", definition->m_attributeChanged[0].name);
- EXPECT_EQ(nullAtom, definition->m_attributeChanged[0].oldValue);
- EXPECT_EQ("v1", definition->m_attributeChanged[0].newValue);
-
- EXPECT_EQ(LogUpgradeDefinition::AttributeChangedCallback, definition->m_logs[2])
- << "Upgrade should invoke attributeChangedCallback for all attributes";
- EXPECT_EQ("contenteditable", definition->m_attributeChanged[1].name);
- EXPECT_EQ(nullAtom, definition->m_attributeChanged[1].oldValue);
- EXPECT_EQ(emptyAtom, definition->m_attributeChanged[1].newValue);
- EXPECT_EQ(2u, definition->m_attributeChanged.size())
- << "Upgrade should invoke attributeChangedCallback for all attributes";
-
- EXPECT_EQ(LogUpgradeDefinition::ConnectedCallback, definition->m_logs[3])
- << "upgrade should invoke connectedCallback";
-
- EXPECT_EQ(4u, definition->m_logs.size())
- << "upgrade should not invoke other callbacks";
-}
-
-TEST_F(CustomElementsRegistryTest, attributeChangedCallback)
-{
- ScriptForbiddenScope doNotRelyOnScript;
-
- Element* element = CreateElement("a-a").inDocument(&document());
- document().documentElement()->appendChild(element);
-
- LogUpgradeBuilder builder;
- NonThrowableExceptionState shouldNotThrow;
- {
- CEReactionsScope reactions;
- registry().define(
- "a-a",
- builder,
- ElementRegistrationOptions(),
- shouldNotThrow);
- }
- LogUpgradeDefinition* definition =
- static_cast<LogUpgradeDefinition*>(registry().definitionForName("a-a"));
-
- definition->clear();
- {
- CEReactionsScope reactions;
- element->setAttribute(QualifiedName(nullAtom, "attr2", HTMLNames::xhtmlNamespaceURI), "v2");
- }
- EXPECT_EQ(LogUpgradeDefinition::AttributeChangedCallback, definition->m_logs[0])
- << "Adding an attribute should invoke attributeChangedCallback";
- EXPECT_EQ(1u, definition->m_attributeChanged.size())
- << "Adding an attribute should invoke attributeChangedCallback";
- EXPECT_EQ("attr2", definition->m_attributeChanged[0].name);
- EXPECT_EQ(nullAtom, definition->m_attributeChanged[0].oldValue);
- EXPECT_EQ("v2", definition->m_attributeChanged[0].newValue);
-
- EXPECT_EQ(1u, definition->m_logs.size())
- << "upgrade should not invoke other callbacks";
-}
-
-TEST_F(CustomElementsRegistryTest, disconnectedCallback)
-{
- ScriptForbiddenScope doNotRelyOnScript;
-
- Element* element = CreateElement("a-a").inDocument(&document());
- document().documentElement()->appendChild(element);
-
- LogUpgradeBuilder builder;
- NonThrowableExceptionState shouldNotThrow;
- {
- CEReactionsScope reactions;
- registry().define(
- "a-a",
- builder,
- ElementRegistrationOptions(),
- shouldNotThrow);
- }
- LogUpgradeDefinition* definition =
- static_cast<LogUpgradeDefinition*>(registry().definitionForName("a-a"));
-
- definition->clear();
- {
- CEReactionsScope reactions;
- element->remove(shouldNotThrow);
- }
- EXPECT_EQ(LogUpgradeDefinition::DisconnectedCallback, definition->m_logs[0])
- << "remove() should invoke disconnectedCallback";
-
- EXPECT_EQ(1u, definition->m_logs.size())
- << "remove() should not invoke other callbacks";
-}
-
-TEST_F(CustomElementsRegistryTest, adoptedCallback)
-{
- ScriptForbiddenScope doNotRelyOnScript;
-
- Element* element = CreateElement("a-a").inDocument(&document());
- document().documentElement()->appendChild(element);
-
- LogUpgradeBuilder builder;
- NonThrowableExceptionState shouldNotThrow;
- {
- CEReactionsScope reactions;
- registry().define(
- "a-a",
- builder,
- ElementRegistrationOptions(),
- shouldNotThrow);
- }
- LogUpgradeDefinition* definition =
- static_cast<LogUpgradeDefinition*>(registry().definitionForName("a-a"));
-
- definition->clear();
- Document* otherDocument = HTMLDocument::create();
- {
- CEReactionsScope reactions;
- otherDocument->adoptNode(element, ASSERT_NO_EXCEPTION);
- }
- EXPECT_EQ(LogUpgradeDefinition::DisconnectedCallback, definition->m_logs[0])
- << "adoptNode() should invoke disconnectedCallback";
-
- EXPECT_EQ(LogUpgradeDefinition::AdoptedCallback, definition->m_logs[1])
- << "adoptNode() should invoke adoptedCallback";
-
- EXPECT_EQ(2u, definition->m_logs.size())
- << "adoptNode() should not invoke other callbacks";
-}
-
-// TODO(dominicc): Add tests which adjust the "is" attribute when type
-// extensions are implemented.
-
-} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698