terminal/src/interactivity/win32/ut_interactivity_win32/GeneratedUiaTextRangeMovementTests.g.cpp
Carlos Zamora c53fe1c2bf
Fix failing UIA movement tests (#10991)
## Summary of the Pull Request
Follow-up for #10886. The new UIA movement tests found some failing cases. This PR fixes UiaTextRangeBase to have movement match that of MS Word. In total, this fixes 64 tests.

## PR Checklist
* [X] Closes #10924
* [X] Tests added/passed

## Detailed Description of the Pull Request / Additional comments
Root causes include...
1. if we were a non-degenerate range and we failed to move, we should still expand to enclose the unit
2. non-degenerate ranges are treated as if they already encompassed their given unit.
   - this one is a bit difficult to explain. Consider these examples:
      1. document movement
         - state: you have a 1-cell wide range on the buffer, and you try to move by document
         - result: move by 0 (there is no next/prev document), but the range now encompasses the entire document
      2. line movement
         - state: you have a 1-cell wide range on a line, and you try to move back by a line
         - result: you go to the previous line (not the beginning of this line)
   - conversely, a degenerate range successfully moves to the beginning/end of the current unit (i.e. document/line)
   - this (bizarre) behavior was confirmed using MS Word

As a bonus, occasionally, Narrator would get stuck when navigating by line. This issue now seems to be fixed.

## Updates to existing tests
- `CanMoveByCharacter`
   - `can't move backward from (0, 0)` --> misauthored, result should be one character wide.
   - `can't move past the last column in the last row` --> misauthored and already covered in generated tests
- `CanMoveByLine`
   - `can't move backward from top row` --> misauthored, end should be on next line. Already covered by generated tests
   - `can't move forward from bottom row` --> misauthored, end should be on next line
   - `can't move backward when part of the top row is in the range` --> misauthored, should expand
   - `can't move forward when part of the bottom row is in the range` --> misauthored, degenerate range moves to end of buffer
- `MovementAtExclusiveEnd`
   - populate the text buffer _before_ we do a move by word operation
   - update to match the now fixed behavior
2021-08-24 13:56:38 +00:00

3172 lines
98 KiB
C++

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
// DO NOT MODIFY THESE TESTS DIRECTLY
// These were generated by tools\TestTableWriter\GenerateTests.ps1
// Read tools\TestTableWriter\README.md for more details
// Define a few helpful variables
constexpr til::rectangle bufferSize{ 0, 0, 80, 300 };
constexpr short midX{ 40 };
constexpr short midY{ 150 };
constexpr short midPopulatedY{ 75 };
constexpr til::point origin{ 0, 0 };
constexpr til::point midTop{ midX, 0 };
constexpr til::point midHistory{ midX, midPopulatedY };
constexpr til::point midDocEnd{ midX, midY };
constexpr til::point lastCharPos{ 79, midY };
constexpr til::point docEnd{ 0, midY + 1 };
constexpr til::point midEmptySpace{ midX, midY + midPopulatedY };
constexpr til::point bufferEnd{ 79, 299 };
constexpr til::point endExclusive{ 0, 300 };
constexpr til::point bufferEndLeft{ bufferSize.left(), bufferEnd.y() };
constexpr auto bufferEndM1C{ point_offset_by_char(bufferEnd, bufferSize, -1) };
constexpr auto bufferEndM1L{ point_offset_by_line(bufferEnd, bufferSize, -1) };
constexpr auto bufferEndM4C{ point_offset_by_char(bufferEnd, bufferSize, -4) };
constexpr auto bufferEndM4L{ point_offset_by_line(bufferEnd, bufferSize, -4) };
constexpr auto bufferEndM5C{ point_offset_by_char(bufferEnd, bufferSize, -5) };
constexpr auto bufferEndM5L{ point_offset_by_line(bufferEnd, bufferSize, -5) };
constexpr til::point docEndLeft{ bufferSize.left(), docEnd.y() };
constexpr auto docEndM1C{ point_offset_by_char(docEnd, bufferSize, -1) };
constexpr auto docEndM4L{ point_offset_by_line(docEnd, bufferSize, -4) };
constexpr auto docEndM5C{ point_offset_by_char(docEnd, bufferSize, -5) };
constexpr auto docEndP1C{ point_offset_by_char(docEnd, bufferSize, 1) };
constexpr til::point lastCharPosLeft{ bufferSize.left(), lastCharPos.y() };
constexpr auto lastCharPosM1C{ point_offset_by_char(lastCharPos, bufferSize, -1) };
constexpr auto lastCharPosM1L{ point_offset_by_line(lastCharPos, bufferSize, -1) };
constexpr auto lastCharPosM4C{ point_offset_by_char(lastCharPos, bufferSize, -4) };
constexpr auto lastCharPosM4L{ point_offset_by_line(lastCharPos, bufferSize, -4) };
constexpr auto lastCharPosM5C{ point_offset_by_char(lastCharPos, bufferSize, -5) };
constexpr auto lastCharPosM5L{ point_offset_by_line(lastCharPos, bufferSize, -5) };
constexpr auto lastCharPosP1C{ point_offset_by_char(lastCharPos, bufferSize, 1) };
constexpr til::point midDocEndLeft{ bufferSize.left(), midDocEnd.y() };
constexpr auto midDocEndM1C{ point_offset_by_char(midDocEnd, bufferSize, -1) };
constexpr auto midDocEndM1L{ point_offset_by_line(midDocEnd, bufferSize, -1) };
constexpr auto midDocEndM4C{ point_offset_by_char(midDocEnd, bufferSize, -4) };
constexpr auto midDocEndM4L{ point_offset_by_line(midDocEnd, bufferSize, -4) };
constexpr auto midDocEndM5C{ point_offset_by_char(midDocEnd, bufferSize, -5) };
constexpr auto midDocEndM5L{ point_offset_by_line(midDocEnd, bufferSize, -5) };
constexpr auto midDocEndP1C{ point_offset_by_char(midDocEnd, bufferSize, 1) };
constexpr auto midDocEndP2C{ point_offset_by_char(midDocEnd, bufferSize, 2) };
constexpr auto midDocEndP5C{ point_offset_by_char(midDocEnd, bufferSize, 5) };
constexpr auto midDocEndP6C{ point_offset_by_char(midDocEnd, bufferSize, 6) };
constexpr auto midEmptySpaceP1C{ point_offset_by_char(midEmptySpace, bufferSize, 1) };
constexpr til::point midHistoryLeft{ bufferSize.left(), midHistory.y() };
constexpr auto midHistoryM1C{ point_offset_by_char(midHistory, bufferSize, -1) };
constexpr auto midHistoryM1L{ point_offset_by_line(midHistory, bufferSize, -1) };
constexpr auto midHistoryM4C{ point_offset_by_char(midHistory, bufferSize, -4) };
constexpr auto midHistoryM4L{ point_offset_by_line(midHistory, bufferSize, -4) };
constexpr auto midHistoryM5C{ point_offset_by_char(midHistory, bufferSize, -5) };
constexpr auto midHistoryM5L{ point_offset_by_line(midHistory, bufferSize, -5) };
constexpr auto midHistoryP1C{ point_offset_by_char(midHistory, bufferSize, 1) };
constexpr auto midHistoryP1L{ point_offset_by_line(midHistory, bufferSize, 1) };
constexpr auto midHistoryP2C{ point_offset_by_char(midHistory, bufferSize, 2) };
constexpr auto midHistoryP2L{ point_offset_by_line(midHistory, bufferSize, 2) };
constexpr auto midHistoryP5C{ point_offset_by_char(midHistory, bufferSize, 5) };
constexpr auto midHistoryP5L{ point_offset_by_line(midHistory, bufferSize, 5) };
constexpr auto midHistoryP6C{ point_offset_by_char(midHistory, bufferSize, 6) };
constexpr auto midHistoryP6L{ point_offset_by_line(midHistory, bufferSize, 6) };
constexpr auto midTopM1C{ point_offset_by_char(midTop, bufferSize, -1) };
constexpr auto midTopM4C{ point_offset_by_char(midTop, bufferSize, -4) };
constexpr auto midTopM5C{ point_offset_by_char(midTop, bufferSize, -5) };
constexpr auto midTopP1C{ point_offset_by_char(midTop, bufferSize, 1) };
constexpr auto midTopP1L{ point_offset_by_line(midTop, bufferSize, 1) };
constexpr auto midTopP2C{ point_offset_by_char(midTop, bufferSize, 2) };
constexpr auto midTopP5C{ point_offset_by_char(midTop, bufferSize, 5) };
constexpr auto midTopP5L{ point_offset_by_line(midTop, bufferSize, 5) };
constexpr auto midTopP6C{ point_offset_by_char(midTop, bufferSize, 6) };
constexpr auto originP1C{ point_offset_by_char(origin, bufferSize, 1) };
constexpr auto originP1L{ point_offset_by_line(origin, bufferSize, 1) };
constexpr auto originP2C{ point_offset_by_char(origin, bufferSize, 2) };
constexpr auto originP2L{ point_offset_by_line(origin, bufferSize, 2) };
constexpr auto originP5C{ point_offset_by_char(origin, bufferSize, 5) };
constexpr auto originP5L{ point_offset_by_line(origin, bufferSize, 5) };
constexpr auto originP6C{ point_offset_by_char(origin, bufferSize, 6) };
constexpr auto originP6L{ point_offset_by_line(origin, bufferSize, 6) };
struct GeneratedMovementTestInput
{
TextUnit unit;
int moveAmount;
til::point start;
til::point end;
};
struct GeneratedMovementTestExpected
{
int moveAmount;
til::point start;
til::point end;
};
struct GeneratedMovementTest
{
std::wstring_view name;
GeneratedMovementTestInput input;
GeneratedMovementTestExpected expected;
bool skip;
};
static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTest{
L"Move degenerate range at position 1 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
origin,
origin },
GeneratedMovementTestExpected{
1,
originP1C,
originP1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
origin,
origin },
GeneratedMovementTestExpected{
5,
originP5C,
originP5C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
origin,
originP1C },
GeneratedMovementTestExpected{
1,
originP1C,
originP2C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
origin,
originP1C },
GeneratedMovementTestExpected{
5,
originP5C,
originP6C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midTop,
midTop },
GeneratedMovementTestExpected{
-5,
midTopM5C,
midTopM5C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midTop,
midTop },
GeneratedMovementTestExpected{
-1,
midTopM1C,
midTopM1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midTop,
midTop },
GeneratedMovementTestExpected{
0,
midTop,
midTop },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midTop,
midTop },
GeneratedMovementTestExpected{
1,
midTopP1C,
midTopP1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midTop,
midTop },
GeneratedMovementTestExpected{
5,
midTopP5C,
midTopP5C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
-5,
midTopM5C,
midTopM4C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
-1,
midTopM1C,
midTop },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
midTop,
midTopP1C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
1,
midTopP1C,
midTopP2C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
5,
midTopP5C,
midTopP6C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-5,
midHistoryM5C,
midHistoryM5C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-1,
midHistoryM1C,
midHistoryM1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midHistory,
midHistory },
GeneratedMovementTestExpected{
0,
midHistory,
midHistory },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
1,
midHistoryP1C,
midHistoryP1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
5,
midHistoryP5C,
midHistoryP5C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
-5,
midHistoryM5C,
midHistoryM4C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
-1,
midHistoryM1C,
midHistory },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
midHistory,
midHistoryP1C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
1,
midHistoryP1C,
midHistoryP2C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
5,
midHistoryP5C,
midHistoryP6C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
origin,
origin },
GeneratedMovementTestExpected{
1,
originP1L,
originP1L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
origin,
origin },
GeneratedMovementTestExpected{
5,
originP5L,
originP5L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
origin,
originP1C },
GeneratedMovementTestExpected{
1,
originP1L,
originP2L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
origin,
originP1C },
GeneratedMovementTestExpected{
5,
originP5L,
originP6L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midTop,
midTop },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midTop,
midTop },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midTop,
midTop },
GeneratedMovementTestExpected{
0,
midTop,
midTop },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midTop,
midTop },
GeneratedMovementTestExpected{
1,
midTopP1L,
midTopP1L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midTop,
midTop },
GeneratedMovementTestExpected{
5,
midTopP5L,
midTopP5L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
originP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
1,
originP1L,
originP2L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
5,
originP5L,
originP6L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-5,
midHistoryM4L,
midHistoryM4L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-1,
midHistoryLeft,
midHistoryLeft },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midHistory,
midHistory },
GeneratedMovementTestExpected{
0,
midHistory,
midHistory },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
1,
midHistoryP1L,
midHistoryP1L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
5,
midHistoryP5L,
midHistoryP5L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
-5,
midHistoryM5L,
midHistoryM4L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
-1,
midHistoryM1L,
midHistoryLeft },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
midHistoryLeft,
midHistoryP1L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
1,
midHistoryP1L,
midHistoryP2L },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
5,
midHistoryP5L,
midHistoryP6L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
origin,
origin },
GeneratedMovementTestExpected{
0,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
origin,
origin },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
origin,
origin },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
origin,
originP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midTop,
midTop },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midTop,
midTop },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midTop,
midTop },
GeneratedMovementTestExpected{
0,
midTop,
midTop },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midTop,
midTop },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midTop,
midTop },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midTop,
midTopP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midHistory,
midHistory },
GeneratedMovementTestExpected{
0,
midHistory,
midHistory },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midHistory,
midHistory },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midHistory,
midHistory },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midHistory,
midHistoryP1C },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-5,
bufferEndM5C,
bufferEndM5C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-1,
bufferEndM1C,
bufferEndM1C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
0,
bufferEnd,
bufferEnd },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move degenerate range at position 8 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
-5,
bufferEndM5C,
bufferEndM4C },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
-1,
bufferEndM1C,
bufferEnd },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEnd,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEnd,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEnd,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-5,
bufferEndM4L,
bufferEndM4L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-1,
bufferEndLeft,
bufferEndLeft },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
0,
bufferEnd,
bufferEnd },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move degenerate range at position 8 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
-5,
bufferEndM5L,
bufferEndM4L },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
-1,
bufferEndM1L,
bufferEndLeft },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEndLeft,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEndLeft,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
bufferEndLeft,
endExclusive },
true },
GeneratedMovementTest{
L"Move degenerate range at position 8 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
0,
bufferEnd,
bufferEnd },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move degenerate range at position 8 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
bufferEnd,
bufferEnd },
GeneratedMovementTestExpected{
1,
endExclusive,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 8 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
bufferEnd,
endExclusive },
GeneratedMovementTestExpected{
0,
origin,
endExclusive },
true },
GeneratedMovementTest{
L"Move degenerate range at position 9 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-5,
bufferEndM4C,
bufferEndM4C },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-1,
bufferEnd,
bufferEnd },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-5,
bufferEndM4L,
bufferEndM4L },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-1,
bufferEndLeft,
bufferEndLeft },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
-1,
origin,
origin },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 9 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
endExclusive,
endExclusive },
GeneratedMovementTestExpected{
0,
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 4 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-5,
midDocEndM5C,
midDocEndM5C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-1,
midDocEndM1C,
midDocEndM1C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
0,
midDocEnd,
midDocEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
1,
midDocEndP1C,
midDocEndP1C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
5,
midDocEndP5C,
midDocEndP5C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
-5,
midDocEndM5C,
midDocEndM4C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
-1,
midDocEndM1C,
midDocEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
midDocEnd,
midDocEndP1C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
1,
midDocEndP1C,
midDocEndP2C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
5,
midDocEndP5C,
midDocEndP6C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-5,
midDocEndM4L,
midDocEndM4L },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-1,
midDocEndLeft,
midDocEndLeft },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
0,
midDocEnd,
midDocEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
-5,
midDocEndM5L,
midDocEndM4L },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
-1,
midDocEndM1L,
midDocEndLeft },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
midDocEndLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
midDocEndLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
midDocEndLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
0,
midDocEnd,
midDocEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 4 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midDocEnd,
midDocEnd },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 4 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midDocEnd,
midDocEndP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-5,
lastCharPosM5C,
lastCharPosM5C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-1,
lastCharPosM1C,
lastCharPosM1C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
0,
lastCharPos,
lastCharPos },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
-5,
lastCharPosM5C,
lastCharPosM4C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
-1,
lastCharPosM1C,
lastCharPos },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPos,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPos,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPos,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-5,
lastCharPosM4L,
lastCharPosM4L },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-1,
lastCharPosLeft,
lastCharPosLeft },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
0,
lastCharPos,
lastCharPos },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
-5,
lastCharPosM5L,
lastCharPosM4L },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
-1,
lastCharPosM1L,
lastCharPosLeft },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPosLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPosLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
lastCharPosLeft,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
0,
lastCharPos,
lastCharPos },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 5 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
lastCharPos,
lastCharPos },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 5 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
lastCharPos,
lastCharPosP1C },
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-5,
docEndM5C,
docEndM5C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-1,
docEndM1C,
docEndM1C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-5,
docEndM5C,
docEndM5C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-1,
docEndM1C,
docEndM1C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-5,
docEndM4L,
docEndM4L },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-1,
docEndLeft,
docEndLeft },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-5,
docEndM4L,
docEndM4L },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-1,
docEndLeft,
docEndLeft },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 6 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
docEnd,
docEnd },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 6 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
docEnd,
docEndP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-5,
docEndM5C,
docEndM5C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-1,
docEndM1C,
docEndM1C },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-5,
docEndM5C,
docEndM5C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
-1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-1,
docEndM1C,
docEndM1C },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 0 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
0,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 1 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 5 times by Character",
GeneratedMovementTestInput{
TextUnit::TextUnit_Character,
5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-5,
docEndM4L,
docEndM4L },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-1,
docEndLeft,
docEndLeft },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-5,
docEndM4L,
docEndM4L },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
-1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-1,
docEndLeft,
docEndLeft },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 0 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
0,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 1 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 5 times by Line",
GeneratedMovementTestInput{
TextUnit::TextUnit_Line,
5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move degenerate range at position 7 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midEmptySpace,
midEmptySpace },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 -1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
-1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
-1,
origin,
origin },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 0 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
0,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 1 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
1,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
GeneratedMovementTest{
L"Move non-degenerate range at position 7 5 times by Document",
GeneratedMovementTestInput{
TextUnit::TextUnit_Document,
5,
midEmptySpace,
midEmptySpaceP1C },
GeneratedMovementTestExpected{
0,
docEnd,
docEnd },
true },
};