Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Namespaces | Typedefs | Functions
ax_node_position_unittest.cc File Reference
#include <algorithm>
#include <cstdint>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "ax/ax_enums.h"
#include "ax/ax_node.h"
#include "ax/ax_node_data.h"
#include "ax/ax_node_position.h"
#include "ax/ax_range.h"
#include "ax/ax_tree.h"
#include "ax/ax_tree_data.h"
#include "ax/ax_tree_id.h"
#include "ax/ax_tree_update.h"
#include "ax/test_ax_tree_manager.h"
#include "flutter/fml/platform/win/wstring_conversion.h"
#include "gtest/gtest.h"

Go to the source code of this file.

Namespaces

namespace  ui
 

Typedefs

using ui::TestPositionType = std::unique_ptr< AXPosition< AXNodePosition, AXNode > >
 
using ui::TestPositionRange = AXRange< AXPosition< AXNodePosition, AXNode > >
 

Functions

 ui::TEST_F (AXPositionTest, Clone)
 
 ui::TEST_F (AXPositionTest, Serialize)
 
 ui::TEST_F (AXPositionTest, ToString)
 
 ui::TEST_F (AXPositionTest, IsIgnored)
 
 ui::TEST_F (AXPositionTest, GetTextFromNullPosition)
 
 ui::TEST_F (AXPositionTest, GetTextFromRoot)
 
 ui::TEST_F (AXPositionTest, GetTextFromButton)
 
 ui::TEST_F (AXPositionTest, GetTextFromCheckbox)
 
 ui::TEST_F (AXPositionTest, GetTextFromTextField)
 
 ui::TEST_F (AXPositionTest, GetTextFromStaticText)
 
 ui::TEST_F (AXPositionTest, GetTextFromInlineTextBox)
 
 ui::TEST_F (AXPositionTest, GetTextFromLineBreak)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromNullPosition)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromRoot)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromButton)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromCheckbox)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromTextfield)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromStaticText)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromInlineTextBox)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetFromLineBreak)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetUpdate)
 
 ui::TEST_F (AXPositionTest, GetMaxTextOffsetAndGetTextWithGeneratedContent)
 
 ui::TEST_F (AXPositionTest, AtStartOfAnchorWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AtStartOfAnchorWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AtStartOfAnchorWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtEndOfAnchorWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AtEndOfAnchorWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AtEndOfAnchorWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtStartOfLineWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtStartOfLineStaticTextExtraPrecedingSpace)
 
 ui::TEST_F (AXPositionTest, AtEndOfLineWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtStartOfBlankLine)
 
 ui::TEST_F (AXPositionTest, AtEndOfBlankLine)
 
 ui::TEST_F (AXPositionTest, AtStartAndEndOfLineWhenAtEndOfTextSpan)
 
 ui::TEST_F (AXPositionTest, AtStartAndEndOfLineInsideTextField)
 
 ui::TEST_F (AXPositionTest, AtStartOfParagraphWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtEndOfParagraphWithTextPosition)
 
 ui::TEST_F (AXPositionTest, ParagraphEdgesWithPreservedNewLine)
 
 ui::TEST_F (AXPositionTest, PreviousParagraphEndStopAtAnchorBoundaryWithConsecutiveParentChildLineBreakingObjects)
 
 ui::TEST_F (AXPositionTest, AtStartOrEndOfParagraphOnAListMarker)
 
 ui::TEST_F (AXPositionTest, AtStartOrEndOfParagraphWithLeadingAndTrailingDocumentWhitespace)
 
 ui::TEST_F (AXPositionTest, AtStartOrEndOfParagraphWithIgnoredNodes)
 
 ui::TEST_F (AXPositionTest, AtStartOrEndOfParagraphWithEmbeddedObjectCharacter)
 
 ui::TEST_F (AXPositionTest, LowestCommonAncestor)
 
 ui::TEST_F (AXPositionTest, AsTreePositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsTreePositionWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AsTreePositionWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AsTextPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsTextPositionWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AsTextPositionWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTreePositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTreePositionWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTreePositionWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionWithTreePosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionWithTextPositionAndEmptyTextSandwich)
 
 ui::TEST_F (AXPositionTest, AsUnignoredPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtTextBoundaryDocumentStartEndIsIgnored)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtInvalidGraphemeBoundary)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfAnchorWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfAnchorWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfAnchorWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfAnchorWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfAnchorWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfAnchorWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtPreviousFormatStartWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtPreviousFormatStartWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtPreviousFormatStartWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtNextFormatEndWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtNextFormatEndWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtNextFormatEndWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtFormatBoundaryWithTextPosition)
 
 ui::TEST_F (AXPositionTest, MoveByFormatWithIgnoredNodes)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtPageBoundaryWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtPageBoundaryWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePagePositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfDocumentWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePagePositionWithNonPaginatedDocument)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfDocumentWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtStartOfDocumentWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfDocumentWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfDocumentWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePositionAtEndOfDocumentWithTextPosition)
 
 ui::TEST_F (AXPositionTest, AtLastNodeInTree)
 
 ui::TEST_F (AXPositionTest, CreateChildPositionAtWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreateChildPositionAtWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreateChildPositionAtWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreateParentPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreateParentPositionWithTreePosition)
 
 ui::TEST_F (AXPositionTest, CreateParentPositionWithTextPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextAndPreviousLeafTextPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextLeafTextPosition)
 
 ui::TEST_F (AXPositionTest, CreatePreviousLeafTextPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextLeafTreePosition)
 
 ui::TEST_F (AXPositionTest, CreatePreviousLeafTreePosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionBeforeAndAfterCharacterWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionBeforeAndAfterCharacterAtInvalidGraphemeBoundary)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionBeforeCharacterNoAdjustment)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionAfterCharacterNoAdjustment)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionBeforeCharacter)
 
 ui::TEST_F (AXPositionTest, AsLeafTextPositionAfterCharacter)
 
 ui::TEST_F (AXPositionTest, CreateNextAndPreviousCharacterPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, AsValidPosition)
 
 ui::TEST_F (AXPositionTest, AsValidPositionInDescendantOfEmptyObject)
 
 ui::TEST_F (AXPositionTest, CreateNextCharacterPosition)
 
 ui::TEST_F (AXPositionTest, CreatePreviousCharacterPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextCharacterPositionAtGraphemeBoundary)
 
 ui::TEST_F (AXPositionTest, CreatePreviousCharacterPositionAtGraphemeBoundary)
 
 ui::TEST_F (AXPositionTest, ReciprocalCreateNextAndPreviousCharacterPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextAndPreviousWordStartPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, CreateNextAndPreviousWordEndPositionWithNullPosition)
 
 ui::TEST_F (AXPositionTest, OperatorEquals)
 
 ui::TEST_F (AXPositionTest, OperatorEqualsSameTextOffsetSameAnchorId)
 
 ui::TEST_F (AXPositionTest, OperatorEqualsSameTextOffsetDifferentAnchorIdRoot)
 
 ui::TEST_F (AXPositionTest, OperatorEqualsSameTextOffsetDifferentAnchorIdLeaf)
 
 ui::TEST_F (AXPositionTest, OperatorsLessThanAndGreaterThan)
 
 ui::TEST_F (AXPositionTest, Swap)
 
 ui::TEST_F (AXPositionTest, CreateNextAnchorPosition)
 
 ui::TEST_F (AXPositionTest, CreateLinePositionsMultipleAnchorsInSingleLine)
 
 ui::TEST_F (AXPositionTest, CreateNextWordPositionInList)
 
 ui::TEST_F (AXPositionTest, CreatePreviousWordPositionInList)
 
 ui::TEST_F (AXPositionTest, EmptyObjectReplacedByCharacterTextNavigation)
 
 ui::TEST_F (AXPositionTest, TextNavigationWithCollapsedCombobox)
 
 ui::TEST_P (AXPositionExpandToEnclosingTextBoundaryTestWithParam, TextPositionBeforeLine2)
 
 ui::TEST_P (AXPositionCreatePositionAtTextBoundaryTestWithParam, TextPositionBeforeStaticText)
 
 ui::TEST_P (AXPositionTextNavigationTestWithParam, TraverseTreeStartingWithAffinityDownstream)
 
 ui::TEST_P (AXPositionTextNavigationTestWithParam, TraverseTreeStartingWithAffinityUpstream)
 
 ui::INSTANTIATE_TEST_SUITE_P (ExpandToEnclosingTextBoundary, AXPositionExpandToEnclosingTextBoundaryTestWithParam, testing::Values(ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kCharacter, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kCharacter, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=8 affinity=downstream " "annotated_text=Line 1\nL<i>ne 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kFormat, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kFormat, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStart, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStart, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStartOrEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStartOrEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kObject, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kObject, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=7 affinity=upstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=upstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStart, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStart, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStartOrEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=7 affinity=upstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStartOrEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 affinity=downstream " "annotated_text=Line 1\nLine 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWebPage, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=1 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=9 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWebPage, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=1 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=9 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=11 affinity=downstream " "annotated_text=Line 1\nLine< >2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=11 affinity=downstream " "annotated_text=Line 1\nLine< >2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStart, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=5 affinity=downstream " "annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStart, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=12 affinity=downstream " "annotated_text=Line 1\nLine <2>"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStartOrEnd, AXRangeExpandBehavior::kLeftFirst, "TextPosition anchor_id=4 text_offset=5 affinity=downstream " "annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=6 affinity=downstream " "annotated_text=Line 1<\n>Line 2"}, ExpandToEnclosingTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStartOrEnd, AXRangeExpandBehavior::kRightFirst, "TextPosition anchor_id=4 text_offset=7 affinity=downstream " "annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=11 affinity=downstream " "annotated_text=Line 1\nLine< >2"}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePositionAtTextBoundary, AXPositionCreatePositionAtTextBoundaryTestWithParam, testing::Values(CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kCharacter, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=7 text_offset=0 affinity=downstream " "annotated_text=<\n>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kCharacter, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=1 affinity=downstream " "annotated_text=L<i>ne 2"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kFormat, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=7 text_offset=0 affinity=downstream " "annotated_text=<\n>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kFormat, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=7 text_offset=0 affinity=downstream " "annotated_text=<\n>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStart, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStart, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "NullPosition"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStartOrEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kLineStartOrEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kObject, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=0 affinity=downstream " "annotated_text=<L>ine 2"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kObject, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=3 text_offset=0 affinity=downstream " "annotated_text=<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStart, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStart, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "NullPosition"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStartOrEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kParagraphStartOrEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWebPage, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=1 text_offset=0 affinity=downstream " "annotated_text=<L>ine 1\nLine 2"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWebPage, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=9 text_offset=6 affinity=downstream " "annotated_text=Line 2<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=6 affinity=downstream " "annotated_text=Line 1<>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=4 affinity=downstream " "annotated_text=Line< >2"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStart, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=5 affinity=downstream " "annotated_text=Line <1>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStart, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=5 affinity=downstream " "annotated_text=Line <2>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStartOrEnd, ax::mojom::MoveDirection::kBackward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=6 text_offset=5 affinity=downstream " "annotated_text=Line <1>"}, CreatePositionAtTextBoundaryTestParam{ ax::mojom::TextBoundary::kWordStartOrEnd, ax::mojom::MoveDirection::kForward, AXBoundaryBehavior::CrossBoundary, "TextPosition anchor_id=8 text_offset=4 affinity=downstream " "annotated_text=Line< >2"}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=5 " "affinity=downstream annotated_text=Line <2>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=5 " "affinity=downstream annotated_text=Line <1>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=12 " "affinity=downstream annotated_text=Line 1\nLine <2>", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=5 " "affinity=downstream annotated_text=Line <1>\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=5 " "affinity=downstream annotated_text=Line <1>", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=9 text_offset=4 " "affinity=downstream annotated_text=Line< >2", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=4 " "affinity=downstream annotated_text=Line< >2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextWordEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=9 text_offset=4 " "affinity=downstream annotated_text=Line< >2", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=6 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, { "TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", }}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=4 " "affinity=downstream annotated_text=Line< >2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousWordEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=11 " "affinity=downstream annotated_text=Line 1\nLine< >2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=4 " "affinity=downstream annotated_text=Line< >1\nLine 2", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousWordEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=6 text_offset=4 " "affinity=downstream annotated_text=Line< >1", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextLineEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 5, {"NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 5, {"NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=7 text_offset=0 " "affinity=downstream annotated_text=<\n>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 5, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 5, {"TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 12, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 12, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX1_ID, 2, {"NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousLineEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=6 " "affinity=downstream annotated_text=Line 1<\n>Line 2", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 5, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 5, {"TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=6 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousLineEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=7 text_offset=0 " "affinity=downstream annotated_text=<\n>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=2 text_offset=0 " "affinity=downstream annotated_text=<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphStartPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphStartPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphStartPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphStartPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=downstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 5, {"TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=5 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphStartPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1", "TextPosition anchor_id=6 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>", "TextPosition anchor_id=5 text_offset=6 " "affinity=downstream annotated_text=Line 1<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, LINE_BREAK_ID, 0, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, LINE_BREAK_ID, 1, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreateNextParagraphEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 0, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=1 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 0, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>", "TextPosition anchor_id=4 text_offset=13 " "affinity=downstream annotated_text=Line 1\nLine 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, STATIC_TEXT1_ID, 1, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreateNextParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>", "TextPosition anchor_id=9 text_offset=6 " "affinity=downstream annotated_text=Line 2<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphEndPositionWithBoundaryBehaviorCrossBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, ROOT_ID, 5, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, TEXT_FIELD_ID, 5, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "NullPosition"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::CrossBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "NullPosition"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphEndPositionWithBoundaryBehaviorStopAtAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, ROOT_ID, 5, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, TEXT_FIELD_ID, 5, {"TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=4 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtAnchorBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2", "TextPosition anchor_id=9 text_offset=0 " "affinity=downstream annotated_text=<L>ine 2"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphEndPositionWithBoundaryBehaviorStopIfAlreadyAtBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, ROOT_ID, 12, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, TEXT_FIELD_ID, 12, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX1_ID, 2, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, LINE_BREAK_ID, 0, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopIfAlreadyAtBoundary);}, LINE_BREAK_ID, 1, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>"}}))
 
 ui::INSTANTIATE_TEST_SUITE_P (CreatePreviousParagraphEndPositionWithBoundaryBehaviorStopAtLastAnchorBoundary, AXPositionTextNavigationTestWithParam, testing::Values(TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 13, {"TextPosition anchor_id=1 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 13, {"TextPosition anchor_id=4 text_offset=7 " "affinity=upstream annotated_text=Line 1\n<L>ine 2", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, ROOT_ID, 5, {"TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2", "TextPosition anchor_id=1 text_offset=0 " "affinity=downstream annotated_text=<L>ine 1\nLine 2"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, TEXT_FIELD_ID, 5, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 4, {"TextPosition anchor_id=7 text_offset=1 " "affinity=downstream annotated_text=\n<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}, TextNavigationTestParam{[](const TestPositionType &position) { return position->CreatePreviousParagraphEndPosition(AXBoundaryBehavior::StopAtLastAnchorBoundary);}, INLINE_BOX2_ID, 0, {"TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>", "TextPosition anchor_id=3 text_offset=0 " "affinity=downstream annotated_text=<>"}}))