mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 08:55:34 +00:00
170 lines
No EOL
4.8 KiB
JavaScript
170 lines
No EOL
4.8 KiB
JavaScript
var assert = chai.assert;
|
|
|
|
describe('Event Management', function() {
|
|
this.timeout(kmwconfig.timeouts.standard);
|
|
|
|
before(function(done) {
|
|
this.timeout(kmwconfig.timeouts.scriptLoad * 2);
|
|
fixture.setBase('fixtures');
|
|
fixture.load("eventTestConfig.html");
|
|
|
|
setupKMW(null, function() {
|
|
// We use this keyboard since we only need minimal input functionality for these tests.
|
|
// Smaller is better when dealing with net latency.
|
|
loadKeyboardFromJSON("/keyboards/test_simple_deadkeys.json", function() {
|
|
// Interestingly, when auto-testing there's a Safari bug that prevents
|
|
// this from being preserved after the first forced blur command below.
|
|
done();
|
|
}, kmwconfig.timeouts.scriptLoad);
|
|
}, kmwconfig.timeouts.scriptLoad);
|
|
|
|
});
|
|
|
|
after(function() {
|
|
teardownKMW();
|
|
});
|
|
|
|
it('Keystroke-based onChange event generation', function(done) {
|
|
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 aliasing = false;
|
|
|
|
ele.onchange = function() {
|
|
ele.onchange = null;
|
|
done();
|
|
}
|
|
|
|
if(ele['kmw_ip']) {
|
|
ele = ele['kmw_ip'];
|
|
aliasing = true;
|
|
}
|
|
|
|
// 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);
|
|
|
|
var focusEvent;
|
|
|
|
if(typeof FocusEvent == 'function') {
|
|
focusEvent = new FocusEvent('blur', {relatedTarget: ele});
|
|
} else {
|
|
focusEvent = document.createEvent("FocusEvent");
|
|
focusEvent.initFocusEvent("blur", true, false, ele.ownerDocument.defaultView, 0, ele);
|
|
}
|
|
|
|
if(focusEvent)
|
|
ele.dispatchEvent(focusEvent);
|
|
});
|
|
|
|
it('OSK-based onChange event generation', function(done) {
|
|
var simple_A = {"type":"osk","keyID":"default-K_A"};
|
|
var event = new KMWRecorder.OSKInputEventSpec(simple_A);
|
|
|
|
var ele = document.getElementById("input");
|
|
var aliasing = false;
|
|
|
|
ele.onchange = function() {
|
|
ele.onchange = null;
|
|
done();
|
|
}
|
|
|
|
if(ele['kmw_ip']) {
|
|
ele = ele['kmw_ip'];
|
|
aliasing = true;
|
|
}
|
|
|
|
// 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);
|
|
|
|
var focusEvent;
|
|
|
|
if(typeof FocusEvent == 'function') {
|
|
focusEvent = new FocusEvent('blur', {relatedTarget: ele});
|
|
} else {
|
|
focusEvent = document.createEvent("FocusEvent");
|
|
focusEvent.initFocusEvent("blur", true, false, ele.ownerDocument.defaultView, 0, ele);
|
|
}
|
|
|
|
if(focusEvent)
|
|
ele.dispatchEvent(focusEvent);
|
|
});
|
|
|
|
it('Keystroke-based onInput event generation', function(done) {
|
|
// Not all browsers support InputEvent. Bypass the test for these.
|
|
if(typeof InputEvent != 'function') {
|
|
console.log("InputEvent not supported.");
|
|
done();
|
|
return;
|
|
}
|
|
|
|
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 aliasing = false;
|
|
|
|
var counterObj = {i:0};
|
|
var fin = 3;
|
|
|
|
ele.addEventListener("input", function() {
|
|
counterObj.i++;
|
|
if(counterObj.i == fin) {
|
|
done();
|
|
}
|
|
});
|
|
|
|
if(ele['kmw_ip']) {
|
|
ele = ele['kmw_ip'];
|
|
aliasing = true;
|
|
}
|
|
|
|
let eventDriver = new KMWRecorder.BrowserDriver(ele);
|
|
eventDriver.simulateEvent(event);
|
|
eventDriver.simulateEvent(event);
|
|
eventDriver.simulateEvent(event);
|
|
});
|
|
|
|
it('OSK-based onInput event generation', function(done) {
|
|
// Not all browsers support InputEvent. Bypass the test for these.
|
|
if(typeof InputEvent != 'function') {
|
|
console.log("InputEvent not supported.");
|
|
done();
|
|
return;
|
|
}
|
|
|
|
var simple_A = {"type":"osk","keyID":"default-K_A"};
|
|
var event = new KMWRecorder.OSKInputEventSpec(simple_A);
|
|
|
|
var ele = document.getElementById("input");
|
|
var aliasing = false;
|
|
|
|
var counterObj = {i:0};
|
|
var fin = 3;
|
|
|
|
ele.addEventListener("input", function() {
|
|
counterObj.i++;
|
|
if(counterObj.i == fin) {
|
|
done();
|
|
}
|
|
});
|
|
|
|
if(ele['kmw_ip']) {
|
|
ele = ele['kmw_ip'];
|
|
aliasing = true;
|
|
}
|
|
|
|
let eventDriver = new KMWRecorder.BrowserDriver(ele);
|
|
eventDriver.simulateEvent(event);
|
|
eventDriver.simulateEvent(event);
|
|
eventDriver.simulateEvent(event);
|
|
});
|
|
}); |