1<!doctype html> 2<title>Clicks on input element</title> 3<script src="/resources/testharness.js"></script> 4<script src="/resources/testharnessreport.js"></script> 5<div id=dump style=display:none></div> 6<script> 7var dump = document.getElementById("dump") 8 9test(t => { 10 const input = document.createElement("input"); 11 input.type = "checkbox"; 12 input.disabled = true; 13 const label = document.createElement("label"); 14 label.append(input); 15 dump.append(label); 16 label.click(); 17 assert_false(input.checked); 18}, "disabled checkbox should not be checked from label click"); 19 20test(t => { 21 const input = document.createElement("input"); 22 input.type = "radio"; 23 input.disabled = true; 24 const label = document.createElement("label"); 25 label.append(input); 26 dump.append(label); 27 label.click(); 28 assert_false(input.checked); 29}, "disabled radio should not be checked from label click"); 30 31test(t => { 32 const input = document.createElement("input"); 33 input.type = "checkbox"; 34 input.disabled = true; 35 const label = document.createElement("label"); 36 label.append(input); 37 dump.append(label); 38 label.dispatchEvent(new MouseEvent("click")); 39 assert_false(input.checked); 40}, "disabled checkbox should not be checked from label click by dispatchEvent"); 41 42test(t => { 43 const input = document.createElement("input"); 44 input.type = "radio"; 45 input.disabled = true; 46 const label = document.createElement("label"); 47 label.append(input); 48 dump.append(label); 49 label.dispatchEvent(new MouseEvent("click")); 50 assert_false(input.checked); 51}, "disabled radio should not be checked from label click by dispatchEvent"); 52 53test(t => { 54 const checkbox = dump.appendChild(document.createElement("input")); 55 checkbox.type = "checkbox"; 56 checkbox.onclick = ev => { 57 checkbox.type = "date"; 58 ev.preventDefault(); 59 }; 60 checkbox.dispatchEvent(new MouseEvent("click", { cancelable: true })); 61 assert_false(checkbox.checked); 62}, "checkbox morphed into another type should not mutate checked state"); 63 64test(t => { 65 const radio1 = dump.appendChild(document.createElement("input")); 66 const radio2 = dump.appendChild(radio1.cloneNode()); 67 radio1.type = radio2.type = "radio"; 68 radio1.name = radio2.name = "foo"; 69 radio2.checked = true; 70 radio1.onclick = ev => { 71 radio1.type = "date"; 72 ev.preventDefault(); 73 }; 74 radio1.dispatchEvent(new MouseEvent("click", { cancelable: true })); 75 assert_false(radio1.checked); 76 assert_true(radio2.checked); 77}, "radio morphed into another type should not steal the existing checked state"); 78</script> 79