This is a testharness.js-based test.
FAIL removeRange() with Range 0 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 1 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 2 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 3 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 4 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 5 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 6 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 7 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 14 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 15 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 16 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 17 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 18 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 22 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 23 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 26 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 27 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 28 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 29 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 30 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 31 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 32 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 34 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 35 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 36 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 37 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 38 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
FAIL removeRange() with Range 39 assert_throws: Removing a different range should throw function "function () { selection.removeRange(equivalentRange) }" did not throw
PASS removeRange() argument is non-optional Range
Harness: the test ran to completion.

