To manually test this, try deleting backwards/forwards at various text granularities and observe the output. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [0, 1] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [3, 4] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [2, 3] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [16, 17] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [0, 17] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [4, 7] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [7, 10] PASS event.inputType.startsWith('delete') is true PASS deletionRange.startContainer is deletionRange.endContainer Deleting text in range: [0, 10] PASS successfullyParsed is true TEST COMPLETE foo barbaz garply