diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html b/testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html new file mode 100644 index 000000000..edc8f2a86 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>text field selection: setRangeText</title> +<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org"> +<link rel=help href="https://html.spec.whatwg.org/multipage/#textFieldSelection"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + #display_none {display:none;} +</style> +<div id="log"></div> +<input type=text id=text value="foobar"> +<input type=search id=search value="foobar"> +<input type=tel id=tel value="foobar"> +<input type=url id=url value="foobar"> +<input type=password id=password value="foobar"> +<input id=display_none value="foobar"> +<textarea id=textarea>foobar</textarea> +<script> + var input = document.createElement("input"); + input.id = "input_not_in_doc"; + input.value = "foobar"; + + var elements = [ + document.getElementById("text"), + document.getElementById("search"), + document.getElementById("tel"), + document.getElementById("url"), + document.getElementById("password"), + document.getElementById("display_none"), + document.getElementById("textarea"), + input, + ] + + elements.forEach(function(element) { + test(function() { + element.value = "foobar"; + element.selectionStart = 0; + element.selectionEnd = 3; + assert_equals(element.selectionStart, 0); + assert_equals(element.selectionEnd, 3); + element.setRangeText("foobar2"); + assert_equals(element.value, "foobar2bar"); + assert_equals(element.selectionStart, 0); + assert_equals(element.selectionEnd, 7); + element.setRangeText("foobar3", 7, 10); + assert_equals(element.value, "foobar2foobar3"); + }, element.id + " setRangeText with only one argument replaces the value between selectionStart and selectionEnd, otherwise replaces the value between 2nd and 3rd arguments"); + + test(function(){ + element.value = "foobar"; + element.selectionStart = 0; + element.selectionEnd = 0; + + element.setRangeText("foobar2", 0, 3); // no 4th arg, default "preserve" + assert_equals(element.value, "foobar2bar"); + assert_equals(element.selectionStart, 0); + assert_equals(element.selectionEnd, 0); + }, element.id + " selectionMode missing"); + + test(function(){ + element.value = "foobar" + element.setRangeText("foo", 3, 6, "select"); + assert_equals(element.value, "foofoo"); + assert_equals(element.selectionStart, 3); + assert_equals(element.selectionEnd, 6); + }, element.id + " selectionMode 'select'"); + + test(function(){ + element.value = "foobar" + element.setRangeText("foo", 3, 6, "start"); + assert_equals(element.value, "foofoo"); + assert_equals(element.selectionStart, 3); + assert_equals(element.selectionEnd, 3); + }, element.id + " selectionMode 'start'"); + + test(function(){ + element.value = "foobar" + element.setRangeText("foobar", 3, 6, "end"); + assert_equals(element.value, "foofoobar"); + assert_equals(element.selectionStart, 9); + assert_equals(element.selectionEnd, 9); + }, element.id + " selectionMode 'end'"); + + test(function(){ + element.value = "foobar" + element.selectionStart = 0; + element.selectionEnd = 5; + assert_equals(element.selectionStart, 0); + element.setRangeText("", 3, 6, "preserve"); + assert_equals(element.value, "foo"); + assert_equals(element.selectionStart, 0); + assert_equals(element.selectionEnd, 3); + }, element.id + " selectionMode 'preserve'"); + + test(function(){ + assert_throws("INDEX_SIZE_ERR", function() { + element.setRangeText("barfoo", 2, 1); + }); + }, element.id + " setRangeText with 3rd argument greater than 2nd argument throws an IndexSizeError exception"); + + test(function(){ + assert_throws(new TypeError(), function() { + element.setRangeText(); + }); + }, element.id + " setRangeText without argument throws a type error"); + + async_test(function() { + var q = false; + element.onselect = this.step_func_done(function(e) { + assert_true(q, "event should be queued"); + assert_true(e.isTrusted, "event is trusted"); + assert_false(e.bubbles, "event bubbles"); + assert_false(e.cancelable, "event is not cancelable"); + }); + element.setRangeText("foobar2", 0, 6); + q = true; + }, element.id + " setRangeText fires a select event"); + }) +</script> |