/* Any copyright is dedicated to the Public Domain.
 http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";

const TEST_URI = URL_ROOT_SSL + "doc_rules_imported_stylesheet_edit.html";
const SJS_URI = URL_ROOT_SSL + "sjs_imported_stylesheet_edit.sjs";
/**
 * Test that imported stylesheets are correctly handled by the inspector after
 * being updated.
 * The inspector used to retrieve an outdated version of the stylesheet text,
 * which triggered many issues: outdated values, blank panels etc...
 *
 * This test involves an imported CSS which is generated by a sjs file.
 * Using sjs here allows us to simulate an "update" of a stylesheet while still
 * fetching the same URL, which closely matches what a developer would experience
 * when manually editing a stylesheet in an IDE before reloading a page.
 */
add_task(async function () {
  info("Call `?setup` on the test sjs");
  await fetch(SJS_URI + "?setup");

  info("Add the test tab, open the rule-view and select the test node");
  await addTab(TEST_URI);

  const { inspector, view } = await openRuleView();

  await selectNode("div", inspector);
  const redColorProp = getTextProperty(view, 1, { color: "red" });
  ok(redColorProp, "RuleView displays a color:red property");

  // The "?update-stylesheet" call will change the CSS returned by sjs_imported_stylesheet_edit.sjs:
  // - some rules are added before the matching `div {}` rule
  // - the value of the `color` property changes
  info("Call `?update-stylesheet` on the test sjs");
  await fetch(SJS_URI + "?update-stylesheet");

  info("Reload the page to restore the initial state");
  await navigateTo(TEST_URI);

  info("Wait until a rule is displayed at index 1");
  await waitFor(() => getRuleViewRuleEditorAt(view, 1));

  info("Check that the displayed rule has been correctly updated.");
  const goldColorProp = getTextProperty(view, 1, { color: "gold" });
  ok(goldColorProp, "RuleView displays a color:gold property");
});
