"use strict";

add_task(async function test_manifest_commands() {
  const validShortcuts = [
    "Ctrl+Y",
    "MacCtrl+Y",
    "Command+Y",
    "Alt+Shift+Y",
    "Ctrl+Alt+Y",
    "F1",
    "MediaNextTrack",
  ];
  const invalidShortcuts = ["Shift+Y", "Y", "Ctrl+Ctrl+Y", "Ctrl+Command+Y"];

  async function validateShortcut(shortcut, isValid) {
    let normalized = await ExtensionTestUtils.normalizeManifest({
      commands: {
        "toggle-feature": {
          suggested_key: { default: shortcut },
          description: "Send a 'toggle-feature' event to the extension",
        },
      },
    });
    if (isValid) {
      ok(!normalized.error, "There should be no manifest errors.");
    } else {
      let expectedError =
        String.raw`Error processing commands.toggle-feature.suggested_key.default: Error: ` +
        String.raw`Value "${shortcut}" must consist of ` +
        String.raw`either a combination of one or two modifiers, including ` +
        String.raw`a mandatory primary modifier and a key, separated by '+', ` +
        String.raw`or a media key. For details see: ` +
        String.raw`https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/commands#Key_combinations`;

      ok(
        normalized.error.includes(expectedError),
        `The manifest error ${JSON.stringify(
          normalized.error
        )} must contain ${JSON.stringify(expectedError)}`
      );
    }
  }

  for (let shortcut of validShortcuts) {
    await validateShortcut(shortcut, true);
  }
  for (let shortcut of invalidShortcuts) {
    await validateShortcut(shortcut, false);
  }
});
