diff options
Diffstat (limited to 'comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js')
-rw-r--r-- | comm/mail/components/unifiedtoolbar/test/unit/test_customizableItemsDetails.js | 103 |
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"); +}); |