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

Unified Diff: Source/core/html/HTMLTextFormControlElementTest.cpp

Issue 357603003: Add functions searching a word boundary without VisualPosition to HTMLTextFormControlElement. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Change test cases. Created 6 years, 5 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: Source/core/html/HTMLTextFormControlElementTest.cpp
diff --git a/Source/core/html/HTMLTextFormControlElementTest.cpp b/Source/core/html/HTMLTextFormControlElementTest.cpp
index 1134854814f50e622791d248eed837aa2d9c7b0b..af7a69a11c7ef90940d0669c9df192f029d0798c 100644
--- a/Source/core/html/HTMLTextFormControlElementTest.cpp
+++ b/Source/core/html/HTMLTextFormControlElementTest.cpp
@@ -5,8 +5,15 @@
#include "config.h"
#include "core/html/HTMLTextFormControlElement.h"
+#include "core/dom/Position.h"
+#include "core/dom/Text.h"
+#include "core/editing/FrameSelection.h"
+#include "core/editing/VisibleSelection.h"
+#include "core/editing/VisibleUnits.h"
#include "core/frame/FrameView.h"
+#include "core/html/HTMLBRElement.h"
#include "core/html/HTMLDocument.h"
+#include "core/rendering/RenderTreeAsText.h"
#include "core/testing/DummyPageHolder.h"
#include "wtf/OwnPtr.h"
#include <gtest/gtest.h>
@@ -19,21 +26,23 @@ class HTMLTextFormControlElementTest : public ::testing::Test {
protected:
virtual void SetUp() OVERRIDE;
+ HTMLDocument& document() const { return *m_document; }
HTMLTextFormControlElement& textControl() const { return *m_textControl; }
private:
OwnPtr<DummyPageHolder> m_dummyPageHolder;
+ RefPtrWillBePersistent<HTMLDocument> m_document;
RefPtrWillBePersistent<HTMLTextFormControlElement> m_textControl;
};
void HTMLTextFormControlElementTest::SetUp()
{
m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
- HTMLDocument& document = toHTMLDocument(m_dummyPageHolder->document());
- document.documentElement()->setInnerHTML("<body><textarea id=textarea></textarea></body>", ASSERT_NO_EXCEPTION);
- document.view()->updateLayoutAndStyleIfNeededRecursive();
- m_textControl = toHTMLTextFormControlElement(document.getElementById("textarea"));
+ m_document = toHTMLDocument(&m_dummyPageHolder->document());
+ m_document->documentElement()->setInnerHTML("<body><textarea id=textarea></textarea></body>", ASSERT_NO_EXCEPTION);
+ m_document->view()->updateLayoutAndStyleIfNeededRecursive();
+ m_textControl = toHTMLTextFormControlElement(m_document->getElementById("textarea"));
m_textControl->focus();
}
@@ -51,4 +60,77 @@ TEST_F(HTMLTextFormControlElementTest, SetSelectionRange)
EXPECT_EQ(3, textControl().selectionEnd());
}
+typedef Position (*PositionFunction)(const Position&);
+typedef VisiblePosition(*VisblePositionFunction)(const VisiblePosition&);
+
+void testFunctionEquivalence(const Position& position, PositionFunction positionFunction, VisblePositionFunction visibleFunction)
+{
+ VisiblePosition visiblePosition(position);
+ VisiblePosition expected = visibleFunction(visiblePosition);
+ VisiblePosition actual = VisiblePosition(positionFunction(position));
+ EXPECT_EQ(expected, actual);
+}
+
+static VisiblePosition startOfWord(const VisiblePosition& position)
+{
+ return startOfWord(position, LeftWordIfOnBoundary);
+}
+
+static VisiblePosition endOfWord(const VisiblePosition& position)
+{
+ return endOfWord(position, RightWordIfOnBoundary);
+}
+
+void testBoundary(HTMLDocument& document, HTMLTextFormControlElement& textControl)
+{
+ for (unsigned i = 0; i < textControl.innerEditorValue().length(); i++) {
+ textControl.setSelectionRange(i, i);
+ Position position = document.frame()->selection().start();
+ SCOPED_TRACE(testing::Message() << "offset " << position.deprecatedEditingOffset() << " of " << nodePositionAsStringForTesting(position.deprecatedNode()).ascii().data());
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::startOfWord");
+ testFunctionEquivalence(position, HTMLTextFormControlElement::startOfWord, startOfWord);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::endOfWord");
+ testFunctionEquivalence(position, HTMLTextFormControlElement::endOfWord, endOfWord);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::startOfSentence");
+ testFunctionEquivalence(position, HTMLTextFormControlElement::startOfSentence, startOfSentence);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::endOfSentence");
+ testFunctionEquivalence(position, HTMLTextFormControlElement::endOfSentence, endOfSentence);
+ }
+ }
+}
+
+TEST_F(HTMLTextFormControlElementTest, WordAndSentenceBoundary)
+{
+ HTMLElement* innerText = textControl().innerEditorElement();
+ {
+ SCOPED_TRACE("String is value.");
+ innerText->removeChildren();
+ innerText->setNodeValue("Hel\nlo, text form.\n");
+ testBoundary(document(), textControl());
+ }
+ {
+ SCOPED_TRACE("A Text node and a BR element");
+ innerText->removeChildren();
+ innerText->setNodeValue("");
+ innerText->appendChild(Text::create(document(), "Hello, text form."));
+ innerText->appendChild(HTMLBRElement::create(document()));
+ testBoundary(document(), textControl());
+ }
+ {
+ SCOPED_TRACE("Text nodes.");
+ innerText->removeChildren();
+ innerText->setNodeValue("");
+ innerText->appendChild(Text::create(document(), "Hel\nlo, te"));
+ innerText->appendChild(Text::create(document(), "xt form."));
+ testBoundary(document(), textControl());
+ }
+}
+
}

Powered by Google App Engine
This is Rietveld 408576698