Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const TEST_URL = "data:text/html;charset=utf-8,";
const NEW_USER_AGENT = "Mozilla/5.0 (Mobile; rv:39.0) Gecko/39.0 Firefox/39.0";
const testDevice = {
name: "Fake Phone RDM Test",
width: 320,
height: 570,
pixelRatio: 5.5,
userAgent: "Mozilla/5.0 (Mobile; rv:39.0) Gecko/39.0 Firefox/39.0",
touch: true,
firefoxOS: true,
os: "custom",
featured: true,
};
// Add the new device to the list
addDeviceForTest(testDevice);
addRDMTask(TEST_URL, async function ({ ui }) {
reloadOnUAChange(true);
info("Check the default state of the user agent input");
await testUserAgent(ui, DEFAULT_UA);
info(`Change the user agent input to ${NEW_USER_AGENT} and press Escape`);
await changeUserAgentInput(ui, NEW_USER_AGENT, "VK_ESCAPE");
await testUserAgent(ui, DEFAULT_UA);
info(`Change the user agent input to ${NEW_USER_AGENT}`);
await changeUserAgentInput(ui, NEW_USER_AGENT);
await testUserAgent(ui, NEW_USER_AGENT);
info("Reset the user agent input back to the default UA");
await changeUserAgentInput(ui, "", "VK_TAB");
await testUserAgent(ui, DEFAULT_UA);
info("Test selecting Fenix user agent");
const firefoxVersion = AppConstants.MOZ_APP_VERSION.replace(/[ab]\d+/, "");
await changeUserAgentFromSelector(
ui,
"Firefox for Android",
`Mozilla/5.0 (Android 15; Mobile; rv:${firefoxVersion}) Gecko/${firefoxVersion} Firefox/${firefoxVersion}`
);
info(
"Verify that device user agent isn't shown before the device is selected"
);
const { toolWindow } = ui;
const { document } = toolWindow;
const userAgentSelector = document.querySelector("#user-agent-selector");
await testMenuItems(toolWindow, userAgentSelector, items => {
const menuItem = findMenuItem(items, testDevice.name);
ok(
!menuItem,
"Before selecting the device, it isn't shown in the user agent dropdown"
);
});
info("Test selecting the selected device user agent");
const waitForReload = await watchForDevToolsReload(ui.getViewportBrowser());
await selectDevice(ui, testDevice.name);
await waitForReload();
// We don't expect a reload here because the user agent is already set to the
// device's user agent when the device is selected. Selecting the user agent
// of the device won't trigger a reload here because the user agent isn't
// changed.
await changeUserAgentFromSelector(
ui,
testDevice.name,
testDevice.userAgent,
false
);
await testMenuItems(toolWindow, userAgentSelector, items => {
const menuItem = findMenuItem(items, testDevice.name);
ok(menuItem, "Found the item for the device's user agent");
is(menuItem.getAttribute("aria-checked"), "true", "The item is checked");
});
info("Test selecting the default user agent");
await changeUserAgentFromSelector(ui, "Firefox Desktop", "");
info(
"Test changing to a custom agent string, no user agent should be selected in the dropdrown menu"
);
await changeUserAgentInput(ui, "Custom user agent");
await testMenuItems(toolWindow, userAgentSelector, items => {
for (const menuItem of items) {
is(
menuItem.getAttribute("aria-checked"),
null,
"None of the user agent items are checked"
);
}
});
reloadOnUAChange(false);
});
async function changeUserAgentFromSelector(
ui,
browserName,
expectedUserAgent,
expectReload = true
) {
const { document } = ui.toolWindow;
const browser = ui.getViewportBrowser();
const changed = once(ui, "user-agent-changed");
let waitForDevToolsReload;
if (expectReload) {
waitForDevToolsReload = await watchForDevToolsReload(browser);
} else {
waitForDevToolsReload = async () => {};
}
await selectMenuItem(ui, "#user-agent-selector", browserName);
await changed;
await waitForDevToolsReload();
const userAgentInput = document.getElementById("user-agent-input");
is(userAgentInput.value, expectedUserAgent);
}