Skip to content

Commit 5f013a6

Browse files
committed
Add tests for all kinds of event handler
1 parent 2b54e46 commit 5f013a6

File tree

1 file changed

+64
-15
lines changed

1 file changed

+64
-15
lines changed

tests/tester.js

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -226,20 +226,51 @@ console.log("I've got another line!", 2 < 3, "should be true.");
226226
assertEqual("Core", "Programmatically-created element rendered value", programmaticCodeInput.preElement.textContent, "Hello, World!\n");
227227

228228
// Event Listener Tests
229-
// Function type listeners
230-
let numTimesInputCalled = 0;
231-
let numTimesChangeCalled = 0;
232229

233-
let inputListener = (evt) => {
234-
if(!evt.isTrusted) { // To prevent duplicate calling due to allowInputEvents hack
235-
numTimesInputCalled++;
230+
let numTimesInputCalled = {"listener": 0, "idl": 0, "content": 0};
231+
let numTimesChangeCalled = {"listener": 0, "idl": 0, "content": 0};
232+
let numTimesFocusCalled = {"listener": 0, "idl": 0, "content": 0};
233+
let numTimesBlurCalled = {"listener": 0, "idl": 0, "content": 0};
234+
235+
let inputListener = (type, evt) => {
236+
if(!evt.isTrusted) { // To prevent duplicate calling due to allowInputEvents hack, used just in this test
237+
numTimesInputCalled[type]++;
236238
}
237239
};
238-
codeInputElement.addEventListener("input", inputListener);
239-
let changeListener = () => {
240-
numTimesChangeCalled++;
240+
let changeListener = (type) => {
241+
numTimesChangeCalled[type]++;
241242
};
242-
codeInputElement.addEventListener("change", changeListener);
243+
let focusListener = (type, evt) => {
244+
numTimesFocusCalled[type]++;
245+
};
246+
let blurListener = (type, evt) => {
247+
numTimesBlurCalled[type]++;
248+
};
249+
250+
codeInputElement.addEventListener("input", inputListener.bind(null, "listener"));
251+
codeInputElement.addEventListener("change", changeListener.bind(null, "listener"));
252+
codeInputElement.addEventListener("focus", focusListener.bind(null, "listener"));
253+
codeInputElement.addEventListener("blur", blurListener.bind(null, "listener"));
254+
255+
codeInputElement.oninput = inputListener.bind(null, "idl");
256+
codeInputElement.onchange = changeListener.bind(null, "idl");
257+
codeInputElement.onfocus = focusListener.bind(null, "idl");
258+
codeInputElement.onblur = blurListener.bind(null, "idl");
259+
260+
// Make listeners be called - first time
261+
textarea.focus(); // Focus textarea
262+
addText(textarea, " // Hi");
263+
textarea.blur(); // Unfocus textarea - calls change event
264+
textarea.focus();
265+
266+
window.content_listener_oninput = inputListener.bind(null, "content");
267+
codeInputElement.setAttribute("oninput", "content_listener_oninput(event)");
268+
window.content_listener_onchange = changeListener.bind(null, "content");
269+
codeInputElement.setAttribute("onchange", "content_listener_onchange(event)");
270+
window.content_listener_onfocus = focusListener.bind(null, "content");
271+
codeInputElement.setAttribute("onfocus", "content_listener_onfocus(event)");
272+
window.content_listener_onblur = blurListener.bind(null, "content");
273+
codeInputElement.setAttribute("onblur", "content_listener_onblur(event)");
243274

244275
let inputDeletedListenerCalled = false;
245276
let deletedListener = () => {
@@ -248,15 +279,33 @@ console.log("I've got another line!", 2 < 3, "should be true.");
248279
codeInputElement.addEventListener("input", deletedListener);
249280
codeInputElement.removeEventListener("input", deletedListener);
250281

251-
// Make listeners be called
252-
textarea.focus(); // Focus textarea
282+
// Make listeners be called - second time
253283
addText(textarea, " // Hi");
254284
textarea.blur(); // Unfocus textarea - calls change event
255285
textarea.focus();
256286

257-
assertEqual("Core", "Function Event Listeners: Input Called Right Number of Times", numTimesInputCalled, 6);
258-
assertEqual("Core", "Function Event Listeners: Change Called Right Number of Times", numTimesChangeCalled, 1);
259-
testAssertion("Core", "Function Event Listeners: Input Removed Listener Not Called", !inputDeletedListenerCalled, "(code-input element).removeEventListener did not work.");
287+
// Function type listeners
288+
// Never overriden
289+
assertEqual("Core", "addEventListener: Input Called Right Number of Times", numTimesInputCalled["listener"], 12);
290+
assertEqual("Core", "addEventListener: Change Called Right Number of Times", numTimesChangeCalled["listener"], 2);
291+
assertEqual("Core", "addEventListener: Focus Called Right Number of Times", numTimesFocusCalled["listener"], 3);
292+
assertEqual("Core", "addEventListener: Blur Called Right Number of Times", numTimesBlurCalled["listener"], 2);
293+
294+
// IDL attribute (JavaScript property) type listeners
295+
// Overriden by content attributes before second set of interaction
296+
assertEqual("Core", "IDL attribute (JavaScript .oninput) event handler: Input Called Right Number of Times then Overriden by Content Attr", numTimesInputCalled["idl"], 6);
297+
assertEqual("Core", "IDL attribute (JavaScript .onchange) event handler: Change Called Right Number of Times then Overriden by Content Attr", numTimesChangeCalled["idl"], 1);
298+
assertEqual("Core", "IDL attribute (JavaScript .onfocus) event handler: Focus Called Right Number of Times then Overriden by Content Attr", numTimesFocusCalled["idl"], 2);
299+
assertEqual("Core", "IDL attribute (JavaScript .onblur) event handler: Blur Called Right Number of Times then Overriden by Content Attr", numTimesBlurCalled["idl"], 1);
300+
301+
// Content attribute (HTML attribute) type listeners
302+
// Only registered before second set of interaction
303+
assertEqual("Core", "Content attribute (HTML oninput=\"...\") event handler: Input Called Right Number of Times", numTimesInputCalled["content"], 6);
304+
assertEqual("Core", "Content attribute (HTML onchange=\"...\") event handler: Change Called Right Number of Times", numTimesChangeCalled["content"], 1);
305+
assertEqual("Core", "Content attribute (HTML onfocus=\"...\") event handler: Focus Called Right Number of Times", numTimesFocusCalled["content"], 1);
306+
assertEqual("Core", "Content attribute (HTML onblur=\"...\") event handler: Blur Called Right Number of Times", numTimesBlurCalled["content"], 1);
307+
308+
testAssertion("Core", "addEventListener, removeEventListener: Input Removed Listener Not Called", !inputDeletedListenerCalled, "(code-input element).removeEventListener did not work.");
260309

261310
codeInputElement.removeEventListener("input", inputListener);
262311
codeInputElement.removeEventListener("change", changeListener);

0 commit comments

Comments
 (0)