148 lines
4.2 KiB
HTML
148 lines
4.2 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test for Vibrator</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Although we can't test that the vibrator works properly, we can test that
|
|
navigator.vibrate throws an exception where appropriate. -->
|
|
|
|
<script class="testbody" type="text/javascript">
|
|
function testNavigatorVibrate(testCase) {
|
|
result = navigator.vibrate(testCase.value);
|
|
is(result, true, `vibrate(${testCase.value}) must succeed.`);
|
|
}
|
|
|
|
function testNotificationVibrate(testCase) {
|
|
var notification = new Notification('Test notification', {
|
|
body: 'test vibrate',
|
|
vibrate: testCase.value,
|
|
});
|
|
|
|
isDeeply(notification.vibrate, testCase.expected, `vibrate = ${testCase.value} should be accepted.`);
|
|
}
|
|
|
|
const MAX_VIBRATE_MS = SpecialPowers.getIntPref('dom.vibrator.max_vibrate_ms');
|
|
const MAX_VIBRATE_LIST_LEN = SpecialPowers.getIntPref('dom.vibrator.max_vibrate_list_len');
|
|
const TESTCASES = [
|
|
{
|
|
value: null,
|
|
expected: [0],
|
|
},{
|
|
value: undefined,
|
|
expected: [],
|
|
},{
|
|
// -1 will be converted to the highest unsigned long then clamped.
|
|
value: -1,
|
|
expected: [MAX_VIBRATE_MS],
|
|
},{
|
|
value: 'a',
|
|
expected: [0],
|
|
},{
|
|
// -1 will be converted to the highest unsigned long then clamped.
|
|
value: [100, -1],
|
|
expected: [100, MAX_VIBRATE_MS],
|
|
},{
|
|
value: [100, 'a'],
|
|
expected: [100, 0],
|
|
},{
|
|
// If we pass a vibration pattern with a value higher than max_vibrate_ms or a
|
|
// pattern longer than max_vibrate_list_len, the call should succeed but the
|
|
// pattern should be modified to match the restrictions.
|
|
|
|
// Values will be clamped to dom.vibrator.max_vibrate_ms.
|
|
value: MAX_VIBRATE_MS + 1,
|
|
expected: [MAX_VIBRATE_MS],
|
|
},{
|
|
value: [MAX_VIBRATE_MS + 1],
|
|
expected: [MAX_VIBRATE_MS],
|
|
},{
|
|
// The array will be truncated to have a length equal to dom.vibrator.max_vibrate_list_len.
|
|
value: new Array(MAX_VIBRATE_LIST_LEN + 1).fill(0),
|
|
expected: new Array(MAX_VIBRATE_LIST_LEN).fill(0),
|
|
},{
|
|
value: 0,
|
|
expected: [0],
|
|
},{
|
|
value: [],
|
|
expected: [],
|
|
},{
|
|
value: '1000',
|
|
expected: [1000],
|
|
},{
|
|
value: 1000,
|
|
expected: [1000],
|
|
},{
|
|
value: 1000.1,
|
|
expected: [1000],
|
|
},{
|
|
value: [0, 0, 0],
|
|
expected: [0, 0, 0],
|
|
},{
|
|
value: ['1000', 1000],
|
|
expected: [1000, 1000],
|
|
},{
|
|
value: [1000, 1000],
|
|
expected: [1000, 1000],
|
|
},{
|
|
value: [1000, 1000.1],
|
|
expected: [1000, 1000],
|
|
}
|
|
];
|
|
|
|
function testWith(tester) {
|
|
for (let testCase of TESTCASES) {
|
|
tester(testCase);
|
|
}
|
|
}
|
|
|
|
add_task(async function test_notification_vibrate_enabled() {
|
|
await SpecialPowers.pushPrefEnv({"set": [['dom.webnotifications.vibrate.enabled', true]]});
|
|
|
|
testWith(testNotificationVibrate);
|
|
});
|
|
|
|
add_task(async function test_vibrator_vibrate() {
|
|
await SpecialPowers.pushPermissions([{type: 'vibration', allow: true, context: document}]);
|
|
await SpecialPowers.pushPrefEnv({"set": [['dom.vibrator.enabled', true]]});
|
|
|
|
testWith(testNavigatorVibrate);
|
|
|
|
await SpecialPowers.pushPrefEnv({"set": [['dom.vibrator.enabled', false]]});
|
|
|
|
testWith(testNavigatorVibrate);
|
|
});
|
|
|
|
add_task(async function test_vibrate_many_times() {
|
|
await SpecialPowers.pushPermissions([{type: 'vibration', allow: true, context: document}]);
|
|
await SpecialPowers.pushPrefEnv({"set": [['dom.vibrator.enabled', true]]});
|
|
|
|
// The following loop shouldn't cause us to crash. See bug 701716.
|
|
for (var i = 0; i < 10000; i++) {
|
|
navigator.vibrate([100, 100]);
|
|
}
|
|
ok(true, "Didn't crash after issuing a lot of vibrate() calls.");
|
|
});
|
|
|
|
add_task(async function test_notification_vibrate_silent() {
|
|
await SpecialPowers.pushPrefEnv({"set": [['dom.webnotifications.vibrate.enabled', true],
|
|
['dom.webnotifications.silent.enabled', true]]});
|
|
|
|
try {
|
|
var notification = new Notification('Test notification', {
|
|
body: 'test vibrate',
|
|
vibrate: [100, 100],
|
|
silent: true,
|
|
});
|
|
ok(false, "The above should throw if vibrate is enabled");
|
|
} catch (error) {
|
|
is(error.name, "TypeError", "A silent notification with a vibrate param should throw a TypeError");
|
|
}
|
|
});
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|