tenfourfox/devtools/client/tilt/test/browser_tilt_controller.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

139 lines
5.0 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
function test() {
if (!isTiltEnabled()) {
aborting();
info("Skipping controller test because Tilt isn't enabled.");
return;
}
if (!isWebGLSupported()) {
aborting();
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, cancellingDescription) {
let description = "testEventCancel, cancellingEvent is " + cancellingDescription + ": ";
is(document.activeElement, canvas,
description + "The visualizer canvas should be focused when performing this test.");
EventUtils.synthesizeKey("a", { type: "keydown", code: "KeyA", keyCode: KeyboardEvent.DOM_VK_A });
instance.controller._update();
ok(!isEqualVec(rot(), prev_rot),
description + "After a rotation key is pressed, the quaternion should change.");
EventUtils.synthesizeKey("a", { type: "keyup", code: "KeyA", keyCode: KeyboardEvent.DOM_VK_A });
EventUtils.synthesizeKey("ArrowLeft", { type: "keydown", code: "ArrowLeft", keyCode: KeyboardEvent.DOM_VK_LEFT });
instance.controller._update();
ok(!isEqualVec(tran(), prev_tran),
description + "After a translation key is pressed, the vector should change.");
EventUtils.synthesizeKey("ArrowLeft", { type: "keyup", code: "ArrowLeft", keyCode: KeyboardEvent.DOM_VK_LEFT });
save();
cancellingEvent();
instance.controller._update();
ok(!isEqualVec(tran(), prev_tran),
description + "Even if the canvas lost focus, the vector has some inertia.");
ok(!isEqualVec(rot(), prev_rot),
description + "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.");
let typeaheadfindEnabled = true;
Services.prefs.setBoolPref("accessibility.typeaheadfind", typeaheadfindEnabled);
for (var i = 0; i < 2; i++) {
testEventCancel(function() {
// XXX Don't use a character which is registered as a mnemonic in the menubar.
EventUtils.synthesizeKey("A", { altKey: true, code: "KeyA", keyCode: KeyboardEvent.DOM_VK_A });
}, "Alt + A");
testEventCancel(function() {
// XXX Don't use a character which is registered as a shortcut key.
EventUtils.synthesizeKey(";", { ctrlKey: true, code: "Semicolon", keyCode: KeyboardEvent.DOM_VK_SEMICONLON });
}, "Ctrl + ;");
testEventCancel(function() {
// XXX Don't use a character which is registered as a shortcut key.
EventUtils.synthesizeKey("\\", { metaKey: true, code: "Backslash", keyCode: KeyboardEvent.DOM_VK_BACK_SLASH });
}, "Meta + \\");
// If typeahead is enabled, Shift + T causes moving focus to the findbar because it inputs "T".
if (!typeaheadfindEnabled) {
testEventCancel(function() {
EventUtils.synthesizeKey("T", { shiftKey: true, code: "KeyT", keyCode: KeyboardEvent.DOM_VK_T });
}, "Shift + T");
}
// Retry after disabling typeaheadfind.
info("Setting typeaheadfind to false.");
typeaheadfindEnabled = false;
Services.prefs.setBoolPref("accessibility.typeaheadfind", typeaheadfindEnabled);
}
info("Testing if loosing focus halts any stacked arcball animations.");
testEventCancel(function() {
gBrowser.selectedBrowser.contentWindow.focus();
}, "setting focus to the content window");
},
onEnd: function()
{
cleanup();
}
}, true, function suddenDeath()
{
ok(false, "Tilt could not be initialized properly.");
cleanup();
});
});
}
function cleanup() {
gBrowser.removeCurrentTab();
finish();
}