зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
161f499d5e
Коммит
273622bfd8
|
@ -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>
|
Загрузка…
Ссылка в новой задаче