summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js')
-rw-r--r--comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js b/comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js
new file mode 100644
index 0000000000..474e5483ce
--- /dev/null
+++ b/comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js
@@ -0,0 +1,103 @@
+/* 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(
+ "resource:///modules/CustomizableItemsDetails.mjs"
+);
+
+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");
+});