/* Any copyright is dedicated to the Public Domain.
 http://creativecommons.org/publicdomain/zero/1.0/ */
/* import-globals-from helper_events_test_runner.js */

"use strict";

// Test that markup view event bubbles show the correct event info for DOM
// events.

const TEST_URL = URL_ROOT_SSL + "doc_markup_events_04.html";

loadHelperScript("helper_events_test_runner.js");

const TEST_DATA = [
  {
    selector: "html",
    expected: [
      {
        type: "click",
        filename: TEST_URL + ":59:67",
        attributes: ["Bubbling"],
        handler:
          "function(foo2, bar2) {\n" +
          '  alert("documentElement event listener clicked");\n' +
          "}",
      },
      {
        type: "click",
        filename: TEST_URL + ":55:51",
        attributes: ["Bubbling"],
        handler:
          "function(foo, bar) {\n" +
          '  alert("document event listener clicked");\n' +
          "}",
      },
      {
        type: "load",
        filename: TEST_URL,
        attributes: ["Bubbling"],
        handler: "function onload(event) {\n" + "  init();\n" + "}",
      },
      {
        // Bug 1977628: non-supported, or user defined events are flagged as "User Defined"
        type: "user-defined",
        filename: TEST_URL + ":63:59",
        attributes: ["User-defined", "Bubbling"],
        handler:
          "function () {\n" +
          `          alert("User defined event");\n` +
          "        }",
      },
    ],
  },
  {
    selector: "#constructed-function",
    expected: [
      {
        type: "click",
        filename: TEST_URL + ":1:0",
        attributes: ["Bubbling"],
        handler: "function anonymous() {\n" + "\n" + "}",
      },
    ],
  },
  {
    selector: "#constructed-function-with-body-string",
    expected: [
      {
        type: "click",
        filename: TEST_URL + ":1:0",
        attributes: ["Bubbling"],
        handler:
          "function anonymous(a, b, c) {\n" +
          '  alert("constructedFuncWithBodyString");\n' +
          "}",
      },
    ],
  },
  {
    selector: "#multiple-assignment",
    expected: [
      {
        type: "click",
        filename: TEST_URL + ":26:47",
        attributes: ["Bubbling"],
        handler:
          "function multi() {\n" + '  alert("multipleAssignment");\n' + "}",
      },
    ],
  },
  {
    selector: "#promise",
    expected: [
      {
        type: "click",
        filename: "[native code]",
        attributes: ["Bubbling"],
        handler: "function() {\n" + "  [native code]\n" + "}",
      },
    ],
  },
  {
    selector: "#math-pow",
    expected: [
      {
        type: "click",
        filename: "[native code]",
        attributes: ["Bubbling"],
        handler: "function pow(, ) {\n" + "  [native code]\n" + "}",
      },
    ],
  },
  {
    selector: "#handleEvent",
    expected: [
      {
        type: "click",
        filename: TEST_URL + ":85:29",
        attributes: ["Bubbling"],
        handler:
          "function(event) {\n" +
          "  switch (event.type) {\n" +
          '    case "click":\n' +
          '      alert("handleEvent click");\n' +
          "  }\n" +
          "}",
      },
    ],
  },
];

add_task(async function () {
  await runEventPopupTests(TEST_URL, TEST_DATA);
});
