Skip to content

Commit f911433

Browse files
committed
Add tests for Object Type Listeners; Start debugging them
1 parent 13833d4 commit f911433

File tree

2 files changed

+49
-13
lines changed

2 files changed

+49
-13
lines changed

code-input.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,6 @@ var codeInput = {
864864
*/
865865
addEventListener(type, listener, options = undefined) {
866866
// Save a copy of the callback where `this` refers to the code-input element.
867-
// This callback is modified to only run when the handleEventsFromTextarea is set.
868867
let boundCallback = function (evt) {
869868
if (typeof listener === 'function') {
870869
listener(evt);
@@ -876,20 +875,21 @@ var codeInput = {
876875

877876
if (codeInput.textareaSyncEvents.includes(type)) {
878877
// Synchronise with textarea, only when handleEventsFromTextarea is true
879-
let boundCallback = function(evt) { if(this.handleEventsFromTextarea) listener(evt); }.bind(this);
880-
this.boundEventCallbacks[listener] = boundCallback;
878+
// This callback is modified to only run when the handleEventsFromTextarea is set.
879+
let conditionalBoundCallback = function(evt) { if(this.handleEventsFromTextarea) boundCallback(evt); }.bind(this);
880+
this.boundEventCallbacks[listener] = conditionalBoundCallback;
881881

882882
if (options === undefined) {
883883
if(this.textareaElement == null) {
884884
this.addEventListener("code-input_load", () => { this.textareaElement.addEventListener(type, boundCallback); });
885885
} else {
886-
this.textareaElement.addEventListener(type, boundCallback);
886+
this.textareaElement.addEventListener(type, conditionalBoundCallback);
887887
}
888888
} else {
889889
if(this.textareaElement == null) {
890890
this.addEventListener("code-input_load", () => { this.textareaElement.addEventListener(type, boundCallback, options); });
891891
} else {
892-
this.textareaElement.addEventListener(type, boundCallback, options);
892+
this.textareaElement.addEventListener(type, conditionalBoundCallback, options);
893893
}
894894
}
895895
} else {

tests/tester.js

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -210,17 +210,21 @@ console.log("I've got another line!", 2 < 3, "should be true.");`);
210210
console.log("I've got another line!", 2 &lt; 3, "should be true.");
211211
`); // Extra newline so line numbers visible if enabled
212212

213-
// Event Tests
213+
// Event Listener Tests
214+
// Function type listeners
214215
let numTimesInputCalled = 0;
215216
let numTimesChangeCalled = 0;
216-
codeInputElement.addEventListener("input", (evt) => {
217+
218+
let inputListener = (evt) => {
217219
if(!evt.isTrusted) { // To prevent duplicate calling due to allowInputEvents hack
218220
numTimesInputCalled++;
219221
}
220-
});
221-
codeInputElement.addEventListener("change", () => {
222+
};
223+
codeInputElement.addEventListener("input", inputListener);
224+
let changeListener = () => {
222225
numTimesChangeCalled++;
223-
});
226+
};
227+
codeInputElement.addEventListener("change", changeListener);
224228

225229
let inputDeletedListenerCalled = false;
226230
let deletedListener = () => {
@@ -235,9 +239,41 @@ console.log("I've got another line!", 2 &lt; 3, "should be true.");
235239
textarea.blur(); // Unfocus textarea - calls change event
236240
textarea.focus();
237241

238-
assertEqual("Core", "Input Event Listener Called Right Number of Times", numTimesInputCalled, 6);
239-
assertEqual("Core", "Change Event Listener Called Right Number of Times", numTimesChangeCalled, 1);
240-
testAssertion("Core", "Input Event Removed Listener Not Called", !inputDeletedListenerCalled, "(code-input element).removeEventListener did not work.");
242+
assertEqual("Core", "Function Event Listeners: Input Called Right Number of Times", numTimesInputCalled, 6);
243+
assertEqual("Core", "Function Event Listeners: Change Called Right Number of Times", numTimesChangeCalled, 1);
244+
testAssertion("Core", "Function Event Listeners: Input Removed Listener Not Called", !inputDeletedListenerCalled, "(code-input element).removeEventListener did not work.");
245+
246+
codeInputElement.removeEventListener("input", inputListener);
247+
codeInputElement.removeEventListener("change", changeListener);
248+
249+
// Repeat for Object type listeners
250+
numTimesInputCalled = 0;
251+
numTimesChangeCalled = 0;
252+
codeInputElement.addEventListener("input", {handleEvent: (evt) => {
253+
if(!evt.isTrusted) { // To prevent duplicate calling due to allowInputEvents hack
254+
numTimesInputCalled++;
255+
}
256+
}});
257+
codeInputElement.addEventListener("change", {handleEvent: () => {
258+
numTimesChangeCalled++;
259+
}});
260+
261+
inputDeletedListenerCalled = false;
262+
deletedListener = {handleEvent: () => {
263+
inputDeletedListenerCalled = true;
264+
}};
265+
codeInputElement.addEventListener("input", deletedListener);
266+
codeInputElement.removeEventListener("input", deletedListener);
267+
268+
// Make listeners be called
269+
textarea.focus(); // Focus textarea
270+
addText(textarea, " // Hi");
271+
textarea.blur(); // Unfocus textarea - calls change event
272+
textarea.focus();
273+
274+
assertEqual("Core", "Object Event Listeners: Input Called Right Number of Times", numTimesInputCalled, 6);
275+
assertEqual("Core", "Object Event Listeners: Change Called Right Number of Times", numTimesChangeCalled, 1);
276+
testAssertion("Core", "Object Event Listeners: Input Removed Listener Not Called", !inputDeletedListenerCalled, "(code-input element).removeEventListener did not work.");
241277

242278
// Changing language should be correct
243279
if(!isHLJS) {

0 commit comments

Comments
 (0)