237 lines
7.3 KiB
JavaScript
237 lines
7.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Test adding and removing custom devices via the modal.
|
|
|
|
const L10N = new LocalizationHelper(
|
|
"devtools/client/locales/device.properties",
|
|
true
|
|
);
|
|
|
|
const device = {
|
|
name: "Test Device",
|
|
width: 400,
|
|
height: 570,
|
|
pixelRatio: 1.5,
|
|
userAgent: "Mozilla/5.0 (Mobile; rv:39.0) Gecko/39.0 Firefox/39.0",
|
|
touch: true,
|
|
};
|
|
|
|
const unicodeDevice = {
|
|
name: "\u00B6\u00C7\u00DA\u00E7\u0126",
|
|
width: 400,
|
|
height: 570,
|
|
pixelRatio: 1.5,
|
|
userAgent: "Mozilla/5.0 (Mobile; rv:39.0) Gecko/39.0 Firefox/39.0",
|
|
touch: true,
|
|
};
|
|
|
|
const TEST_URL = "data:text/html;charset=utf-8,";
|
|
|
|
addRDMTask(
|
|
TEST_URL,
|
|
async function ({ ui }) {
|
|
const { toolWindow } = ui;
|
|
const { document } = toolWindow;
|
|
|
|
await openDeviceModal(ui);
|
|
|
|
is(
|
|
getCustomHeaderEl(document),
|
|
null,
|
|
"There's no Custom header when we don't have custom devices"
|
|
);
|
|
|
|
info("Reveal device adder form, check that defaults match the viewport");
|
|
const adderShow = document.getElementById("device-add-button");
|
|
adderShow.click();
|
|
testDeviceAdder(ui, {
|
|
name: "Custom Device",
|
|
width: 320,
|
|
height: 480,
|
|
pixelRatio: window.devicePixelRatio,
|
|
userAgent: navigator.userAgent,
|
|
touch: false,
|
|
});
|
|
|
|
info("Fill out device adder form and save");
|
|
await addDeviceInModal(ui, device);
|
|
|
|
info("Verify device defaults to enabled in modal");
|
|
const deviceCb = [
|
|
...document.querySelectorAll(".device-input-checkbox"),
|
|
].find(cb => {
|
|
return cb.value == device.name;
|
|
});
|
|
ok(deviceCb, "Custom device checkbox added to modal");
|
|
ok(deviceCb.checked, "Custom device enabled");
|
|
|
|
const customHeaderEl = getCustomHeaderEl(document);
|
|
ok(customHeaderEl, "There's a Custom header when add a custom devices");
|
|
is(
|
|
customHeaderEl.textContent,
|
|
L10N.getStr(`device.custom`),
|
|
"The custom header has the expected text"
|
|
);
|
|
|
|
document.getElementById("device-close-button").click();
|
|
|
|
info("Look for custom device in device selector");
|
|
const deviceSelector = document.getElementById("device-selector");
|
|
await testMenuItems(toolWindow, deviceSelector, items => {
|
|
const menuItem = findMenuItem(items, device.name);
|
|
ok(menuItem, "Custom device menu item added to device selector");
|
|
});
|
|
},
|
|
{ waitForDeviceList: true }
|
|
);
|
|
|
|
addRDMTask(
|
|
TEST_URL,
|
|
async function ({ ui }) {
|
|
const { toolWindow } = ui;
|
|
const { store, document } = toolWindow;
|
|
|
|
info("Select existing device from the selector");
|
|
await selectDevice(ui, "Test Device");
|
|
|
|
await openDeviceModal(ui);
|
|
|
|
info(
|
|
"Reveal device adder form, check that defaults are based on selected device"
|
|
);
|
|
const adderShow = document.getElementById("device-add-button");
|
|
adderShow.click();
|
|
testDeviceAdder(
|
|
ui,
|
|
Object.assign({}, device, {
|
|
name: "Test Device (Custom)",
|
|
})
|
|
);
|
|
|
|
info("Remove previously added custom device");
|
|
// Close the form since custom device buttons are only shown when form is not open.
|
|
const cancelButton = document.getElementById("device-form-cancel");
|
|
cancelButton.click();
|
|
|
|
const deviceRemoveButton = document.querySelector(".device-remove-button");
|
|
const removed = Promise.all([
|
|
waitUntilState(store, state => !state.devices.custom.length),
|
|
once(ui, "device-association-removed"),
|
|
]);
|
|
deviceRemoveButton.click();
|
|
await removed;
|
|
|
|
info("Close the form before submitting.");
|
|
document.getElementById("device-close-button").click();
|
|
|
|
info("Ensure custom device was removed from device selector");
|
|
await waitUntilState(store, state => state.viewports[0].device == "");
|
|
const deviceSelectorTitle = document.querySelector("#device-selector");
|
|
is(
|
|
deviceSelectorTitle.textContent,
|
|
"Responsive",
|
|
"Device selector reset to no device"
|
|
);
|
|
|
|
info("Look for custom device in device selector");
|
|
const deviceSelector = document.getElementById("device-selector");
|
|
await testMenuItems(toolWindow, deviceSelector, menuItems => {
|
|
const menuItem = findMenuItem(menuItems, device.name);
|
|
ok(!menuItem, "Custom device option removed from device selector");
|
|
});
|
|
|
|
info("Ensure device properties like UA have been reset");
|
|
await testUserAgent(ui, navigator.userAgent);
|
|
},
|
|
{ waitForDeviceList: true }
|
|
);
|
|
|
|
addRDMTask(
|
|
TEST_URL,
|
|
async function ({ ui }) {
|
|
const { toolWindow } = ui;
|
|
const { document } = toolWindow;
|
|
|
|
await openDeviceModal(ui);
|
|
|
|
info("Reveal device adder form");
|
|
const adderShow = document.querySelector("#device-add-button");
|
|
adderShow.click();
|
|
|
|
info(
|
|
"Fill out device adder form by setting details to unicode device and save"
|
|
);
|
|
await addDeviceInModal(ui, unicodeDevice);
|
|
|
|
info("Verify unicode device defaults to enabled in modal");
|
|
const deviceCb = [
|
|
...document.querySelectorAll(".device-input-checkbox"),
|
|
].find(cb => {
|
|
return cb.value == unicodeDevice.name;
|
|
});
|
|
ok(deviceCb, "Custom unicode device checkbox added to modal");
|
|
ok(deviceCb.checked, "Custom unicode device enabled");
|
|
document.getElementById("device-close-button").click();
|
|
|
|
info("Look for custom unicode device in device selector");
|
|
const deviceSelector = document.getElementById("device-selector");
|
|
await testMenuItems(toolWindow, deviceSelector, items => {
|
|
const menuItem = findMenuItem(items, unicodeDevice.name);
|
|
ok(menuItem, "Custom unicode device option added to device selector");
|
|
});
|
|
},
|
|
{ waitForDeviceList: true }
|
|
);
|
|
|
|
addRDMTask(
|
|
TEST_URL,
|
|
async function ({ ui }) {
|
|
const { toolWindow } = ui;
|
|
const { document } = toolWindow;
|
|
|
|
// Check if the unicode custom device is present in the list of device options since
|
|
// we want to ensure that unicode device names are not forgotten after restarting RDM
|
|
// see bug 1379687
|
|
info("Look for custom unicode device in device selector");
|
|
const deviceSelector = document.getElementById("device-selector");
|
|
await testMenuItems(toolWindow, deviceSelector, items => {
|
|
const menuItem = findMenuItem(items, unicodeDevice.name);
|
|
ok(menuItem, "Custom unicode device option present in device selector");
|
|
});
|
|
},
|
|
{ waitForDeviceList: true }
|
|
);
|
|
|
|
function testDeviceAdder(ui, expected) {
|
|
const { document } = ui.toolWindow;
|
|
|
|
const nameInput = document.querySelector("#device-form-name input");
|
|
const [widthInput, heightInput] = document.querySelectorAll(
|
|
"#device-form-size input"
|
|
);
|
|
const pixelRatioInput = document.querySelector(
|
|
"#device-form-pixel-ratio input"
|
|
);
|
|
const userAgentInput = document.querySelector(
|
|
"#device-form-user-agent input"
|
|
);
|
|
const touchInput = document.querySelector("#device-form-touch input");
|
|
|
|
is(nameInput.value, expected.name, "Device name matches");
|
|
is(parseInt(widthInput.value, 10), expected.width, "Width matches");
|
|
is(parseInt(heightInput.value, 10), expected.height, "Height matches");
|
|
is(
|
|
parseFloat(pixelRatioInput.value),
|
|
expected.pixelRatio,
|
|
"devicePixelRatio matches"
|
|
);
|
|
is(userAgentInput.value, expected.userAgent, "User agent matches");
|
|
is(touchInput.checked, expected.touch, "Touch matches");
|
|
}
|
|
|
|
function getCustomHeaderEl(doc) {
|
|
return doc.querySelector(`.device-type-custom .device-header`);
|
|
}
|