blob: 4110f2d6cf9ae733eddb728ed049da40843087d2 [file] [log] [blame]
<!DOCTYPE html>
<body>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<select id="select1">
<option value="">Placeholder</option>
<option>a</option>
<option>b</option>
<option>c</option>
</select>
<select id="select2">
<option value="">Placeholder</option>
<option>a</option>
<option>b</option>
<option>c</option>
</select>
<script>
var select = document.querySelector('select');
var placeholderOption = document.querySelector('option');
var selectedValue;
select.focus();
select.addEventListener('change', function() {
selectedValue = select.value;
if (placeholderOption.parentNode == select)
select.removeChild(placeholderOption);
});
test(function() {
eventSender.keyDown('a');
assert_equals(selectedValue, 'a');
assert_equals(placeholderOption.parentNode, null);
internals.resetTypeAheadSession(select);
eventSender.keyDown('b');
assert_equals(select.value, 'b');
assert_equals(selectedValue, 'b');
internals.resetTypeAheadSession(select);
eventSender.keyDown('c');
assert_equals(selectedValue, 'c');
}, 'Change event should be dispatched after the option removal.');
selectedValue = null;
var select2 = document.querySelector('#select2');
select2.focus();
select2.addEventListener('change', function() {
selectedValue = select2.value;
if (select2.options[0].value == '') {
var options = select2.options;
for (var i = 0; i < options.length - 1; ++i) {
options[i].label = options[i + 1].label;
options[i].value = options[i + 1].value;
options[i].textContent = options[i + 1].textContent;
}
select2.removeChild(options[options.length - 1]);
select2.value = selectedValue;
}
});
test(function() {
eventSender.keyDown('a');
assert_equals(select2.selectedIndex, 0);
assert_equals(selectedValue, 'a');
internals.resetTypeAheadSession(select2);
eventSender.keyDown('b');
assert_equals(select2.selectedIndex, 1);
assert_equals(selectedValue, 'b');
}, 'Change event should be dispatched after updating selection programatically.');
</script>
</body>