| Index: Source/core/dom/DocumentTest.cpp
|
| diff --git a/Source/core/dom/DocumentMarkerControllerTest.cpp b/Source/core/dom/DocumentTest.cpp
|
| similarity index 28%
|
| copy from Source/core/dom/DocumentMarkerControllerTest.cpp
|
| copy to Source/core/dom/DocumentTest.cpp
|
| index f7132ed5527868f0cc41ea56f18cc002c859ace1..99fac54a39d7b23a8bee7c8cd33f4606967deff6 100644
|
| --- a/Source/core/dom/DocumentMarkerControllerTest.cpp
|
| +++ b/Source/core/dom/DocumentTest.cpp
|
| @@ -1,5 +1,5 @@
|
| /*
|
| - * Copyright (c) 2013, Google Inc. All rights reserved.
|
| + * Copyright (c) 2014, Google Inc. All rights reserved.
|
| *
|
| * Redistribution and use in source and binary forms, with or without
|
| * modification, are permitted provided that the following conditions are
|
| @@ -29,153 +29,94 @@
|
| */
|
|
|
| #include "config.h"
|
| -#include "core/dom/DocumentMarkerController.h"
|
| -
|
| -#include "bindings/v8/ExceptionStatePlaceholder.h"
|
| #include "core/dom/Document.h"
|
| -#include "core/dom/Range.h"
|
| -#include "core/dom/Text.h"
|
| -#include "core/html/HTMLElement.h"
|
| +
|
| #include "core/testing/DummyPageHolder.h"
|
| -#include "wtf/PassRefPtr.h"
|
| -#include "wtf/RefPtr.h"
|
| -#include "wtf/testing/WTFTestHelpers.h"
|
| +#include <gmock/gmock.h>
|
| #include <gtest/gtest.h>
|
|
|
| using namespace WebCore;
|
|
|
| namespace {
|
|
|
| -class DocumentMarkerControllerTest : public ::testing::Test {
|
| +class DocumentTest : public ::testing::Test {
|
| protected:
|
| virtual void SetUp() OVERRIDE;
|
|
|
| - Document& document() const { return *m_document; }
|
| - DocumentMarkerController& markerController() const { return *m_document->markers(); }
|
| -
|
| - PassRefPtr<Text> createTextNode(const char*);
|
| - void markNodeContents(PassRefPtr<Node>);
|
| - void setBodyInnerHTML(const char*);
|
| + Document& document() const { return m_dummyPageHolder->document(); }
|
| + Page& page() const { return m_dummyPageHolder->page(); }
|
|
|
| private:
|
| OwnPtr<DummyPageHolder> m_dummyPageHolder;
|
| - Document* m_document;
|
| };
|
|
|
| -void DocumentMarkerControllerTest::SetUp()
|
| +void DocumentTest::SetUp()
|
| {
|
| m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
|
| - m_document = &m_dummyPageHolder->document();
|
| - ASSERT(m_document);
|
| -}
|
| -
|
| -PassRefPtr<Text> DocumentMarkerControllerTest::createTextNode(const char* textContents)
|
| -{
|
| - return document().createTextNode(String::fromUTF8(textContents));
|
| -}
|
| -
|
| -void DocumentMarkerControllerTest::markNodeContents(PassRefPtr<Node> node)
|
| -{
|
| - // Force renderers to be created; TextIterator, which is used in
|
| - // DocumentMarkerControllerTest::addMarker(), needs them.
|
| - document().updateLayout();
|
| - RefPtr<Range> range = rangeOfContents(node.get());
|
| - markerController().addMarker(range.get(), DocumentMarker::Spelling);
|
| -}
|
| -
|
| -void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent)
|
| -{
|
| - document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION);
|
| -}
|
| -
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByNormalize)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - parent->appendChild(createTextNode("bar").get());
|
| - markNodeContents(parent.get());
|
| - EXPECT_EQ(2u, markerController().markers().size());
|
| - parent->normalize();
|
| - }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| -}
|
| -
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveChildren)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent.get());
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - parent->removeChildren();
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| }
|
|
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedByRemoveMarked)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent);
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - parent->removeChild(parent->firstChild());
|
| - }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| -}
|
| +class MockDocumentVisibilityObserver : public DocumentVisibilityObserver {
|
| +public:
|
| + MockDocumentVisibilityObserver(Document& document) : DocumentVisibilityObserver(document) { }
|
|
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveAncestor)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent);
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - parent->parentNode()->parentNode()->removeChild(parent->parentNode());
|
| - }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| -}
|
| + MOCK_METHOD1(didChangeVisibilityState, void(PageVisibilityState));
|
| +};
|
|
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveParent)
|
| +TEST_F(DocumentTest, VisibilityOberver)
|
| {
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent);
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - parent->parentNode()->removeChild(parent.get());
|
| - }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| -}
|
| + page().setVisibilityState(PageVisibilityStateVisible, true); // initial state
|
| + MockDocumentVisibilityObserver observer1(document());
|
|
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByReplaceChild)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent.get());
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - parent->replaceChild(createTextNode("bar").get(), parent->firstChild());
|
| + MockDocumentVisibilityObserver observer2(document());
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer1);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer2);
|
| +
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + page().setVisibilityState(PageVisibilityStateHidden, false);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer1);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer2);
|
| +
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + page().setVisibilityState(PageVisibilityStateHidden, false);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer1);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer2);
|
| +
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + OwnPtr<DummyPageHolder> alternatePage = DummyPageHolder::create(IntSize(800, 600));
|
| + Document& alternateDocument = alternatePage->document();
|
| + observer2.setObservedDocument(alternateDocument);
|
| + page().setVisibilityState(PageVisibilityStateVisible, false);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer1);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer2);
|
| +
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
|
| + EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
|
| + observer2.setObservedDocument(document());
|
| + page().setVisibilityState(PageVisibilityStateHidden, false);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer1);
|
| + ::testing::Mock::VerifyAndClearExpectations(&observer2);
|
| }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| -}
|
|
|
| -TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedBySetInnerHTML)
|
| -{
|
| - setBodyInnerHTML("<b><i>foo</i></b>");
|
| - {
|
| - RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
|
| - markNodeContents(parent);
|
| - EXPECT_EQ(1u, markerController().markers().size());
|
| - setBodyInnerHTML("");
|
| - }
|
| - // No more reference to marked node.
|
| - EXPECT_EQ(0u, markerController().markers().size());
|
| + // observer2 destroyed
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
|
| + EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1);
|
| + page().setVisibilityState(PageVisibilityStateVisible, false);
|
| }
|
|
|
| -}
|
| +} // unnamed namespace
|
|
|