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

"use strict";

// Check the output of getGrids for the LayoutActor

const GRID_FRAGMENT_DATA = {
  areas: [
    {
      columnEnd: 3,
      columnStart: 2,
      name: "header",
      rowEnd: 2,
      rowStart: 1,
      type: "explicit",
    },
    {
      columnEnd: 2,
      columnStart: 1,
      name: "sidebar",
      rowEnd: 3,
      rowStart: 2,
      type: "explicit",
    },
    {
      columnEnd: 3,
      columnStart: 2,
      name: "content",
      rowEnd: 3,
      rowStart: 2,
      type: "explicit",
    },
  ],
  cols: {
    lines: [
      {
        breadth: 0,
        names: ["col-1", "col-start-1", "sidebar-start"],
        number: 1,
        start: 0,
        type: "explicit",
      },
      {
        breadth: 0,
        names: ["col-2", "header-start", "sidebar-end", "content-start"],
        number: 2,
        start: 100,
        type: "explicit",
      },
      {
        breadth: 0,
        names: ["header-end", "content-end"],
        number: 3,
        start: 200,
        type: "explicit",
      },
    ],
    tracks: [
      {
        breadth: 100,
        start: 0,
        state: "static",
        type: "explicit",
      },
      {
        breadth: 100,
        start: 100,
        state: "static",
        type: "explicit",
      },
    ],
  },
  rows: {
    lines: [
      {
        breadth: 0,
        names: ["header-start"],
        number: 1,
        start: 0,
        type: "explicit",
      },
      {
        breadth: 0,
        names: ["header-end", "sidebar-start", "content-start"],
        number: 2,
        start: 100,
        type: "explicit",
      },
      {
        breadth: 0,
        names: ["sidebar-end", "content-end"],
        number: 3,
        start: 200,
        type: "explicit",
      },
    ],
    tracks: [
      {
        breadth: 100,
        start: 0,
        state: "static",
        type: "explicit",
      },
      {
        breadth: 100,
        start: 100,
        state: "static",
        type: "explicit",
      },
    ],
  },
};

add_task(async function () {
  const { target, walker, layout } = await initLayoutFrontForUrl(
    MAIN_DOMAIN + "grid.html"
  );
  const grids = await layout.getGrids(walker.rootNode);
  const grid = grids[0];
  const { gridFragments } = grid;

  is(grids.length, 1, "One grid was returned.");
  is(gridFragments.length, 1, "One grid fragment was returned.");
  ok(Array.isArray(gridFragments), "An array of grid fragments was returned.");
  Assert.deepEqual(
    gridFragments[0],
    GRID_FRAGMENT_DATA,
    "Got the correct grid fragment data."
  );

  info("Get the grid container node front.");

  try {
    const nodeFront = await walker.getNodeFromActor(grids[0].actorID, [
      "containerEl",
    ]);
    ok(nodeFront, "Got the grid container node front.");
  } catch (e) {
    ok(false, "Did not get grid container node front.");
  }

  await target.destroy();
  gBrowser.removeCurrentTab();
});
