Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { ELLIPSIS } = require("resource://devtools/shared/l10n.js");
add_task(async function () {
info("Test short URL linkification JSON started");
const url = "https://example.com/";
const tab = await addJsonViewTab(
"data:application/json," + JSON.stringify([url])
);
await testLinkNavigation({ browser: tab.linkedBrowser, url });
info("Switch back to the JSONViewer");
await BrowserTestUtils.switchTab(gBrowser, tab);
await testLinkNavigation({
browser: tab.linkedBrowser,
url,
clickLabel: true,
});
});
add_task(async function () {
info("Test long URL linkification JSON started");
const url = "https://example.com/" + "a".repeat(100);
const tab = await addJsonViewTab(
"data:application/json," + JSON.stringify([url])
);
await testLinkNavigation({ browser: tab.linkedBrowser, url });
info("Switch back to the JSONViewer");
await BrowserTestUtils.switchTab(gBrowser, tab);
await testLinkNavigation({
browser: tab.linkedBrowser,
url,
urlText: url.slice(0, 24) + ELLIPSIS + url.slice(-24),
clickLabel: true,
});
});
/**
* Assert that the expected link is displayed and that clicking on it navigates to the
* expected url.
*
* @param {Object} option object containing:
* - browser (mandatory): the browser the tab will be opened in.
* - url (mandatory): The url we should navigate to.
* - urlText: The expected displayed text of the url.
* Falls back to `url` if not filled
* - clickLabel: Should we click the label before doing assertions.
*/
async function testLinkNavigation({
browser,
url,
urlText,
clickLabel = false,
}) {
const onTabLoaded = BrowserTestUtils.waitForNewTab(gBrowser, url);
SpecialPowers.spawn(browser, [[urlText || url, url, clickLabel]], args => {
const [expectedURLText, expectedURL, shouldClickLabel] = args;
const { document } = content;
if (shouldClickLabel === true) {
document.querySelector(".jsonPanelBox .treeTable .treeLabel").click();
}
const link = document.querySelector(
".jsonPanelBox .treeTable .treeValueCell a"
);
is(link.textContent, expectedURLText, "The expected URL is displayed.");
is(link.href, expectedURL, "The URL was linkified.");
link.click();
});
const newTab = await onTabLoaded;
// We only need to check that newTab is truthy since
// BrowserTestUtils.waitForNewTab checks the URL.
ok(newTab, "The expected tab was opened.");
}