"use strict";

AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
AddonTestUtils.createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1");

// Tests that startupData is persisted and is available at startup
add_task(async function test_startupData() {
  await AddonTestUtils.promiseStartupManager();

  let wrapper = ExtensionTestUtils.loadExtension({useAddonManager: "permanent"});
  await wrapper.startup();

  let {extension} = wrapper;

  deepEqual(extension.startupData, {}, "startupData for a new extension defaults to empty object");

  const DATA = {test: "i am some startup data"};
  extension.startupData = DATA;
  extension.saveStartupData();

  await AddonTestUtils.promiseRestartManager();
  await wrapper.startupPromise;

  ({extension} = wrapper);
  deepEqual(extension.startupData, DATA, "startupData is present on restart");

  const DATA2 = {other: "this is different data"};
  extension.startupData = DATA2;
  extension.saveStartupData();

  await AddonTestUtils.promiseRestartManager();
  await wrapper.startupPromise;

  ({extension} = wrapper);
  deepEqual(extension.startupData, DATA2, "updated startupData is present on restart");

  await wrapper.unload();
  await AddonTestUtils.promiseShutdownManager();
});
