64 EXPECT_STREQ(L"", engine()->GetText().c_str());
66 engine()->Insert(0, L"");
67 EXPECT_STREQ(L"", engine()->GetText().c_str());
68 EXPECT_EQ(0U, engine()->GetLength());
70 engine()->Insert(0, L"Hello");
71 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
72 EXPECT_EQ(5U, engine()->GetLength());
74 engine()->Insert(5, L" World");
75 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
76 EXPECT_EQ(11U, engine()->GetLength());
78 engine()->Insert(5, L" New");
79 EXPECT_STREQ(L"Hello New World", engine()->GetText().c_str());
81 engine()->Insert(100, L" Cat");
82 EXPECT_STREQ(L"Hello New World Cat", engine()->GetText().c_str());
86 engine()->SetHasCharacterLimit(
true);
87 engine()->SetCharacterLimit(5);
88 engine()->Insert(0, L"Hello");
91 engine()->Insert(5, L" World");
92 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
94 engine()->SetCharacterLimit(8);
95 engine()->Insert(5, L" World");
96 EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
102 engine()->SetDelegate(delegate.get());
104 engine()->SetCharacterLimit(5);
105 engine()->Insert(0, L"Hello");
108 engine()->Insert(5, L" World");
109 EXPECT_TRUE(delegate->text_is_full);
110 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
113 engine()->SetCharacterLimit(8);
114 engine()->Insert(5, L" World");
115 EXPECT_TRUE(delegate->text_is_full);
116 EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
118 engine()->SetHasCharacterLimit(
false);
121 engine()->Insert(0, L"Hello");
124 delegate->fail_validation =
true;
125 engine()->EnableValidation(
true);
126 engine()->Insert(5, L" World");
127 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
129 delegate->fail_validation =
false;
130 engine()->Insert(5, L" World");
131 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
132 engine()->EnableValidation(
false);
136 engine()->Insert(0, L"Hello\nWorld");
137 EXPECT_FALSE(delegate->text_is_full);
138 EXPECT_STREQ(L"Hello\nWorld", engine()->GetText().c_str());
143 engine()->LimitHorizontalScroll(
true);
144 engine()->SetAvailableWidth(52.0f);
145 engine()->Insert(0, L"Hello");
146 EXPECT_FALSE(delegate->text_is_full);
147 engine()->Insert(5, L" World");
148 EXPECT_TRUE(delegate->text_is_full);
149 EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
150 engine()->LimitHorizontalScroll(
false);
155 engine()->SetLineSpace(12.0f);
156 engine()->LimitVerticalScroll(
true);
158 engine()->Insert(0, L"Hello");
159 EXPECT_FALSE(delegate->text_is_full);
160 engine()->Insert(5, L" Wo\nrld");
161 EXPECT_TRUE(delegate->text_is_full);
162 EXPECT_STREQ(L"Hello Wo\n", engine()->GetText().c_str());
163 engine()->LimitVerticalScroll(
false);
165 engine()->SetDelegate(
nullptr);
283 EXPECT_FALSE(engine()->HasSelection());
284 engine()->SelectAll();
285 EXPECT_FALSE(engine()->HasSelection());
287 engine()->Insert(0, L"Hello World");
288 EXPECT_STREQ(L"", engine()->DeleteSelectedText().c_str());
290 EXPECT_FALSE(engine()->HasSelection());
291 engine()->SelectAll();
292 EXPECT_TRUE(engine()->HasSelection());
293 EXPECT_STREQ(L"Hello World", engine()->GetSelectedText().c_str());
295 engine()->ClearSelection();
296 EXPECT_FALSE(engine()->HasSelection());
297 EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
299 engine()->SelectAll();
302 std::tie(start_idx, count) = engine()->GetSelection();
303 EXPECT_EQ(0U, start_idx);
304 EXPECT_EQ(11U, count);
307 EXPECT_STREQ(L"Hello World", engine()->GetSelectedText().c_str());
308 EXPECT_TRUE(engine()->HasSelection());
309 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
311 engine()->Insert(5, L" A");
312 EXPECT_FALSE(engine()->HasSelection());
313 EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
316 engine()->SelectAll();
317 EXPECT_TRUE(engine()->HasSelection());
318 EXPECT_STREQ(L"Hello A World", engine()->GetSelectedText().c_str());
321 engine()->Insert(0, L"Hello World");
322 engine()->SelectAll();
324 EXPECT_STREQ(L"Hello World", engine()->DeleteSelectedText().c_str());
325 EXPECT_FALSE(engine()->HasSelection());
326 EXPECT_STREQ(L"", engine()->GetText().c_str());
328 engine()->Insert(0, L"Hello World");
329 engine()->SetSelection(5, 5);
330 EXPECT_STREQ(L" Worl", engine()->DeleteSelectedText().c_str());
331 EXPECT_FALSE(engine()->HasSelection());
332 EXPECT_STREQ(L"Hellod", engine()->GetText().c_str());
335 engine()->Insert(0, L"Hello World");
336 engine()->SelectAll();
337 engine()->ReplaceSelectedText(L"Goodbye Everybody");
338 EXPECT_FALSE(engine()->HasSelection());
339 EXPECT_STREQ(L"Goodbye Everybody", engine()->GetText().c_str());
342 engine()->Insert(0, L"Hello World");
343 engine()->SetSelection(1, 4);
344 engine()->ReplaceSelectedText(L"i,");
345 EXPECT_FALSE(engine()->HasSelection());
346 EXPECT_STREQ(L"Hi, World", engine()->GetText().c_str());
350 engine()->Insert(0, L"Hello");
351 engine()->Insert(0, L"A ");
352 engine()->SetSelection(3, 6);
353 EXPECT_STREQ(L"ello", engine()->GetSelectedText().c_str());
356 engine()->Insert(0, L"Hello World");
357 engine()->ClearSelection();
358 engine()->DeleteSelectedText();
359 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
363 EXPECT_FALSE(engine()->CanUndo());
364 EXPECT_FALSE(engine()->CanRedo());
365 EXPECT_FALSE(engine()->Undo());
366 EXPECT_FALSE(engine()->Redo());
368 engine()->Insert(0, L"Hello");
369 EXPECT_TRUE(engine()->CanUndo());
370 EXPECT_FALSE(engine()->CanRedo());
371 EXPECT_TRUE(engine()->Undo());
372 EXPECT_STREQ(L"", engine()->GetText().c_str());
373 EXPECT_FALSE(engine()->CanUndo());
374 EXPECT_TRUE(engine()->CanRedo());
375 EXPECT_TRUE(engine()->Redo());
376 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
377 EXPECT_TRUE(engine()->CanUndo());
378 EXPECT_FALSE(engine()->CanRedo());
381 EXPECT_FALSE(engine()->CanUndo());
382 EXPECT_FALSE(engine()->CanRedo());
384 engine()->Insert(0, L"Hello World");
385 engine()->SelectAll();
386 engine()->DeleteSelectedText();
387 EXPECT_STREQ(L"", engine()->GetText().c_str());
388 EXPECT_TRUE(engine()->CanUndo());
389 EXPECT_TRUE(engine()->Undo());
390 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
391 EXPECT_TRUE(engine()->CanRedo());
392 EXPECT_TRUE(engine()->Redo());
393 EXPECT_STREQ(L"", engine()->GetText().c_str());
394 EXPECT_TRUE(engine()->CanUndo());
395 EXPECT_FALSE(engine()->CanRedo());
397 engine()->Insert(0, L"Hello World");
398 engine()->SelectAll();
399 engine()->ReplaceSelectedText(L"Goodbye Friend");
400 EXPECT_STREQ(L"Goodbye Friend", engine()->GetText().c_str());
401 EXPECT_TRUE(engine()->CanUndo());
402 EXPECT_TRUE(engine()->Undo());
403 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
404 EXPECT_TRUE(engine()->CanRedo());
405 EXPECT_TRUE(engine()->Redo());
406 EXPECT_STREQ(L"Goodbye Friend", engine()->GetText().c_str());
409 engine()->SetMaxEditOperationsForTesting(3);
410 engine()->Insert(0, L"First ");
411 engine()->Insert(engine()->GetLength(), L"Second ");
412 engine()->Insert(engine()->GetLength(), L"Third");
414 EXPECT_TRUE(engine()->CanUndo());
415 EXPECT_TRUE(engine()->Undo());
416 EXPECT_STREQ(L"First Second ", engine()->GetText().c_str());
417 EXPECT_TRUE(engine()->CanUndo());
418 EXPECT_TRUE(engine()->Undo());
420 engine()->CanUndo());
421 EXPECT_STREQ(L"First ", engine()->GetText().c_str());
423 EXPECT_TRUE(engine()->CanRedo());
424 EXPECT_TRUE(engine()->Redo());
425 EXPECT_TRUE(engine()->CanRedo());
426 EXPECT_TRUE(engine()->Redo());
427 EXPECT_FALSE(engine()->CanRedo());
428 EXPECT_STREQ(L"First Second Third", engine()->GetText().c_str());
432 engine()->SetMaxEditOperationsForTesting(4);
435 engine()->Insert(0, L"H");
436 engine()->Insert(1, L"e");
437 engine()->Insert(2, L"l");
438 engine()->Insert(3, L"l");
439 engine()->Insert(4, L"o");
440 engine()->Insert(5, L" World");
441 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
444 engine()->Delete(4, 3);
445 EXPECT_STREQ(L"Hellorld", engine()->GetText().c_str());
446 EXPECT_TRUE(engine()->Undo());
447 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
448 engine()->Delete(5, 6);
449 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
450 EXPECT_TRUE(engine()->Undo());
451 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
452 EXPECT_TRUE(engine()->Redo());
453 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
456 EXPECT_TRUE(engine()->Undo());
457 EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
458 EXPECT_TRUE(engine()->Undo());
459 EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
460 EXPECT_TRUE(engine()->Undo());
461 EXPECT_STREQ(L"Hell", engine()->GetText().c_str());
462 EXPECT_FALSE(engine()->Undo());
463 EXPECT_STREQ(L"Hell", engine()->GetText().c_str());
529 engine()->Insert(0, L"Hi!");
530 ASSERT_EQ(3U, engine()->GetLength());
532 char_info = engine()->GetCharacterInfo(0);
533 EXPECT_EQ(0, char_info.first);
534 EXPECT_FLOAT_EQ(0.0f, char_info.second.Left());
535 EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
536 EXPECT_FLOAT_EQ(8.664f, char_info.second.Width());
537 EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
539 char_info = engine()->GetCharacterInfo(1);
540 EXPECT_EQ(0, char_info.first);
541 EXPECT_FLOAT_EQ(8.664f, char_info.second.Left());
542 EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
543 EXPECT_FLOAT_EQ(3.324f, char_info.second.Width());
544 EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
546 char_info = engine()->GetCharacterInfo(2);
547 EXPECT_EQ(0, char_info.first);
548 EXPECT_FLOAT_EQ(11.988f, char_info.second.Left());
549 EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
550 EXPECT_FLOAT_EQ(3.996f, char_info.second.Width());
551 EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
556 char_info = engine()->GetCharacterInfo(3);
557 EXPECT_EQ(0, char_info.first);
558 EXPECT_FLOAT_EQ(15.984, char_info.second.Left());
559 EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
560 EXPECT_FLOAT_EQ(0.0f, char_info.second.Width());
561 EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
568 std::tie(start_idx, count) = engine()->BoundsForWordAt(100);
569 EXPECT_EQ(0U, start_idx);
570 EXPECT_EQ(0U, count);
571 engine()->SetSelection(start_idx, count);
572 EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
575 engine()->Insert(0, L"Hello");
576 std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
577 EXPECT_EQ(0U, start_idx);
578 EXPECT_EQ(5U, count);
579 engine()->SetSelection(start_idx, count);
580 EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
583 engine()->Insert(0, L"Hello World");
584 std::tie(start_idx, count) = engine()->BoundsForWordAt(100);
585 EXPECT_EQ(0U, start_idx);
586 EXPECT_EQ(0U, count);
587 engine()->SetSelection(start_idx, count);
588 EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
590 std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
591 EXPECT_EQ(0U, start_idx);
592 EXPECT_EQ(5U, count);
593 engine()->SetSelection(start_idx, count);
594 EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
596 std::tie(start_idx, count) = engine()->BoundsForWordAt(1);
597 EXPECT_EQ(0U, start_idx);
598 EXPECT_EQ(5U, count);
599 engine()->SetSelection(start_idx, count);
600 EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
602 std::tie(start_idx, count) = engine()->BoundsForWordAt(4);
603 EXPECT_EQ(0U, start_idx);
604 EXPECT_EQ(5U, count);
605 engine()->SetSelection(start_idx, count);
606 EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
609 std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
610 EXPECT_EQ(5U, start_idx);
611 EXPECT_EQ(1U, count);
612 engine()->SetSelection(start_idx, count);
613 EXPECT_STREQ(L" ", engine()->GetSelectedText().c_str());
615 std::tie(start_idx, count) = engine()->BoundsForWordAt(6);
616 EXPECT_EQ(6U, start_idx);
617 EXPECT_EQ(5U, count);
618 engine()->SetSelection(start_idx, count);
619 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
622 engine()->Insert(0, L"123 456 789");
623 std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
624 engine()->SetSelection(start_idx, count);
625 EXPECT_STREQ(L"456", engine()->GetSelectedText().c_str());
628 engine()->Insert(0, L"123def789");
629 std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
630 engine()->SetSelection(start_idx, count);
631 EXPECT_STREQ(L"123def789", engine()->GetSelectedText().c_str());
634 engine()->Insert(0, L"abc456ghi");
635 std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
636 engine()->SetSelection(start_idx, count);
637 EXPECT_STREQ(L"abc456ghi", engine()->GetSelectedText().c_str());
640 engine()->Insert(0, L"hello, world");
641 std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
642 engine()->SetSelection(start_idx, count);
643 EXPECT_STREQ(L"hello", engine()->GetSelectedText().c_str());
646 engine()->Insert(0, L"hello, world");
647 std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
648 engine()->SetSelection(start_idx, count);
649 EXPECT_STREQ(L",", engine()->GetSelectedText().c_str());
652 engine()->Insert(0, L"np-complete");
653 std::tie(start_idx, count) = engine()->BoundsForWordAt(6);
654 engine()->SetSelection(start_idx, count);
655 EXPECT_STREQ(L"complete", engine()->GetSelectedText().c_str());
658 engine()->Insert(0, L"(123) 456-7890");
659 std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
660 engine()->SetSelection(start_idx, count);
661 EXPECT_STREQ(L"(", engine()->GetSelectedText().c_str());
663 std::tie(start_idx, count) = engine()->BoundsForWordAt(1);
664 engine()->SetSelection(start_idx, count);
665 EXPECT_STREQ(L"123", engine()->GetSelectedText().c_str());
667 std::tie(start_idx, count) = engine()->BoundsForWordAt(7);
668 engine()->SetSelection(start_idx, count);
669 EXPECT_STREQ(L"456", engine()->GetSelectedText().c_str());
671 std::tie(start_idx, count) = engine()->BoundsForWordAt(11);
672 engine()->SetSelection(start_idx, count);
673 EXPECT_STREQ(L"7890", engine()->GetSelectedText().c_str());
683 std::vector<
const wchar_t*> results;
691 {L"A::A", {L"A", L":", L":", L"A"}},
694 {L"A00A", {L"A00A"}},
696 {L"0,,0", {L"0", L",", L",", L"0"}},
697 {L"\u3031\u3031", {L"\u3031\u3031"}},
698 {L"A_0_\u3031_", {L"A_0_\u3031_"}},
699 {L"A__A", {L"A__A"}},
704 for (
auto t : tests) {
706 engine()->Insert(0, t.str);
709 for (
const auto* res : t.results) {
710 std::tie(start_idx, count) = engine()->BoundsForWordAt(idx);
711 engine()->SetSelection(start_idx, count);
712 EXPECT_STREQ(res, engine()->GetSelectedText().c_str())
713 <<
"Input: '" << t.str <<
"'";
721 engine()->Insert(0, L"Hello");
723 EXPECT_EQ(0U, engine()->GetIndexLeft(0));
724 EXPECT_EQ(5U, engine()->GetIndexRight(5));
725 EXPECT_EQ(2U, engine()->GetIndexUp(2));
726 EXPECT_EQ(2U, engine()->GetIndexDown(2));
727 EXPECT_EQ(1U, engine()->GetIndexLeft(2));
728 EXPECT_EQ(3U, engine()->GetIndexRight(2));
729 EXPECT_EQ(0U, engine()->GetIndexAtStartOfLine(2));
730 EXPECT_EQ(5U, engine()->GetIndexAtEndOfLine(2));
733 engine()->Insert(0, L"The book is \"مدخل إلى C++\"");
734 EXPECT_FALSE(
FX_IsOdd(engine()->GetCharacterInfo(3).first));
735 EXPECT_EQ(2U, engine()->GetIndexLeft(3));
736 EXPECT_EQ(4U, engine()->GetIndexRight(3));
737 EXPECT_TRUE(
FX_IsOdd(engine()->GetCharacterInfo(15).first));
738 EXPECT_EQ(14U, engine()->GetIndexLeft(15));
739 EXPECT_EQ(16U, engine()->GetIndexRight(15));
740 EXPECT_FALSE(
FX_IsOdd(engine()->GetCharacterInfo(23).first));
741 EXPECT_EQ(22U, engine()->GetIndexLeft(23));
742 EXPECT_EQ(24U, engine()->GetIndexRight(23));
745 engine()->Insert(0, L"Hello\r\nWorld\r\nTest");
747 engine()->SetSelection(engine()->GetIndexLeft(7U), 7);
748 EXPECT_STREQ(L"\r\nWorld", engine()->GetSelectedText().c_str());
751 engine()->SetSelection(engine()->GetIndexUp(8U), 2);
752 EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
755 engine()->SetSelection(engine()->GetIndexUp(15U), 2);
756 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
759 engine()->SetSelection(engine()->GetIndexDown(1U), 2);
760 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
763 engine()->SetSelection(engine()->GetIndexDown(8U), 2);
764 EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
766 size_t start_idx = engine()->GetIndexAtStartOfLine(8U);
767 size_t end_idx = engine()->GetIndexAtEndOfLine(8U);
768 engine()->SetSelection(start_idx, end_idx - start_idx);
769 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
772 engine()->SetSelection(engine()->GetIndexRight(5U), 5);
773 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
776 engine()->Insert(0, L"Short\nAnd a very long line");
777 engine()->SetSelection(engine()->GetIndexUp(14U), 11);
778 EXPECT_STREQ(L"\nAnd a very", engine()->GetSelectedText().c_str());
781 engine()->Insert(0, L"A Very long line\nShort");
782 EXPECT_EQ(engine()->GetLength(), engine()->GetIndexDown(8U));
785 engine()->Insert(0, L"Hello\rWorld\rTest");
787 engine()->SetSelection(engine()->GetIndexLeft(6U), 6);
788 EXPECT_STREQ(L"\rWorld", engine()->GetSelectedText().c_str());
791 engine()->SetSelection(engine()->GetIndexUp(7U), 2);
792 EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
795 engine()->SetSelection(engine()->GetIndexUp(13U), 2);
796 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
799 engine()->SetSelection(engine()->GetIndexDown(1U), 2);
800 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
803 engine()->SetSelection(engine()->GetIndexDown(7U), 2);
804 EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
806 start_idx = engine()->GetIndexAtStartOfLine(7U);
807 end_idx = engine()->GetIndexAtEndOfLine(7U);
808 engine()->SetSelection(start_idx, end_idx - start_idx);
809 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
812 engine()->SetSelection(engine()->GetIndexRight(5U), 5);
813 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
816 engine()->Insert(0, L"Hello\nWorld\nTest");
818 engine()->SetSelection(engine()->GetIndexLeft(6U), 6);
819 EXPECT_STREQ(L"\nWorld", engine()->GetSelectedText().c_str());
822 engine()->SetSelection(engine()->GetIndexUp(7U), 2);
823 EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
826 engine()->SetSelection(engine()->GetIndexUp(13U), 2);
827 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
830 engine()->SetSelection(engine()->GetIndexDown(1U), 2);
831 EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
834 engine()->SetSelection(engine()->GetIndexDown(7U), 2);
835 EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
837 start_idx = engine()->GetIndexAtStartOfLine(7U);
838 end_idx = engine()->GetIndexAtEndOfLine(7U);
839 engine()->SetSelection(start_idx, end_idx - start_idx);
840 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
843 engine()->SetSelection(engine()->GetIndexRight(5U), 5);
844 EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());