summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/general/test_vibrator.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/general/test_vibrator.html')
-rw-r--r--dom/tests/mochitest/general/test_vibrator.html93
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>