"use strict";

PromiseTestUtils.allowMatchingRejectionsGlobally(/packaging errors/);

/**
 * Helper function for testing a theme with invalid properties.
 *
 * @param {object} invalidProps The invalid properties to load the theme with.
 */
async function testThemeWithInvalidProperties(invalidProps) {
  let manifest = {
    theme: {},
  };

  invalidProps.forEach(prop => {
    // Some properties require additional information:
    switch (prop) {
      case "background":
        manifest[prop] = { scripts: ["background.js"] };
        break;
      case "permissions":
        manifest[prop] = ["tabs"];
        break;
      case "omnibox":
        manifest[prop] = { keyword: "test" };
        break;
      default:
        manifest[prop] = {};
    }
  });

  let extension = ExtensionTestUtils.loadExtension({ manifest });
  await Assert.rejects(
    extension.startup(),
    /startup failed/,
    "Theme should fail to load if it contains invalid properties"
  );
}

add_task(
  async function test_that_theme_with_invalid_properties_fails_to_load() {
    let invalidProps = [
      "page_action",
      "browser_action",
      "background",
      "permissions",
      "omnibox",
      "commands",
    ];
    for (let prop in invalidProps) {
      await testThemeWithInvalidProperties([prop]);
    }
    await testThemeWithInvalidProperties(invalidProps);
  }
);
