Test selecting non-editable text using the keyboard.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".



Press Shift + right arrow to select the next character:
PASS window.getSelection().toString() is "He"

Press Shift + left arrow to select the previous character:
PASS window.getSelection().toString() is "Her"

Press Shift + Option + right arrow to select to the end of the word:
PASS window.getSelection().toString() is "Here's "

Press Shift + Option + left arrow to select to the beginning of the word:
PASS window.getSelection().toString() is "The"

Press Shift + Control + right arrow to select to the end of the line:
PASS window.getSelection().toString() is "Here's to the crazy ones."

Press Shift + Control + left arrow to select to the beginning of the line:
PASS window.getSelection().toString() is "The misfits."

Press Shift + up arrow to select up:
PASS window.getSelection().toString() is "Here's to the crazy ones.\n\nT"

Press Shift + down arrow to select down:
PASS window.getSelection().toString() is "The misfits.\n\nT"

Press Shift + Option + down arrow to select to the end of the paragraph:
PASS window.getSelection().toString() is "Here's to the crazy ones."

Press Shift + Option + up arrow to select to the beginning of the paragraph:
PASS window.getSelection().toString() is "The rebels."

Press Shift + Control + down arrow to select to the end of the document:
PASS window.getSelection().toString() is "Here's to the crazy ones.\n\nThe misfits.\n\nThe rebels."

Press Shift + Control + up arrow to select to the beginning of the document:
PASS window.getSelection().toString() is "Here's to the crazy ones.\n\nThe misfits."
PASS successfullyParsed is true

TEST COMPLETE

