Bug 1488973: Add tests for localisation of unprivileged content. r=flod,mossop

Depends on D7962

Differential Revision: https://phabricator.services.mozilla.com/D8138

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Zibi Braniecki 2018-10-24 17:42:34 +00:00
Родитель 161f499d5e
Коммит 273622bfd8
7 изменённых файлов: 121 добавлений и 0 удалений

Просмотреть файл

@ -39,6 +39,7 @@ XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
SPHINX_TREES['l10n'] = 'docs'

Просмотреть файл

@ -0,0 +1,4 @@
[document_l10n/non-system-principal/browser_resource_uri.js]
support-files =
document_l10n/non-system-principal/test.html
document_l10n/non-system-principal/localization/test.ftl

Просмотреть файл

@ -0,0 +1,3 @@
Tests in this directory cover support for DocumentL10n
WebIDL API across different use cases such as
processes, principals and so on.

Просмотреть файл

@ -0,0 +1,3 @@
Tests in this directory cover the functionality
of DocumentL10n WebIDL API in non-system-principal
scenario.

Просмотреть файл

@ -0,0 +1,70 @@
const { L10nRegistry, FileSource } = ChromeUtils.import("resource://gre/modules/L10nRegistry.jsm", {});
let uri = "chrome://mochitests/content/browser/intl/l10n/test/document_l10n/non-system-principal/";
let protocol = Services.io.getProtocolHandler("resource")
.QueryInterface(Ci.nsIResProtocolHandler);
protocol.setSubstitution("l10n-test", Services.io.newURI(uri));
// Since we want the mock source to work with all locales, we're going
// to register it for currently used locales, and we'll put the path that
// doesn't use the `{locale}` component to make it work irrelevant of
// what locale the mochitest is running in.
//
// Notice: we're using a `chrome://` protocol here only for convenience reasons.
// Real sources should use `resource://` protocol.
let locales = Services.locale.appLocalesAsBCP47;
let mockSource = new FileSource("test", locales, `${uri}localization/`);
L10nRegistry.registerSource(mockSource);
registerCleanupFunction(() => {
protocol.setSubstitution("l10n-test", null);
L10nRegistry.removeSource("test");
});
add_task(async () => {
await BrowserTestUtils.withNewTab("resource://l10n-test/test.html", async (browser) => {
await ContentTask.spawn(browser, null, async function() {
let document = content.document;
let window = document.defaultView;
let {customMsg, l10nArgs} = await document.testsReadyPromise;
let desc = document.getElementById("main-desc");
// We can test here for a particular value because we're
// using a mock file source which is locale independent.
//
// If you're writing a test that verifies that a UI
// widget got real localization, you should not rely on
// the particular value, but rather on the content not
// being empty (to keep the test pass in non-en-US locales).
is(desc.textContent, "This is a mock page title");
// Test for l10n.getAttributes
let label = document.getElementById("label1");
is(l10nArgs.id, "subtitle");
is(l10nArgs.args.name, "Firefox");
// Test for manual value formatting
is(customMsg, "This is a custom message formatted from JS.");
// Since we applied the `data-l10n-id` attribute
// on `label` in this microtask, we have to wait for
// the next paint to verify that the MutationObserver
// applied the translation.
await new Promise((resolve) => {
let verifyL10n = () => {
if (!label.textContent.includes("Firefox")) {
window.requestAnimationFrame(verifyL10n);
} else {
resolve();
}
};
window.requestAnimationFrame(verifyL10n);
});
});
});
});

Просмотреть файл

@ -0,0 +1,4 @@
page-title = This is a mock page title
subtitle = This is a label for { $name }
custom-message = This is a custom message formatted from JS.

Просмотреть файл

@ -0,0 +1,36 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Test DocumentL10n in HTML environment</title>
<link rel="localization" href="test.ftl"/>
<script type="text/javascript">
document.testsReadyPromise = new Promise(async (resolve) => {
// The test is in this file to ensure that we're testing
// the behavior in a non-system principal.
document.addEventListener("DOMContentLoaded", async () => {
await document.l10n.ready;
// Assign the localization from JS
let label = document.getElementById("label1");
document.l10n.setAttributes(
label,
"subtitle",
{
name: "Firefox",
}
);
const customMsg = await document.l10n.formatValue("custom-message");
const l10nArgs = document.l10n.getAttributes(label);
resolve({customMsg, l10nArgs});
}, {once: true});
});
</script>
</head>
<body>
<h1 id="main-desc" data-l10n-id="page-title"></h1>
<p id="label1"></p>
</body>
</html>