Hook.js
1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
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"]);
});
});