mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
340 lines
9.3 KiB
JavaScript
340 lines
9.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
var {utils: Cu, classes: Cc, interfaces: Ci} = Components;
|
|
|
|
|
|
Cu.import("resource://gre/modules/Metrics.jsm");
|
|
Cu.import("resource://gre/modules/services/healthreport/providers.jsm");
|
|
|
|
// The hack, it burns. This could go away if extensions code exposed its
|
|
// test environment setup functions as a testing-only JSM. See similar
|
|
// code in Sync's head_helpers.js.
|
|
var gGlobalScope = this;
|
|
function loadAddonManager() {
|
|
let ns = {};
|
|
Cu.import("resource://gre/modules/Services.jsm", ns);
|
|
let head = "../../../../toolkit/mozapps/extensions/test/xpcshell/head_addons.js";
|
|
let file = do_get_file(head);
|
|
let uri = ns.Services.io.newFileURI(file);
|
|
ns.Services.scriptloader.loadSubScript(uri.spec, gGlobalScope);
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
|
|
startupManager();
|
|
}
|
|
|
|
function run_test() {
|
|
loadAddonManager();
|
|
run_next_test();
|
|
}
|
|
|
|
add_test(function test_constructor() {
|
|
let provider = new AddonsProvider();
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
add_task(function test_init() {
|
|
let storage = yield Metrics.Storage("init");
|
|
let provider = new AddonsProvider();
|
|
yield provider.init(storage);
|
|
yield provider.shutdown();
|
|
|
|
yield storage.close();
|
|
});
|
|
|
|
function monkeypatchAddons(provider, addons) {
|
|
if (!Array.isArray(addons)) {
|
|
throw new Error("Must define array of addon objects.");
|
|
}
|
|
|
|
Object.defineProperty(provider, "_createDataStructure", {
|
|
value: function _createDataStructure() {
|
|
return AddonsProvider.prototype._createDataStructure.call(provider, addons);
|
|
},
|
|
});
|
|
}
|
|
|
|
add_task(function test_collect() {
|
|
let storage = yield Metrics.Storage("collect");
|
|
let provider = new AddonsProvider();
|
|
yield provider.init(storage);
|
|
|
|
let now = new Date();
|
|
|
|
// FUTURE install add-on via AddonManager and don't use monkeypatching.
|
|
let testAddons = [
|
|
{
|
|
id: "addon0",
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
version: "1",
|
|
type: "extension",
|
|
scope: 1,
|
|
foreignInstall: false,
|
|
hasBinaryComponents: false,
|
|
installDate: now,
|
|
updateDate: now,
|
|
},
|
|
// This plugin entry should get ignored.
|
|
{
|
|
id: "addon1",
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
version: "2",
|
|
type: "plugin",
|
|
scope: 1,
|
|
foreignInstall: false,
|
|
hasBinaryComponents: false,
|
|
installDate: now,
|
|
updateDate: now,
|
|
},
|
|
// Is counted but full details are omitted because it is a theme.
|
|
{
|
|
id: "addon2",
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
version: "3",
|
|
type: "theme",
|
|
scope: 1,
|
|
foreignInstall: false,
|
|
hasBinaryComponents: false,
|
|
installDate: now,
|
|
updateDate: now,
|
|
},
|
|
{
|
|
id: "addon3",
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
version: "4",
|
|
type: "service",
|
|
scope: 1,
|
|
foreignInstall: false,
|
|
hasBinaryComponents: false,
|
|
installDate: now,
|
|
updateDate: now,
|
|
description: "addon3 description"
|
|
},
|
|
{
|
|
// Should be excluded from the report completely
|
|
id: "pluginfake",
|
|
type: "plugin",
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
},
|
|
{
|
|
// Should be in gm-plugins
|
|
id: "gmp-testgmp",
|
|
type: "plugin",
|
|
userDisabled: false,
|
|
version: "7.2",
|
|
isGMPlugin: true,
|
|
},
|
|
];
|
|
|
|
monkeypatchAddons(provider, testAddons);
|
|
|
|
let testPlugins = {
|
|
"Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Plug-in for testing purposes.™ (हिन्दी 中文 العربية)",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-test"
|
|
],
|
|
},
|
|
"Second Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Second plug-in for testing purposes.",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-second-test"
|
|
],
|
|
},
|
|
"Java Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Dummy Java plug-in for testing purposes.",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-java-test"
|
|
],
|
|
},
|
|
"Third Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Third plug-in for testing purposes.",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-third-test"
|
|
],
|
|
},
|
|
"Flash Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Flash plug-in for testing purposes.",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-shockwave-flash-test"
|
|
],
|
|
},
|
|
"Silverlight Test Plug-in":
|
|
{
|
|
"version": "1.0.0.0",
|
|
"description": "Silverlight plug-in for testing purposes.",
|
|
"blocklisted": false,
|
|
"disabled": false,
|
|
"clicktoplay": false,
|
|
"mimeTypes":[
|
|
"application/x-silverlight-test"
|
|
],
|
|
},
|
|
};
|
|
|
|
let pluginTags = Cc["@mozilla.org/plugin/host;1"]
|
|
.getService(Ci.nsIPluginHost)
|
|
.getPluginTags({});
|
|
|
|
for (let tag of pluginTags) {
|
|
if (tag.name in testPlugins) {
|
|
let p = testPlugins[tag.name];
|
|
p.id = tag.filename+":"+tag.name+":"+p.version+":"+p.description;
|
|
}
|
|
}
|
|
|
|
yield provider.collectConstantData();
|
|
|
|
// Test addons measurement.
|
|
|
|
let addons = provider.getMeasurement("addons", 2);
|
|
let data = yield addons.getValues();
|
|
|
|
do_check_eq(data.days.size, 0);
|
|
do_check_eq(data.singular.size, 1);
|
|
do_check_true(data.singular.has("addons"));
|
|
|
|
let json = data.singular.get("addons")[1];
|
|
let value = JSON.parse(json);
|
|
do_check_eq(typeof(value), "object");
|
|
do_check_eq(Object.keys(value).length, 2);
|
|
do_check_true("addon0" in value);
|
|
do_check_true(!("addon1" in value));
|
|
do_check_true(!("addon2" in value));
|
|
do_check_true("addon3" in value);
|
|
do_check_true(!("pluginfake" in value));
|
|
do_check_true(!("gmp-testgmp" in value));
|
|
|
|
let serializer = addons.serializer(addons.SERIALIZE_JSON);
|
|
let serialized = serializer.singular(data.singular);
|
|
do_check_eq(typeof(serialized), "object");
|
|
do_check_eq(Object.keys(serialized).length, 3); // Our entries, plus _v.
|
|
do_check_true("addon0" in serialized);
|
|
do_check_true("addon3" in serialized);
|
|
do_check_eq(serialized._v, 2);
|
|
|
|
// Test plugins measurement.
|
|
|
|
let plugins = provider.getMeasurement("plugins", 1);
|
|
data = yield plugins.getValues();
|
|
|
|
do_check_eq(data.days.size, 0);
|
|
do_check_eq(data.singular.size, 1);
|
|
do_check_true(data.singular.has("plugins"));
|
|
|
|
json = data.singular.get("plugins")[1];
|
|
value = JSON.parse(json);
|
|
do_check_eq(typeof(value), "object");
|
|
do_check_eq(Object.keys(value).length, pluginTags.length);
|
|
|
|
do_check_true(testPlugins["Test Plug-in"].id in value);
|
|
do_check_true(testPlugins["Second Test Plug-in"].id in value);
|
|
do_check_true(testPlugins["Java Test Plug-in"].id in value);
|
|
|
|
for (let id in value) {
|
|
let item = value[id];
|
|
let testData = testPlugins[item.name];
|
|
for (let prop in testData) {
|
|
if (prop == "mimeTypes" || prop == "id") {
|
|
continue;
|
|
}
|
|
do_check_eq(testData[prop], item[prop]);
|
|
}
|
|
|
|
for (let mime of testData.mimeTypes) {
|
|
do_check_true(item.mimeTypes.indexOf(mime) != -1);
|
|
}
|
|
}
|
|
|
|
serializer = plugins.serializer(plugins.SERIALIZE_JSON);
|
|
serialized = serializer.singular(data.singular);
|
|
do_check_eq(typeof(serialized), "object");
|
|
do_check_eq(Object.keys(serialized).length, pluginTags.length+1); // Our entries, plus _v.
|
|
for (let name in testPlugins) {
|
|
// Special case for bug 1165981. There is a test plugin that
|
|
// exists to make sure we don't load it on certain platforms.
|
|
// We skip the check for that plugin here, as it will work on some
|
|
// platforms but not others.
|
|
if (name == "Third Test Plug-in") {
|
|
continue;
|
|
}
|
|
do_check_true(testPlugins[name].id in serialized);
|
|
}
|
|
do_check_eq(serialized._v, 1);
|
|
|
|
// Test GMP plugins measurement.
|
|
|
|
let gmPlugins = provider.getMeasurement("gm-plugins", 1);
|
|
data = yield gmPlugins.getValues();
|
|
|
|
do_check_eq(data.days.size, 0);
|
|
do_check_eq(data.singular.size, 1);
|
|
do_check_true(data.singular.has("gm-plugins"));
|
|
|
|
json = data.singular.get("gm-plugins")[1];
|
|
value = JSON.parse(json);
|
|
do_print("value: " + json);
|
|
do_check_eq(typeof(value), "object");
|
|
do_check_eq(Object.keys(value).length, 1);
|
|
|
|
do_check_eq(value["gmp-testgmp"].version, "7.2");
|
|
do_check_eq(value["gmp-testgmp"].userDisabled, false);
|
|
|
|
serializer = gmPlugins.serializer(plugins.SERIALIZE_JSON);
|
|
serialized = serializer.singular(data.singular);
|
|
do_check_eq(typeof(serialized), "object");
|
|
do_check_eq(serialized["gmp-testgmp"].version, "7.2");
|
|
do_check_eq(serialized._v, 1);
|
|
|
|
// Test counts measurement.
|
|
|
|
let counts = provider.getMeasurement("counts", 2);
|
|
data = yield counts.getValues();
|
|
do_check_eq(data.days.size, 1);
|
|
do_check_eq(data.singular.size, 0);
|
|
do_check_true(data.days.hasDay(now));
|
|
|
|
value = data.days.getDay(now);
|
|
do_check_eq(value.size, 4);
|
|
do_check_eq(value.get("extension"), 1);
|
|
do_check_eq(value.get("plugin"), pluginTags.length);
|
|
do_check_eq(value.get("theme"), 1);
|
|
do_check_eq(value.get("service"), 1);
|
|
|
|
yield provider.shutdown();
|
|
yield storage.close();
|
|
});
|
|
|