| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 void setupFontSize(String str1, | 67 void setupFontSize(String str1, |
| 68 String str2, | 68 String str2, |
| 69 String str3, | 69 String str3, |
| 70 size_t selBegin, | 70 size_t selBegin, |
| 71 size_t selEnd); | 71 size_t selEnd); |
| 72 | 72 |
| 73 void testDirectionExpand(); | 73 void testDirectionExpand(); |
| 74 void testDirectionShrink(); | 74 void testDirectionShrink(); |
| 75 void testDirectionSwitchSide(); | 75 void testDirectionSwitchSide(); |
| 76 | 76 |
| 77 // Pixel coordinates of the positions for each letter within the text being te
sted. | 77 // Pixel coordinates of the positions for each letter within the text being |
| 78 // tested. |
| 78 Vector<IntPoint> m_letterPos; | 79 Vector<IntPoint> m_letterPos; |
| 79 // Pixel coordinates of the middles of the words in the text being tested. | 80 // Pixel coordinates of the middles of the words in the text being tested. |
| 80 // (y coordinate is based on y coordinates of m_letterPos) | 81 // (y coordinate is based on y coordinates of m_letterPos) |
| 81 Vector<IntPoint> m_wordMiddles; | 82 Vector<IntPoint> m_wordMiddles; |
| 82 | 83 |
| 83 private: | 84 private: |
| 84 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 85 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 85 Persistent<Document> m_document; | 86 Persistent<Document> m_document; |
| 86 }; | 87 }; |
| 87 | 88 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 "</style>" | 317 "</style>" |
| 317 "</head>" | 318 "</head>" |
| 318 "<body>" | 319 "<body>" |
| 319 "<div id='mytext'></div>" | 320 "<div id='mytext'></div>" |
| 320 "</body>" | 321 "</body>" |
| 321 "</html>"); | 322 "</html>"); |
| 322 | 323 |
| 323 setupTextSpan(str1, str2, str3, selBegin, selEnd); | 324 setupTextSpan(str1, str2, str3, selBegin, selEnd); |
| 324 } | 325 } |
| 325 | 326 |
| 326 // Tests expanding selection on text "abcdef ghij kl mno^p|>qr stuvwi inm mnii,
" | 327 // Tests expanding selection on text "abcdef ghij kl mno^p|>qr stuvwi inm mnii," |
| 327 // (^ means base, | means extent, < means start, and > means end). | 328 // (^ means base, | means extent, < means start, and > means end). Text needs to |
| 328 // Text needs to be laid out on a single line with no rotation. | 329 // be laid out on a single line with no rotation. |
| 329 void GranularityStrategyTest::testDirectionExpand() { | 330 void GranularityStrategyTest::testDirectionExpand() { |
| 330 // Expand selection using character granularity until the end of the word | 331 // Expand selection using character granularity until the end of the word |
| 331 // is reached. | 332 // is reached. |
| 332 // "abcdef ghij kl mno^pq|>r stuvwi inm mnii," | 333 // "abcdef ghij kl mno^pq|>r stuvwi inm mnii," |
| 333 selection().moveRangeSelectionExtent(m_letterPos[20]); | 334 selection().moveRangeSelectionExtent(m_letterPos[20]); |
| 334 EXPECT_EQ_SELECTED_TEXT("pq"); | 335 EXPECT_EQ_SELECTED_TEXT("pq"); |
| 335 // Move to the same postion shouldn't change anything. | 336 // Move to the same postion shouldn't change anything. |
| 336 selection().moveRangeSelectionExtent(m_letterPos[20]); | 337 selection().moveRangeSelectionExtent(m_letterPos[20]); |
| 337 EXPECT_EQ_SELECTED_TEXT("pq"); | 338 EXPECT_EQ_SELECTED_TEXT("pq"); |
| 338 // "abcdef ghij kl mno^pqr|> stuvwi inm mnii," | 339 // "abcdef ghij kl mno^pqr|> stuvwi inm mnii," |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 | 494 |
| 494 // Test for the default CharacterGranularityStrategy | 495 // Test for the default CharacterGranularityStrategy |
| 495 TEST_F(GranularityStrategyTest, Character) { | 496 TEST_F(GranularityStrategyTest, Character) { |
| 496 dummyPageHolder().frame().settings()->setSelectionStrategy( | 497 dummyPageHolder().frame().settings()->setSelectionStrategy( |
| 497 SelectionStrategy::Character); | 498 SelectionStrategy::Character); |
| 498 dummyPageHolder().frame().settings()->setDefaultFontSize(12); | 499 dummyPageHolder().frame().settings()->setDefaultFontSize(12); |
| 499 // "Foo Bar Baz," | 500 // "Foo Bar Baz," |
| 500 Text* text = appendTextNode("Foo Bar Baz,"); | 501 Text* text = appendTextNode("Foo Bar Baz,"); |
| 501 document().updateStyleAndLayout(); | 502 document().updateStyleAndLayout(); |
| 502 | 503 |
| 503 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > mea
ns end). | 504 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > |
| 505 // means end). |
| 504 selection().setSelection( | 506 selection().setSelection( |
| 505 createVisibleSelection(Position(text, 5), Position(text, 6))); | 507 createVisibleSelection(Position(text, 5), Position(text, 6))); |
| 506 EXPECT_EQ_SELECTED_TEXT("a"); | 508 EXPECT_EQ_SELECTED_TEXT("a"); |
| 507 // "Foo B^ar B|>az," | 509 // "Foo B^ar B|>az," |
| 508 selection().moveRangeSelectionExtent( | 510 selection().moveRangeSelectionExtent( |
| 509 visiblePositionToContentsPoint(createVisiblePosition(Position(text, 9)))); | 511 visiblePositionToContentsPoint(createVisiblePosition(Position(text, 9)))); |
| 510 EXPECT_EQ_SELECTED_TEXT("ar B"); | 512 EXPECT_EQ_SELECTED_TEXT("ar B"); |
| 511 // "F<|oo B^ar Baz," | 513 // "F<|oo B^ar Baz," |
| 512 selection().moveRangeSelectionExtent( | 514 selection().moveRangeSelectionExtent( |
| 513 visiblePositionToContentsPoint(createVisiblePosition(Position(text, 1)))); | 515 visiblePositionToContentsPoint(createVisiblePosition(Position(text, 1)))); |
| 514 EXPECT_EQ_SELECTED_TEXT("oo B"); | 516 EXPECT_EQ_SELECTED_TEXT("oo B"); |
| 515 } | 517 } |
| 516 | 518 |
| 517 // DirectionGranularityStrategy strategy on rotated text should revert to the | 519 // DirectionGranularityStrategy strategy on rotated text should revert to the |
| 518 // same behavior as CharacterGranularityStrategy | 520 // same behavior as CharacterGranularityStrategy |
| 519 TEST_F(GranularityStrategyTest, DirectionRotate) { | 521 TEST_F(GranularityStrategyTest, DirectionRotate) { |
| 520 Text* text = setupRotate("Foo Bar Baz,"); | 522 Text* text = setupRotate("Foo Bar Baz,"); |
| 521 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > mea
ns end). | 523 // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > |
| 524 // means end). |
| 522 selection().setSelection( | 525 selection().setSelection( |
| 523 createVisibleSelection(Position(text, 5), Position(text, 6))); | 526 createVisibleSelection(Position(text, 5), Position(text, 6))); |
| 524 EXPECT_EQ_SELECTED_TEXT("a"); | 527 EXPECT_EQ_SELECTED_TEXT("a"); |
| 525 IntPoint p = m_letterPos[9]; | 528 IntPoint p = m_letterPos[9]; |
| 526 // Need to move by one pixel, otherwise this point is not evaluated | 529 // Need to move by one pixel, otherwise this point is not evaluated |
| 527 // to the same line as the text by hit testing. | 530 // to the same line as the text by hit testing. |
| 528 p.move(1, 0); | 531 p.move(1, 0); |
| 529 // "Foo B^ar B|>az," | 532 // "Foo B^ar B|>az," |
| 530 selection().moveRangeSelectionExtent(p); | 533 selection().moveRangeSelectionExtent(p); |
| 531 EXPECT_EQ_SELECTED_TEXT("ar B"); | 534 EXPECT_EQ_SELECTED_TEXT("ar B"); |
| 532 p = m_letterPos[1]; | 535 p = m_letterPos[1]; |
| 533 p.move(1, 0); | 536 p.move(1, 0); |
| 534 // "F<|oo B^ar Baz," | 537 // "F<|oo B^ar Baz," |
| 535 selection().moveRangeSelectionExtent(p); | 538 selection().moveRangeSelectionExtent(p); |
| 536 EXPECT_EQ_SELECTED_TEXT("oo B"); | 539 EXPECT_EQ_SELECTED_TEXT("oo B"); |
| 537 } | 540 } |
| 538 | 541 |
| 539 TEST_F(GranularityStrategyTest, DirectionExpandTranslateZ) { | 542 TEST_F(GranularityStrategyTest, DirectionExpandTranslateZ) { |
| 540 Text* text = setupTranslateZ("abcdef ghij kl mnopqr stuvwi inm mnii,"); | 543 Text* text = setupTranslateZ("abcdef ghij kl mnopqr stuvwi inm mnii,"); |
| 541 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent,
< means start, and > means end). | 544 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent, |
| 545 // < means start, and > means end). |
| 542 selection().setSelection( | 546 selection().setSelection( |
| 543 createVisibleSelection(Position(text, 18), Position(text, 19))); | 547 createVisibleSelection(Position(text, 18), Position(text, 19))); |
| 544 EXPECT_EQ_SELECTED_TEXT("p"); | 548 EXPECT_EQ_SELECTED_TEXT("p"); |
| 545 testDirectionExpand(); | 549 testDirectionExpand(); |
| 546 } | 550 } |
| 547 | 551 |
| 548 TEST_F(GranularityStrategyTest, DirectionExpandTransform) { | 552 TEST_F(GranularityStrategyTest, DirectionExpandTransform) { |
| 549 Text* text = setupTransform("abcdef ghij kl mnopqr stuvwi inm mnii,"); | 553 Text* text = setupTransform("abcdef ghij kl mnopqr stuvwi inm mnii,"); |
| 550 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent,
< means start, and > means end). | 554 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent, |
| 555 // < means start, and > means end). |
| 551 selection().setSelection( | 556 selection().setSelection( |
| 552 createVisibleSelection(Position(text, 18), Position(text, 19))); | 557 createVisibleSelection(Position(text, 18), Position(text, 19))); |
| 553 EXPECT_EQ_SELECTED_TEXT("p"); | 558 EXPECT_EQ_SELECTED_TEXT("p"); |
| 554 testDirectionExpand(); | 559 testDirectionExpand(); |
| 555 } | 560 } |
| 556 | 561 |
| 557 TEST_F(GranularityStrategyTest, DirectionExpandVerticalAlign) { | 562 TEST_F(GranularityStrategyTest, DirectionExpandVerticalAlign) { |
| 558 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent,
< means start, and > means end). | 563 // "abcdef ghij kl mno^p|>qr stuvwi inm mnii," (^ means base, | means extent, |
| 564 // < means start, and > means end). |
| 559 setupVerticalAlign("abcdef ghij kl m", "nopq", "r stuvwi inm mnii,", 18, 19); | 565 setupVerticalAlign("abcdef ghij kl m", "nopq", "r stuvwi inm mnii,", 18, 19); |
| 560 EXPECT_EQ_SELECTED_TEXT("p"); | 566 EXPECT_EQ_SELECTED_TEXT("p"); |
| 561 testDirectionExpand(); | 567 testDirectionExpand(); |
| 562 } | 568 } |
| 563 | 569 |
| 564 TEST_F(GranularityStrategyTest, DirectionExpandFontSizes) { | 570 TEST_F(GranularityStrategyTest, DirectionExpandFontSizes) { |
| 565 setupFontSize("abcdef ghij kl mnopqr st", "uv", "wi inm mnii,", 18, 19); | 571 setupFontSize("abcdef ghij kl mnopqr st", "uv", "wi inm mnii,", 18, 19); |
| 566 EXPECT_EQ_SELECTED_TEXT("p"); | 572 EXPECT_EQ_SELECTED_TEXT("p"); |
| 567 testDirectionExpand(); | 573 testDirectionExpand(); |
| 568 } | 574 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 dummyPageHolder().frame().settings()->setDefaultFontSize(12); | 635 dummyPageHolder().frame().settings()->setDefaultFontSize(12); |
| 630 String str = "ab cd efghijkl mnopqr iiin, abc"; | 636 String str = "ab cd efghijkl mnopqr iiin, abc"; |
| 631 Text* text = document().createTextNode(str); | 637 Text* text = document().createTextNode(str); |
| 632 document().body()->appendChild(text); | 638 document().body()->appendChild(text); |
| 633 document().updateStyleAndLayout(); | 639 document().updateStyleAndLayout(); |
| 634 dummyPageHolder().frame().settings()->setSelectionStrategy( | 640 dummyPageHolder().frame().settings()->setSelectionStrategy( |
| 635 SelectionStrategy::Direction); | 641 SelectionStrategy::Direction); |
| 636 | 642 |
| 637 parseText(text); | 643 parseText(text); |
| 638 | 644 |
| 639 // "abcd efgh ijkl mno^pqr|> iiin, abc" (^ means base, | means extent, < means
start, and > means end). | 645 // "abcd efgh ijkl mno^pqr|> iiin, abc" (^ means base, | means extent, < means |
| 646 // start, and > means end). |
| 640 selection().setSelection( | 647 selection().setSelection( |
| 641 createVisibleSelection(Position(text, 18), Position(text, 21))); | 648 createVisibleSelection(Position(text, 18), Position(text, 21))); |
| 642 EXPECT_EQ_SELECTED_TEXT("pqr"); | 649 EXPECT_EQ_SELECTED_TEXT("pqr"); |
| 643 // Move to the middle of word #4 selecting it - this will set the offset to | 650 // Move to the middle of word #4 selecting it - this will set the offset to |
| 644 // be half the width of "iiin". | 651 // be half the width of "iiin". |
| 645 selection().moveRangeSelectionExtent(m_wordMiddles[4]); | 652 selection().moveRangeSelectionExtent(m_wordMiddles[4]); |
| 646 EXPECT_EQ_SELECTED_TEXT("pqr iiin"); | 653 EXPECT_EQ_SELECTED_TEXT("pqr iiin"); |
| 647 // Move to the middle of word #2 - extent will switch over to the other | 654 // Move to the middle of word #2 - extent will switch over to the other |
| 648 // side of the base, and we should enter word granularity since we pass | 655 // side of the base, and we should enter word granularity since we pass |
| 649 // the word boundary. The offset should become negative since the width | 656 // the word boundary. The offset should become negative since the width |
| (...skipping 24 matching lines...) Expand all Loading... |
| 674 // "ab cd efghijkl ^mnopqr |>stuvwi inm," (^ means base and | means extent, | 681 // "ab cd efghijkl ^mnopqr |>stuvwi inm," (^ means base and | means extent, |
| 675 // > means end). | 682 // > means end). |
| 676 selection().setSelection( | 683 selection().setSelection( |
| 677 createVisibleSelection(Position(text, 15), Position(text, 22))); | 684 createVisibleSelection(Position(text, 15), Position(text, 22))); |
| 678 EXPECT_EQ_SELECTED_TEXT("mnopqr "); | 685 EXPECT_EQ_SELECTED_TEXT("mnopqr "); |
| 679 selection().moveRangeSelectionExtent(m_wordMiddles[4]); | 686 selection().moveRangeSelectionExtent(m_wordMiddles[4]); |
| 680 EXPECT_EQ_SELECTED_TEXT("mnopqr iiin"); | 687 EXPECT_EQ_SELECTED_TEXT("mnopqr iiin"); |
| 681 } | 688 } |
| 682 | 689 |
| 683 } // namespace blink | 690 } // namespace blink |
| OLD | NEW |