diff -r 000000000000 -r 6474c204b198 browser/devtools/tilt/test/browser_tilt_controller.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/tilt/test/browser_tilt_controller.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,134 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +function test() { + if (!isTiltEnabled()) { + info("Skipping controller test because Tilt isn't enabled."); + return; + } + if (!isWebGLSupported()) { + info("Skipping controller test because WebGL isn't supported."); + return; + } + + waitForExplicitFinish(); + + createTab(function() { + createTilt({ + onTiltOpen: function(instance) + { + let canvas = instance.presenter.canvas; + let prev_tran = vec3.create([0, 0, 0]); + let prev_rot = quat4.create([0, 0, 0, 1]); + + function tran() { + return instance.presenter.transforms.translation; + } + + function rot() { + return instance.presenter.transforms.rotation; + } + + function save() { + prev_tran = vec3.create(tran()); + prev_rot = quat4.create(rot()); + } + + ok(isEqualVec(tran(), prev_tran), + "At init, the translation should be zero."); + ok(isEqualVec(rot(), prev_rot), + "At init, the rotation should be zero."); + + + function testEventCancel(cancellingEvent) { + is(document.activeElement, canvas, + "The visualizer canvas should be focused when performing this test."); + + EventUtils.synthesizeKey("VK_A", { type: "keydown" }); + EventUtils.synthesizeKey("VK_LEFT", { type: "keydown" }); + instance.controller._update(); + + ok(!isEqualVec(tran(), prev_tran), + "After a translation key is pressed, the vector should change."); + ok(!isEqualVec(rot(), prev_rot), + "After a rotation key is pressed, the quaternion should change."); + + save(); + + + cancellingEvent(); + instance.controller._update(); + + ok(!isEqualVec(tran(), prev_tran), + "Even if the canvas lost focus, the vector has some inertia."); + ok(!isEqualVec(rot(), prev_rot), + "Even if the canvas lost focus, the quaternion has some inertia."); + + save(); + + + while (!isEqualVec(tran(), prev_tran) || + !isEqualVec(rot(), prev_rot)) { + instance.controller._update(); + save(); + } + + ok(isEqualVec(tran(), prev_tran) && isEqualVec(rot(), prev_rot), + "After focus lost, the transforms inertia eventually stops."); + } + + info("Setting typeaheadfind to true."); + + Services.prefs.setBoolPref("accessibility.typeaheadfind", true); + testEventCancel(function() { + EventUtils.synthesizeKey("T", { type: "keydown", altKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("I", { type: "keydown", ctrlKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("L", { type: "keydown", metaKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("T", { type: "keydown", shiftKey: 1 }); + }); + + info("Setting typeaheadfind to false."); + + Services.prefs.setBoolPref("accessibility.typeaheadfind", false); + testEventCancel(function() { + EventUtils.synthesizeKey("T", { type: "keydown", altKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("I", { type: "keydown", ctrlKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("L", { type: "keydown", metaKey: 1 }); + }); + testEventCancel(function() { + EventUtils.synthesizeKey("T", { type: "keydown", shiftKey: 1 }); + }); + + info("Testing if loosing focus halts any stacked arcball animations."); + + testEventCancel(function() { + gBrowser.selectedBrowser.contentWindow.focus(); + }); + }, + onEnd: function() + { + cleanup(); + } + }, true, function suddenDeath() + { + info("Tilt could not be initialized properly."); + cleanup(); + }); + }); +} + +function cleanup() { + gBrowser.removeCurrentTab(); + finish(); +}