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

"use strict";

// Tests that the markup view loads only as many nodes as specified
// by the devtools.markup.pagesize preference and that pressing the "show all
// nodes" actually shows the nodes

const TEST_URL = URL_ROOT + "doc_markup_pagesize_02.html";

// Make sure nodes are hidden when there are more than 5 in a row
Services.prefs.setIntPref("devtools.markup.pagesize", 5);

add_task(function* () {
  let {inspector, testActor} = yield openInspectorForURL(TEST_URL);

  info("Selecting the UL node");
  yield clickContainer("ul", inspector);
  info("Reloading the page with the UL node selected will expand its children");
  yield reloadPage(inspector, testActor);
  yield inspector.markup._waitForChildren();

  info("Click on the 'show all nodes' button in the UL's list of children");
  yield showAllNodes(inspector);

  yield assertAllNodesAreVisible(inspector, testActor);
});

function* showAllNodes(inspector) {
  let container = yield getContainerForSelector("ul", inspector);
  let button = container.elt.querySelector("button");
  ok(button, "All nodes button is here");
  let win = button.ownerDocument.defaultView;

  EventUtils.sendMouseEvent({type: "click"}, button, win);
  yield inspector.markup._waitForChildren();
}

function* assertAllNodesAreVisible(inspector, testActor) {
  let container = yield getContainerForSelector("ul", inspector);
  ok(!container.elt.querySelector("button"),
     "All nodes button isn't here anymore");
  let numItems = yield testActor.getNumberOfElementMatches("ul > *");
  is(container.children.childNodes.length, numItems);
}
