Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const { default: CUSTOMIZABLE_ITEMS } = ChromeUtils.importESModule(
);
add_task(function test_format() {
for (const item of CUSTOMIZABLE_ITEMS) {
Assert.equal(typeof item, "object", "Customizable item is an object");
Assert.equal(typeof item.id, "string", `id "${item.id}" is a string`);
Assert.ok(!item.id.includes(","), `id "${item.id}" may not contain commas`);
Assert.greater(item.id.length, 0, `id "${item.id}" is not empty`);
Assert.equal(
typeof item.labelId,
"string",
`labelId is a string for ${item.id}`
);
Assert.greater(
item.labelId.length,
0,
`labelId is not empty for ${item.id}`
);
Assert.ok(
!item.allowMultiple || item.allowMultiple === true,
`allowMultiple is falsy or boolean for ${item.id}`
);
Assert.ok(
item.spaces === undefined || Array.isArray(item.spaces),
`spaces is undefined or an array for ${item.id}`
);
if (item.spaces) {
for (const space of item.spaces) {
Assert.equal(
typeof space,
"string",
`space "${space}" expected to be string for ${item.id}`
);
Assert.greater(
space.length,
0,
`space is not empty in ${item.id} spaces`
);
}
}
Assert.ok(
item.templateId === undefined || typeof item.templateId === "string",
`templateId must be undefined or a string for ${item.id}`
);
if (item.templateId !== undefined) {
Assert.greater(
item.templateId.length,
0,
`templateId is not empty for ${item.id}`
);
Assert.ok(
item.requiredModules === undefined ||
Array.isArray(item.requiredModules),
`requiredModules is undefined or an array for ${item.id}`
);
if (item.requiredModules) {
for (const module of item.requiredModules) {
Assert.equal(
typeof module,
"string",
`module "${module}" expected to be string for ${item.id}`
);
Assert.greater(
module.length,
0,
`module is not empty in ${item.id} requiredModules`
);
}
}
} else {
Assert.strictEqual(
item.requiredModules,
undefined,
`requiredModules must not be set because there is no template for item ${item.id}`
);
}
Assert.ok(
item.hasContextMenu === undefined ||
typeof item.hasContextMenu === "boolean",
`hasContextMenu must be undefined or a boolean for ${item.id}`
);
Assert.ok(
item.skipFocus === undefined || typeof item.skipFocus === "boolean",
`skipFocus must be undefined or a boolean for ${item.id}`
);
}
});
add_task(function test_idsUnique() {
const allIds = CUSTOMIZABLE_ITEMS.map(item => item.id);
const idCounts = allIds.reduce((counts, id) => {
counts[id] = counts[id] ? counts[id] + 1 : 1;
return counts;
}, {});
const duplicateIds = Object.keys(idCounts).filter(id => idCounts[id] > 1);
Assert.deepEqual(duplicateIds, [], "All IDs should only be used once");
});