This test checks that the cursor covers the next character to be overwritten in overtype mode instead of being painted as a caret (1px width bar)

ABC
שדן
שדןABC
Verifying block cursor position and width for each position in 'ABC' in a ltr block
getSelection().collapse(textNode, 0)
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 1)
PASS blockCursorStartPosition[0] < blockCursorStartPosition[1] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 2)
PASS blockCursorStartPosition[1] < blockCursorStartPosition[2] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 3)
PASS blockCursor.width is 0
PASS internals.absoluteCaretBounds().width is 1

Verifying block cursor position and width for each position in 'שדן' in a ltr block
getSelection().collapse(textNode, 0)
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 1)
PASS blockCursorStartPosition[0] > blockCursorStartPosition[1] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 2)
PASS blockCursorStartPosition[1] > blockCursorStartPosition[2] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 3)
PASS blockCursor.width is 0
PASS internals.absoluteCaretBounds().width is 1

Verifying block cursor position and width for each position in 'שדןABC' in a ltr block
getSelection().collapse(textNode, 0)
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 1)
PASS blockCursorStartPosition[0] > blockCursorStartPosition[1] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 2)
PASS blockCursorStartPosition[1] > blockCursorStartPosition[2] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 3)
PASS blockCursorStartPosition[2] < blockCursorStartPosition[3] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 4)
PASS blockCursorStartPosition[3] < blockCursorStartPosition[4] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 5)
PASS blockCursorStartPosition[4] < blockCursorStartPosition[5] is true
PASS getSelection().isCollapsed is true
PASS blockCursor.width > 1 is true
PASS internals.absoluteCaretBounds().width is 1
getSelection().collapse(textNode, 6)
PASS blockCursor.width is 0
PASS internals.absoluteCaretBounds().width is 1

PASS successfullyParsed is true

TEST COMPLETE

