150 lines
3.7 KiB
HTML
150 lines
3.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=1110030
|
|
-->
|
|
<head>
|
|
<title>Forwarding Hardware Key to InputMethod</title>
|
|
<script type="application/javascript;version=1.7" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript;version=1.7" src="inputmethod_common.js"></script>
|
|
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
|
|
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js"></script>
|
|
<script type="text/javascript" src="bug1110030_helper.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1110030">Mozilla Bug 1110030</a>
|
|
<p id="display"></p>
|
|
<pre id="test">
|
|
<script class="testbody" type="application/javascript;version=1.7">
|
|
// The input context.
|
|
var gContext = null;
|
|
|
|
// The test cases.
|
|
var gTests;
|
|
|
|
inputmethod_setup(function() {
|
|
setInputContext();
|
|
});
|
|
|
|
function setInputContext() {
|
|
let im = navigator.mozInputMethod;
|
|
|
|
im.oninputcontextchange = function() {
|
|
ok(true, 'inputcontextchange event was fired.');
|
|
im.oninputcontextchange = null;
|
|
|
|
gContext = im.inputcontext;
|
|
if (!gContext || !gContext.hardwareinput) {
|
|
ok(false, 'Should have a non-null inputcontext.hardwareinput');
|
|
inputmethod_cleanup();
|
|
return;
|
|
}
|
|
|
|
prepareTest();
|
|
};
|
|
|
|
// Set current page as an input method.
|
|
SpecialPowers.wrap(im).setActive(true);
|
|
|
|
// verifyResultsAndMoveNext will be called after input#text-input
|
|
// receives all expected key events and it will verify results
|
|
// and start next test.
|
|
loadTestFrame(verifyResultsAndMoveNext);
|
|
}
|
|
|
|
function prepareTest()
|
|
{
|
|
// Set the used input method of this test
|
|
gInputMethod = new InputMethod(gContext);
|
|
|
|
// Add listenr to hardwareinput
|
|
addKeyEventListeners(gContext.hardwareinput, function (evt) {
|
|
hardwareEventReceiver(evt);
|
|
gInputMethod.handler(evt);
|
|
});
|
|
|
|
// Set the test cases
|
|
gTests = [
|
|
// Case 1: IME handle the key input
|
|
{
|
|
key: 'z',
|
|
hardwareinput: {
|
|
expectedEvents: kKeyDown | kKeyUp,
|
|
receivedEvents: 0,
|
|
expectedKeys: 'zz', // One for keydown, the other for keyup
|
|
receivedKeys: '',
|
|
},
|
|
inputtext: {
|
|
expectedEvents: kKeyDown | kKeyPress | kKeyUp,
|
|
receivedEvents: 0,
|
|
expectedKeys: gInputMethod.mapKey('z') + // for keydown
|
|
gInputMethod.mapKey('z') + // for keypress
|
|
gInputMethod.mapKey('z'), // for keyup
|
|
receivedKeys: '',
|
|
}
|
|
},
|
|
// case 2: IME doesn't handle the key input
|
|
{
|
|
key: '7',
|
|
hardwareinput: {
|
|
expectedEvents: kKeyDown | kKeyUp,
|
|
receivedEvents: 0,
|
|
expectedKeys: '77', // One for keydown, the other for keyup
|
|
receivedKeys: '',
|
|
},
|
|
inputtext: {
|
|
expectedEvents: kKeyDown | kKeyPress | kKeyUp,
|
|
receivedEvents: 0,
|
|
expectedKeys: '777', // keydown, keypress, keyup all will receive key
|
|
receivedKeys: '',
|
|
}
|
|
},
|
|
// case 3: IME is disable
|
|
// This case is same as
|
|
// dom/events/test/test_dom_before_after_keyboard_event*.html
|
|
];
|
|
|
|
startTesting();
|
|
}
|
|
|
|
function startTesting()
|
|
{
|
|
if (gTests.length <= 0) {
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
gCurrentTest = gTests.shift();
|
|
|
|
fireEvent();
|
|
}
|
|
|
|
function verifyResultsAndMoveNext()
|
|
{
|
|
verifyResults(gCurrentTest);
|
|
startTesting();
|
|
}
|
|
|
|
function finish()
|
|
{
|
|
inputmethod_cleanup();
|
|
}
|
|
|
|
function errorHandler(msg)
|
|
{
|
|
// Clear the test cases
|
|
if (gTests) {
|
|
gTests = [];
|
|
}
|
|
|
|
ok(false, msg);
|
|
|
|
inputmethod_cleanup();
|
|
}
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|