spiegel-keyman/web/unit_tests/cases/events.js

113 lines
No EOL
3.8 KiB
JavaScript

var assert = chai.assert;
describe('Event Management', function() {
this.timeout(testconfig.timeouts.standard);
before(function() {
this.timeout(testconfig.timeouts.scriptLoad * 2);
fixture.setBase('fixtures');
fixture.load("eventTestConfig.html");
return setupKMW(null, testconfig.timeouts.scriptLoad).then(() => {
// We use this keyboard since we only need minimal input functionality for these tests.
// Smaller is better when dealing with net latency.
return loadKeyboardFromJSON("/keyboards/test_simple_deadkeys.json", testconfig.timeouts.scriptLoad);
});
});
after(function() {
teardownKMW();
});
it('Keystroke-based onChange event generation', function() {
var simple_A = {"type":"key","key":"a","code":"KeyA","keyCode":65,"modifierSet":0,"location":0};
var event = new KMWRecorder.PhysicalInputEventSpec(simple_A);
var ele = document.getElementById("input");
ele.onchange = function() {
ele.onchange = null;
}
// A bit of a force-hack to ensure the element is seen as active for the tests.
com.keyman.dom['DOMEventHandlers'].states._lastActiveElement = ele;
com.keyman.dom['DOMEventHandlers'].states._activeElement = ele;
let eventDriver = new KMWRecorder.BrowserDriver(ele);
eventDriver.simulateEvent(event);
let focusEvent = new FocusEvent('blur', {relatedTarget: ele});
ele.dispatchEvent(focusEvent);
// Asserts that the handler is called. As the handler clears itself, it will only
// remain set if it hasn't been called.
assert.isNull(ele.onchange, '`onchange` handler was not called');
});
it('OSK-based onChange event generation', function() {
var simple_A = {"type":"osk","keyID":"default-K_A"};
var event = new KMWRecorder.OSKInputEventSpec(simple_A);
var ele = document.getElementById("input");
ele.onchange = function() {
ele.onchange = null;
}
// A bit of a force-hack to ensure the element is seen as active for the tests.
com.keyman.dom['DOMEventHandlers'].states._lastActiveElement = ele;
com.keyman.dom['DOMEventHandlers'].states._activeElement = ele;
let eventDriver = new KMWRecorder.BrowserDriver(ele);
eventDriver.simulateEvent(event);
let focusEvent = new FocusEvent('blur', {relatedTarget: ele});
ele.dispatchEvent(focusEvent);
// Asserts that the handler is called. As the handler clears itself, it will only
// remain set if it hasn't been called.
assert.isNull(ele.onchange, '`onchange` handler was not called');
});
it('Keystroke-based onInput event generation', function() {
var simple_A = {"type":"key","key":"a","code":"KeyA","keyCode":65,"modifierSet":0,"location":0};
var event = new KMWRecorder.PhysicalInputEventSpec(simple_A);
var ele = document.getElementById("input");
var counterObj = {i:0};
var fin = 3;
ele.addEventListener("input", function() {
counterObj.i++;
});
let eventDriver = new KMWRecorder.BrowserDriver(ele);
eventDriver.simulateEvent(event);
eventDriver.simulateEvent(event);
eventDriver.simulateEvent(event);
assert.equal(counterObj.i, fin, "Event handler not called the expected number of times");
});
it('OSK-based onInput event generation', function() {
var simple_A = {"type":"osk","keyID":"default-K_A"};
var event = new KMWRecorder.OSKInputEventSpec(simple_A);
var ele = document.getElementById("input");
var counterObj = {i:0};
var fin = 3;
ele.addEventListener("input", function() {
counterObj.i++;
});
let eventDriver = new KMWRecorder.BrowserDriver(ele);
eventDriver.simulateEvent(event);
eventDriver.simulateEvent(event);
eventDriver.simulateEvent(event);
assert.equal(counterObj.i, fin, "Event handler not called the expected number of times");
});
});