// SPDX-License-Identifier: LGPL-2.1-or-later
import cockpit from "cockpit";
import QUnit from "qunit-tests";

QUnit.test("event dispatch", function (assert) {
    const obj = { };
    cockpit.event_target(obj);

    let count = 0;
    function handler(ev) {
        if (count === 0) {
            assert.equal(typeof ev, "object", "event is object");
            assert.equal(ev.type, "action", "event.type is 'action'");
            assert.equal(ev.data, "Data", "event.data is set");
        }
        count += 1;
    }

    const ev = new Event("action", { bubbles: false, cancelable: false });
    ev.data = "Data";

    obj.dispatchEvent(ev);
    assert.strictEqual(count, 0, "count is zero");

    obj.onaction = handler;
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 1, "count is one");

    obj.addEventListener("action", handler, true);
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 3, "count is three");

    obj.addEventListener("action", handler, true);
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 6, "count is six");

    obj.removeEventListener("action", handler, true);
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 8, "count is eight");

    obj.onaction = null;
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 9, "count is nine");

    obj.removeEventListener("action", handler, true);
    obj.dispatchEvent(ev);
    assert.strictEqual(count, 9, "count is still nine");
});

QUnit.start();
