| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 | 
							- /* Copyright 2017 Mozilla Foundation
 
-  *
 
-  * Licensed under the Apache License, Version 2.0 (the "License");
 
-  * you may not use this file except in compliance with the License.
 
-  * You may obtain a copy of the License at
 
-  *
 
-  *     http://www.apache.org/licenses/LICENSE-2.0
 
-  *
 
-  * Unless required by applicable law or agreed to in writing, software
 
-  * distributed under the License is distributed on an "AS IS" BASIS,
 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-  * See the License for the specific language governing permissions and
 
-  * limitations under the License.
 
-  */
 
- import {
 
-   EventBus,
 
-   waitOnEventOrTimeout,
 
-   WaitOnType,
 
- } from "../../web/event_utils.js";
 
- import { isNodeJS } from "../../src/shared/is_node.js";
 
- describe("event_utils", function () {
 
-   describe("EventBus", function () {
 
-     it("dispatch event", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function (evt) {
 
-         expect(evt).toEqual(undefined);
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(1);
 
-     });
 
-     it("dispatch event with arguments", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function (evt) {
 
-         expect(evt).toEqual({ abc: 123 });
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test", {
 
-         abc: 123,
 
-       });
 
-       expect(count).toEqual(1);
 
-     });
 
-     it("dispatch different event", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.dispatch("nottest");
 
-       expect(count).toEqual(0);
 
-     });
 
-     it("dispatch event multiple times", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.dispatch("test");
 
-       eventBus.on("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test");
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(2);
 
-     });
 
-     it("dispatch event to multiple handlers", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.on("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(2);
 
-     });
 
-     it("dispatch to detached", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       const listener = function () {
 
-         count++;
 
-       };
 
-       eventBus.on("test", listener);
 
-       eventBus.dispatch("test");
 
-       eventBus.off("test", listener);
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(1);
 
-     });
 
-     it("dispatch to wrong detached", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test");
 
-       eventBus.off("test", function () {
 
-         count++;
 
-       });
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(2);
 
-     });
 
-     it("dispatch to detached during handling", function () {
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       const listener1 = function () {
 
-         eventBus.off("test", listener2);
 
-         count++;
 
-       };
 
-       const listener2 = function () {
 
-         eventBus.off("test", listener1);
 
-         count++;
 
-       };
 
-       eventBus.on("test", listener1);
 
-       eventBus.on("test", listener2);
 
-       eventBus.dispatch("test");
 
-       eventBus.dispatch("test");
 
-       expect(count).toEqual(2);
 
-     });
 
-     it("dispatch event to handlers with/without 'once' option", function () {
 
-       const eventBus = new EventBus();
 
-       let multipleCount = 0,
 
-         onceCount = 0;
 
-       eventBus.on("test", function () {
 
-         multipleCount++;
 
-       });
 
-       eventBus.on(
 
-         "test",
 
-         function () {
 
-           onceCount++;
 
-         },
 
-         { once: true }
 
-       );
 
-       eventBus.dispatch("test");
 
-       eventBus.dispatch("test");
 
-       eventBus.dispatch("test");
 
-       expect(multipleCount).toEqual(3);
 
-       expect(onceCount).toEqual(1);
 
-     });
 
-     it("should not re-dispatch to DOM", async function () {
 
-       if (isNodeJS) {
 
-         pending("Document is not supported in Node.js.");
 
-       }
 
-       const eventBus = new EventBus();
 
-       let count = 0;
 
-       eventBus.on("test", function (evt) {
 
-         expect(evt).toEqual(undefined);
 
-         count++;
 
-       });
 
-       function domEventListener() {
 
-         // Shouldn't get here.
 
-         expect(false).toEqual(true);
 
-       }
 
-       document.addEventListener("test", domEventListener);
 
-       eventBus.dispatch("test");
 
-       await Promise.resolve();
 
-       expect(count).toEqual(1);
 
-       document.removeEventListener("test", domEventListener);
 
-     });
 
-   });
 
-   describe("waitOnEventOrTimeout", function () {
 
-     let eventBus;
 
-     beforeAll(function () {
 
-       eventBus = new EventBus();
 
-     });
 
-     afterAll(function () {
 
-       eventBus = null;
 
-     });
 
-     it("should reject invalid parameters", async function () {
 
-       const invalidTarget = waitOnEventOrTimeout({
 
-         target: "window",
 
-         name: "DOMContentLoaded",
 
-       }).then(
 
-         function () {
 
-           // Shouldn't get here.
 
-           expect(false).toEqual(true);
 
-         },
 
-         function (reason) {
 
-           expect(reason instanceof Error).toEqual(true);
 
-         }
 
-       );
 
-       const invalidName = waitOnEventOrTimeout({
 
-         target: eventBus,
 
-         name: "",
 
-       }).then(
 
-         function () {
 
-           // Shouldn't get here.
 
-           expect(false).toEqual(true);
 
-         },
 
-         function (reason) {
 
-           expect(reason instanceof Error).toEqual(true);
 
-         }
 
-       );
 
-       const invalidDelay = waitOnEventOrTimeout({
 
-         target: eventBus,
 
-         name: "pagerendered",
 
-         delay: -1000,
 
-       }).then(
 
-         function () {
 
-           // Shouldn't get here.
 
-           expect(false).toEqual(true);
 
-         },
 
-         function (reason) {
 
-           expect(reason instanceof Error).toEqual(true);
 
-         }
 
-       );
 
-       await Promise.all([invalidTarget, invalidName, invalidDelay]);
 
-     });
 
-     it("should resolve on event, using the DOM", async function () {
 
-       if (isNodeJS) {
 
-         pending("Document is not supported in Node.js.");
 
-       }
 
-       const button = document.createElement("button");
 
-       const buttonClicked = waitOnEventOrTimeout({
 
-         target: button,
 
-         name: "click",
 
-         delay: 10000,
 
-       });
 
-       // Immediately dispatch the expected event.
 
-       button.click();
 
-       const type = await buttonClicked;
 
-       expect(type).toEqual(WaitOnType.EVENT);
 
-     });
 
-     it("should resolve on timeout, using the DOM", async function () {
 
-       if (isNodeJS) {
 
-         pending("Document is not supported in Node.js.");
 
-       }
 
-       const button = document.createElement("button");
 
-       const buttonClicked = waitOnEventOrTimeout({
 
-         target: button,
 
-         name: "click",
 
-         delay: 10,
 
-       });
 
-       // Do *not* dispatch the event, and wait for the timeout.
 
-       const type = await buttonClicked;
 
-       expect(type).toEqual(WaitOnType.TIMEOUT);
 
-     });
 
-     it("should resolve on event, using the EventBus", async function () {
 
-       const pageRendered = waitOnEventOrTimeout({
 
-         target: eventBus,
 
-         name: "pagerendered",
 
-         delay: 10000,
 
-       });
 
-       // Immediately dispatch the expected event.
 
-       eventBus.dispatch("pagerendered");
 
-       const type = await pageRendered;
 
-       expect(type).toEqual(WaitOnType.EVENT);
 
-     });
 
-     it("should resolve on timeout, using the EventBus", async function () {
 
-       const pageRendered = waitOnEventOrTimeout({
 
-         target: eventBus,
 
-         name: "pagerendered",
 
-         delay: 10,
 
-       });
 
-       // Do *not* dispatch the event, and wait for the timeout.
 
-       const type = await pageRendered;
 
-       expect(type).toEqual(WaitOnType.TIMEOUT);
 
-     });
 
-   });
 
- });
 
 
  |