Bug 1434076: Follow-up: Add test for conflict between browserAction and bundled experiment. r=zombie a=test-only

--HG--
extra : rebase_source : 4612cdff82bac267c61aa5a249a19a71c21d70f1
extra : amend_source : 5e643c5b3543a7837f64d15df41a4bc3b28eff11
This commit is contained in:
Kris Maglione 2018-03-03 11:39:18 -08:00
Родитель f40e76c04e
Коммит 3e279d936f
2 изменённых файлов: 138 добавлений и 0 удалений

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

@ -39,6 +39,7 @@ support-files =
../../../../../toolkit/components/reader/test/readerModeArticle.html
[browser_ext_browserAction_area.js]
[browser_ext_browserAction_experiment.js]
[browser_ext_browserAction_context.js]
skip-if = os == 'win' || os == 'mac' # Bug 1405453
[browser_ext_browserAction_contextMenu.js]

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

@ -0,0 +1,137 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
let fooExperimentAPIs = {
foo: {
schema: "schema.json",
parent: {
scopes: ["addon_parent"],
script: "parent.js",
paths: [["experiments", "foo", "parent"]],
},
child: {
scopes: ["addon_child"],
script: "child.js",
paths: [["experiments", "foo", "child"]],
},
},
};
let fooExperimentFiles = {
"schema.json": JSON.stringify([
{
"namespace": "experiments.foo",
"types": [
{
"id": "Meh",
"type": "object",
"properties": {},
},
],
"functions": [
{
"name": "parent",
"type": "function",
"async": true,
"parameters": [],
},
{
"name": "child",
"type": "function",
"parameters": [],
"returns": {"type": "string"},
},
],
},
]),
/* globals ExtensionAPI */
"parent.js": () => {
this.foo = class extends ExtensionAPI {
getAPI(context) {
return {
experiments: {
foo: {
parent() {
return Promise.resolve("parent");
},
},
},
};
}
};
},
"child.js": () => {
this.foo = class extends ExtensionAPI {
getAPI(context) {
return {
experiments: {
foo: {
child() {
return "child";
},
},
},
};
}
};
},
};
async function testFooExperiment() {
browser.test.assertEq("object", typeof browser.experiments,
"typeof browser.experiments");
browser.test.assertEq("object", typeof browser.experiments.foo,
"typeof browser.experiments.foo");
browser.test.assertEq("function", typeof browser.experiments.foo.child,
"typeof browser.experiments.foo.child");
browser.test.assertEq("function", typeof browser.experiments.foo.parent,
"typeof browser.experiments.foo.parent");
browser.test.assertEq("child", browser.experiments.foo.child(),
"foo.child()");
browser.test.assertEq("parent", await browser.experiments.foo.parent(),
"await foo.parent()");
}
add_task(async function test_browseraction_with_experiment() {
async function background() {
await new Promise(resolve => browser.browserAction.onClicked.addListener(resolve));
browser.test.log("Got browserAction.onClicked");
await testFooExperiment();
browser.test.notifyPass("background-browserAction-experiments.foo");
}
let extension = ExtensionTestUtils.loadExtension({
isPrivileged: true,
manifest: {
browser_action: {},
experiment_apis: fooExperimentAPIs,
},
background: `
${testFooExperiment}
(${background})();
`,
files: fooExperimentFiles,
});
await extension.startup();
await clickBrowserAction(extension, window);
await extension.awaitFinish("background-browserAction-experiments.foo");
await extension.unload();
});