summaryrefslogtreecommitdiffstats
path: root/toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js')
-rw-r--r--toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js b/toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js
new file mode 100644
index 0000000000..7d6c5043c4
--- /dev/null
+++ b/toolkit/components/tooltiptext/tests/browser_input_file_tooltips.js
@@ -0,0 +1,131 @@
+/* eslint-disable mozilla/no-arbitrary-setTimeout */
+
+let tempFile;
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({ set: [["ui.tooltipDelay", 0]] });
+ tempFile = createTempFile();
+ registerCleanupFunction(function () {
+ tempFile.remove(true);
+ });
+});
+
+add_task(async function test_singlefile_selected() {
+ await do_test({ value: true, result: "testfile_bug1251809" });
+});
+
+add_task(async function test_title_set() {
+ await do_test({ title: "foo", result: "foo" });
+});
+
+add_task(async function test_nofile_selected() {
+ await do_test({ result: "No file selected." });
+});
+
+add_task(async function test_multipleset_nofile_selected() {
+ await do_test({ multiple: true, result: "No files selected." });
+});
+
+add_task(async function test_requiredset() {
+ await do_test({ required: true, result: "Please select a file." });
+});
+
+async function do_test(test) {
+ info(`starting test ${JSON.stringify(test)}`);
+
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ info("Moving mouse out of the way.");
+ await EventUtils.synthesizeAndWaitNativeMouseMove(
+ tab.linkedBrowser,
+ 300,
+ 300
+ );
+
+ info("creating input field");
+ await SpecialPowers.spawn(tab.linkedBrowser, [test], async function (test) {
+ let doc = content.document;
+ let input = doc.createElement("input");
+ doc.body.appendChild(input);
+ input.id = "test_input";
+ input.setAttribute("style", "position: absolute; top: 0; left: 0;");
+ input.type = "file";
+ if (test.title) {
+ input.setAttribute("title", test.title);
+ }
+ if (test.multiple) {
+ input.multiple = true;
+ }
+ if (test.required) {
+ input.required = true;
+ }
+ });
+
+ if (test.value) {
+ info("Creating mock filepicker to select files");
+ let MockFilePicker = SpecialPowers.MockFilePicker;
+ MockFilePicker.init(window);
+ MockFilePicker.returnValue = MockFilePicker.returnOK;
+ MockFilePicker.displayDirectory = FileUtils.getDir("TmpD", []);
+ MockFilePicker.setFiles([tempFile]);
+ MockFilePicker.afterOpenCallback = MockFilePicker.cleanup;
+
+ try {
+ // Open the File Picker dialog (MockFilePicker) to select
+ // the files for the test.
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#test_input",
+ {},
+ tab.linkedBrowser
+ );
+ info("Waiting for the input to have the requisite files");
+ await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
+ let input = content.document.querySelector("#test_input");
+ await ContentTaskUtils.waitForCondition(
+ () => input.files.length,
+ "The input should have at least one file selected"
+ );
+ info(`The input has ${input.files.length} file(s) selected.`);
+ });
+ } catch (e) {}
+ } else {
+ info("No real file selection required.");
+ }
+
+ let awaitTooltipOpen = new Promise(resolve => {
+ let tooltipId = Services.appinfo.browserTabsRemoteAutostart
+ ? "remoteBrowserTooltip"
+ : "aHTMLTooltip";
+ let tooltip = document.getElementById(tooltipId);
+ tooltip.addEventListener(
+ "popupshown",
+ function (event) {
+ resolve(event.target);
+ },
+ { once: true }
+ );
+ });
+ info("Initial mouse move");
+ await EventUtils.synthesizeAndWaitNativeMouseMove(tab.linkedBrowser, 50, 5);
+ info("Waiting");
+ await new Promise(resolve => setTimeout(resolve, 400));
+ info("Second mouse move");
+ await EventUtils.synthesizeAndWaitNativeMouseMove(tab.linkedBrowser, 70, 5);
+ info("Waiting for tooltip to open");
+ let tooltip = await awaitTooltipOpen;
+
+ is(
+ tooltip.getAttribute("label"),
+ test.result,
+ "tooltip label should match expectation"
+ );
+
+ info("Closing tab");
+ BrowserTestUtils.removeTab(tab);
+}
+
+function createTempFile() {
+ let file = FileUtils.getDir("TmpD", []);
+ file.append("testfile_bug1251809");
+ file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o644);
+ return file;
+}