Index: LayoutTests/imported/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html |
diff --git a/LayoutTests/imported/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html b/LayoutTests/imported/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6490da7c360ebd6800d612a182370cb2c567027e |
--- /dev/null |
+++ b/LayoutTests/imported/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) { |
+ var t = async_test(element.id + " setRangeText fires a select event"), |
+ q = false; |
+ |
+ 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"); |
+ |
+ element.onselect = t.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; |
+ }) |
+</script> |