123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- require("babel-polyfill");
- const SyncHook = require("../SyncHook");
- describe("SyncHook", () => {
- it("should allow to create sync hooks", async () => {
- const h0 = new SyncHook();
- const h1 = new SyncHook(["test"]);
- const h2 = new SyncHook(["test", "arg2"]);
- const h3 = new SyncHook(["test", "arg2", "arg3"]);
- h0.call();
- await h0.promise();
- await new Promise(resolve => h0.callAsync(resolve));
- const mock0 = jest.fn();
- h0.tap("A", mock0);
- h0.call();
- expect(mock0).toHaveBeenLastCalledWith();
- const mock1 = jest.fn();
- h0.tap("B", mock1)
- h0.call();
- expect(mock1).toHaveBeenLastCalledWith();
- const mock2 = jest.fn();
- const mock3 = jest.fn();
- const mock4 = jest.fn();
- const mock5 = jest.fn();
- h1.tap("C", mock2);
- h2.tap("D", mock3);
- h3.tap("E", mock4);
- h3.tap("F", mock5);
- h1.call("1");
- h2.call("1", 2);
- h3.call("1", 2, 3);
- expect(mock2).toHaveBeenLastCalledWith("1");
- expect(mock3).toHaveBeenLastCalledWith("1", 2);
- expect(mock4).toHaveBeenLastCalledWith("1", 2, 3);
- expect(mock5).toHaveBeenLastCalledWith("1", 2, 3);
- await new Promise(resolve => h1.callAsync("a", resolve));
- await h2.promise("a", "b");
- await new Promise(resolve => h3.callAsync("a", "b", "c", resolve));
- expect(mock2).toHaveBeenLastCalledWith("a");
- expect(mock3).toHaveBeenLastCalledWith("a", "b");
- expect(mock4).toHaveBeenLastCalledWith("a", "b", "c");
- expect(mock5).toHaveBeenLastCalledWith("a", "b", "c");
- await h3.promise("x", "y");
- expect(mock4).toHaveBeenLastCalledWith("x", "y", undefined);
- expect(mock5).toHaveBeenLastCalledWith("x", "y", undefined);
- });
- it("should allow to intercept calls", () =>{
- const hook = new SyncHook(["arg1", "arg2"]);
- const mockCall = jest.fn();
- const mock0 = jest.fn();
- const mockRegister = jest.fn(x => ({
- name: "huh",
- type: "sync",
- fn: mock0
- }));
- const mock1 = jest.fn();
- hook.tap("Test1", mock1);
- hook.intercept({
- call: mockCall,
- register: mockRegister
- });
- const mock2 = jest.fn();
- hook.tap("Test2", mock2);
- hook.call(1, 2);
- expect(mockCall).toHaveBeenLastCalledWith(1, 2);
- expect(mockRegister).toHaveBeenLastCalledWith({
- type: "sync",
- name: "Test2",
- fn: mock2
- });
- expect(mock1).not.toHaveBeenLastCalledWith(1, 2);
- expect(mock2).not.toHaveBeenLastCalledWith(1, 2);
- expect(mock0).toHaveBeenLastCalledWith(1, 2);
- })
- });
|