Index: Source/core/editing/VisibleSelectionTest.cpp |
diff --git a/Source/core/editing/VisibleSelectionTest.cpp b/Source/core/editing/VisibleSelectionTest.cpp |
index 568204f6233ddb2ee9342a6029ee896168f4866d..b8a87aa68628ca137b8c9eed5cc4e1c2c3a2f149 100644 |
--- a/Source/core/editing/VisibleSelectionTest.cpp |
+++ b/Source/core/editing/VisibleSelectionTest.cpp |
@@ -9,7 +9,6 @@ |
#include "core/dom/Range.h" |
#include "core/dom/Text.h" |
#include "core/html/HTMLElement.h" |
-#include "core/testing/CoreTestHelpers.h" |
#include "core/testing/DummyPageHolder.h" |
#include <gtest/gtest.h> |
@@ -27,138 +26,72 @@ class VisibleSelectionTest : public ::testing::Test { |
protected: |
virtual void SetUp() override; |
- Document& document() const { return m_dummyPageHolder->document(); } |
+ // Oilpan: wrapper object needed to be able to trace VisibleSelection. |
+ class VisibleSelectionWrapper : public NoBaseWillBeGarbageCollectedFinalized<VisibleSelectionWrapper> { |
+ public: |
+ DEFINE_INLINE_TRACE() |
+ { |
+ visitor->trace(m_selection); |
+ } |
- static PassRefPtrWillBeRawPtr<ShadowRoot> createShadowRootForElementWithIDAndSetInnerHTML(TreeScope&, const char* hostElementID, const char* shadowRootContent); |
+ VisibleSelection m_selection; |
+ }; |
- void setBodyContent(const char*); |
- PassRefPtrWillBeRawPtr<ShadowRoot> setShadowContent(const char*); |
+ Document& document() const { return m_dummyPageHolder->document(); } |
+ Text* textNode() const { return m_textNode.get(); } |
+ VisibleSelection& selection() { return m_wrap->m_selection; } |
// Helper function to set the VisibleSelection base/extent. |
- void setSelection(VisibleSelection& selection, int base) { setSelection(selection, base, base); } |
+ void setSelection(int base) { setSelection(base, base); } |
// Helper function to set the VisibleSelection base/extent. |
- void setSelection(VisibleSelection& selection, int base, int extend) |
+ void setSelection(int base, int extend) |
{ |
- Node* node = document().body()->firstChild(); |
- selection.setBase(Position(node, base, Position::PositionIsOffsetInAnchor)); |
- selection.setExtent(Position(node, extend, Position::PositionIsOffsetInAnchor)); |
+ m_wrap->m_selection.setBase(Position(textNode(), base)); |
+ m_wrap->m_selection.setExtent(Position(textNode(), extend)); |
} |
private: |
OwnPtr<DummyPageHolder> m_dummyPageHolder; |
+ RefPtrWillBePersistent<Text> m_textNode; |
+ OwnPtrWillBePersistent<VisibleSelectionWrapper> m_wrap; |
}; |
-void VisibleSelectionTest::SetUp() |
+void blink::VisibleSelectionTest::SetUp() |
{ |
m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); |
+ m_textNode = document().createTextNode(LOREM_IPSUM); |
+ m_wrap = adoptPtrWillBeNoop(new VisibleSelectionWrapper()); |
+ document().body()->appendChild(m_textNode.get()); |
} |
-PassRefPtrWillBeRawPtr<ShadowRoot> VisibleSelectionTest::createShadowRootForElementWithIDAndSetInnerHTML(TreeScope& scope, const char* hostElementID, const char* shadowRootContent) |
-{ |
- RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = scope.getElementById(AtomicString::fromUTF8(hostElementID))->createShadowRoot(ASSERT_NO_EXCEPTION); |
- shadowRoot->setInnerHTML(String::fromUTF8(shadowRootContent), ASSERT_NO_EXCEPTION); |
- return shadowRoot.release(); |
-} |
+} // namespace blink |
-void VisibleSelectionTest::setBodyContent(const char* bodyContent) |
-{ |
- document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION); |
-} |
+namespace { |
-PassRefPtrWillBeRawPtr<ShadowRoot> VisibleSelectionTest::setShadowContent(const char* shadowContent) |
-{ |
- return createShadowRootForElementWithIDAndSetInnerHTML(document(), "host", shadowContent); |
-} |
+using namespace blink; |
TEST_F(VisibleSelectionTest, Initialisation) |
{ |
- setBodyContent(LOREM_IPSUM); |
+ setSelection(0); |
- VisibleSelection selection; |
- setSelection(selection, 0); |
+ EXPECT_FALSE(selection().isNone()); |
+ EXPECT_TRUE(selection().isCaret()); |
- EXPECT_FALSE(selection.isNone()); |
- EXPECT_TRUE(selection.isCaret()); |
- |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(0, range->startOffset()); |
EXPECT_EQ(0, range->endOffset()); |
EXPECT_EQ("", range->text()); |
} |
-TEST_F(VisibleSelectionTest, ShadowCrossing) |
-{ |
- static const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>"; |
- static const char* shadowContent = "<a><span id='s4'>44</span><content select=#two></content><span id='s5'>55</span><content select=#one></content><span id='s6'>66</span></a>"; |
- setBodyContent(bodyContent); |
- RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent); |
- |
- RefPtrWillBeRawPtr<Element> body = document().body(); |
- RefPtrWillBeRawPtr<Element> host = body->querySelector("#host", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> one = body->querySelector("#one", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> two = body->querySelector("#two", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> six = shadowRoot->querySelector("#s6", ASSERT_NO_EXCEPTION); |
- |
- VisibleSelection selection(Position::firstPositionInNode(one.get()), Position::lastPositionInNode(shadowRoot.get())); |
- |
- EXPECT_EQ(Position(host.get(), Position::PositionIsBeforeAnchor), selection.start()); |
- EXPECT_EQ(Position(one->firstChild(), 0, Position::PositionIsOffsetInAnchor), selection.end()); |
-} |
- |
-TEST_F(VisibleSelectionTest, ShadowDistributedNodes) |
-{ |
- static const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>"; |
- static const char* shadowContent = "<a><span id='s4'>44</span><content select=#two></content><span id='s5'>55</span><content select=#one></content><span id='s6'>66</span></a>"; |
- setBodyContent(bodyContent); |
- RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent); |
- |
- RefPtrWillBeRawPtr<Element> body = document().body(); |
- RefPtrWillBeRawPtr<Element> host = body->querySelector("#host", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> one = body->querySelector("#one", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> two = body->querySelector("#two", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> five = shadowRoot->querySelector("#s5", ASSERT_NO_EXCEPTION); |
- |
- VisibleSelection selection(Position::firstPositionInNode(one.get()), Position::lastPositionInNode(two.get())); |
- |
- EXPECT_EQ(Position(one->firstChild(), 0, Position::PositionIsOffsetInAnchor), selection.start()); |
- EXPECT_EQ(Position(two->firstChild(), 2, Position::PositionIsOffsetInAnchor), selection.end()); |
-} |
- |
-TEST_F(VisibleSelectionTest, ShadowNested) |
-{ |
- static const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>"; |
- static const char* shadowContent = "<a><span id='s4'>44</span><content select=#two></content><span id='s5'>55</span><content select=#one></content><span id='s6'>66</span></a>"; |
- static const char* shadowContent2 = "<span id='s7'>77</span><content></content><span id='s8'>88</span>"; |
- setBodyContent(bodyContent); |
- RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent); |
- RefPtrWillBeRawPtr<ShadowRoot> shadowRoot2 = createShadowRootForElementWithIDAndSetInnerHTML(*shadowRoot, "s5", shadowContent2); |
- |
- RefPtrWillBeRawPtr<Element> body = document().body(); |
- RefPtrWillBeRawPtr<Element> host = body->querySelector("#host", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> one = body->querySelector("#one", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> two = body->querySelector("#two", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> host2 = shadowRoot->querySelector("#host2", ASSERT_NO_EXCEPTION); |
- RefPtrWillBeRawPtr<Element> eight = shadowRoot2->querySelector("#s8", ASSERT_NO_EXCEPTION); |
- |
- VisibleSelection selection(Position::firstPositionInNode(one.get()), Position::lastPositionInNode(shadowRoot2.get())); |
- |
- EXPECT_EQ(Position(host.get(), Position::PositionIsBeforeAnchor), selection.start()); |
- EXPECT_EQ(Position(one->firstChild(), 0, Position::PositionIsOffsetInAnchor), selection.end()); |
-} |
- |
TEST_F(VisibleSelectionTest, WordGranularity) |
{ |
- setBodyContent(LOREM_IPSUM); |
- |
- VisibleSelection selection; |
- |
// Beginning of a word. |
{ |
- setSelection(selection, 0); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(0); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(0, range->startOffset()); |
EXPECT_EQ(5, range->endOffset()); |
EXPECT_EQ("Lorem", range->text()); |
@@ -166,10 +99,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// Middle of a word. |
{ |
- setSelection(selection, 8); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(8); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(6, range->startOffset()); |
EXPECT_EQ(11, range->endOffset()); |
EXPECT_EQ("ipsum", range->text()); |
@@ -179,10 +112,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// FIXME: that sounds buggy, we might want to select the word _before_ instead |
// of the space... |
{ |
- setSelection(selection, 5); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(5); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(5, range->startOffset()); |
EXPECT_EQ(6, range->endOffset()); |
EXPECT_EQ(" ", range->text()); |
@@ -192,10 +125,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// FIXME: that sounds buggy, we might want to select the word _before_ instead |
// of the comma. |
{ |
- setSelection(selection, 26); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(26); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(26, range->startOffset()); |
EXPECT_EQ(27, range->endOffset()); |
EXPECT_EQ(",", range->text()); |
@@ -203,10 +136,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// After comma. |
{ |
- setSelection(selection, 27); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(27); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(27, range->startOffset()); |
EXPECT_EQ(28, range->endOffset()); |
EXPECT_EQ(" ", range->text()); |
@@ -214,10 +147,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// When selecting part of a word. |
{ |
- setSelection(selection, 0, 1); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(0, 1); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(0, range->startOffset()); |
EXPECT_EQ(5, range->endOffset()); |
EXPECT_EQ("Lorem", range->text()); |
@@ -225,10 +158,10 @@ TEST_F(VisibleSelectionTest, WordGranularity) |
// When selecting part of two words. |
{ |
- setSelection(selection, 2, 8); |
- selection.expandUsingGranularity(WordGranularity); |
+ setSelection(2, 8); |
+ selection().expandUsingGranularity(WordGranularity); |
- RefPtrWillBeRawPtr<Range> range = selection.firstRange(); |
+ RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
EXPECT_EQ(0, range->startOffset()); |
EXPECT_EQ(11, range->endOffset()); |
EXPECT_EQ("Lorem ipsum", range->text()); |