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

"use strict";

function testRootObject(objExpr, summary = objExpr) {
  return async function () {
    info("Test JSON with root empty object " + objExpr + " started");

    const TEST_JSON_URL = "data:application/json," + objExpr;
    await addJsonViewTab(TEST_JSON_URL);

    const objectText = await getElementText(".jsonPanelBox .panelContent");
    is(objectText, summary, "The root object " + objExpr + " is visible");
  };
}

function testNestedObject(objExpr, summary = objExpr) {
  return async function () {
    info("Test JSON with nested empty object " + objExpr + " started");

    const TEST_JSON_URL = "data:application/json,[" + objExpr + "]";
    await addJsonViewTab(TEST_JSON_URL);

    const objectCellCount = await getElementCount(
      ".jsonPanelBox .treeTable .objectCell"
    );
    is(objectCellCount, 1, "There must be one object cell");

    const objectCellText = await getElementText(
      ".jsonPanelBox .treeTable .objectCell"
    );
    is(objectCellText, summary, objExpr + " has a visible summary");

    // Collapse auto-expanded node.
    await clickJsonNode(".jsonPanelBox .treeTable .treeLabel");

    const textAfter = await getElementText(
      ".jsonPanelBox .treeTable .objectCell"
    );
    is(textAfter, summary, objExpr + " still has a visible summary");
  };
}

add_task(testRootObject("null"));
add_task(testNestedObject("null"));
add_task(testNestedObject("[]"));
add_task(testNestedObject("{}"));
