event-handler-removal.window.js (4586B)
1 let firstEventHandler; 2 3 test(t => { 4 var i = 0; 5 firstEventHandler = t.unreached_func('First event handler.'); 6 var uncalled = "firstEventHandler();"; 7 var button = document.createElement('button'); 8 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 1) }), false); 9 button.setAttribute('onclick', uncalled); // event handler is activated here 10 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 2) }), false); 11 button.onclick = null; // but de-activated here 12 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 3) }), false); 13 button.onclick = t.step_func(() => { assert_equals(++i, 4); }); // and re-activated here 14 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 5) }), false); 15 button.click() 16 assert_equals(button.getAttribute("onclick"), uncalled) 17 assert_equals(i, 5); 18 }, "Event handler set through content attribute should be removed when they are set to null."); 19 20 let happened = 0; 21 test(() => { 22 var script = "happened++;"; 23 var button = document.createElement('button'); 24 button.setAttribute('onclick', script); // event handler is activated here 25 button.onclick = null; // but de-activated here 26 assert_equals(button.getAttribute("onclick"), script) 27 button.setAttribute('onclick', script); // and re-activated here 28 button.click() 29 assert_equals(happened, 1); 30 }, "Event handler set through content attribute should be re-activated even if content is the same."); 31 32 test(t => { 33 var i = 0; 34 firstEventHandler = t.unreached_func('First event handler.'); 35 var uncalled = "firstEventHandler();"; 36 var button = document.createElement('button'); 37 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 1) }), false); 38 button.setAttribute('onclick', uncalled); // event handler is activated here 39 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 2) }), false); 40 button.removeAttribute('onclick'); // but de-activated here 41 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 3) }), false); 42 button.onclick = t.step_func(() => { assert_equals(++i, 4); }); // and re-activated here 43 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 5) }), false); 44 button.click() 45 assert_equals(i, 5); 46 }, "Event handler set through content attribute should be deactivated when the content attribute is removed."); 47 test(t => { 48 var i = 0; 49 firstEventHandler = t.unreached_func('First event handler.'); 50 var uncalled = "firstEventHandler();"; 51 var button = document.createElement('button'); 52 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 1) }), false); 53 button.onclick = t.unreached_func('First event handler.'); // event handler is activated here 54 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 2) }), false); 55 button.onclick = null; // but de-activated here 56 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 3) }), false); 57 button.onclick = t.step_func(() => { assert_equals(++i, 4); }); // and re-activated here 58 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 5) }), false); 59 button.click() 60 assert_equals(i, 5); 61 }, "Event handler set through IDL should be deactivated when the IDL attribute is set to null."); 62 test(t => { 63 var i = 0; 64 firstEventHandler = t.unreached_func('First event handler.'); 65 var uncalled = "firstEventHandler();"; 66 var button = document.createElement('button'); 67 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 1) }), false); 68 button.onclick = t.unreached_func('First event handler.'); // event handler is activated here 69 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 3) }), false); 70 button.removeAttribute('onclick'); // and NOT de-activated here 71 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 4) }), false); 72 button.onclick = t.step_func(() => { assert_equals(++i, 2); }); 73 button.addEventListener('click', t.step_func(() => { assert_equals(++i, 5) }), false); 74 button.click() 75 assert_equals(i, 5); 76 }, "Event handler set through IDL should NOT be deactivated when the content attribute is removed.");