| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 5 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
| 6 #include "core/dom/Document.h" | 6 #include "core/dom/Document.h" |
| 7 #include "core/dom/Element.h" | 7 #include "core/dom/Element.h" |
| 8 #include "core/dom/Text.h" | 8 #include "core/dom/Text.h" |
| 9 #include "core/editing/FrameSelection.h" | 9 #include "core/editing/FrameSelection.h" |
| 10 #include "core/frame/FrameView.h" | 10 #include "core/frame/FrameView.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 } | 117 } |
| 118 | 118 |
| 119 void GranularityStrategyTest::parseText(const TextNodeVector& textNodes) | 119 void GranularityStrategyTest::parseText(const TextNodeVector& textNodes) |
| 120 { | 120 { |
| 121 bool wordStarted = false; | 121 bool wordStarted = false; |
| 122 int wordStartIndex = 0; | 122 int wordStartIndex = 0; |
| 123 for (auto& text : textNodes) { | 123 for (auto& text : textNodes) { |
| 124 int wordStartIndexOffset = m_letterPos.size(); | 124 int wordStartIndexOffset = m_letterPos.size(); |
| 125 String str = text->wholeText(); | 125 String str = text->wholeText(); |
| 126 for (size_t i = 0; i < str.length(); i++) { | 126 for (size_t i = 0; i < str.length(); i++) { |
| 127 m_letterPos.append(visiblePositionToContentsPoint(createVisiblePosit
ionDeprecated(Position(text, i)))); | 127 m_letterPos.append(visiblePositionToContentsPoint(createVisiblePosit
ion(Position(text, i)))); |
| 128 char c = str[i]; | 128 char c = str[i]; |
| 129 if (isASCIIAlphanumeric(c) && !wordStarted) { | 129 if (isASCIIAlphanumeric(c) && !wordStarted) { |
| 130 wordStartIndex = i + wordStartIndexOffset; | 130 wordStartIndex = i + wordStartIndexOffset; |
| 131 wordStarted = true; | 131 wordStarted = true; |
| 132 } else if (!isASCIIAlphanumeric(c) && wordStarted) { | 132 } else if (!isASCIIAlphanumeric(c) && wordStarted) { |
| 133 IntPoint wordMiddle((m_letterPos[wordStartIndex].x() + m_letterP
os[i + wordStartIndexOffset].x()) / 2, m_letterPos[wordStartIndex].y()); | 133 IntPoint wordMiddle((m_letterPos[wordStartIndex].x() + m_letterP
os[i + wordStartIndexOffset].x()) / 2, m_letterPos[wordStartIndex].y()); |
| 134 m_wordMiddles.append(wordMiddle); | 134 m_wordMiddles.append(wordMiddle); |
| 135 wordStarted = false; | 135 wordStarted = false; |
| 136 } | 136 } |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 if (wordStarted) { | 139 if (wordStarted) { |
| 140 const auto& lastNode = textNodes.last(); | 140 const auto& lastNode = textNodes.last(); |
| 141 int xEnd = visiblePositionToContentsPoint(createVisiblePositionDeprecate
d(Position(lastNode, lastNode->wholeText().length()))).x(); | 141 int xEnd = visiblePositionToContentsPoint(createVisiblePosition(Position
(lastNode, lastNode->wholeText().length()))).x(); |
| 142 IntPoint wordMiddle((m_letterPos[wordStartIndex].x() + xEnd) / 2, m_lett
erPos[wordStartIndex].y()); | 142 IntPoint wordMiddle((m_letterPos[wordStartIndex].x() + xEnd) / 2, m_lett
erPos[wordStartIndex].y()); |
| 143 m_wordMiddles.append(wordMiddle); | 143 m_wordMiddles.append(wordMiddle); |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 | 146 |
| 147 Text* GranularityStrategyTest::setupTranslateZ(String str) | 147 Text* GranularityStrategyTest::setupTranslateZ(String str) |
| 148 { | 148 { |
| 149 setInnerHTML( | 149 setInnerHTML( |
| 150 "<html>" | 150 "<html>" |
| 151 "<head>" | 151 "<head>" |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 EXPECT_EQ_SELECTED_TEXT("efgh ijkl mno"); | 473 EXPECT_EQ_SELECTED_TEXT("efgh ijkl mno"); |
| 474 } | 474 } |
| 475 | 475 |
| 476 // Test for the default CharacterGranularityStrategy | 476 // Test for the default CharacterGranularityStrategy |
| 477 TEST_F(GranularityStrategyTest, Character) | 477 TEST_F(GranularityStrategyTest, Character) |
| 478 { | 478 { |
| 479 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Character); | 479 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Character); |
| 480 dummyPageHolder().frame().settings()->setDefaultFontSize(12); | 480 dummyPageHolder().frame().settings()->setDefaultFontSize(12); |
| 481 // "Foo Bar Baz," | 481 // "Foo Bar Baz," |
| 482 Text* text = appendTextNode("Foo Bar Baz,"); | 482 Text* text = appendTextNode("Foo Bar Baz,"); |
| 483 document().updateStyleAndLayout(); |
| 484 |
| 483 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > m
eans end). | 485 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > m
eans end). |
| 484 selection().setSelection(VisibleSelection(Position(text, 5), Position(text,
6))); | 486 selection().setSelection(VisibleSelection(Position(text, 5), Position(text,
6))); |
| 485 EXPECT_EQ_SELECTED_TEXT("a"); | 487 EXPECT_EQ_SELECTED_TEXT("a"); |
| 486 // "Foo B^ar B|>az," | 488 // "Foo B^ar B|>az," |
| 487 selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVi
siblePositionDeprecated(Position(text, 9)))); | 489 selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVi
siblePosition(Position(text, 9)))); |
| 488 EXPECT_EQ_SELECTED_TEXT("ar B"); | 490 EXPECT_EQ_SELECTED_TEXT("ar B"); |
| 489 // "F<|oo B^ar Baz," | 491 // "F<|oo B^ar Baz," |
| 490 selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVi
siblePositionDeprecated(Position(text, 1)))); | 492 selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVi
siblePosition(Position(text, 1)))); |
| 491 EXPECT_EQ_SELECTED_TEXT("oo B"); | 493 EXPECT_EQ_SELECTED_TEXT("oo B"); |
| 492 } | 494 } |
| 493 | 495 |
| 494 // DirectionGranularityStrategy strategy on rotated text should revert to the | 496 // DirectionGranularityStrategy strategy on rotated text should revert to the |
| 495 // same behavior as CharacterGranularityStrategy | 497 // same behavior as CharacterGranularityStrategy |
| 496 TEST_F(GranularityStrategyTest, DirectionRotate) | 498 TEST_F(GranularityStrategyTest, DirectionRotate) |
| 497 { | 499 { |
| 498 Text* text = setupRotate("Foo Bar Baz,"); | 500 Text* text = setupRotate("Foo Bar Baz,"); |
| 499 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > m
eans end). | 501 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > m
eans end). |
| 500 selection().setSelection(VisibleSelection(Position(text, 5), Position(text,
6))); | 502 selection().setSelection(VisibleSelection(Position(text, 5), Position(text,
6))); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 } | 609 } |
| 608 | 610 |
| 609 // Tests moving extent over to the other side of the vase and immediately | 611 // Tests moving extent over to the other side of the vase and immediately |
| 610 // passing the word boundary and going into word granularity. | 612 // passing the word boundary and going into word granularity. |
| 611 TEST_F(GranularityStrategyTest, DirectionSwitchSideWordGranularityThenShrink) | 613 TEST_F(GranularityStrategyTest, DirectionSwitchSideWordGranularityThenShrink) |
| 612 { | 614 { |
| 613 dummyPageHolder().frame().settings()->setDefaultFontSize(12); | 615 dummyPageHolder().frame().settings()->setDefaultFontSize(12); |
| 614 String str = "ab cd efghijkl mnopqr iiin, abc"; | 616 String str = "ab cd efghijkl mnopqr iiin, abc"; |
| 615 Text* text = document().createTextNode(str); | 617 Text* text = document().createTextNode(str); |
| 616 document().body()->appendChild(text); | 618 document().body()->appendChild(text); |
| 619 document().updateStyleAndLayout(); |
| 617 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Direction); | 620 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Direction); |
| 618 | 621 |
| 619 parseText(text); | 622 parseText(text); |
| 620 | 623 |
| 621 // "abcd efgh ijkl mno^pqr|> iiin, abc" (^ means base, | means extent, < mea
ns start, and > means end). | 624 // "abcd efgh ijkl mno^pqr|> iiin, abc" (^ means base, | means extent, < mea
ns start, and > means end). |
| 622 selection().setSelection(VisibleSelection(Position(text, 18), Position(text,
21))); | 625 selection().setSelection(VisibleSelection(Position(text, 18), Position(text,
21))); |
| 623 EXPECT_EQ_SELECTED_TEXT("pqr"); | 626 EXPECT_EQ_SELECTED_TEXT("pqr"); |
| 624 // Move to the middle of word #4 selecting it - this will set the offset to | 627 // Move to the middle of word #4 selecting it - this will set the offset to |
| 625 // be half the width of "iiin". | 628 // be half the width of "iiin". |
| 626 selection().moveRangeSelectionExtent(m_wordMiddles[4]); | 629 selection().moveRangeSelectionExtent(m_wordMiddles[4]); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 639 } | 642 } |
| 640 | 643 |
| 641 // Make sure we switch to word granularity right away when starting on a | 644 // Make sure we switch to word granularity right away when starting on a |
| 642 // word boundary and extending. | 645 // word boundary and extending. |
| 643 TEST_F(GranularityStrategyTest, DirectionSwitchStartOnBoundary) | 646 TEST_F(GranularityStrategyTest, DirectionSwitchStartOnBoundary) |
| 644 { | 647 { |
| 645 dummyPageHolder().frame().settings()->setDefaultFontSize(12); | 648 dummyPageHolder().frame().settings()->setDefaultFontSize(12); |
| 646 String str = "ab cd efghijkl mnopqr iiin, abc"; | 649 String str = "ab cd efghijkl mnopqr iiin, abc"; |
| 647 Text* text = document().createTextNode(str); | 650 Text* text = document().createTextNode(str); |
| 648 document().body()->appendChild(text); | 651 document().body()->appendChild(text); |
| 652 document().updateStyleAndLayout(); |
| 649 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Direction); | 653 dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy
::Direction); |
| 650 | 654 |
| 651 parseText(text); | 655 parseText(text); |
| 652 | 656 |
| 653 // "ab cd efghijkl ^mnopqr |>stuvwi inm," (^ means base and | means extent, | 657 // "ab cd efghijkl ^mnopqr |>stuvwi inm," (^ means base and | means extent, |
| 654 // > means end). | 658 // > means end). |
| 655 selection().setSelection(VisibleSelection(Position(text, 15), Position(text,
22))); | 659 selection().setSelection(VisibleSelection(Position(text, 15), Position(text,
22))); |
| 656 EXPECT_EQ_SELECTED_TEXT("mnopqr "); | 660 EXPECT_EQ_SELECTED_TEXT("mnopqr "); |
| 657 selection().moveRangeSelectionExtent(m_wordMiddles[4]); | 661 selection().moveRangeSelectionExtent(m_wordMiddles[4]); |
| 658 EXPECT_EQ_SELECTED_TEXT("mnopqr iiin"); | 662 EXPECT_EQ_SELECTED_TEXT("mnopqr iiin"); |
| 659 } | 663 } |
| 660 | 664 |
| 661 } // namespace blink | 665 } // namespace blink |
| OLD | NEW |