Skip to content

Commit

Permalink
Merge pull request web-platform-tests#776 from deniak/text-field-sele…
Browse files Browse the repository at this point in the history
…ction

tests for text field selection
  • Loading branch information
deniak committed Apr 2, 2014
2 parents 3398100 + eb37021 commit b800390
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 0 deletions.
45 changes: 45 additions & 0 deletions html/semantics/forms/textfieldselection/select-event.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>text field selection: select()</title>
<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
<link rel=help href="http://www.w3.org/html/wg/drafts/html/master/#textFieldSelection">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<textarea>foobar</textarea>
<script>
var input_types = ["text", "search", "tel", "url", "password"],
t1 = async_test("select() on textarea queues select event"),
q1 = false;

input_types.forEach(function(type) {
var input = document.createElement("input"),
t = async_test("select() on input type " + type + " queues select event"),
q = false;
t.step(function() {
input.type = type;
input.value = "foobar";
document.body.appendChild(input);
input.onselect = t.step_func_done(function(e) {
assert_true(q, "event should be queued");
assert_true(e.isTrusted, "event is trusted");
assert_true(e.bubbles, "event bubbles");
assert_false(e.cancelable, "event is not cancelable");
});
input.select();
q=true;
});
});

document.querySelector("textarea").onselect = t1.step_func_done(function(e) {
assert_true(q1, "event should be queued");
assert_true(e.isTrusted, "event is trusted");
assert_true(e.bubbles, "event bubbles");
assert_false(e.cancelable, "event is not cancelable");
});

t1.step(function() {
document.querySelector("textarea").select();
q1=true;
});
</script>
Original file line number Diff line number Diff line change
@@ -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="http://www.w3.org/html/wg/drafts/html/master/#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>

0 comments on commit b800390

Please sign in to comment.