Index: LayoutTests/vibration/vibration-durations.html |
diff --git a/LayoutTests/vibration/vibration-durations.html b/LayoutTests/vibration/vibration-durations.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b4878a8c0bc9b969971a852b41b80edb1d7d75df |
--- /dev/null |
+++ b/LayoutTests/vibration/vibration-durations.html |
@@ -0,0 +1,65 @@ |
+<html> |
+<head> |
+<script src="../fast/js/resources/js-test-pre.js"></script> |
+<script src="vibration-utils.js"></script> |
+</head> |
+<body> |
+<script> |
+description('Tests for how durations are handled in the Vibration API.'); |
+ |
+// Empty pattern is empty. Does not start a vibration. |
+shouldBeTrue("navigator.vibrate([])"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [])"); |
+shouldBeFalse("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// An empty pattern is stored internally for a single 0. |
+shouldBeTrue("navigator.vibrate(0)"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [])"); |
+shouldBeFalse("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// An empty pattern is stored internally for a single 0. |
+shouldBeTrue("navigator.vibrate([0])"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [])"); |
+shouldBeFalse("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// The maximum vibration duration. |
+shouldBeTrue("navigator.vibrate(10000)"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [10000])"); |
+shouldBeTrue("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// Overly long vibrations are truncated to the maximum duration. |
+shouldBeTrue("navigator.vibrate(10001)"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [10000])"); |
+shouldBeTrue("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// All values in the sequence are truncated. |
+shouldBeTrue("navigator.vibrate([10001, 10001, 10001])"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [10000, 10000, 10000])"); |
+shouldBeTrue("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// A negative integer is clamped to 0. This becomes an empty pattern. |
+shouldBeTrue("navigator.vibrate(-1)"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [])"); |
+shouldBeFalse("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+// WebIDL cannot clamp values in sequences yet, so -1 first overflows to a huge |
+// number, then it is truncated to the maximum duration. |
+// All values in the sequence overflow and truncate in the same way. |
+// This is a bug, and this test exposes the incorrect behavior. |
+// FIXME: http://crbug.com/309700 |
+shouldBeTrue("navigator.vibrate([-1, -1, -1])"); |
+shouldBeTrue("areArraysEqual(internals.pendingVibrationPattern(document), [10000, 10000, 10000])"); |
+shouldBeTrue("internals.isVibrating(document)"); |
+stopVibration(); |
+ |
+</script> |
+<script src="../fast/js/resources/js-test-post.js"></script> |
+</body> |
+</html> |