mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 975359: add test cases for B2G orientation sensor. r=jgriffin, f=slee
This commit is contained in:
parent
1df6a7d262
commit
447b2c7196
146
dom/events/test/marionette/head.js
Normal file
146
dom/events/test/marionette/head.js
Normal file
@ -0,0 +1,146 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
const {Cc: Cc, Ci: Ci, Cr: Cr, Cu: Cu} = SpecialPowers;
|
||||
|
||||
let Promise = Cu.import("resource://gre/modules/Promise.jsm").Promise;
|
||||
|
||||
let _pendingEmulatorCmdCount = 0;
|
||||
|
||||
/**
|
||||
* Send emulator command with safe guard.
|
||||
*
|
||||
* We should only call |finish()| after all emulator command transactions
|
||||
* end, so here comes with the pending counter. Resolve when the emulator
|
||||
* gives positive response, and reject otherwise.
|
||||
*
|
||||
* Fulfill params:
|
||||
* result -- an array of emulator response lines.
|
||||
* Reject params:
|
||||
* result -- an array of emulator response lines.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function runEmulatorCmdSafe(aCommand) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
++_pendingEmulatorCmdCount;
|
||||
runEmulatorCmd(aCommand, function(aResult) {
|
||||
--_pendingEmulatorCmdCount;
|
||||
|
||||
ok(true, "Emulator response: " + JSON.stringify(aResult));
|
||||
if (Array.isArray(aResult) &&
|
||||
aResult[aResult.length - 1] === "OK") {
|
||||
deferred.resolve(aResult);
|
||||
} else {
|
||||
deferred.reject(aResult);
|
||||
}
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get emulator sensor values of a named sensor.
|
||||
*
|
||||
* Fulfill params:
|
||||
* result -- an array of emulator sensor values.
|
||||
* Reject params: (none)
|
||||
*
|
||||
* @param aSensorName
|
||||
* A string name of the sensor. Availables are: "acceleration"
|
||||
* "magnetic-field", "orientation", "temperature", "proximity".
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function getEmulatorSensorValues(aSensorName) {
|
||||
return runEmulatorCmdSafe("sensor get " + aSensorName)
|
||||
.then(function(aResult) {
|
||||
// aResult = ["orientation = 0:0:0", "OK"]
|
||||
return aResult[0].split(" ")[2].split(":").map(function(aElement) {
|
||||
return parseInt(aElement, 10);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenient alias function for getting orientation sensor values.
|
||||
*/
|
||||
function getEmulatorOrientationValues() {
|
||||
return getEmulatorSensorValues("orientation");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set emulator orientation sensor values.
|
||||
*
|
||||
* Fulfill params: (none)
|
||||
* Reject params: (none)
|
||||
*
|
||||
* @param aAzimuth
|
||||
* @param aPitch
|
||||
* @param aRoll
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function setEmulatorOrientationValues(aAzimuth, aPitch, aRoll) {
|
||||
let cmd = "sensor set orientation " + aAzimuth + ":" + aPitch + ":" + aRoll;
|
||||
return runEmulatorCmdSafe(cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for a named window event.
|
||||
*
|
||||
* Resolve if that named event occurs. Never reject.
|
||||
*
|
||||
* Forfill params: the DOMEvent passed.
|
||||
*
|
||||
* @param aEventName
|
||||
* A string event name.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function waitForWindowEvent(aEventName) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
window.addEventListener(aEventName, function onevent(aEvent) {
|
||||
window.removeEventListener(aEventName, onevent);
|
||||
|
||||
ok(true, "Window event '" + aEventName + "' got.");
|
||||
deferred.resolve(aEvent);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush permission settings and call |finish()|.
|
||||
*/
|
||||
function cleanUp() {
|
||||
waitFor(function() {
|
||||
SpecialPowers.flushPermissions(function() {
|
||||
// Use ok here so that we have at least one test run.
|
||||
ok(true, "permissions flushed");
|
||||
|
||||
finish();
|
||||
});
|
||||
}, function() {
|
||||
return _pendingEmulatorCmdCount === 0;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Basic test routine helper.
|
||||
*
|
||||
* This helper does nothing but clean-ups.
|
||||
*
|
||||
* @param aTestCaseMain
|
||||
* A function that takes no parameter.
|
||||
*/
|
||||
function startTestBase(aTestCaseMain) {
|
||||
Promise.resolve()
|
||||
.then(aTestCaseMain)
|
||||
.then(cleanUp, function() {
|
||||
ok(false, 'promise rejects during test.');
|
||||
cleanUp();
|
||||
});
|
||||
}
|
6
dom/events/test/marionette/manifest.ini
Normal file
6
dom/events/test/marionette/manifest.ini
Normal file
@ -0,0 +1,6 @@
|
||||
[DEFAULT]
|
||||
b2g = true
|
||||
browser = false
|
||||
qemu = true
|
||||
|
||||
[test_sensor_orientation.js]
|
53
dom/events/test/marionette/test_sensor_orientation.js
Normal file
53
dom/events/test/marionette/test_sensor_orientation.js
Normal file
@ -0,0 +1,53 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 120000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
function doTest(aAzimuth, aPitch, aRoll) {
|
||||
log("Testing [azimuth, pitch, roll] = " + Array.slice(arguments));
|
||||
|
||||
return setEmulatorOrientationValues(aAzimuth, aPitch, aRoll)
|
||||
.then(() => waitForWindowEvent("deviceorientation"))
|
||||
.then(function(aEvent) {
|
||||
is(aEvent.alpha, aAzimuth, "azimuth");
|
||||
is(aEvent.beta, aPitch, "pitch");
|
||||
is(aEvent.gamma, aRoll, "roll");
|
||||
});
|
||||
}
|
||||
|
||||
function testAllPermutations() {
|
||||
const angles = [-180, -90, 0, 90, 180];
|
||||
let promise = Promise.resolve();
|
||||
for (let i = 0; i < angles.length; i++) {
|
||||
for (let j = 0; j < angles.length; j++) {
|
||||
for (let k = 0; k < angles.length; k++) {
|
||||
promise =
|
||||
promise.then(doTest.bind(null, angles[i], angles[j], angles[k]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return promise;
|
||||
}
|
||||
|
||||
startTestBase(function() {
|
||||
let origValues;
|
||||
|
||||
return Promise.resolve()
|
||||
|
||||
// Retrieve original status.
|
||||
.then(() => getEmulatorOrientationValues())
|
||||
.then(function(aValues) {
|
||||
origValues = aValues;
|
||||
is(typeof origValues, "object", "typeof origValues");
|
||||
is(origValues.length, 3, "origValues.length");
|
||||
})
|
||||
|
||||
// Test original status
|
||||
.then(() => doTest.apply(null, origValues))
|
||||
|
||||
.then(testAllPermutations)
|
||||
|
||||
// Restore original status.
|
||||
.then(() => setEmulatorOrientationValues.apply(null, origValues));
|
||||
});
|
@ -25,3 +25,4 @@ skip = false
|
||||
[include:../../../../../dom/icc/tests/marionette/manifest.ini]
|
||||
[include:../../../../../dom/system/tests/marionette/manifest.ini]
|
||||
[include:../../../../../dom/nfc/tests/marionette/manifest.ini]
|
||||
[include:../../../../../dom/events/test/marionette/manifest.ini]
|
||||
|
Loading…
Reference in New Issue
Block a user