Skip to content

Commit

Permalink
Fix failing UIA movement tests (#10991)
Browse files Browse the repository at this point in the history
## 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
  • Loading branch information
carlos-zamora authored Aug 24, 2021
1 parent f9a844d commit c53fe1c
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 212 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -1 times by Line",
GeneratedMovementTestInput{
Expand All @@ -551,7 +551,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 0 times by Line",
GeneratedMovementTestInput{
Expand All @@ -563,7 +563,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 1 times by Line",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -599,7 +599,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
-1,
origin,
origin },
true },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -1 times by Line",
GeneratedMovementTestInput{
Expand All @@ -611,7 +611,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
-1,
origin,
origin },
true },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 0 times by Line",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -659,7 +659,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -1 times by Line",
GeneratedMovementTestInput{
Expand All @@ -671,7 +671,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 0 times by Line",
GeneratedMovementTestInput{
Expand All @@ -683,7 +683,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
originP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 1 times by Line",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -779,7 +779,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
-5,
midHistoryM5L,
midHistoryM4L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -1 times by Line",
GeneratedMovementTestInput{
Expand All @@ -791,7 +791,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
-1,
midHistoryM1L,
midHistoryLeft },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 0 times by Line",
GeneratedMovementTestInput{
Expand All @@ -803,7 +803,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
midHistoryLeft,
midHistoryP1L },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 1 times by Line",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -873,9 +873,9 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
origin },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 1 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -885,9 +885,9 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
origin },
GeneratedMovementTestExpected{
1,
docEnd,
docEnd },
true },
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -898,8 +898,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 -1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -910,8 +910,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 0 times by Document",
GeneratedMovementTestInput{
Expand All @@ -922,8 +922,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -934,8 +934,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 1 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -946,8 +946,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
docEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 -5 times by Document",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -993,9 +993,9 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
midTop },
GeneratedMovementTestExpected{
1,
bufferEnd,
bufferEnd },
true },
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 2 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1005,9 +1005,9 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
midTop },
GeneratedMovementTestExpected{
1,
bufferEnd,
bufferEnd },
true },
endExclusive,
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1018,8 +1018,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
bufferEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 -1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1030,8 +1030,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
bufferEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 0 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1042,8 +1042,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
bufferEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1054,8 +1054,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
bufferEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 2 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1066,8 +1066,8 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
GeneratedMovementTestExpected{
0,
origin,
bufferEnd },
true },
endExclusive },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 -5 times by Document",
GeneratedMovementTestInput{
Expand Down Expand Up @@ -1115,7 +1115,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
1,
endExclusive,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move degenerate range at position 3 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1127,7 +1127,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
1,
endExclusive,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1139,7 +1139,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 -1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1151,7 +1151,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 0 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1163,7 +1163,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 1 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1175,7 +1175,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move non-degenerate range at position 3 5 times by Document",
GeneratedMovementTestInput{
Expand All @@ -1187,7 +1187,7 @@ static constexpr std::array<GeneratedMovementTest, 255> s_movementTests{
0,
origin,
endExclusive },
true },
false },
GeneratedMovementTest{
L"Move degenerate range at position 8 -5 times by Character",
GeneratedMovementTestInput{
Expand Down
Loading

0 comments on commit c53fe1c

Please sign in to comment.