diff options
Diffstat (limited to 'dom/tests/mochitest/general/test_vibrator.html')
-rw-r--r-- | dom/tests/mochitest/general/test_vibrator.html | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/dom/tests/mochitest/general/test_vibrator.html b/dom/tests/mochitest/general/test_vibrator.html new file mode 100644 index 000000000..2874c783b --- /dev/null +++ b/dom/tests/mochitest/general/test_vibrator.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Vibrator</title> + <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> + <script type="text/javascript" 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;version=1.7"> +SimpleTest.waitForExplicitFinish(); +var result; +function expectFailure(param) { + result = navigator.vibrate(param); + is(result, false, 'vibrate(' + param + ') should have failed.'); +} + +function expectSuccess(param) { + result = navigator.vibrate(param); + is(result, true, 'vibrate(' + param + ') must succeed.'); +} + +function tests(aEnabled) { + // Some edge cases that the bindings should handle for us. + expectSuccess(null); + expectSuccess(undefined); + // -1 will be converted to the highest unsigned long then clamped. + expectSuccess(-1); + expectSuccess('a'); + // -1 will be converted to the highest unsigned long then clamped. + expectSuccess([100, -1]); + expectSuccess([100, 'a']); + + var maxVibrateMs = SpecialPowers.getIntPref('dom.vibrator.max_vibrate_ms'); + var maxVibrateListLen = SpecialPowers.getIntPref('dom.vibrator.max_vibrate_list_len'); + + // 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. + expectSuccess(maxVibrateMs + 1); + expectSuccess([maxVibrateMs + 1]); + + var arr = []; + for (var i = 0; i < maxVibrateListLen + 1; i++) { + arr[i] = 0; + } + // The array will be truncated to have a length equal to dom.vibrator.max_vibrate_list_len. + expectSuccess(arr); + + + expectSuccess(0); + expectSuccess([]); + expectSuccess('1000'); + expectSuccess(1000); + expectSuccess(1000.1); + expectSuccess([0, 0, 0]); + expectSuccess(['1000', 1000]); + expectSuccess([1000, 1000]); + expectSuccess([1000, 1000.1]); + + // 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."); + if(!aEnabled) + SimpleTest.finish(); +} + +SpecialPowers.pushPermissions([ + {type: 'vibration', allow: true, context: document} + ], function() { + // Test with the vibrator pref enabled. + SpecialPowers.pushPrefEnv({"set": [['dom.vibrator.enabled', true]]}, function() { + tests(true); + SpecialPowers.pushPrefEnv({"set": [['dom.vibrator.enabled', false]]}, tests(false)); + }); + // Everything should be the same when the vibrator is disabled -- in + // particular, a disabled vibrator shouldn't eat failures we'd otherwise + // observe. + } +); + +</script> +</body> + +</html> |