Chromium Code Reviews| Index: Source/core/editing/VisibleSelectionTest.cpp |
| diff --git a/Source/core/editing/VisibleSelectionTest.cpp b/Source/core/editing/VisibleSelectionTest.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..31f7d2c7ee1fabe806c3d668e10fee7dab0ac3fa |
| --- /dev/null |
| +++ b/Source/core/editing/VisibleSelectionTest.cpp |
| @@ -0,0 +1,159 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// // Use of this source code is governed by a BSD-style license that can be |
|
jochen (gone - plz use gerrit)
2014/05/19 13:24:08
incorrect header
|
| +// // found in the LICENSE file. |
| + |
| +#include "config.h" |
| +#include "core/editing/VisibleSelection.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 <gtest/gtest.h> |
| + |
| +#define LOREM_IPSUM \ |
| + "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor " \ |
| + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud " \ |
| + "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " \ |
| + "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." \ |
| + "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt " \ |
| + "mollit anim id est laborum." |
| + |
| +namespace WebCore { |
| + |
| +class VisibleSelectionTest : public ::testing::Test { |
| +protected: |
| + virtual void SetUp() OVERRIDE; |
| + |
| + Document& document() const { return m_dummyPageHolder->document(); } |
| + Text* textNode() const { return m_textNode.get(); } |
| + VisibleSelection& selection() { return m_selection; } |
| + |
| + // Helper function to set the VisibleSelection base/extent. |
| + void setSelection(int base) { setSelection(base, base); } |
| + |
| + // Helper function to set the VisibleSelection base/extent. |
| + void setSelection(int base, int extend) |
| + { |
| + m_selection.setBase(Position(textNode(), base)); |
| + m_selection.setExtent(Position(textNode(), extend)); |
| + } |
| + |
| +private: |
| + OwnPtr<DummyPageHolder> m_dummyPageHolder; |
| + RefPtr<Text> m_textNode; |
| + VisibleSelection m_selection; |
| +}; |
| + |
| +void WebCore::VisibleSelectionTest::SetUp() |
| +{ |
| + m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); |
| + m_textNode = document().createTextNode(LOREM_IPSUM); |
| + document().body()->appendChild(m_textNode.get()); |
| +} |
| + |
| +} // namespace WebCore |
| + |
| +namespace { |
| + |
| +using namespace WebCore; |
| + |
| +TEST_F(VisibleSelectionTest, Initialisation) |
| +{ |
| + setSelection(0); |
| + |
| + EXPECT_FALSE(selection().isNone()); |
| + EXPECT_TRUE(selection().isCaret()); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(0, range->startOffset()); |
| + EXPECT_EQ(0, range->endOffset()); |
| + EXPECT_EQ("", range->text()); |
| +} |
| + |
| +TEST_F(VisibleSelectionTest, WordGranularity) |
| +{ |
| + // Beginning of a word. |
| + { |
| + setSelection(0); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(0, range->startOffset()); |
| + EXPECT_EQ(5, range->endOffset()); |
| + EXPECT_EQ("Lorem", range->text()); |
| + } |
| + |
| + // Middle of a word. |
| + { |
| + setSelection(8); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(6, range->startOffset()); |
| + EXPECT_EQ(11, range->endOffset()); |
| + EXPECT_EQ("ipsum", range->text()); |
| + } |
| + |
| + // End of a word. |
| + // FIXME: that sounds buggy, we might want to select the word _before_ instead |
| + // of the space... |
| + { |
| + setSelection(5); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(5, range->startOffset()); |
| + EXPECT_EQ(6, range->endOffset()); |
| + EXPECT_EQ(" ", range->text()); |
| + } |
| + |
| + // Before comma. |
| + // FIXME: that sounds buggy, we might want to select the word _before_ instead |
| + // of the comma. |
| + { |
| + setSelection(26); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(26, range->startOffset()); |
| + EXPECT_EQ(27, range->endOffset()); |
| + EXPECT_EQ(",", range->text()); |
| + } |
| + |
| + // After comma. |
| + { |
| + setSelection(27); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(27, range->startOffset()); |
| + EXPECT_EQ(28, range->endOffset()); |
| + EXPECT_EQ(" ", range->text()); |
| + } |
| + |
| + // When selecting part of a word. |
| + { |
| + setSelection(0, 1); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(0, range->startOffset()); |
| + EXPECT_EQ(5, range->endOffset()); |
| + EXPECT_EQ("Lorem", range->text()); |
| + } |
| + |
| + // When selecting part of two words. |
| + { |
| + setSelection(2, 8); |
| + selection().expandUsingGranularity(WordGranularity); |
| + |
| + RefPtrWillBeRawPtr<Range> range = selection().firstRange(); |
| + EXPECT_EQ(0, range->startOffset()); |
| + EXPECT_EQ(11, range->endOffset()); |
| + EXPECT_EQ("Lorem ipsum", range->text()); |
| + } |
| +} |
| + |
| +} // namespace WebCore |