| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>input type radio</title> |
| <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org"> |
| <link rel=help href="https://html.spec.whatwg.org/multipage/#radio-button-state-(type=radio)"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <input type=radio name=group1 id=radio1> |
| <input type=radio name=group1 id=radio2> |
| |
| <input type=radio name=groüp2 id=radio3> |
| <input type=radio name=groÜp2 id=radio4> |
| |
| <input type=radio id=radio5> |
| <input type=radio id=radio6 disabled> |
| |
| <input type=radio id=radio71 checked> |
| <input type=radio id=radio72> |
| |
| <input type=radio name=group3 id=radio8 checked> |
| <input type=radio name=group3 id=radio9> |
| <input type=radio name=group4 id=radio10> |
| <input type=radio name=group4 id=radio11 checked> |
| |
| |
| <script> |
| var radio1 = document.getElementById('radio1'), |
| radio2 = document.getElementById('radio2'), |
| radio3 = document.getElementById('radio3'), |
| radio4 = document.getElementById('radio4'), |
| radio5 = document.getElementById('radio5'), |
| radio6 = document.getElementById('radio6'), |
| radio71 = document.getElementById('radio71'), |
| radio72 = document.getElementById('radio72'), |
| radio8 = document.getElementById('radio8'), |
| radio9 = document.getElementById('radio9'), |
| radio10 = document.getElementById('radio10'), |
| radio11 = document.getElementById('radio11'), |
| t1 = async_test("click on mutable radio fires the input event"), |
| t2 = async_test("click on mutable radio fires the change event"), |
| t3 = async_test("click on non-mutable radio doesn't fire the input event"), |
| t4 = async_test("click on non-mutable radio doesn't fire the change event"), |
| t5 = async_test("canceled activation steps on unchecked radio"), |
| input_fired = false, |
| change_fired = false; |
| |
| test(function(){ |
| assert_false(radio1.checked); |
| assert_false(radio2.checked); |
| radio1.checked = true; |
| assert_true(radio1.checked); |
| assert_false(radio2.checked); |
| radio2.checked = true; |
| assert_false(radio1.checked); |
| assert_true(radio2.checked); |
| }, "only one control of a radio button group can have its checkedness set to true"); |
| |
| test(function(){ |
| assert_false(radio3.checked); |
| assert_false(radio4.checked); |
| radio3.checked = true; |
| assert_true(radio3.checked); |
| assert_false(radio4.checked); |
| radio4.checked = true; |
| assert_false(radio3.checked); |
| assert_true(radio4.checked); |
| }, "radio inputs with name attributes groüp2 and groÜp2 belong to the same radio button group"); |
| |
| test(function(){ |
| assert_true(radio8.checked); |
| assert_false(radio9.checked); |
| assert_false(radio10.checked); |
| assert_true(radio11.checked); |
| radio9.name="group4"; |
| radio9.checked = true; |
| assert_true(radio8.checked); |
| assert_true(radio9.checked); |
| assert_false(radio10.checked); |
| assert_false(radio11.checked); |
| }, "changing the name of a radio input element and setting its checkedness to true makes all the other elements' checkedness in the same radio button group be set to false"); |
| |
| radio5.oninput= t1.step_func(function(e) { |
| input_fired = true; |
| assert_true(e.bubbles, "event should bubble") |
| assert_true(e.isTrusted, "event should be trusted"); |
| assert_false(e.cancelable, "event shoud not be cancelable"); |
| }); |
| |
| radio5.onchange = t2.step_func(function(e) { |
| change_fired = true; |
| assert_true(e.bubbles, "event should bubble") |
| assert_true(e.isTrusted, "event should be trusted"); |
| assert_false(e.cancelable, "event shoud not be cancelable"); |
| }); |
| |
| radio6.oninput= t3.step_func_done(function(e) { |
| assert_unreached("event input fired"); |
| }); |
| |
| radio6.onchange = t4.step_func_done(function(e) { |
| assert_unreached("event change fired"); |
| }); |
| |
| t1.step(function() { |
| radio5.click(); |
| assert_true(input_fired); |
| t1.done(); |
| }); |
| |
| t2.step(function() { |
| assert_true(change_fired); |
| t2.done(); |
| }) |
| |
| t3.step(function(){ |
| radio6.click(); |
| t3.done(); |
| t4.done(); |
| }); |
| |
| radio72.onclick = t5.step_func_done(function(e){ |
| assert_false(radio71.checked); |
| assert_true(radio72.checked); |
| e.preventDefault(); |
| assert_false(radio71.checked); |
| assert_true(radio72.checked); |
| }); |
| |
| t5.step(function(){ |
| assert_true(radio71.checked); |
| assert_false(radio72.checked); |
| radio72.click(); |
| assert_true(radio71.checked); |
| assert_false(radio72.checked); |
| }); |
| </script> |