Chromium Code Reviews| 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); |
| + } |
| + } |
| +} |
| + |
| } |