/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const SyncHook = require("../SyncHook"); describe("Hook", () => { it("should allow to insert hooks before others and in stages", () => { const hook = new SyncHook(); const calls = []; hook.tap("A", () => calls.push("A")); hook.tap({ name: "B", before: "A" }, () => calls.push("B")); calls.length = 0; hook.call(); expect(calls).toEqual(["B", "A"]); hook.tap({ name: "C", before: ["A", "B"] }, () => calls.push("C")); calls.length = 0; hook.call(); expect(calls).toEqual(["C", "B", "A"]); hook.tap({ name: "D", before: "B" }, () => calls.push("D")); calls.length = 0; hook.call(); expect(calls).toEqual(["C", "D", "B", "A"]); hook.tap({ name: "E", stage: -5 }, () => calls.push("E")); hook.tap({ name: "F", stage: -3 }, () => calls.push("F")); calls.length = 0; hook.call(); expect(calls).toEqual(["E", "F", "C", "D", "B", "A"]); }); });