Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

const EVENT_NAME = "blocklist-data-gfxItems";
const SAMPLE_GFX_RECORD = {
driverVersionComparator: "LESS_THAN_OR_EQUAL",
driverVersion: "8.17.12.5896",
vendor: "0x10de",
blockID: "g36",
feature: "DIRECT3D_9_LAYERS",
devices: ["0x0a6c", "geforce"],
featureStatus: "BLOCKED_DRIVER_VERSION",
last_modified: 9999999999999, // High timestamp to prevent load of dump
os: "WINNT 6.1",
id: "3f947f16-37c2-4e96-d356-78b26363729b",
versionRange: { minVersion: 0, maxVersion: "*" },
};
add_task(async function test_sends_serialized_data() {
const expected =
"blockID:g36\tdevices:0x0a6c,geforce\tdriverVersion:8.17.12.5896\t" +
"driverVersionComparator:LESS_THAN_OR_EQUAL\tfeature:DIRECT3D_9_LAYERS\t" +
"featureStatus:BLOCKED_DRIVER_VERSION\tos:WINNT 6.1\tvendor:0x10de\t" +
"versionRange:0,*";
let received;
const observe = (subject, topic, data) => {
received = data;
};
Services.obs.addObserver(observe, EVENT_NAME);
await mockGfxBlocklistItems([SAMPLE_GFX_RECORD]);
Services.obs.removeObserver(observe, EVENT_NAME);
equal(received, expected);
});
add_task(async function test_parsing_skips_devices_with_comma() {
let clonedItem = Cu.cloneInto(SAMPLE_GFX_RECORD, this);
clonedItem.devices[0] = "0x2,582";
let rv = await mockGfxBlocklistItems([clonedItem]);
equal(rv[0].devices.length, 1);
equal(rv[0].devices[0], "geforce");
});
add_task(async function test_empty_values_are_ignored() {
let received;
const observe = (subject, topic, data) => {
received = data;
};
Services.obs.addObserver(observe, EVENT_NAME);
let clonedItem = Cu.cloneInto(SAMPLE_GFX_RECORD, this);
clonedItem.os = "";
await mockGfxBlocklistItems([clonedItem]);
ok(!received.includes("os"), "Shouldn't send empty values");
Services.obs.removeObserver(observe, EVENT_NAME);
});
add_task(async function test_empty_devices_are_ignored() {
let received;
const observe = (subject, topic, data) => {
received = data;
};
Services.obs.addObserver(observe, EVENT_NAME);
let clonedItem = Cu.cloneInto(SAMPLE_GFX_RECORD, this);
clonedItem.devices = [];
await mockGfxBlocklistItems([clonedItem]);
ok(!received.includes("devices"), "Shouldn't send empty values");
Services.obs.removeObserver(observe, EVENT_NAME);
});
add_task(async function test_version_range_default_values() {
const kTests = [
{
input: { minVersion: "13.0b2", maxVersion: "42.0" },
output: { minVersion: "13.0b2", maxVersion: "42.0" },
},
{
input: { maxVersion: "2.0" },
output: { minVersion: "0", maxVersion: "2.0" },
},
{
input: { minVersion: "1.0" },
output: { minVersion: "1.0", maxVersion: "*" },
},
{
input: { minVersion: " " },
output: { minVersion: "0", maxVersion: "*" },
},
{
input: {},
output: { minVersion: "0", maxVersion: "*" },
},
];
for (let test of kTests) {
let parsedEntries = await mockGfxBlocklistItems([
{ versionRange: test.input },
]);
equal(parsedEntries[0].versionRange.minVersion, test.output.minVersion);
equal(parsedEntries[0].versionRange.maxVersion, test.output.maxVersion);
}
});
add_task(async function test_blockid_attribute() {
const kTests = [
{ blockID: "g60", vendor: " 0x10de " },
{ feature: " DIRECT3D_9_LAYERS " },
];
for (let test of kTests) {
let [rv] = await mockGfxBlocklistItems([test]);
if (test.blockID) {
equal(rv.blockID, test.blockID);
} else {
ok(!rv.hasOwnProperty("blockID"), "not expecting a blockID");
}
}
});