<!DOCTYPE html>
<html>
<body>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<div id="log"></div>
<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=32013">https://bugs.webkit.org/show_bug.cgi?id=32013</a>.
<p>For manual testing, focus a radio button in the first group and use the arrow keys. Changing the checked
radio button should fire change events.
<p>
<input type=radio name=aaa value=a checked onchange="handleChange(event)">a
<input type=radio name=aaa value=b onchange="handleChange(event)">b
<input type=radio name=aaa value=c onchange="handleChange(event)">c
<p>For manual testing, focus a radio button in the second group and use the arrow keys. Change events
should still be dispatched but the checked radio should not change.
<p>
<input type=radio name=bbb value=d checked onchange="handleChange(event)" onclick="preventClick(event)">d
<input type=radio name=bbb value=e onchange="handleChange(event)" onclick="preventClick(event)">e
<input type=radio name=bbb value=f onchange="handleChange(event)" onclick="preventClick(event)">f
<p>Test for <a href="https://code.google.com/p/chromium/issues/detail?id=556677">https://code.google.com/p/chromium/issues/detail?id=556677</a>.
<p>For manual testing, focus a radio button in the first group and use the arrow keys. Changing the
radio button should fire change events in the direction of left to right.
<div dir="rtl">
<p>
<input type=radio name=ccc value=x onchange="handleChange(event)"><span dir="rtl">x</span>
<input type=radio name=ccc value=y onchange="handleChange(event)"><span dir="rtl">y</span>
<input type=radio name=ccc value=z onchange="handleChange(event)"><span dir="rtl">z</span>
</div>
<script>
var lastChangeEventValue = null;
function handleChange(e)
{
lastChangeEventValue = e.target.value;
}
function preventClick(e)
{
e.preventDefault();
}
function getRadio(value)
{
return document.querySelector('input[value="' + value + '"]');
}
if (window.eventSender) {
test(function() {
getRadio('a').focus();
eventSender.keyDown('ArrowDown');
assert_equals(lastChangeEventValue, 'b');
eventSender.keyDown('ArrowDown');
assert_equals(lastChangeEventValue, 'c');
assert_false(getRadio('a').checked);
assert_false(getRadio('b').checked);
assert_true(getRadio('c').checked);
}, 'Pressing an arrow key moves checked state in a radio button group.');
test(function() {
getRadio('d').focus();
eventSender.keyDown('ArrowDown');
eventSender.keyDown('ArrowDown');
assert_true(getRadio('d').checked);
assert_false(getRadio('e').checked);
assert_false(getRadio('f').checked);
}, 'Pressing an arrow key doesn\'t move checked state in a radio button group if click events are prevented.');
test(function() {
getRadio('x').focus();
eventSender.keyDown('ArrowRight');
assert_equals(lastChangeEventValue, 'z');
assert_false(getRadio('x').checked);
assert_false(getRadio('y').checked);
assert_true(getRadio('z').checked);
eventSender.keyDown('ArrowRight');
assert_equals(lastChangeEventValue, 'y');
assert_false(getRadio('x').checked);
assert_true(getRadio('y').checked);
assert_false(getRadio('z').checked);
}, 'Right arrow key should move checked state backward in RTL.');
test(function() {
getRadio('x').focus();
getRadio('x').checked = true;
eventSender.keyDown('ArrowDown');
assert_equals(lastChangeEventValue, 'y');
assert_false(getRadio('x').checked);
assert_true(getRadio('y').checked);
assert_false(getRadio('z').checked);
}, 'Down arrow key should move checked state forward regardless of RTL.');
}
</script>
</body>
</html>