fune/browser/components/customizableui/test/browser_customizemode_uidensity.js

173 lines
6.6 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const PREF_UI_DENSITY = "browser.uidensity";
const PREF_AUTO_TOUCH_MODE = "browser.touchmode.auto";
async function testModeMenuitem(mode, modePref) {
await startCustomizing();
let win = document.getElementById("main-window");
let popupButton = document.getElementById("customization-uidensity-button");
let popup = document.getElementById("customization-uidensity-menu");
// Show the popup.
let popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupShownPromise;
let item = document.getElementById("customization-uidensity-menuitem-" + mode);
let normalItem = document.getElementById("customization-uidensity-menuitem-normal");
is(normalItem.getAttribute("active"), "true",
"Normal mode menuitem should be active by default");
// Hover over the mode menuitem and wait for the event that updates the UI
// density.
let mouseoverPromise = BrowserTestUtils.waitForEvent(item, "mouseover");
EventUtils.synthesizeMouseAtCenter(item, { type: "mouseover" });
await mouseoverPromise;
is(win.getAttribute("uidensity"), mode,
`UI Density should be set to ${mode} on ${mode} menuitem hover`);
is(Services.prefs.getIntPref(PREF_UI_DENSITY), window.gUIDensity.MODE_NORMAL,
`UI Density pref should still be set to normal on ${mode} menuitem hover`);
// Hover the normal menuitem again and check that the UI density reset to normal.
EventUtils.synthesizeMouseAtCenter(normalItem, { type: "mouseover" });
await BrowserTestUtils.waitForCondition(() => !win.hasAttribute("uidensity"));
ok(!win.hasAttribute("uidensity"),
`UI Density should be reset when no longer hovering the ${mode} menuitem`);
// Select the custom UI density and wait for the popup to be hidden.
let popupHiddenPromise = popupHidden(popup);
EventUtils.synthesizeMouseAtCenter(item, {});
await popupHiddenPromise;
// Check that the click permanently changed the UI density.
is(win.getAttribute("uidensity"), mode,
`UI Density should be set to ${mode} on ${mode} menuitem click`);
is(Services.prefs.getIntPref(PREF_UI_DENSITY), modePref,
`UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`);
// Open the popup again.
popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupShownPromise;
// Check that the menuitem is still active after opening and closing the popup.
is(item.getAttribute("active"), "true", `${mode} mode menuitem should be active`);
// Hide the popup again.
popupHiddenPromise = popupHidden(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupHiddenPromise;
// Check that the menuitem is still active after re-opening customize mode.
await endCustomizing();
await startCustomizing();
popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupShownPromise;
is(item.getAttribute("active"), "true",
`${mode} mode menuitem should be active after entering and exiting customize mode`);
// Click the normal menuitem and check that the density is reset.
popupHiddenPromise = popupHidden(popup);
EventUtils.synthesizeMouseAtCenter(normalItem, {});
await popupHiddenPromise;
ok(!win.hasAttribute("uidensity"),
"UI Density should be reset when clicking the normal menuitem");
is(Services.prefs.getIntPref(PREF_UI_DENSITY), window.gUIDensity.MODE_NORMAL,
"UI Density pref should be set to normal.");
// Show the popup and click on the mode menuitem again to test the
// reset default feature.
popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupShownPromise;
popupHiddenPromise = popupHidden(popup);
EventUtils.synthesizeMouseAtCenter(item, {});
await popupHiddenPromise;
is(win.getAttribute("uidensity"), mode,
`UI Density should be set to ${mode} on ${mode} menuitem click`);
is(Services.prefs.getIntPref(PREF_UI_DENSITY), modePref,
`UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`);
await gCustomizeMode.reset();
ok(!win.hasAttribute("uidensity"),
"UI Density should be reset when clicking the normal menuitem");
is(Services.prefs.getIntPref(PREF_UI_DENSITY), window.gUIDensity.MODE_NORMAL,
"UI Density pref should be set to normal.");
await endCustomizing();
}
add_task(async function test_compact_mode_menuitem() {
await testModeMenuitem("compact", window.gUIDensity.MODE_COMPACT);
});
add_task(async function test_touch_mode_menuitem() {
// OSX doesn't get touch mode for now.
if (AppConstants.platform == "macosx") {
is(document.getElementById("customization-uidensity-menuitem-touch"), null,
"There's no touch option on Mac OSX");
return;
}
await testModeMenuitem("touch", window.gUIDensity.MODE_TOUCH);
// Test the checkbox for automatic Touch Mode transition
// in Windows 10 Tablet Mode.
if (AppConstants.isPlatformAndVersionAtLeast("win", "10")) {
await startCustomizing();
let popupButton = document.getElementById("customization-uidensity-button");
let popup = document.getElementById("customization-uidensity-menu");
let popupShownPromise = popupShown(popup);
EventUtils.synthesizeMouseAtCenter(popupButton, {});
await popupShownPromise;
let checkbox = document.getElementById("customization-uidensity-autotouchmode-checkbox");
ok(checkbox.checked, "Checkbox should be checked by default");
// Test toggling the checkbox.
EventUtils.synthesizeMouseAtCenter(checkbox, {});
is(Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE), false,
"Automatic Touch Mode is off when the checkbox is unchecked.");
EventUtils.synthesizeMouseAtCenter(checkbox, {});
is(Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE), true,
"Automatic Touch Mode is on when the checkbox is checked.");
// Test reset to defaults.
EventUtils.synthesizeMouseAtCenter(checkbox, {});
is(Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE), false,
"Automatic Touch Mode is off when the checkbox is unchecked.");
await gCustomizeMode.reset();
is(Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE), true,
"Automatic Touch Mode is on when the checkbox is checked.");
}
});
add_task(async function cleanup() {
await endCustomizing();
Services.prefs.clearUserPref(PREF_UI_DENSITY);
Services.prefs.clearUserPref(PREF_AUTO_TOUCH_MODE);
});