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

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: Fix nits Created 6 years, 6 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..5d8e8951edf8ec56c7e6a153903a5301c2eaa9da 100644
--- a/Source/core/html/HTMLTextFormControlElementTest.cpp
+++ b/Source/core/html/HTMLTextFormControlElementTest.cpp
@@ -5,12 +5,20 @@
#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>
+using namespace blink;
Yuta Kitamura 2014/07/03 08:39:27 Is there anything under blink namespace in this fi
yoichio 2014/07/04 01:29:44 Nothing. Thanks.
using namespace WebCore;
namespace {
@@ -19,21 +27,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 +61,70 @@ TEST_F(HTMLTextFormControlElementTest, SetSelectionRange)
EXPECT_EQ(3, textControl().selectionEnd());
}
+typedef Position (*PositionFunction)(const Position&);
+typedef VisiblePosition(*VisblePositionFunction)(const VisiblePosition&);
+
+void testFunctionEquality(const Position& position, PositionFunction positionFunction, VisblePositionFunction visibleFunction)
Yuta Kitamura 2014/07/03 08:39:27 nit: "Equality" is not a right word to compare the
yoichio 2014/07/04 01:29:44 Done.
+{
+ 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);
+}
+
+TEST_F(HTMLTextFormControlElementTest, WordAndSentenceBoundary)
+{
+ HTMLElement* innerText = textControl().innerEditorElement();
+ // We have:
+ // innerText(shadow root)
+ // --#Text "Hello, text form."
+ // --BR
+ // --BR
+ // --#TEXT ""
+ // --#TEXT "\n\n"
+ // --#TEXT "\n"
+ // --#Text "Hel\nlo, te"
+ // --#TEXT "xt form."
+ innerText->appendChild(Text::create(document(), "Hello, text form."));
+ innerText->appendChild(HTMLBRElement::create(document()));
+ innerText->appendChild(HTMLBRElement::create(document()));
+ innerText->appendChild(Text::create(document(), ""));
+ innerText->appendChild(Text::create(document(), "\n\n"));
+ innerText->appendChild(Text::create(document(), "\n"));
+ innerText->appendChild(Text::create(document(), "Hel\nlo, te"));
+ innerText->appendChild(Text::create(document(), "xt form."));
Yuta Kitamura 2014/07/03 08:39:27 Is it possible for a user to create this weird DOM
yoichio 2014/07/04 01:29:44 I can't create this by only HTML functions, but at
Yuta Kitamura 2014/07/04 06:12:35 I don't see a point in testing impossible situatio
+
+ for (unsigned i = 0; i < textControl().innerEditorValue().length(); i++) {
+ textControl().setSelectionRange(i, i);
+ Position pos = document().frame()->selection().start();
Yuta Kitamura 2014/07/03 08:39:27 Please avoid using a abbreviated word for variable
yoichio 2014/07/04 01:29:44 Done.
+ SCOPED_TRACE(testing::Message() << "offset " << pos.deprecatedEditingOffset() << " of " << nodePosition(pos.deprecatedNode()).ascii().data());
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::startOfWord");
+ testFunctionEquality(pos, HTMLTextFormControlElement::startOfWord, startOfWord);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::endOfWord");
+ testFunctionEquality(pos, HTMLTextFormControlElement::endOfWord, endOfWord);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::startOfSentence");
+ testFunctionEquality(pos, HTMLTextFormControlElement::startOfSentence, startOfSentence);
+ }
+ {
+ SCOPED_TRACE("HTMLTextFormControlElement::endOfSentence");
+ testFunctionEquality(pos, HTMLTextFormControlElement::endOfSentence, endOfSentence);
+ }
+ }
+}
+
}

Powered by Google App Engine
This is Rietveld 408576698